galaxy-commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
February 2015
- 2 participants
- 305 discussions
2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/99fef2a32e19/
Changeset: 99fef2a32e19
Branch: release_15.03
User: dan
Date: 2015-02-24 17:02:42+00:00
Summary: Fix for installing .loc files from the toolshed to respect shed_tool_data_path. Mention shed_tool_data_path in galaxy.ini.sample.
Affected #: 2 files
diff -r d1c3d84a7e06553cf948fcbd8c00b45bebcfb059 -r 99fef2a32e19ce5a8cf6137c1da2dbd9ddbb0536 config/galaxy.ini.sample
--- a/config/galaxy.ini.sample
+++ b/config/galaxy.ini.sample
@@ -217,6 +217,10 @@
# https://wiki.galaxyproject.org/Admin/DataIntegration
#tool_data_path = tool-data
+# Directory where Tool Data Table related files will be placed
+# when installed from a ToolShed. Defaults to tool_data_path
+#shed_tool_data_path = tool-data
+
# File containing old-style genome builds
#builds_file_path = tool-data/shared/ucsc/builds.txt
diff -r d1c3d84a7e06553cf948fcbd8c00b45bebcfb059 -r 99fef2a32e19ce5a8cf6137c1da2dbd9ddbb0536 lib/tool_shed/tools/data_table_manager.py
--- a/lib/tool_shed/tools/data_table_manager.py
+++ b/lib/tool_shed/tools/data_table_manager.py
@@ -103,7 +103,7 @@
try:
new_table_elems, message = self.app.tool_data_tables \
.add_new_entries_from_config_file( config_filename=filename,
- tool_data_path=self.app.config.tool_data_path,
+ tool_data_path=self.app.config.shed_tool_data_path,
shed_tool_data_table_config=self.app.config.shed_tool_data_table_config,
persist=persist )
if message:
https://bitbucket.org/galaxy/galaxy-central/commits/4a42638e8cd4/
Changeset: 4a42638e8cd4
Branch: release_15.03
User: dannon
Date: 2015-02-24 19:50:02+00:00
Summary: Apply custom_types bugfixes from dev branch to release.
Affected #: 1 file
diff -r 99fef2a32e19ce5a8cf6137c1da2dbd9ddbb0536 -r 4a42638e8cd45652db9dc1f1eed54be6aa2c20b1 lib/galaxy/model/custom_types.py
--- a/lib/galaxy/model/custom_types.py
+++ b/lib/galaxy/model/custom_types.py
@@ -1,25 +1,23 @@
-from sqlalchemy.types import *
+import binascii
+import json
+import logging
+import uuid
-import json
-import pickle
-import copy
-import uuid
-import binascii
-from galaxy.util.bunch import Bunch
+from galaxy import eggs
+eggs.require("SQLAlchemy")
+import sqlalchemy
+
from galaxy.util.aliaspickler import AliasPickleModule
+from sqlalchemy.types import CHAR, LargeBinary, String, TypeDecorator
+from sqlalchemy.ext.mutable import Mutable
-# For monkeypatching BIGINT
-import sqlalchemy.dialects.sqlite
-import sqlalchemy.dialects.postgresql
-import sqlalchemy.dialects.mysql
-
-import logging
log = logging.getLogger( __name__ )
# Default JSON encoder and decoder
json_encoder = json.JSONEncoder( sort_keys=True )
json_decoder = json.JSONDecoder( )
+
def _sniffnfix_pg9_hex(value):
"""
Sniff for and fix postgres 9 hex decoding issue
@@ -31,39 +29,32 @@
return binascii.unhexlify( value[2:] )
else:
return value
- except Exception, ex:
+ except Exception:
return value
-class JSONType( TypeDecorator ):
+
+class JSONType(sqlalchemy.types.TypeDecorator):
"""
- Defines a JSONType for SQLAlchemy. Takes a primitive as input and
- JSONifies it. This should replace PickleType throughout Galaxy.
+ Represents an immutable structure as a json-encoded string.
+
+ If default is, for example, a dict, then a NULL value in the
+ database will be exposed as an empty dict.
"""
+
+ # TODO: Figure out why this is a large binary, and provide a migratino to
+ # something like sqlalchemy.String, or even better, when applicable, native
+ # sqlalchemy.dialects.postgresql.JSON
impl = LargeBinary
- def process_bind_param( self, value, dialect ):
- if value is None:
- return None
- return json_encoder.encode( value )
+ def process_bind_param(self, value, dialect):
+ if value is not None:
+ value = json_encoder.encode(value)
+ return value
- def process_result_value( self, value, dialect ):
+ def process_result_value(self, value, dialect):
if value is not None:
- try:
- return json_decoder.decode( str( _sniffnfix_pg9_hex( value ) ) )
- except Exception, e:
- log.error( 'Failed to decode JSON (%s): %s', value, e )
- return None
-
- def copy_value( self, value ):
- # return json_decoder.decode( json_encoder.encode( value ) )
- return copy.deepcopy( value )
-
- def compare_values( self, x, y ):
- # return json_encoder.encode( x ) == json_encoder.encode( y )
- return ( x == y )
-
- def is_mutable( self ):
- return True
+ value = json_decoder.decode( str( _sniffnfix_pg9_hex( value ) ) )
+ return value
def load_dialect_impl(self, dialect):
if dialect.name == "mysql":
@@ -72,10 +63,153 @@
return self.impl
+class MutationObj(Mutable):
+ """
+ Mutable JSONType for SQLAlchemy from original gist:
+ https://gist.github.com/dbarnett/1730610
+
+ Using minor changes from this fork of the gist:
+ https://gist.github.com/miracle2k/52a031cced285ba9b8cd
+
+ And other minor changes to make it work for us.
+ """
+ @classmethod
+ def coerce(cls, key, value):
+ if isinstance(value, dict) and not isinstance(value, MutationDict):
+ return MutationDict.coerce(key, value)
+ if isinstance(value, list) and not isinstance(value, MutationList):
+ return MutationList.coerce(key, value)
+ return value
+
+ @classmethod
+ def _listen_on_attribute(cls, attribute, coerce, parent_cls):
+ key = attribute.key
+ if parent_cls is not attribute.class_:
+ return
+
+ # rely on "propagate" here
+ parent_cls = attribute.class_
+
+ def load(state, *args):
+ val = state.dict.get(key, None)
+ if coerce:
+ val = cls.coerce(key, val)
+ state.dict[key] = val
+ if isinstance(val, cls):
+ val._parents[state.obj()] = key
+
+ def set(target, value, oldvalue, initiator):
+ if not isinstance(value, cls):
+ value = cls.coerce(key, value)
+ if isinstance(value, cls):
+ value._parents[target.obj()] = key
+ if isinstance(oldvalue, cls):
+ oldvalue._parents.pop(target.obj(), None)
+ return value
+
+ def pickle(state, state_dict):
+ val = state.dict.get(key, None)
+ if isinstance(val, cls):
+ if 'ext.mutable.values' not in state_dict:
+ state_dict['ext.mutable.values'] = []
+ state_dict['ext.mutable.values'].append(val)
+
+ def unpickle(state, state_dict):
+ if 'ext.mutable.values' in state_dict:
+ for val in state_dict['ext.mutable.values']:
+ val._parents[state.obj()] = key
+
+ sqlalchemy.event.listen(parent_cls, 'load', load, raw=True, propagate=True)
+ sqlalchemy.event.listen(parent_cls, 'refresh', load, raw=True, propagate=True)
+ sqlalchemy.event.listen(attribute, 'set', set, raw=True, retval=True, propagate=True)
+ sqlalchemy.event.listen(parent_cls, 'pickle', pickle, raw=True, propagate=True)
+ sqlalchemy.event.listen(parent_cls, 'unpickle', unpickle, raw=True, propagate=True)
+
+
+class MutationDict(MutationObj, dict):
+ @classmethod
+ def coerce(cls, key, value):
+ """Convert plain dictionary to MutationDict"""
+ self = MutationDict((k, MutationObj.coerce(key, v)) for (k, v) in value.items())
+ self._key = key
+ return self
+
+ def __setitem__(self, key, value):
+ if hasattr(self, '_key'):
+ value = MutationObj.coerce(self._key, value)
+ dict.__setitem__(self, key, value)
+ self.changed()
+
+ def __delitem__(self, key):
+ dict.__delitem__(self, key)
+ self.changed()
+
+ def __getstate__(self):
+ return dict(self)
+
+ def __setstate__(self, state):
+ self.update(state)
+
+
+class MutationList(MutationObj, list):
+ @classmethod
+ def coerce(cls, key, value):
+ """Convert plain list to MutationList"""
+ self = MutationList((MutationObj.coerce(key, v) for v in value))
+ self._key = key
+ return self
+
+ def __setitem__(self, idx, value):
+ list.__setitem__(self, idx, MutationObj.coerce(self._key, value))
+ self.changed()
+
+ def __setslice__(self, start, stop, values):
+ list.__setslice__(self, start, stop, (MutationObj.coerce(self._key, v) for v in values))
+ self.changed()
+
+ def __delitem__(self, idx):
+ list.__delitem__(self, idx)
+ self.changed()
+
+ def __delslice__(self, start, stop):
+ list.__delslice__(self, start, stop)
+ self.changed()
+
+ def append(self, value):
+ list.append(self, MutationObj.coerce(self._key, value))
+ self.changed()
+
+ def insert(self, idx, value):
+ list.insert(self, idx, MutationObj.coerce(self._key, value))
+ self.changed()
+
+ def extend(self, values):
+ list.extend(self, (MutationObj.coerce(self._key, v) for v in values))
+ self.changed()
+
+ def pop(self, *args, **kw):
+ value = list.pop(self, *args, **kw)
+ self.changed()
+ return value
+
+ def remove(self, value):
+ list.remove(self, value)
+ self.changed()
+
+ def __getstate__(self):
+ return list(self)
+
+ def __setstate__(self, state):
+ self.update(state)
+
+
+MutationObj.associate_with(JSONType)
+
metadata_pickler = AliasPickleModule( {
- ( "cookbook.patterns", "Bunch" ) : ( "galaxy.util.bunch" , "Bunch" )
+ ( "cookbook.patterns", "Bunch" ): ( "galaxy.util.bunch", "Bunch" )
} )
+
class MetadataType( JSONType ):
"""
Backward compatible metadata type. Can read pickles or JSON, but always
@@ -96,6 +230,7 @@
ret = None
return ret
+
class UUIDType(TypeDecorator):
"""
Platform-independent UUID type.
@@ -129,31 +264,9 @@
class TrimmedString( TypeDecorator ):
impl = String
+
def process_bind_param( self, value, dialect ):
"""Automatically truncate string values"""
if self.impl.length and value is not None:
value = value[0:self.impl.length]
return value
-
-
-#class BigInteger( Integer ):
- #"""
- #A type for bigger ``int`` integers.
-
- #Typically generates a ``BIGINT`` in DDL, and otherwise acts like
- #a normal :class:`Integer` on the Python side.
-
- #"""
-
-#class BIGINT( BigInteger ):
- #"""The SQL BIGINT type."""
-
-#class SLBigInteger( BigInteger ):
- #def get_col_spec( self ):
- #return "BIGINT"
-
-#sqlalchemy.dialects.sqlite.SLBigInteger = SLBigInteger
-#sqlalchemy.dialects.sqlite.colspecs[BigInteger] = SLBigInteger
-#sqlalchemy.dialects.sqlite.ischema_names['BIGINT'] = SLBigInteger
-#sqlalchemy.dialects.postgres.colspecs[BigInteger] = sqlalchemy.dialects.postgres.PGBigInteger
-#sqlalchemy.dialects.mysql.colspecs[BigInteger] = sqlalchemy.dialects.mysql.MSBigInteger
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
6 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/59cd12ceafc4/
Changeset: 59cd12ceafc4
User: dannon
Date: 2015-02-24 16:38:18+00:00
Summary: Cleanup of comments, doc of customtypes.
Affected #: 1 file
diff -r 476c79d7b00a5edde57847ca1882d7e7781030b6 -r 59cd12ceafc4628e05600be46939124d4ca59c08 lib/galaxy/model/custom_types.py
--- a/lib/galaxy/model/custom_types.py
+++ b/lib/galaxy/model/custom_types.py
@@ -33,15 +33,6 @@
return value
-# Mutable JSONType for SQLAlchemy from original gist:
-# https://gist.github.com/dbarnett/1730610
-#
-# Also using minor changes from this fork of the gist:
-# https://gist.github.com/miracle2k/52a031cced285ba9b8cd
-#
-# And other minor changes to make it work for us.
-
-
class JSONType(sqlalchemy.types.TypeDecorator):
"""Represents an immutable structure as a json-encoded string.
@@ -69,6 +60,15 @@
class MutationObj(Mutable):
+ """
+ Mutable JSONType for SQLAlchemy from original gist:
+ https://gist.github.com/dbarnett/1730610
+
+ Using minor changes from this fork of the gist:
+ https://gist.github.com/miracle2k/52a031cced285ba9b8cd
+
+ And other minor changes to make it work for us.
+ """
@classmethod
def coerce(cls, key, value):
if isinstance(value, dict) and not isinstance(value, MutationDict):
@@ -192,13 +192,6 @@
MutationObj.associate_with(JSONType)
-"""A type to encode/decode JSON on the fly
-
-sqltype is the string type for the underlying DB column::
-
- Column(JSON)
-"""
-
metadata_pickler = AliasPickleModule( {
( "cookbook.patterns", "Bunch" ): ( "galaxy.util.bunch", "Bunch" )
} )
https://bitbucket.org/galaxy/galaxy-central/commits/834b3e714755/
Changeset: 834b3e714755
User: dan
Date: 2015-02-24 16:50:58+00:00
Summary: Fix for installing .loc files from the toolshed to respect shed_tool_data_path. Mention shed_tool_data_path in galaxy.ini.sample.
Affected #: 2 files
diff -r 59cd12ceafc4628e05600be46939124d4ca59c08 -r 834b3e71475518902f071d4066d69e707f752730 config/galaxy.ini.sample
--- a/config/galaxy.ini.sample
+++ b/config/galaxy.ini.sample
@@ -217,6 +217,10 @@
# https://wiki.galaxyproject.org/Admin/DataIntegration
#tool_data_path = tool-data
+# Directory where Tool Data Table related files will be placed
+# when installed from a ToolShed. Defaults to tool_data_path
+#shed_tool_data_path = tool-data
+
# File containing old-style genome builds
#builds_file_path = tool-data/shared/ucsc/builds.txt
diff -r 59cd12ceafc4628e05600be46939124d4ca59c08 -r 834b3e71475518902f071d4066d69e707f752730 lib/tool_shed/tools/data_table_manager.py
--- a/lib/tool_shed/tools/data_table_manager.py
+++ b/lib/tool_shed/tools/data_table_manager.py
@@ -103,7 +103,7 @@
try:
new_table_elems, message = self.app.tool_data_tables \
.add_new_entries_from_config_file( config_filename=filename,
- tool_data_path=self.app.config.tool_data_path,
+ tool_data_path=self.app.config.shed_tool_data_path,
shed_tool_data_table_config=self.app.config.shed_tool_data_table_config,
persist=persist )
if message:
https://bitbucket.org/galaxy/galaxy-central/commits/b154ff11d2ea/
Changeset: b154ff11d2ea
User: jmchilton
Date: 2015-02-24 17:01:35+00:00
Summary: Fix unit tests for dde2fc9572be6d909e22dda510520639db5260bf.
Thanks to @ dannon for the bug report.
Affected #: 1 file
diff -r 834b3e71475518902f071d4066d69e707f752730 -r b154ff11d2ea00d6978da97ee60bb1013f4f7f4e test/unit/jobs/test_job_configuration.py
--- a/test/unit/jobs/test_job_configuration.py
+++ b/test/unit/jobs/test_job_configuration.py
@@ -21,6 +21,7 @@
job_config_file=os.path.join( self.temp_directory, "job_conf.xml" ),
use_tasked_jobs=False,
job_resource_params_file="/tmp/fake_absent_path",
+ config_dict={},
)
self.__write_config_from( SIMPLE_JOB_CONF )
self.app = bunch.Bunch( config=self.config, job_metrics=MockJobMetrics() )
https://bitbucket.org/galaxy/galaxy-central/commits/64b4a5b00522/
Changeset: 64b4a5b00522
User: dannon
Date: 2015-02-24 18:47:29+00:00
Summary: Fix for JSONType getstate/setstate with pickle (exhibited error during uploading of a file).
Affected #: 1 file
diff -r b154ff11d2ea00d6978da97ee60bb1013f4f7f4e -r 64b4a5b005224c5639482de4eda52adcfa25df10 lib/galaxy/model/custom_types.py
--- a/lib/galaxy/model/custom_types.py
+++ b/lib/galaxy/model/custom_types.py
@@ -143,6 +143,12 @@
dict.__delitem__(self, key)
self.changed()
+ def __getstate__(self):
+ return dict(self)
+
+ def __setstate__(self, state):
+ self.update(state)
+
class MutationList(MutationObj, list):
@classmethod
https://bitbucket.org/galaxy/galaxy-central/commits/9f3d45b2e032/
Changeset: 9f3d45b2e032
User: dannon
Date: 2015-02-24 18:56:19+00:00
Summary: Add getstate/setstate for pickling to the MutationList as well, though I'm not sure we use this anywhere. Future-proofing.
Affected #: 1 file
diff -r 64b4a5b005224c5639482de4eda52adcfa25df10 -r 9f3d45b2e032b7d208c1e7e021ab3460795272fe lib/galaxy/model/custom_types.py
--- a/lib/galaxy/model/custom_types.py
+++ b/lib/galaxy/model/custom_types.py
@@ -195,6 +195,12 @@
list.remove(self, value)
self.changed()
+ def __getstate__(self):
+ return list(self)
+
+ def __setstate__(self, state):
+ self.update(state)
+
MutationObj.associate_with(JSONType)
https://bitbucket.org/galaxy/galaxy-central/commits/a12fc23ff137/
Changeset: a12fc23ff137
User: dannon
Date: 2015-02-24 19:18:24+00:00
Summary: Commentary in custom_types w/ a TODO. Remove irrelevant comments about OrderedDict, since we're not relying on that.
Affected #: 1 file
diff -r 9f3d45b2e032b7d208c1e7e021ab3460795272fe -r a12fc23ff13785d2c2ef7d223dca100ef334ea87 lib/galaxy/model/custom_types.py
--- a/lib/galaxy/model/custom_types.py
+++ b/lib/galaxy/model/custom_types.py
@@ -34,12 +34,16 @@
class JSONType(sqlalchemy.types.TypeDecorator):
- """Represents an immutable structure as a json-encoded string.
+ """
+ Represents an immutable structure as a json-encoded string.
If default is, for example, a dict, then a NULL value in the
database will be exposed as an empty dict.
"""
+ # TODO: Figure out why this is a large binary, and provide a migratino to
+ # something like sqlalchemy.String, or even better, when applicable, native
+ # sqlalchemy.dialects.postgresql.JSON
impl = LargeBinary
def process_bind_param(self, value, dialect):
@@ -131,9 +135,6 @@
return self
def __setitem__(self, key, value):
- # Due to the way OrderedDict works, this is called during __init__.
- # At this time we don't have a key set, but what is more, the value
- # being set has already been coerced. So special case this and skip.
if hasattr(self, '_key'):
value = MutationObj.coerce(self._key, value)
dict.__setitem__(self, key, value)
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
Branch: refs/heads/master
Home: https://github.com/galaxyproject/usegalaxy-playbook
Commit: 7a7a4e4d8ef3b238d8ef93d00c77372fef237c04
https://github.com/galaxyproject/usegalaxy-playbook/commit/7a7a4e4d8ef3b238…
Author: Martin Cech <cech.marten(a)gmail.com>
Date: 2015-02-24 (Tue, 24 Feb 2015)
Changed paths:
M files/galaxy/usegalaxy.org/var/integrated_tool_panel.xml
M files/galaxy/usegalaxy.org/var/shed_tool_conf.xml
M files/galaxy/usegalaxy.org/var/shed_tool_data_table_conf.xml
Log Message:
-----------
update mutable confs
1
0
[galaxyproject/usegalaxy-playbook] f84180: Update test to 476c79d7b00a5edde57847ca1882d7e7781...
by GitHub 24 Feb '15
by GitHub 24 Feb '15
24 Feb '15
Branch: refs/heads/master
Home: https://github.com/galaxyproject/usegalaxy-playbook
Commit: f841803b0b0a3b0b8dd8d2bb4f42845be982f341
https://github.com/galaxyproject/usegalaxy-playbook/commit/f841803b0b0a3b0b…
Author: Dannon Baker <dannon.baker(a)gmail.com>
Date: 2015-02-24 (Tue, 24 Feb 2015)
Changed paths:
M files/galaxy/test.galaxyproject.org/var/integrated_tool_panel.xml
M files/galaxy/test.galaxyproject.org/var/shed_tool_conf.xml
M files/galaxy/test.galaxyproject.org/var/shed_tool_data_table_conf.xml
M stage/group_vars/all.yml
Log Message:
-----------
Update test to 476c79d7b00a5edde57847ca1882d7e7781030b6
1
0
2 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/525b1fc16a58/
Changeset: 525b1fc16a58
Branch: release_15.03
User: jmchilton
Date: 2015-02-22 05:32:46+00:00
Summary: Fix for watching tools on some more interesting file systems.
Affected #: 3 files
diff -r 33fd43f7590f17ed611ce07178cae8c2b70525d0 -r 525b1fc16a587e91d60cdc4f9152f8e881b7e7de config/galaxy.ini.sample
--- a/config/galaxy.ini.sample
+++ b/config/galaxy.ini.sample
@@ -176,11 +176,15 @@
# install from in the admin interface (.sample used if default does not exist).
#tool_sheds_config_file = config/tool_sheds_conf.xml
-# Enable monitoring of tools and tool directories listed in any tool config file
-# specified in tool_config_file option. If changes are found, tools are
-# automatically reloaded.
-# Watchdog ( https://pypi.python.org/pypi/watchdog ) must be installed and
-# available to Galaxy to use this option.
+# Set to True to Enable monitoring of tools and tool directories
+# listed in any tool config file specified in tool_config_file option.
+# If changes are found, tools are automatically reloaded. Watchdog (
+# https://pypi.python.org/pypi/watchdog ) must be installed and
+# available to Galaxy to use this option. Other options include 'auto'
+# which will attempt to watch tools if the watchdog library is available
+# but won't fail to load Galaxy if it is not and 'polling' which will use
+# a less efficient monitoring scheme that may work in wider range of scenarios
+# then the watchdog default montiory.
#watch_tools = False
# Enable automatic polling of relative tool sheds to see if any updates
diff -r 33fd43f7590f17ed611ce07178cae8c2b70525d0 -r 525b1fc16a587e91d60cdc4f9152f8e881b7e7de lib/galaxy/config.py
--- a/lib/galaxy/config.py
+++ b/lib/galaxy/config.py
@@ -272,7 +272,7 @@
self.ftp_upload_site = kwargs.get( 'ftp_upload_site', None )
self.allow_library_path_paste = kwargs.get( 'allow_library_path_paste', False )
self.disable_library_comptypes = kwargs.get( 'disable_library_comptypes', '' ).lower().split( ',' )
- self.watch_tools = string_as_bool( kwargs.get( 'watch_tools', False ) )
+ self.watch_tools = kwargs.get( 'watch_tools', 'false' )
# On can mildly speed up Galaxy startup time by disabling index of help,
# not needed on production systems but useful if running many functional tests.
self.index_tool_help = string_as_bool( kwargs.get( "index_tool_help", True ) )
diff -r 33fd43f7590f17ed611ce07178cae8c2b70525d0 -r 525b1fc16a587e91d60cdc4f9152f8e881b7e7de lib/galaxy/tools/toolbox/watcher.py
--- a/lib/galaxy/tools/toolbox/watcher.py
+++ b/lib/galaxy/tools/toolbox/watcher.py
@@ -2,9 +2,11 @@
try:
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
+ from watchdog.observers.polling import PollingObserver
can_watch = True
except ImportError:
FileSystemEventHandler = object
+ PollingObserver = object
can_watch = False
import logging
@@ -12,23 +14,34 @@
def get_watcher(toolbox, config):
- watch_tools = getattr(config, "watch_tools", False)
- if watch_tools:
+ watch_tools_val = str( getattr(config, "watch_tools", False) ).lower()
+ if watch_tools_val in ( 'true', 'yes', 'on' ):
return ToolWatcher(toolbox)
+ elif watch_tools_val == "auto":
+ try:
+ return ToolWatcher(toolbox)
+ except Exception:
+ log.info("Failed to load ToolWatcher (watchdog is likely unavailable) - proceeding without tool monitoring.")
+ return NullWatcher()
+ elif watch_tools_val == "polling":
+ log.info("Using less ineffecient polling toolbox watcher.")
+ return ToolWatcher(toolbox, observer_class=PollingObserver)
else:
return NullWatcher()
class ToolWatcher(object):
- def __init__(self, toolbox):
+ def __init__(self, toolbox, observer_class=None):
if not can_watch:
raise Exception("Watchdog library unavailble, cannot watch tools.")
+ if observer_class is None:
+ observer_class = Observer
self.toolbox = toolbox
self.tool_file_ids = {}
self.tool_dir_callbacks = {}
self.monitored_dirs = {}
- self.observer = Observer()
+ self.observer = observer_class()
self.event_handler = ToolFileEventHandler(self)
self.start()
https://bitbucket.org/galaxy/galaxy-central/commits/d1c3d84a7e06/
Changeset: d1c3d84a7e06
Branch: release_15.03
User: jmchilton
Date: 2015-02-24 04:09:19+00:00
Summary: Comment out broken liftOver tests.
liftOver loc file handling is problematic (https://trello.com/c/A6I6zQvF) If it weren't this wouldn't be a problem. I could fix the API functional test framework to mimic the older form driven approach but it would take a week and would be rendered moot by fixing liftOver. Unfortunately, fixing liftOver would likely break a lot of existing workflows and tool reruns so I am not fixing that either.
Only option left, admittedly a crappy one, is to comment out the tests.
Affected #: 1 file
diff -r 525b1fc16a587e91d60cdc4f9152f8e881b7e7de -r d1c3d84a7e06553cf948fcbd8c00b45bebcfb059 tools/extract/liftOver_wrapper.xml
--- a/tools/extract/liftOver_wrapper.xml
+++ b/tools/extract/liftOver_wrapper.xml
@@ -62,6 +62,7 @@
<requirement type="package">ucsc_tools</requirement></requirements><tests>
+ <!--
<test><param name="input" value="5.bed" dbkey="hg18" ftype="bed" /><param name="to_dbkey" value="panTro2" />
@@ -100,6 +101,7 @@
<output name="out_file1" file="cuffcompare_in1_mult_liftover_mapped.bed"/><output name="out_file2" file="cuffcompare_in1_mult_liftover_unmapped.bed"/></test>
+ --></tests><help>
.. class:: warningmark
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
7 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/9ef633f09b00/
Changeset: 9ef633f09b00
User: guerler
Date: 2015-02-23 22:56:38+00:00
Summary: Allow text selection in tool form
Affected #: 2 files
diff -r b18fce698ca0b29aaca7733cf9ba95b65c56ca48 -r 9ef633f09b006774c402120fced862cf6b8effed static/style/blue/base.css
--- a/static/style/blue/base.css
+++ b/static/style/blue/base.css
@@ -1410,7 +1410,7 @@
.upload-header .header-selection{width:200px;min-width:200px;font-size:11px;padding-right:10px}
.upload-header .select2-choice{max-height:20px;line-height:18px;background:transparent;text-align:center;font-weight:normal}.upload-header .select2-choice .select2-arrow b{background-position:0 -3px}
.upload-top{height:5%;text-align:center}.upload-top .upload-info{margin-top:0px;font-weight:normal;text-align:center}
-.no-highlight,.ui-button-icon,.ui-portlet,.ui-portlet-repeat,.ui-portlet-limited,.ui-portlet-section,.ui-portlet-narrow{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;}
+.no-highlight,.ui-button-icon{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;}
.no-padding{padding:0px !important}
.ui-margin-top{padding-top:5px !important}
.ui-margin-bottom{margin-bottom:5px !important}
@@ -1434,7 +1434,7 @@
.ui-table-form-separator{font-weight:bold;font-size:0.9em}
.ui-table-form-info{clear:both !important}
.ui-table-form-error{display:none}.ui-table-form-error .ui-table-form-error-text{padding-left:5px}
-.ui-portlet,.ui-portlet-repeat,.ui-portlet-limited,.ui-portlet-section,.ui-portlet-narrow,.ui-portlet-repeat,.ui-portlet-limited,.ui-portlet-section,.ui-portlet-narrow{border:solid #d6b161 1px;border-radius:3px;position:relative;clear:both;width:auto;height:100%}.ui-portlet .portlet-header,.ui-portlet-limited .portlet-header,.ui-portlet-narrow .portlet-header{background:#ebd9b2;border-bottom:solid #d6b161 1px;padding:2px 8px;overflow:visible;float:right;width:100%}.ui-portlet .portlet-header .portlet-title,.ui-portlet-limited .portlet-header .portlet-title,.ui-portlet-narrow .portlet-header .portlet-title{display:inline;vertical-align:middle}.ui-portlet .portlet-header .portlet-title .portlet-title-text,.ui-portlet-limited .portlet-header .portlet-title .portlet-title-text,.ui-portlet-narrow .portlet-header .portlet-title .portlet-title-text{vertical-align:middle;line-height:22px}
+.ui-portlet,.ui-portlet-repeat,.ui-portlet-limited,.ui-portlet-section,.ui-portlet-narrow{border:solid #d6b161 1px;border-radius:3px;position:relative;clear:both;width:auto;height:100%}.ui-portlet .portlet-header,.ui-portlet-limited .portlet-header,.ui-portlet-narrow .portlet-header{background:#ebd9b2;border-bottom:solid #d6b161 1px;padding:2px 8px;overflow:visible;float:right;width:100%}.ui-portlet .portlet-header .portlet-title,.ui-portlet-limited .portlet-header .portlet-title,.ui-portlet-narrow .portlet-header .portlet-title{display:inline;vertical-align:middle}.ui-portlet .portlet-header .portlet-title .portlet-title-text,.ui-portlet-limited .portlet-header .portlet-title .portlet-title-text,.ui-portlet-narrow .portlet-header .portlet-title .portlet-title-text{vertical-align:middle;line-height:22px}
.ui-portlet .portlet-header .portlet-title .icon,.ui-portlet-limited .portlet-header .portlet-title .icon,.ui-portlet-narrow .portlet-header .portlet-title .icon{font-size:1.2em;vertical-align:middle}
.ui-portlet .portlet-header .portlet-operations .ui-button-icon,.ui-portlet-limited .portlet-header .portlet-operations .ui-button-icon,.ui-portlet-narrow .portlet-header .portlet-operations .ui-button-icon{margin-left:5px}
.ui-portlet .portlet-content,.ui-portlet-limited .portlet-content,.ui-portlet-narrow .portlet-content{height:inherit;padding-left:10px;padding-right:10px;clear:both}.ui-portlet .portlet-content .content,.ui-portlet-limited .portlet-content .content,.ui-portlet-narrow .portlet-content .content{padding:0px;height:100%;width:100%}
diff -r b18fce698ca0b29aaca7733cf9ba95b65c56ca48 -r 9ef633f09b006774c402120fced862cf6b8effed static/style/src/less/ui.less
--- a/static/style/src/less/ui.less
+++ b/static/style/src/less/ui.less
@@ -182,7 +182,6 @@
// portlets
.ui-portlet {
- &:extend(.no-highlight);
border: solid @form-border 1px;
border-radius: @border-radius-base;
https://bitbucket.org/galaxy/galaxy-central/commits/0a95eaf36a88/
Changeset: 0a95eaf36a88
User: guerler
Date: 2015-02-23 23:04:02+00:00
Summary: Fix job ids in success message
Affected #: 3 files
diff -r 9ef633f09b006774c402120fced862cf6b8effed -r 0a95eaf36a88e1a18bea59461c906b48a214b943 client/galaxy/scripts/mvc/tools/tools-template.js
--- a/client/galaxy/scripts/mvc/tools/tools-template.js
+++ b/client/galaxy/scripts/mvc/tools/tools-template.js
@@ -10,17 +10,17 @@
'</div>' +
'</div>';
},
-
+
success: function(response) {
// check
if (!response.jobs || !response.jobs.length) {
console.debug('tools-template::success() - Failed jobs.');
return;
}
-
+
// number of jobs
var njobs = response.jobs.length;
-
+
// job count info text
var njobs_text = '';
if (njobs == 1) {
@@ -28,20 +28,20 @@
} else {
njobs_text = njobs + ' jobs have';
}
-
+
// create template string
var tmpl = '<div class="donemessagelarge">' +
'<p>' + njobs_text + ' been successfully added to the queue - resulting in the following datasets:</p>';
for (var i in response.outputs) {
- tmpl += '<p style="padding: 10px 20px;"><b>' + (parseInt(i)+1) + ': ' + response.outputs[i].name + '</b></p>';
+ tmpl += '<p style="padding: 10px 20px;"><b>' + response.outputs[i].hid + ': ' + response.outputs[i].name + '</b></p>';
}
tmpl += '<p>You can check the status of queued jobs and view the resulting data by refreshing the History pane. When the job has been run the status will change from \'running\' to \'finished\' if completed successfully or \'error\' if problems were encountered.</p>' +
'</div>';
-
+
// return success message element
return tmpl;
},
-
+
error: function(job_def) {
return '<div>' +
'<p>' +
@@ -52,14 +52,14 @@
'</textarea>' +
'</div>';
},
-
+
batchMode: function() {
return '<div class="ui-table-form-info">' +
'<i class="fa fa-sitemap" style="font-size: 1.2em; padding: 2px 5px;"/>' +
'This is a batch mode input field. A separate job will be triggered for each dataset.' +
'</div>';
},
-
+
requirements: function(options) {
var requirements_message = 'This tool requires ';
for (var i in options.requirements) {
diff -r 9ef633f09b006774c402120fced862cf6b8effed -r 0a95eaf36a88e1a18bea59461c906b48a214b943 static/scripts/mvc/tools/tools-template.js
--- a/static/scripts/mvc/tools/tools-template.js
+++ b/static/scripts/mvc/tools/tools-template.js
@@ -10,17 +10,17 @@
'</div>' +
'</div>';
},
-
+
success: function(response) {
// check
if (!response.jobs || !response.jobs.length) {
console.debug('tools-template::success() - Failed jobs.');
return;
}
-
+
// number of jobs
var njobs = response.jobs.length;
-
+
// job count info text
var njobs_text = '';
if (njobs == 1) {
@@ -28,20 +28,20 @@
} else {
njobs_text = njobs + ' jobs have';
}
-
+
// create template string
var tmpl = '<div class="donemessagelarge">' +
'<p>' + njobs_text + ' been successfully added to the queue - resulting in the following datasets:</p>';
for (var i in response.outputs) {
- tmpl += '<p style="padding: 10px 20px;"><b>' + (parseInt(i)+1) + ': ' + response.outputs[i].name + '</b></p>';
+ tmpl += '<p style="padding: 10px 20px;"><b>' + response.outputs[i].hid + ': ' + response.outputs[i].name + '</b></p>';
}
tmpl += '<p>You can check the status of queued jobs and view the resulting data by refreshing the History pane. When the job has been run the status will change from \'running\' to \'finished\' if completed successfully or \'error\' if problems were encountered.</p>' +
'</div>';
-
+
// return success message element
return tmpl;
},
-
+
error: function(job_def) {
return '<div>' +
'<p>' +
@@ -52,14 +52,14 @@
'</textarea>' +
'</div>';
},
-
+
batchMode: function() {
return '<div class="ui-table-form-info">' +
'<i class="fa fa-sitemap" style="font-size: 1.2em; padding: 2px 5px;"/>' +
'This is a batch mode input field. A separate job will be triggered for each dataset.' +
'</div>';
},
-
+
requirements: function(options) {
var requirements_message = 'This tool requires ';
for (var i in options.requirements) {
diff -r 9ef633f09b006774c402120fced862cf6b8effed -r 0a95eaf36a88e1a18bea59461c906b48a214b943 static/scripts/packed/mvc/tools/tools-template.js
--- a/static/scripts/packed/mvc/tools/tools-template.js
+++ b/static/scripts/packed/mvc/tools/tools-template.js
@@ -1,1 +1,1 @@
-define([],function(){return{help:function(a){return'<div class="toolHelp" style="overflow: auto;"><div class="toolHelpBody">'+a+"</div></div>"},success:function(c){if(!c.jobs||!c.jobs.length){console.debug("tools-template::success() - Failed jobs.");return}var a=c.jobs.length;var d="";if(a==1){d="1 job has"}else{d=a+" jobs have"}var b='<div class="donemessagelarge"><p>'+d+" been successfully added to the queue - resulting in the following datasets:</p>";for(var e in c.outputs){b+='<p style="padding: 10px 20px;"><b>'+(parseInt(e)+1)+": "+c.outputs[e].name+"</b></p>"}b+="<p>You can check the status of queued jobs and view the resulting data by refreshing the History pane. When the job has been run the status will change from 'running' to 'finished' if completed successfully or 'error' if problems were encountered.</p></div>";return b},error:function(a){return'<div><p>The server could not complete the request. Please contact the Galaxy Team if this error persists.</p><textarea class="ui-textarea" disabled style="color: black;" rows="6">'+JSON.stringify(a,undefined,4)+"</textarea></div>"},batchMode:function(){return'<div class="ui-table-form-info"><i class="fa fa-sitemap" style="font-size: 1.2em; padding: 2px 5px;"/>This is a batch mode input field. A separate job will be triggered for each dataset.</div>'},requirements:function(a){var d="This tool requires ";for(var b in a.requirements){var c=a.requirements[b];d+=c.name;if(c.version){d+=" (Version "+c.version+")"}if(b<a.requirements.length-2){d+=", "}if(b==a.requirements.length-2){d+=" and "}}return d+'. Click <a target="_blank" href="https://wiki.galaxyproject.org/Tools/Requirements">here</a> for more information.'}}});
\ No newline at end of file
+define([],function(){return{help:function(a){return'<div class="toolHelp" style="overflow: auto;"><div class="toolHelpBody">'+a+"</div></div>"},success:function(c){if(!c.jobs||!c.jobs.length){console.debug("tools-template::success() - Failed jobs.");return}var a=c.jobs.length;var d="";if(a==1){d="1 job has"}else{d=a+" jobs have"}var b='<div class="donemessagelarge"><p>'+d+" been successfully added to the queue - resulting in the following datasets:</p>";for(var e in c.outputs){b+='<p style="padding: 10px 20px;"><b>'+c.outputs[e].hid+": "+c.outputs[e].name+"</b></p>"}b+="<p>You can check the status of queued jobs and view the resulting data by refreshing the History pane. When the job has been run the status will change from 'running' to 'finished' if completed successfully or 'error' if problems were encountered.</p></div>";return b},error:function(a){return'<div><p>The server could not complete the request. Please contact the Galaxy Team if this error persists.</p><textarea class="ui-textarea" disabled style="color: black;" rows="6">'+JSON.stringify(a,undefined,4)+"</textarea></div>"},batchMode:function(){return'<div class="ui-table-form-info"><i class="fa fa-sitemap" style="font-size: 1.2em; padding: 2px 5px;"/>This is a batch mode input field. A separate job will be triggered for each dataset.</div>'},requirements:function(a){var d="This tool requires ";for(var b in a.requirements){var c=a.requirements[b];d+=c.name;if(c.version){d+=" (Version "+c.version+")"}if(b<a.requirements.length-2){d+=", "}if(b==a.requirements.length-2){d+=" and "}}return d+'. Click <a target="_blank" href="https://wiki.galaxyproject.org/Tools/Requirements">here</a> for more information.'}}});
\ No newline at end of file
https://bitbucket.org/galaxy/galaxy-central/commits/c18c22d74ce2/
Changeset: c18c22d74ce2
User: jmchilton
Date: 2015-02-24 00:52:17+00:00
Summary: Improved tool diagnostics API.
Affected #: 1 file
diff -r 0a95eaf36a88e1a18bea59461c906b48a214b943 -r c18c22d74ce26f484b50baa61eab27bc160f8b43 lib/galaxy/webapps/galaxy/api/tools.py
--- a/lib/galaxy/webapps/galaxy/api/tools.py
+++ b/lib/galaxy/webapps/galaxy/api/tools.py
@@ -102,6 +102,7 @@
Return diagnostic information to help debug panel
and dependency related problems.
"""
+ # TODO: Move this into tool.
to_dict = lambda x: x.to_dict()
tool = self._get_tool( id, user=trans.user )
if hasattr( tool, 'lineage' ):
@@ -113,7 +114,6 @@
tool_shed_dependencies_dict = map(to_dict, tool_shed_dependencies)
else:
tool_shed_dependencies_dict = None
- tool = self._get_tool( id, user=trans.user )
return {
"tool_id": tool.id,
"tool_version": tool.version,
@@ -122,6 +122,11 @@
"requirements": map(to_dict, tool.requirements),
"installed_tool_shed_dependencies": tool_shed_dependencies_dict,
"tool_dir": tool.tool_dir,
+ "tool_shed": tool.tool_shed,
+ "repository_name": tool.repository_name,
+ "repository_owner": tool.repository_owner,
+ "installed_changeset_revision": None,
+ "guid": tool.guid,
}
@_future_expose_api_anonymous
https://bitbucket.org/galaxy/galaxy-central/commits/08153b7c614a/
Changeset: 08153b7c614a
User: jmchilton
Date: 2015-02-22 05:32:46+00:00
Summary: Fix for watching tools on some more interesting file systems.
Affected #: 3 files
diff -r c18c22d74ce26f484b50baa61eab27bc160f8b43 -r 08153b7c614a26b19ee3130acb0a2a9a1bd6763c config/galaxy.ini.sample
--- a/config/galaxy.ini.sample
+++ b/config/galaxy.ini.sample
@@ -176,11 +176,15 @@
# install from in the admin interface (.sample used if default does not exist).
#tool_sheds_config_file = config/tool_sheds_conf.xml
-# Enable monitoring of tools and tool directories listed in any tool config file
-# specified in tool_config_file option. If changes are found, tools are
-# automatically reloaded.
-# Watchdog ( https://pypi.python.org/pypi/watchdog ) must be installed and
-# available to Galaxy to use this option.
+# Set to True to Enable monitoring of tools and tool directories
+# listed in any tool config file specified in tool_config_file option.
+# If changes are found, tools are automatically reloaded. Watchdog (
+# https://pypi.python.org/pypi/watchdog ) must be installed and
+# available to Galaxy to use this option. Other options include 'auto'
+# which will attempt to watch tools if the watchdog library is available
+# but won't fail to load Galaxy if it is not and 'polling' which will use
+# a less efficient monitoring scheme that may work in wider range of scenarios
+# then the watchdog default montiory.
#watch_tools = False
# Enable automatic polling of relative tool sheds to see if any updates
diff -r c18c22d74ce26f484b50baa61eab27bc160f8b43 -r 08153b7c614a26b19ee3130acb0a2a9a1bd6763c lib/galaxy/config.py
--- a/lib/galaxy/config.py
+++ b/lib/galaxy/config.py
@@ -272,7 +272,7 @@
self.ftp_upload_site = kwargs.get( 'ftp_upload_site', None )
self.allow_library_path_paste = kwargs.get( 'allow_library_path_paste', False )
self.disable_library_comptypes = kwargs.get( 'disable_library_comptypes', '' ).lower().split( ',' )
- self.watch_tools = string_as_bool( kwargs.get( 'watch_tools', False ) )
+ self.watch_tools = kwargs.get( 'watch_tools', 'false' )
# On can mildly speed up Galaxy startup time by disabling index of help,
# not needed on production systems but useful if running many functional tests.
self.index_tool_help = string_as_bool( kwargs.get( "index_tool_help", True ) )
diff -r c18c22d74ce26f484b50baa61eab27bc160f8b43 -r 08153b7c614a26b19ee3130acb0a2a9a1bd6763c lib/galaxy/tools/toolbox/watcher.py
--- a/lib/galaxy/tools/toolbox/watcher.py
+++ b/lib/galaxy/tools/toolbox/watcher.py
@@ -2,9 +2,11 @@
try:
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
+ from watchdog.observers.polling import PollingObserver
can_watch = True
except ImportError:
FileSystemEventHandler = object
+ PollingObserver = object
can_watch = False
import logging
@@ -12,23 +14,34 @@
def get_watcher(toolbox, config):
- watch_tools = getattr(config, "watch_tools", False)
- if watch_tools:
+ watch_tools_val = str( getattr(config, "watch_tools", False) ).lower()
+ if watch_tools_val in ( 'true', 'yes', 'on' ):
return ToolWatcher(toolbox)
+ elif watch_tools_val == "auto":
+ try:
+ return ToolWatcher(toolbox)
+ except Exception:
+ log.info("Failed to load ToolWatcher (watchdog is likely unavailable) - proceeding without tool monitoring.")
+ return NullWatcher()
+ elif watch_tools_val == "polling":
+ log.info("Using less ineffecient polling toolbox watcher.")
+ return ToolWatcher(toolbox, observer_class=PollingObserver)
else:
return NullWatcher()
class ToolWatcher(object):
- def __init__(self, toolbox):
+ def __init__(self, toolbox, observer_class=None):
if not can_watch:
raise Exception("Watchdog library unavailble, cannot watch tools.")
+ if observer_class is None:
+ observer_class = Observer
self.toolbox = toolbox
self.tool_file_ids = {}
self.tool_dir_callbacks = {}
self.monitored_dirs = {}
- self.observer = Observer()
+ self.observer = observer_class()
self.event_handler = ToolFileEventHandler(self)
self.start()
https://bitbucket.org/galaxy/galaxy-central/commits/872867495129/
Changeset: 872867495129
User: jmchilton
Date: 2015-02-24 01:33:05+00:00
Summary: Allow setting job_conf params via environment variables & galaxy.ini.
Affected #: 2 files
diff -r 08153b7c614a26b19ee3130acb0a2a9a1bd6763c -r 8728674951297e85894b9e191ceb4d26a85bde4d config/job_conf.xml.sample_advanced
--- a/config/job_conf.xml.sample_advanced
+++ b/config/job_conf.xml.sample_advanced
@@ -427,6 +427,15 @@
<param id="nativeSpecification">--mem-per-cpu=512</param><resubmit condition="memory_limit_reached" destination="bigmem" /></destination>
+ <!-- Any tag param in this file can be set using an enviornment variable or using
+ values from galaxy.ini using the from_environ and from_config attributes
+ repectively. The text of the param will still be used if that enviornment variable
+ or config value isn't set.
+ -->
+ <destination id="params_from_environment" runner="slurm">
+ <param id="nativeSpecification" from_environ="NATIVE_SPECIFICATION">--time=00:05:00 --nodes=1</param>
+ <param id="docker_enabled" from_config="use_docker">false</param>
+ </destination></destinations><resources default="default">
diff -r 08153b7c614a26b19ee3130acb0a2a9a1bd6763c -r 8728674951297e85894b9e191ceb4d26a85bde4d lib/galaxy/jobs/__init__.py
--- a/lib/galaxy/jobs/__init__.py
+++ b/lib/galaxy/jobs/__init__.py
@@ -445,7 +445,15 @@
"""
rval = {}
for param in parent.findall('param'):
- rval[param.get('id')] = param.text
+ key = param.get('id')
+ param_value = param.text
+ if 'from_environ' in param.attrib:
+ environ_var = param.attrib['from_environ']
+ param_value = os.environ.get(environ_var, param_value)
+ elif 'from_config' in param.attrib:
+ config_val = param.attrib['from_config']
+ param_value = self.app.config.config_dict.get(config_val, param_value)
+ rval[key] = param_value
return rval
def __get_envs(self, parent):
https://bitbucket.org/galaxy/galaxy-central/commits/678bb1ba4d89/
Changeset: 678bb1ba4d89
User: jmchilton
Date: 2015-02-24 16:03:42+00:00
Summary: Docfixes - grammar and spelling problems caught by Nicola.
Affected #: 2 files
diff -r 8728674951297e85894b9e191ceb4d26a85bde4d -r 678bb1ba4d89b3043dd75d6b2d0c36663f693e62 config/galaxy.ini.sample
--- a/config/galaxy.ini.sample
+++ b/config/galaxy.ini.sample
@@ -176,7 +176,7 @@
# install from in the admin interface (.sample used if default does not exist).
#tool_sheds_config_file = config/tool_sheds_conf.xml
-# Set to True to Enable monitoring of tools and tool directories
+# Set to True to enable monitoring of tools and tool directories
# listed in any tool config file specified in tool_config_file option.
# If changes are found, tools are automatically reloaded. Watchdog (
# https://pypi.python.org/pypi/watchdog ) must be installed and
@@ -184,7 +184,7 @@
# which will attempt to watch tools if the watchdog library is available
# but won't fail to load Galaxy if it is not and 'polling' which will use
# a less efficient monitoring scheme that may work in wider range of scenarios
-# then the watchdog default montiory.
+# than the watchdog default.
#watch_tools = False
# Enable automatic polling of relative tool sheds to see if any updates
diff -r 8728674951297e85894b9e191ceb4d26a85bde4d -r 678bb1ba4d89b3043dd75d6b2d0c36663f693e62 config/job_conf.xml.sample_advanced
--- a/config/job_conf.xml.sample_advanced
+++ b/config/job_conf.xml.sample_advanced
@@ -427,9 +427,9 @@
<param id="nativeSpecification">--mem-per-cpu=512</param><resubmit condition="memory_limit_reached" destination="bigmem" /></destination>
- <!-- Any tag param in this file can be set using an enviornment variable or using
+ <!-- Any tag param in this file can be set using an environment variable or using
values from galaxy.ini using the from_environ and from_config attributes
- repectively. The text of the param will still be used if that enviornment variable
+ repectively. The text of the param will still be used if that environment variable
or config value isn't set.
--><destination id="params_from_environment" runner="slurm">
https://bitbucket.org/galaxy/galaxy-central/commits/476c79d7b00a/
Changeset: 476c79d7b00a
User: dannon
Date: 2015-02-24 16:30:43+00:00
Summary: Improved Mutable Handling w/ JSONType and MetadataType -- should resolve the outstanding sqlalchemy coerce/list bug
Affected #: 1 file
diff -r 678bb1ba4d89b3043dd75d6b2d0c36663f693e62 -r 476c79d7b00a5edde57847ca1882d7e7781030b6 lib/galaxy/model/custom_types.py
--- a/lib/galaxy/model/custom_types.py
+++ b/lib/galaxy/model/custom_types.py
@@ -1,5 +1,4 @@
import binascii
-import copy
import json
import logging
import uuid
@@ -34,67 +33,33 @@
return value
-class MutableDict(Mutable, dict):
- # MutableDict following http://docs.sqlalchemy.org/en/latest/orm/extensions/mutable.html
- @classmethod
- def coerce(cls, key, value):
- "Convert plain dictionaries to MutableDict."
+# Mutable JSONType for SQLAlchemy from original gist:
+# https://gist.github.com/dbarnett/1730610
+#
+# Also using minor changes from this fork of the gist:
+# https://gist.github.com/miracle2k/52a031cced285ba9b8cd
+#
+# And other minor changes to make it work for us.
- if not isinstance(value, MutableDict):
- if isinstance(value, dict):
- return MutableDict(value)
- # this call will raise ValueError
- return Mutable.coerce(key, value)
- else:
- return value
+class JSONType(sqlalchemy.types.TypeDecorator):
+ """Represents an immutable structure as a json-encoded string.
- def __setitem__(self, key, value):
- "Detect dictionary set events and emit change events."
+ If default is, for example, a dict, then a NULL value in the
+ database will be exposed as an empty dict.
+ """
- dict.__setitem__(self, key, value)
- self.changed()
-
- def __delitem__(self, key):
- "Detect dictionary del events and emit change events."
-
- dict.__delitem__(self, key)
- self.changed()
-
- def __getstate__(self):
- return dict(self)
-
- def __setstate__(self, state):
- self.update(state)
-
-
-class JSONType( TypeDecorator ):
- """
- Defines a JSONType for SQLAlchemy. Takes a primitive as input and
- JSONifies it. This should replace PickleType throughout Galaxy.
- """
impl = LargeBinary
- def process_bind_param( self, value, dialect ):
- if value is None:
- return None
- return json_encoder.encode( value )
+ def process_bind_param(self, value, dialect):
+ if value is not None:
+ value = json_encoder.encode(value)
+ return value
- def process_result_value( self, value, dialect ):
+ def process_result_value(self, value, dialect):
if value is not None:
- try:
- return json_decoder.decode( str( _sniffnfix_pg9_hex( value ) ) )
- except Exception, e:
- log.error( 'Failed to decode JSON (%s): %s', value, e )
- return None
-
- def copy_value( self, value ):
- # return json_decoder.decode( json_encoder.encode( value ) )
- return copy.deepcopy( value )
-
- def compare_values( self, x, y ):
- # return json_encoder.encode( x ) == json_encoder.encode( y )
- return ( x == y )
+ value = json_decoder.decode( str( _sniffnfix_pg9_hex( value ) ) )
+ return value
def load_dialect_impl(self, dialect):
if dialect.name == "mysql":
@@ -103,8 +68,136 @@
return self.impl
-MutableDict.associate_with(JSONType)
+class MutationObj(Mutable):
+ @classmethod
+ def coerce(cls, key, value):
+ if isinstance(value, dict) and not isinstance(value, MutationDict):
+ return MutationDict.coerce(key, value)
+ if isinstance(value, list) and not isinstance(value, MutationList):
+ return MutationList.coerce(key, value)
+ return value
+ @classmethod
+ def _listen_on_attribute(cls, attribute, coerce, parent_cls):
+ key = attribute.key
+ if parent_cls is not attribute.class_:
+ return
+
+ # rely on "propagate" here
+ parent_cls = attribute.class_
+
+ def load(state, *args):
+ val = state.dict.get(key, None)
+ if coerce:
+ val = cls.coerce(key, val)
+ state.dict[key] = val
+ if isinstance(val, cls):
+ val._parents[state.obj()] = key
+
+ def set(target, value, oldvalue, initiator):
+ if not isinstance(value, cls):
+ value = cls.coerce(key, value)
+ if isinstance(value, cls):
+ value._parents[target.obj()] = key
+ if isinstance(oldvalue, cls):
+ oldvalue._parents.pop(target.obj(), None)
+ return value
+
+ def pickle(state, state_dict):
+ val = state.dict.get(key, None)
+ if isinstance(val, cls):
+ if 'ext.mutable.values' not in state_dict:
+ state_dict['ext.mutable.values'] = []
+ state_dict['ext.mutable.values'].append(val)
+
+ def unpickle(state, state_dict):
+ if 'ext.mutable.values' in state_dict:
+ for val in state_dict['ext.mutable.values']:
+ val._parents[state.obj()] = key
+
+ sqlalchemy.event.listen(parent_cls, 'load', load, raw=True, propagate=True)
+ sqlalchemy.event.listen(parent_cls, 'refresh', load, raw=True, propagate=True)
+ sqlalchemy.event.listen(attribute, 'set', set, raw=True, retval=True, propagate=True)
+ sqlalchemy.event.listen(parent_cls, 'pickle', pickle, raw=True, propagate=True)
+ sqlalchemy.event.listen(parent_cls, 'unpickle', unpickle, raw=True, propagate=True)
+
+
+class MutationDict(MutationObj, dict):
+ @classmethod
+ def coerce(cls, key, value):
+ """Convert plain dictionary to MutationDict"""
+ self = MutationDict((k, MutationObj.coerce(key, v)) for (k, v) in value.items())
+ self._key = key
+ return self
+
+ def __setitem__(self, key, value):
+ # Due to the way OrderedDict works, this is called during __init__.
+ # At this time we don't have a key set, but what is more, the value
+ # being set has already been coerced. So special case this and skip.
+ if hasattr(self, '_key'):
+ value = MutationObj.coerce(self._key, value)
+ dict.__setitem__(self, key, value)
+ self.changed()
+
+ def __delitem__(self, key):
+ dict.__delitem__(self, key)
+ self.changed()
+
+
+class MutationList(MutationObj, list):
+ @classmethod
+ def coerce(cls, key, value):
+ """Convert plain list to MutationList"""
+ self = MutationList((MutationObj.coerce(key, v) for v in value))
+ self._key = key
+ return self
+
+ def __setitem__(self, idx, value):
+ list.__setitem__(self, idx, MutationObj.coerce(self._key, value))
+ self.changed()
+
+ def __setslice__(self, start, stop, values):
+ list.__setslice__(self, start, stop, (MutationObj.coerce(self._key, v) for v in values))
+ self.changed()
+
+ def __delitem__(self, idx):
+ list.__delitem__(self, idx)
+ self.changed()
+
+ def __delslice__(self, start, stop):
+ list.__delslice__(self, start, stop)
+ self.changed()
+
+ def append(self, value):
+ list.append(self, MutationObj.coerce(self._key, value))
+ self.changed()
+
+ def insert(self, idx, value):
+ list.insert(self, idx, MutationObj.coerce(self._key, value))
+ self.changed()
+
+ def extend(self, values):
+ list.extend(self, (MutationObj.coerce(self._key, v) for v in values))
+ self.changed()
+
+ def pop(self, *args, **kw):
+ value = list.pop(self, *args, **kw)
+ self.changed()
+ return value
+
+ def remove(self, value):
+ list.remove(self, value)
+ self.changed()
+
+
+MutationObj.associate_with(JSONType)
+
+"""A type to encode/decode JSON on the fly
+
+sqltype is the string type for the underlying DB column::
+
+ Column(JSON)
+"""
metadata_pickler = AliasPickleModule( {
( "cookbook.patterns", "Bunch" ): ( "galaxy.util.bunch", "Bunch" )
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
NiBuZXcgY29tbWl0cyBpbiBnYWxheHktY2VudHJhbDoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9n
YWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8yYTgyYTdiYzkxZTcvCkNoYW5nZXNldDogICAy
YTgyYTdiYzkxZTcKQnJhbmNoOiAgICAgIHJlbGVhc2VfMTUuMDMKVXNlcjogICAgICAgIGRhbm5v
bgpEYXRlOiAgICAgICAgMjAxNS0wMi0yMyAxNjoyODowNyswMDowMApTdW1tYXJ5OiAgICAgQ2xv
bmUgLmdpdGlnbm9yZQpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDk4ZWNkMzA1ZTNkM2Yw
MmFmNzhjOWY2MTI5N2Y4Mjk5OTY2YTUxODcgLXIgMmE4MmE3YmM5MWU3ZWYxYmFhZjI4MjA9Cjg5
MjNlOGIzZmRjZTNmZGJiIC5naXRpZ25vcmUKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3Jl
CkBAIC0wLDAgKzEsMTE4IEBACisuaGcqCisjIERvd25sb2FkZWQgYW5kIGxvY2FsbHkgYnVpbHQg
ZWdncworZWdncworc2NyaXB0cy9zY3JhbWJsZS9idWlsZAorc2NyaXB0cy9zY3JhbWJsZS9saWIK
K3NjcmlwdHMvc2NyYW1ibGUvYXJjaGl2ZXMKKworIyBQeXRob24gdmlydHVhbGVudgorLnZlbnYK
KworIyBEYXRhYmFzZSBzdHVmZgorZGF0YWJhc2UvYmVha2VyX3Nlc3Npb25zCitkYXRhYmFzZS9j
aXRhdGlvbnMKK2RhdGFiYXNlL2NvbW11bml0eV9maWxlcworZGF0YWJhc2UvY29tcGlsZWRfdGVt
cGxhdGVzCitkYXRhYmFzZS9maWxlcworZGF0YWJhc2Uvam9iX3dvcmtpbmdfZGlyZWN0b3J5Citk
YXRhYmFzZS9wYnMKK2RhdGFiYXNlL3RtcAorZGF0YWJhc2UvKi5zcWxpdGUKK2RhdGFiYXNlL29w
ZW5pZF9jb25zdW1lcl9jYWNoZQorCisjIFB5dGhvbiBieXRlY29kZQorKi5weWMKKworIyBHYWxh
eHkgUnVudGltZSBGaWxlcworKi5sb2NrCisqLmxvZworKi5waWQKKworIyBUb29sIFNoZWQgUnVu
dGltZSBGaWxlcwordG9vbF9zaGVkX3dlYmFwcC5sb2NrCit0b29sX3NoZWRfd2ViYXBwLmxvZwor
dG9vbF9zaGVkX3dlYmFwcC5waWQKK2hnd2ViLmNvbmZpZyoKK2xpYi90b29sX3NoZWQvc2NyaXB0
cy9ib290c3RyYXBfdG9vbF9zaGVkL3VzZXJfaW5mby54bWwKKworIyBSZXBvcnRzIFJ1bnRpbWUg
RmlsZXMKK3JlcG9ydHNfd2ViYXBwLmxvY2sKK3JlcG9ydHNfd2ViYXBwLmxvZworcmVwb3J0c193
ZWJhcHAucGlkCisKKyMgQ29uZmlnIGZpbGVzCit1bml2ZXJzZV93c2dpLmluaQorcmVwb3J0c193
c2dpLmluaQordG9vbF9zaGVkX3dzZ2kuaW5pCisKKyMgQ29uZmlnIGZpbGVzLgorZGF0YXR5cGVz
X2NvbmYueG1sCit0b29sX2NvbmYueG1sCitleHRlcm5hbF9zZXJ2aWNlX3R5cGVzX2NvbmYueG1s
CittaWdyYXRlZF90b29sc19jb25mLnhtbAorc2hlZF90b29sX2NvbmYueG1sCit0b29sX2RhdGFf
dGFibGVfY29uZi54bWwKK3Rvb2xfc2hlZHNfY29uZi54bWwKK2ludGVncmF0ZWRfdG9vbF9wYW5l
bC54bWwKK29wZW5pZF9jb25mLnhtbAorc2hlZF90b29sX2RhdGFfdGFibGVfY29uZi54bWwKK2pv
Yl9jb25mLnhtbAorZGF0YV9tYW5hZ2VyX2NvbmYueG1sCitzaGVkX2RhdGFfbWFuYWdlcl9jb25m
LnhtbAorb2JqZWN0X3N0b3JlX2NvbmYueG1sCitqb2JfbWV0cmljc19jb25mLnhtbAord29ya2Zs
b3dfc2NoZWR1bGVyc19jb25mLnhtbAorY29uZmlnLyoKK3N0YXRpYy93ZWxjb21lLmh0bWwuKgor
c3RhdGljL3dlbGNvbWUuaHRtbAorCisjIFRvb2wgZGF0YS4KK3Rvb2wtZGF0YS9hbm5vdGF0aW9u
X3Byb2ZpbGVyX29wdGlvbnMueG1sCit0b29sLWRhdGEvYW5ub3RhdGlvbl9wcm9maWxlcl92YWxp
ZF9idWlsZHMudHh0Cit0b29sLWRhdGEvZ2F0a19hbm5vdGF0aW9ucy50eHQKK3Rvb2wtZGF0YS9n
ZC5yZXN0cmljdGlvbl9lbnp5bWVzLnR4dAordG9vbC1kYXRhL2dkLnNwZWNpZXMudHh0Cit0b29s
LWRhdGEvc2hhcmVkL2lndi9pZ3ZfYnVpbGRfc2l0ZXMudHh0Cit0b29sLWRhdGEvc2hhcmVkL3J2
aWV3ZXIvcnZpZXdlcl9idWlsZF9zaXRlcy50eHQKK3Rvb2wtZGF0YS9zaGFyZWQvbmNiaS9idWls
ZHMudHh0Cit0b29sLWRhdGEvc2hhcmVkL3Vjc2MvYnVpbGRzLnR4dAordG9vbC1kYXRhL3NoYXJl
ZC9lbnNlbWJsL2J1aWxkcy50eHQKK3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9wdWJsaWNidWlsZHMu
dHh0Cit0b29sLWRhdGEvc2hhcmVkL3Vjc2MvdWNzY19idWlsZF9zaXRlcy50eHQKK3Rvb2wtZGF0
YS8qLmxvYwordG9vbC1kYXRhL2dlbm9tZS8qCisKKyMgVGVzdCBvdXRwdXQKK3Rlc3QtZGF0YS1j
YWNoZQorcnVuX2Z1bmN0aW9uYWxfdGVzdHMuaHRtbAordGVzdC90b29sX3NoZWQvdG1wLyoKKy5j
b3ZlcmFnZQoraHRtbGNvdgorcnVuX3VuaXRfdGVzdHMuaHRtbAordGVzdC91bml0LyoqLmxvZwor
CisjIFByb2plY3QgZmlsZXMKKyoua3BmCisKKyMgQ2hyb20gbGVuIGZpbGVzCisqLmxlbgorCisj
IEphcnMKK3Rvb2wtZGF0YS9zaGFyZWQvamFycy8KKworIyBDU1MgYnVpbGQgYXJ0aWZhY3RzLgor
c3ByaXRlLSoubGVzcworCisjIExvY2FsIG5vZGVfbW9kdWxlcyBhbmQgYm93ZXJfY29tcG9uZW50
cyBkaXJlY3Rvcmllcworbm9kZV9tb2R1bGVzCitib3dlcl9jb21wb25lbnRzCisKKyMgRG9jdW1l
bnRhdGlvbiBidWlsZCBmaWxlcy4KK2RvYy9idWlsZAorCisjIE1pc2MKKyoub3JpZworLkRTX1N0
b3JlCisqLnJlagorKn4KKwoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNl
bnRyYWwvY29tbWl0cy80ZDg4M2RhMjE4MTEvCkNoYW5nZXNldDogICA0ZDg4M2RhMjE4MTEKQnJh
bmNoOiAgICAgIHJlbGVhc2VfMTUuMDMKVXNlcjogICAgICAgIGd1ZXJsZXIKRGF0ZTogICAgICAg
IDIwMTUtMDItMjMgMTc6NTA6MjcrMDA6MDAKU3VtbWFyeTogICAgIFNlbGVjdDIgZml4CkFmZmVj
dGVkICM6ICAyMSBmaWxlcwoKZGlmZiAtciAyYTgyYTdiYzkxZTdlZjFiYWFmMjgyMDg5MjNlOGIz
ZmRjZTNmZGJiIC1yIDRkODgzZGEyMTgxMTlmOGFkOTIzMmI2PQoxMWJjZjBiZGY4NmNlNzZjOSBj
bGllbnQvZ2FsYXh5L3NjcmlwdHMvbGlicy9qcXVlcnkvc2VsZWN0Mi5qcwotLS0gYS9jbGllbnQv
Z2FsYXh5L3NjcmlwdHMvbGlicy9qcXVlcnkvc2VsZWN0Mi5qcworKysgYi9jbGllbnQvZ2FsYXh5
L3NjcmlwdHMvbGlicy9qcXVlcnkvc2VsZWN0Mi5qcwpAQCAtMSw3ICsxLDcgQEAKIC8qCiBDb3B5
cmlnaHQgMjAxMiBJZ29yIFZheW5iZXJnCj0yMAotVmVyc2lvbjogMy40LjMgVGltZXN0YW1wOiBU
dWUgU2VwIDE3IDA2OjQ3OjE0IFBEVCAyMDEzCitWZXJzaW9uOiAzLjUuMSBUaW1lc3RhbXA6IFR1
ZSBKdWwgMjIgMTg6NTg6NTYgRURUIDIwMTQKPTIwCiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiQXBhYz0KaGUgTGlj
ZW5zZSIpIG9yIHRoZSBHTlUKIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUg
IkdQTCBMaWNlbnNlIikuIFlvdSBtYXkgY2hvb3NlIGVpdGhlPQpyIGxpY2Vuc2UgdG8gZ292ZXJu
IHlvdXIKQEAgLTE0LDcgKzE0LDcgQEAKICAgICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv
Z3BsLTIuMC5odG1sCj0yMAogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmk9CmJ1dGVkIHVuZGVyIHRoZQotQXBh
Y2hlIExpY2Vuc2Ugb3IgdGhlIEdQTCBMaWNlc25zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLCBXSVQ9CkhPVVQgV0FSUkFOVElFUyBPUgorQXBhY2hlIExpY2Vuc2Ugb3IgdGhl
IEdQTCBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEg9Ck9V
VCBXQVJSQU5USUVTIE9SCiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLiBTZWUgdGhlIEFwYWNoZSBMaWNlbnNlID0KYW5kIHRoZSBHUEwgTGljZW5zZSBm
b3IKIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBBcGFjPQpoZSBMaWNlbnNlIGFuZCB0aGUgR1BMIExpY2Vuc2UuCiAq
LwpAQCAtOTgsMjQgKzk4LDI4IEBACiAgICAgfSwKICAgICBNRUFTVVJFX1NDUk9MTEJBUl9URU1Q
TEFURSA9M0QgIjxkaXYgY2xhc3M9M0Qnc2VsZWN0Mi1tZWFzdXJlLXNjcm9sbGJhPQpyJz48L2Rp
dj4iLAo9MjAKLSAgICBESUFDUklUSUNTID0zRCB7Ilx1MjRCNiI6IkEiLCJcdUZGMjEiOiJBIiwi
XHUwMEMwIjoiQSIsIlx1MDBDMSI6IkEiLCJcPQp1MDBDMiI6IkEiLCJcdTFFQTYiOiJBIiwiXHUx
RUE0IjoiQSIsIlx1MUVBQSI6IkEiLCJcdTFFQTgiOiJBIiwiXHUwMEMzIjoiQSI9CiwiXHUwMTAw
IjoiQSIsIlx1MDEwMiI6IkEiLCJcdTFFQjAiOiJBIiwiXHUxRUFFIjoiQSIsIlx1MUVCNCI6IkEi
LCJcdTFFQjIiOj0KIkEiLCJcdTAyMjYiOiJBIiwiXHUwMUUwIjoiQSIsIlx1MDBDNCI6IkEiLCJc
dTAxREUiOiJBIiwiXHUxRUEyIjoiQSIsIlx1MDBDPQo1IjoiQSIsIlx1MDFGQSI6IkEiLCJcdTAx
Q0QiOiJBIiwiXHUwMjAwIjoiQSIsIlx1MDIwMiI6IkEiLCJcdTFFQTAiOiJBIiwiXHU9CjFFQUMi
OiJBIiwiXHUxRUI2IjoiQSIsIlx1MUUwMCI6IkEiLCJcdTAxMDQiOiJBIiwiXHUwMjNBIjoiQSIs
Ilx1MkM2RiI6IkEiLD0KIlx1QTczMiI6IkFBIiwiXHUwMEM2IjoiQUUiLCJcdTAxRkMiOiJBRSIs
Ilx1MDFFMiI6IkFFIiwiXHVBNzM0IjoiQU8iLCJcdUE3PQozNiI6IkFVIiwiXHVBNzM4IjoiQVYi
LCJcdUE3M0EiOiJBViIsIlx1QTczQyI6IkFZIiwiXHUyNEI3IjoiQiIsIlx1RkYyMiI6IkI9CiIs
Ilx1MUUwMiI6IkIiLCJcdTFFMDQiOiJCIiwiXHUxRTA2IjoiQiIsIlx1MDI0MyI6IkIiLCJcdTAx
ODIiOiJCIiwiXHUwMTgxIj0KOiJCIiwiXHUyNEI4IjoiQyIsIlx1RkYyMyI6IkMiLCJcdTAxMDYi
OiJDIiwiXHUwMTA4IjoiQyIsIlx1MDEwQSI6IkMiLCJcdTAxPQowQyI6IkMiLCJcdTAwQzciOiJD
IiwiXHUxRTA4IjoiQyIsIlx1MDE4NyI6IkMiLCJcdTAyM0IiOiJDIiwiXHVBNzNFIjoiQyIsIlw9
CnUyNEI5IjoiRCIsIlx1RkYyNCI6IkQiLCJcdTFFMEEiOiJEIiwiXHUwMTBFIjoiRCIsIlx1MUUw
QyI6IkQiLCJcdTFFMTAiOiJEIj0KLCJcdTFFMTIiOiJEIiwiXHUxRTBFIjoiRCIsIlx1MDExMCI6
IkQiLCJcdTAxOEIiOiJEIiwiXHUwMThBIjoiRCIsIlx1MDE4OSI6PQoiRCIsIlx1QTc3OSI6IkQi
LCJcdTAxRjEiOiJEWiIsIlx1MDFDNCI6IkRaIiwiXHUwMUYyIjoiRHoiLCJcdTAxQzUiOiJEeiIs
Ilw9CnUyNEJBIjoiRSIsIlx1RkYyNSI6IkUiLCJcdTAwQzgiOiJFIiwiXHUwMEM5IjoiRSIsIlx1
MDBDQSI6IkUiLCJcdTFFQzAiOiJFIj0KLCJcdTFFQkUiOiJFIiwiXHUxRUM0IjoiRSIsIlx1MUVD
MiI6IkUiLCJcdTFFQkMiOiJFIiwiXHUwMTEyIjoiRSIsIlx1MUUxNCI6PQoiRSIsIlx1MUUxNiI6
IkUiLCJcdTAxMTQiOiJFIiwiXHUwMTE2IjoiRSIsIlx1MDBDQiI6IkUiLCJcdTFFQkEiOiJFIiwi
XHUwMTE9CkEiOiJFIiwiXHUwMjA0IjoiRSIsIlx1MDIwNiI6IkUiLCJcdTFFQjgiOiJFIiwiXHUx
RUM2IjoiRSIsIlx1MDIyOCI6IkUiLCJcdT0KMUUxQyI6IkUiLCJcdTAxMTgiOiJFIiwiXHUxRTE4
IjoiRSIsIlx1MUUxQSI6IkUiLCJcdTAxOTAiOiJFIiwiXHUwMThFIjoiRSIsPQoiXHUyNEJCIjoi
RiIsIlx1RkYyNiI6IkYiLCJcdTFFMUUiOiJGIiwiXHUwMTkxIjoiRiIsIlx1QTc3QiI6IkYiLCJc
dTI0QkMiOiI9CkciLCJcdUZGMjciOiJHIiwiXHUwMUY0IjoiRyIsIlx1MDExQyI6IkciLCJcdTFF
MjAiOiJHIiwiXHUwMTFFIjoiRyIsIlx1MDEyMD0KIjoiRyIsIlx1MDFFNiI6IkciLCJcdTAxMjIi
OiJHIiwiXHUwMUU0IjoiRyIsIlx1MDE5MyI6IkciLCJcdUE3QTAiOiJHIiwiXHVBPQo3N0QiOiJH
IiwiXHVBNzdFIjoiRyIsIlx1MjRCRCI6IkgiLCJcdUZGMjgiOiJIIiwiXHUwMTI0IjoiSCIsIlx1
MUUyMiI6IkgiLCI9Clx1MUUyNiI6IkgiLCJcdTAyMUUiOiJIIiwiXHUxRTI0IjoiSCIsIlx1MUUy
OCI6IkgiLCJcdTFFMkEiOiJIIiwiXHUwMTI2IjoiSD0KIiwiXHUyQzY3IjoiSCIsIlx1MkM3NSI6
IkgiLCJcdUE3OEQiOiJIIiwiXHUyNEJFIjoiSSIsIlx1RkYyOSI6IkkiLCJcdTAwQ0MiPQo6Ikki
LCJcdTAwQ0QiOiJJIiwiXHUwMENFIjoiSSIsIlx1MDEyOCI6IkkiLCJcdTAxMkEiOiJJIiwiXHUw
MTJDIjoiSSIsIlx1MDE9CjMwIjoiSSIsIlx1MDBDRiI6IkkiLCJcdTFFMkUiOiJJIiwiXHUxRUM4
IjoiSSIsIlx1MDFDRiI6IkkiLCJcdTAyMDgiOiJJIiwiXD0KdTAyMEEiOiJJIiwiXHUxRUNBIjoi
SSIsIlx1MDEyRSI6IkkiLCJcdTFFMkMiOiJJIiwiXHUwMTk3IjoiSSIsIlx1MjRCRiI6IkoiPQos
Ilx1RkYyQSI6IkoiLCJcdTAxMzQiOiJKIiwiXHUwMjQ4IjoiSiIsIlx1MjRDMCI6IksiLCJcdUZG
MkIiOiJLIiwiXHUxRTMwIjo9CiJLIiwiXHUwMUU4IjoiSyIsIlx1MUUzMiI6IksiLCJcdTAxMzYi
OiJLIiwiXHUxRTM0IjoiSyIsIlx1MDE5OCI6IksiLCJcdTJDNj0KOSI6IksiLCJcdUE3NDAiOiJL
IiwiXHVBNzQyIjoiSyIsIlx1QTc0NCI6IksiLCJcdUE3QTIiOiJLIiwiXHUyNEMxIjoiTCIsIlx1
PQpGRjJDIjoiTCIsIlx1MDEzRiI6IkwiLCJcdTAxMzkiOiJMIiwiXHUwMTNEIjoiTCIsIlx1MUUz
NiI6IkwiLCJcdTFFMzgiOiJMIiw9CiJcdTAxM0IiOiJMIiwiXHUxRTNDIjoiTCIsIlx1MUUzQSI6
IkwiLCJcdTAxNDEiOiJMIiwiXHUwMjNEIjoiTCIsIlx1MkM2MiI6Ij0KTCIsIlx1MkM2MCI6Ikwi
LCJcdUE3NDgiOiJMIiwiXHVBNzQ2IjoiTCIsIlx1QTc4MCI6IkwiLCJcdTAxQzciOiJMSiIsIlx1
MDFDPQo4IjoiTGoiLCJcdTI0QzIiOiJNIiwiXHVGRjJEIjoiTSIsIlx1MUUzRSI6Ik0iLCJcdTFF
NDAiOiJNIiwiXHUxRTQyIjoiTSIsIlw9CnUyQzZFIjoiTSIsIlx1MDE5QyI6Ik0iLCJcdTI0QzMi
OiJOIiwiXHVGRjJFIjoiTiIsIlx1MDFGOCI6Ik4iLCJcdTAxNDMiOiJOIj0KLCJcdTAwRDEiOiJO
IiwiXHUxRTQ0IjoiTiIsIlx1MDE0NyI6Ik4iLCJcdTFFNDYiOiJOIiwiXHUwMTQ1IjoiTiIsIlx1
MUU0QSI6PQoiTiIsIlx1MUU0OCI6Ik4iLCJcdTAyMjAiOiJOIiwiXHUwMTlEIjoiTiIsIlx1QTc5
MCI6Ik4iLCJcdUE3QTQiOiJOIiwiXHUwMUM9CkEiOiJOSiIsIlx1MDFDQiI6Ik5qIiwiXHUyNEM0
IjoiTyIsIlx1RkYyRiI6Ik8iLCJcdTAwRDIiOiJPIiwiXHUwMEQzIjoiTyIsIj0KXHUwMEQ0Ijoi
TyIsIlx1MUVEMiI6Ik8iLCJcdTFFRDAiOiJPIiwiXHUxRUQ2IjoiTyIsIlx1MUVENCI6Ik8iLCJc
dTAwRDUiOiJPPQoiLCJcdTFFNEMiOiJPIiwiXHUwMjJDIjoiTyIsIlx1MUU0RSI6Ik8iLCJcdTAx
NEMiOiJPIiwiXHUxRTUwIjoiTyIsIlx1MUU1MiI9CjoiTyIsIlx1MDE0RSI6Ik8iLCJcdTAyMkUi
OiJPIiwiXHUwMjMwIjoiTyIsIlx1MDBENiI6Ik8iLCJcdTAyMkEiOiJPIiwiXHUxRT0KQ0UiOiJP
IiwiXHUwMTUwIjoiTyIsIlx1MDFEMSI6Ik8iLCJcdTAyMEMiOiJPIiwiXHUwMjBFIjoiTyIsIlx1
MDFBMCI6Ik8iLCJcPQp1MUVEQyI6Ik8iLCJcdTFFREEiOiJPIiwiXHUxRUUwIjoiTyIsIlx1MUVE
RSI6Ik8iLCJcdTFFRTIiOiJPIiwiXHUxRUNDIjoiTyI9CiwiXHUxRUQ4IjoiTyIsIlx1MDFFQSI6
Ik8iLCJcdTAxRUMiOiJPIiwiXHUwMEQ4IjoiTyIsIlx1MDFGRSI6Ik8iLCJcdTAxODYiOj0KIk8i
LCJcdTAxOUYiOiJPIiwiXHVBNzRBIjoiTyIsIlx1QTc0QyI6Ik8iLCJcdTAxQTIiOiJPSSIsIlx1
QTc0RSI6Ik9PIiwiXHUwPQoyMjIiOiJPVSIsIlx1MjRDNSI6IlAiLCJcdUZGMzAiOiJQIiwiXHUx
RTU0IjoiUCIsIlx1MUU1NiI6IlAiLCJcdTAxQTQiOiJQIiw9CiJcdTJDNjMiOiJQIiwiXHVBNzUw
IjoiUCIsIlx1QTc1MiI6IlAiLCJcdUE3NTQiOiJQIiwiXHUyNEM2IjoiUSIsIlx1RkYzMSI6Ij0K
USIsIlx1QTc1NiI6IlEiLCJcdUE3NTgiOiJRIiwiXHUwMjRBIjoiUSIsIlx1MjRDNyI6IlIiLCJc
dUZGMzIiOiJSIiwiXHUwMTU0PQoiOiJSIiwiXHUxRTU4IjoiUiIsIlx1MDE1OCI6IlIiLCJcdTAy
MTAiOiJSIiwiXHUwMjEyIjoiUiIsIlx1MUU1QSI6IlIiLCJcdTE9CkU1QyI6IlIiLCJcdTAxNTYi
OiJSIiwiXHUxRTVFIjoiUiIsIlx1MDI0QyI6IlIiLCJcdTJDNjQiOiJSIiwiXHVBNzVBIjoiUiIs
Ij0KXHVBN0E2IjoiUiIsIlx1QTc4MiI6IlIiLCJcdTI0QzgiOiJTIiwiXHVGRjMzIjoiUyIsIlx1
MUU5RSI6IlMiLCJcdTAxNUEiOiJTPQoiLCJcdTFFNjQiOiJTIiwiXHUwMTVDIjoiUyIsIlx1MUU2
MCI6IlMiLCJcdTAxNjAiOiJTIiwiXHUxRTY2IjoiUyIsIlx1MUU2MiI9CjoiUyIsIlx1MUU2OCI6
IlMiLCJcdTAyMTgiOiJTIiwiXHUwMTVFIjoiUyIsIlx1MkM3RSI6IlMiLCJcdUE3QTgiOiJTIiwi
XHVBNz0KODQiOiJTIiwiXHUyNEM5IjoiVCIsIlx1RkYzNCI6IlQiLCJcdTFFNkEiOiJUIiwiXHUw
MTY0IjoiVCIsIlx1MUU2QyI6IlQiLCJcPQp1MDIxQSI6IlQiLCJcdTAxNjIiOiJUIiwiXHUxRTcw
IjoiVCIsIlx1MUU2RSI6IlQiLCJcdTAxNjYiOiJUIiwiXHUwMUFDIjoiVCI9CiwiXHUwMUFFIjoi
VCIsIlx1MDIzRSI6IlQiLCJcdUE3ODYiOiJUIiwiXHVBNzI4IjoiVFoiLCJcdTI0Q0EiOiJVIiwi
XHVGRjM1Ij0KOiJVIiwiXHUwMEQ5IjoiVSIsIlx1MDBEQSI6IlUiLCJcdTAwREIiOiJVIiwiXHUw
MTY4IjoiVSIsIlx1MUU3OCI6IlUiLCJcdTAxPQo2QSI6IlUiLCJcdTFFN0EiOiJVIiwiXHUwMTZD
IjoiVSIsIlx1MDBEQyI6IlUiLCJcdTAxREIiOiJVIiwiXHUwMUQ3IjoiVSIsIlw9CnUwMUQ1Ijoi
VSIsIlx1MDFEOSI6IlUiLCJcdTFFRTYiOiJVIiwiXHUwMTZFIjoiVSIsIlx1MDE3MCI6IlUiLCJc
dTAxRDMiOiJVIj0KLCJcdTAyMTQiOiJVIiwiXHUwMjE2IjoiVSIsIlx1MDFBRiI6IlUiLCJcdTFF
RUEiOiJVIiwiXHUxRUU4IjoiVSIsIlx1MUVFRSI6PQoiVSIsIlx1MUVFQyI6IlUiLCJcdTFFRjAi
OiJVIiwiXHUxRUU0IjoiVSIsIlx1MUU3MiI6IlUiLCJcdTAxNzIiOiJVIiwiXHUxRTc9CjYiOiJV
IiwiXHUxRTc0IjoiVSIsIlx1MDI0NCI6IlUiLCJcdTI0Q0IiOiJWIiwiXHVGRjM2IjoiViIsIlx1
MUU3QyI6IlYiLCJcdT0KMUU3RSI6IlYiLCJcdTAxQjIiOiJWIiwiXHVBNzVFIjoiViIsIlx1MDI0
NSI6IlYiLCJcdUE3NjAiOiJWWSIsIlx1MjRDQyI6IlciPQosIlx1RkYzNyI6IlciLCJcdTFFODAi
OiJXIiwiXHUxRTgyIjoiVyIsIlx1MDE3NCI6IlciLCJcdTFFODYiOiJXIiwiXHUxRTg0Ijo9CiJX
IiwiXHUxRTg4IjoiVyIsIlx1MkM3MiI6IlciLCJcdTI0Q0QiOiJYIiwiXHVGRjM4IjoiWCIsIlx1
MUU4QSI6IlgiLCJcdTFFOD0KQyI6IlgiLCJcdTI0Q0UiOiJZIiwiXHVGRjM5IjoiWSIsIlx1MUVG
MiI6IlkiLCJcdTAwREQiOiJZIiwiXHUwMTc2IjoiWSIsIlx1PQoxRUY4IjoiWSIsIlx1MDIzMiI6
IlkiLCJcdTFFOEUiOiJZIiwiXHUwMTc4IjoiWSIsIlx1MUVGNiI6IlkiLCJcdTFFRjQiOiJZIiw9
CiJcdTAxQjMiOiJZIiwiXHUwMjRFIjoiWSIsIlx1MUVGRSI6IlkiLCJcdTI0Q0YiOiJaIiwiXHVG
RjNBIjoiWiIsIlx1MDE3OSI6Ij0KWiIsIlx1MUU5MCI6IloiLCJcdTAxN0IiOiJaIiwiXHUwMTdE
IjoiWiIsIlx1MUU5MiI6IloiLCJcdTFFOTQiOiJaIiwiXHUwMUI1PQoiOiJaIiwiXHUwMjI0Ijoi
WiIsIlx1MkM3RiI6IloiLCJcdTJDNkIiOiJaIiwiXHVBNzYyIjoiWiIsIlx1MjREMCI6ImEiLCJc
dUY9CkY0MSI6ImEiLCJcdTFFOUEiOiJhIiwiXHUwMEUwIjoiYSIsIlx1MDBFMSI6ImEiLCJcdTAw
RTIiOiJhIiwiXHUxRUE3IjoiYSIsIj0KXHUxRUE1IjoiYSIsIlx1MUVBQiI6ImEiLCJcdTFFQTki
OiJhIiwiXHUwMEUzIjoiYSIsIlx1MDEwMSI6ImEiLCJcdTAxMDMiOiJhPQoiLCJcdTFFQjEiOiJh
IiwiXHUxRUFGIjoiYSIsIlx1MUVCNSI6ImEiLCJcdTFFQjMiOiJhIiwiXHUwMjI3IjoiYSIsIlx1
MDFFMSI9CjoiYSIsIlx1MDBFNCI6ImEiLCJcdTAxREYiOiJhIiwiXHUxRUEzIjoiYSIsIlx1MDBF
NSI6ImEiLCJcdTAxRkIiOiJhIiwiXHUwMT0KQ0UiOiJhIiwiXHUwMjAxIjoiYSIsIlx1MDIwMyI6
ImEiLCJcdTFFQTEiOiJhIiwiXHUxRUFEIjoiYSIsIlx1MUVCNyI6ImEiLCJcPQp1MUUwMSI6ImEi
LCJcdTAxMDUiOiJhIiwiXHUyQzY1IjoiYSIsIlx1MDI1MCI6ImEiLCJcdUE3MzMiOiJhYSIsIlx1
MDBFNiI6ImE9CmUiLCJcdTAxRkQiOiJhZSIsIlx1MDFFMyI6ImFlIiwiXHVBNzM1IjoiYW8iLCJc
dUE3MzciOiJhdSIsIlx1QTczOSI6ImF2IiwiXD0KdUE3M0IiOiJhdiIsIlx1QTczRCI6ImF5Iiwi
XHUyNEQxIjoiYiIsIlx1RkY0MiI6ImIiLCJcdTFFMDMiOiJiIiwiXHUxRTA1IjoiPQpiIiwiXHUx
RTA3IjoiYiIsIlx1MDE4MCI6ImIiLCJcdTAxODMiOiJiIiwiXHUwMjUzIjoiYiIsIlx1MjREMiI6
ImMiLCJcdUZGNDM9CiI6ImMiLCJcdTAxMDciOiJjIiwiXHUwMTA5IjoiYyIsIlx1MDEwQiI6ImMi
LCJcdTAxMEQiOiJjIiwiXHUwMEU3IjoiYyIsIlx1MT0KRTA5IjoiYyIsIlx1MDE4OCI6ImMiLCJc
dTAyM0MiOiJjIiwiXHVBNzNGIjoiYyIsIlx1MjE4NCI6ImMiLCJcdTI0RDMiOiJkIiwiPQpcdUZG
NDQiOiJkIiwiXHUxRTBCIjoiZCIsIlx1MDEwRiI6ImQiLCJcdTFFMEQiOiJkIiwiXHUxRTExIjoi
ZCIsIlx1MUUxMyI6ImQ9CiIsIlx1MUUwRiI6ImQiLCJcdTAxMTEiOiJkIiwiXHUwMThDIjoiZCIs
Ilx1MDI1NiI6ImQiLCJcdTAyNTciOiJkIiwiXHVBNzdBIj0KOiJkIiwiXHUwMUYzIjoiZHoiLCJc
dTAxQzYiOiJkeiIsIlx1MjRENCI6ImUiLCJcdUZGNDUiOiJlIiwiXHUwMEU4IjoiZSIsIlx1PQow
MEU5IjoiZSIsIlx1MDBFQSI6ImUiLCJcdTFFQzEiOiJlIiwiXHUxRUJGIjoiZSIsIlx1MUVDNSI6
ImUiLCJcdTFFQzMiOiJlIiw9CiJcdTFFQkQiOiJlIiwiXHUwMTEzIjoiZSIsIlx1MUUxNSI6ImUi
LCJcdTFFMTciOiJlIiwiXHUwMTE1IjoiZSIsIlx1MDExNyI6Ij0KZSIsIlx1MDBFQiI6ImUiLCJc
dTFFQkIiOiJlIiwiXHUwMTFCIjoiZSIsIlx1MDIwNSI6ImUiLCJcdTAyMDciOiJlIiwiXHUxRUI5
PQoiOiJlIiwiXHUxRUM3IjoiZSIsIlx1MDIyOSI6ImUiLCJcdTFFMUQiOiJlIiwiXHUwMTE5Ijoi
ZSIsIlx1MUUxOSI6ImUiLCJcdTE9CkUxQiI6ImUiLCJcdTAyNDciOiJlIiwiXHUwMjVCIjoiZSIs
Ilx1MDFERCI6ImUiLCJcdTI0RDUiOiJmIiwiXHVGRjQ2IjoiZiIsIj0KXHUxRTFGIjoiZiIsIlx1
MDE5MiI6ImYiLCJcdUE3N0MiOiJmIiwiXHUyNEQ2IjoiZyIsIlx1RkY0NyI6ImciLCJcdTAxRjUi
OiJnPQoiLCJcdTAxMUQiOiJnIiwiXHUxRTIxIjoiZyIsIlx1MDExRiI6ImciLCJcdTAxMjEiOiJn
IiwiXHUwMUU3IjoiZyIsIlx1MDEyMyI9CjoiZyIsIlx1MDFFNSI6ImciLCJcdTAyNjAiOiJnIiwi
XHVBN0ExIjoiZyIsIlx1MUQ3OSI6ImciLCJcdUE3N0YiOiJnIiwiXHUyND0KRDciOiJoIiwiXHVG
RjQ4IjoiaCIsIlx1MDEyNSI6ImgiLCJcdTFFMjMiOiJoIiwiXHUxRTI3IjoiaCIsIlx1MDIxRiI6
ImgiLCJcPQp1MUUyNSI6ImgiLCJcdTFFMjkiOiJoIiwiXHUxRTJCIjoiaCIsIlx1MUU5NiI6Imgi
LCJcdTAxMjciOiJoIiwiXHUyQzY4IjoiaCI9CiwiXHUyQzc2IjoiaCIsIlx1MDI2NSI6ImgiLCJc
dTAxOTUiOiJodiIsIlx1MjREOCI6ImkiLCJcdUZGNDkiOiJpIiwiXHUwMEVDIj0KOiJpIiwiXHUw
MEVEIjoiaSIsIlx1MDBFRSI6ImkiLCJcdTAxMjkiOiJpIiwiXHUwMTJCIjoiaSIsIlx1MDEyRCI6
ImkiLCJcdTAwPQpFRiI6ImkiLCJcdTFFMkYiOiJpIiwiXHUxRUM5IjoiaSIsIlx1MDFEMCI6Imki
LCJcdTAyMDkiOiJpIiwiXHUwMjBCIjoiaSIsIlw9CnUxRUNCIjoiaSIsIlx1MDEyRiI6ImkiLCJc
dTFFMkQiOiJpIiwiXHUwMjY4IjoiaSIsIlx1MDEzMSI6ImkiLCJcdTI0RDkiOiJqIj0KLCJcdUZG
NEEiOiJqIiwiXHUwMTM1IjoiaiIsIlx1MDFGMCI6ImoiLCJcdTAyNDkiOiJqIiwiXHUyNERBIjoi
ayIsIlx1RkY0QiI6PQoiayIsIlx1MUUzMSI6ImsiLCJcdTAxRTkiOiJrIiwiXHUxRTMzIjoiayIs
Ilx1MDEzNyI6ImsiLCJcdTFFMzUiOiJrIiwiXHUwMTk9CjkiOiJrIiwiXHUyQzZBIjoiayIsIlx1
QTc0MSI6ImsiLCJcdUE3NDMiOiJrIiwiXHVBNzQ1IjoiayIsIlx1QTdBMyI6ImsiLCJcdT0KMjRE
QiI6ImwiLCJcdUZGNEMiOiJsIiwiXHUwMTQwIjoibCIsIlx1MDEzQSI6ImwiLCJcdTAxM0UiOiJs
IiwiXHUxRTM3IjoibCIsPQoiXHUxRTM5IjoibCIsIlx1MDEzQyI6ImwiLCJcdTFFM0QiOiJsIiwi
XHUxRTNCIjoibCIsIlx1MDE3RiI6ImwiLCJcdTAxNDIiOiI9CmwiLCJcdTAxOUEiOiJsIiwiXHUw
MjZCIjoibCIsIlx1MkM2MSI6ImwiLCJcdUE3NDkiOiJsIiwiXHVBNzgxIjoibCIsIlx1QTc0Nz0K
IjoibCIsIlx1MDFDOSI6ImxqIiwiXHUyNERDIjoibSIsIlx1RkY0RCI6Im0iLCJcdTFFM0YiOiJt
IiwiXHUxRTQxIjoibSIsIlx1PQoxRTQzIjoibSIsIlx1MDI3MSI6Im0iLCJcdTAyNkYiOiJtIiwi
XHUyNEREIjoibiIsIlx1RkY0RSI6Im4iLCJcdTAxRjkiOiJuIiw9CiJcdTAxNDQiOiJuIiwiXHUw
MEYxIjoibiIsIlx1MUU0NSI6Im4iLCJcdTAxNDgiOiJuIiwiXHUxRTQ3IjoibiIsIlx1MDE0NiI6
Ij0KbiIsIlx1MUU0QiI6Im4iLCJcdTFFNDkiOiJuIiwiXHUwMTlFIjoibiIsIlx1MDI3MiI6Im4i
LCJcdTAxNDkiOiJuIiwiXHVBNzkxPQoiOiJuIiwiXHVBN0E1IjoibiIsIlx1MDFDQyI6Im5qIiwi
XHUyNERFIjoibyIsIlx1RkY0RiI6Im8iLCJcdTAwRjIiOiJvIiwiXHU9CjAwRjMiOiJvIiwiXHUw
MEY0IjoibyIsIlx1MUVEMyI6Im8iLCJcdTFFRDEiOiJvIiwiXHUxRUQ3IjoibyIsIlx1MUVENSI6
Im8iLD0KIlx1MDBGNSI6Im8iLCJcdTFFNEQiOiJvIiwiXHUwMjJEIjoibyIsIlx1MUU0RiI6Im8i
LCJcdTAxNEQiOiJvIiwiXHUxRTUxIjoiPQpvIiwiXHUxRTUzIjoibyIsIlx1MDE0RiI6Im8iLCJc
dTAyMkYiOiJvIiwiXHUwMjMxIjoibyIsIlx1MDBGNiI6Im8iLCJcdTAyMkI9CiI6Im8iLCJcdTFF
Q0YiOiJvIiwiXHUwMTUxIjoibyIsIlx1MDFEMiI6Im8iLCJcdTAyMEQiOiJvIiwiXHUwMjBGIjoi
byIsIlx1MD0KMUExIjoibyIsIlx1MUVERCI6Im8iLCJcdTFFREIiOiJvIiwiXHUxRUUxIjoibyIs
Ilx1MUVERiI6Im8iLCJcdTFFRTMiOiJvIiwiPQpcdTFFQ0QiOiJvIiwiXHUxRUQ5IjoibyIsIlx1
MDFFQiI6Im8iLCJcdTAxRUQiOiJvIiwiXHUwMEY4IjoibyIsIlx1MDFGRiI6Im89CiIsIlx1MDI1
NCI6Im8iLCJcdUE3NEIiOiJvIiwiXHVBNzREIjoibyIsIlx1MDI3NSI6Im8iLCJcdTAxQTMiOiJv
aSIsIlx1MDIyMz0KIjoib3UiLCJcdUE3NEYiOiJvbyIsIlx1MjRERiI6InAiLCJcdUZGNTAiOiJw
IiwiXHUxRTU1IjoicCIsIlx1MUU1NyI6InAiLCJcPQp1MDFBNSI6InAiLCJcdTFEN0QiOiJwIiwi
XHVBNzUxIjoicCIsIlx1QTc1MyI6InAiLCJcdUE3NTUiOiJwIiwiXHUyNEUwIjoicSI9CiwiXHVG
RjUxIjoicSIsIlx1MDI0QiI6InEiLCJcdUE3NTciOiJxIiwiXHVBNzU5IjoicSIsIlx1MjRFMSI6
InIiLCJcdUZGNTIiOj0KInIiLCJcdTAxNTUiOiJyIiwiXHUxRTU5IjoiciIsIlx1MDE1OSI6InIi
LCJcdTAyMTEiOiJyIiwiXHUwMjEzIjoiciIsIlx1MUU1PQpCIjoiciIsIlx1MUU1RCI6InIiLCJc
dTAxNTciOiJyIiwiXHUxRTVGIjoiciIsIlx1MDI0RCI6InIiLCJcdTAyN0QiOiJyIiwiXHU9CkE3
NUIiOiJyIiwiXHVBN0E3IjoiciIsIlx1QTc4MyI6InIiLCJcdTI0RTIiOiJzIiwiXHVGRjUzIjoi
cyIsIlx1MDBERiI6InMiLD0KIlx1MDE1QiI6InMiLCJcdTFFNjUiOiJzIiwiXHUwMTVEIjoicyIs
Ilx1MUU2MSI6InMiLCJcdTAxNjEiOiJzIiwiXHUxRTY3IjoiPQpzIiwiXHUxRTYzIjoicyIsIlx1
MUU2OSI6InMiLCJcdTAyMTkiOiJzIiwiXHUwMTVGIjoicyIsIlx1MDIzRiI6InMiLCJcdUE3QTk9
CiI6InMiLCJcdUE3ODUiOiJzIiwiXHUxRTlCIjoicyIsIlx1MjRFMyI6InQiLCJcdUZGNTQiOiJ0
IiwiXHUxRTZCIjoidCIsIlx1MT0KRTk3IjoidCIsIlx1MDE2NSI6InQiLCJcdTFFNkQiOiJ0Iiwi
XHUwMjFCIjoidCIsIlx1MDE2MyI6InQiLCJcdTFFNzEiOiJ0IiwiPQpcdTFFNkYiOiJ0IiwiXHUw
MTY3IjoidCIsIlx1MDFBRCI6InQiLCJcdTAyODgiOiJ0IiwiXHUyQzY2IjoidCIsIlx1QTc4NyI6
InQ9CiIsIlx1QTcyOSI6InR6IiwiXHUyNEU0IjoidSIsIlx1RkY1NSI6InUiLCJcdTAwRjkiOiJ1
IiwiXHUwMEZBIjoidSIsIlx1MDBGQj0KIjoidSIsIlx1MDE2OSI6InUiLCJcdTFFNzkiOiJ1Iiwi
XHUwMTZCIjoidSIsIlx1MUU3QiI6InUiLCJcdTAxNkQiOiJ1IiwiXHUwPQowRkMiOiJ1IiwiXHUw
MURDIjoidSIsIlx1MDFEOCI6InUiLCJcdTAxRDYiOiJ1IiwiXHUwMURBIjoidSIsIlx1MUVFNyI6
InUiLCI9Clx1MDE2RiI6InUiLCJcdTAxNzEiOiJ1IiwiXHUwMUQ0IjoidSIsIlx1MDIxNSI6InUi
LCJcdTAyMTciOiJ1IiwiXHUwMUIwIjoidT0KIiwiXHUxRUVCIjoidSIsIlx1MUVFOSI6InUiLCJc
dTFFRUYiOiJ1IiwiXHUxRUVEIjoidSIsIlx1MUVGMSI6InUiLCJcdTFFRTUiPQo6InUiLCJcdTFF
NzMiOiJ1IiwiXHUwMTczIjoidSIsIlx1MUU3NyI6InUiLCJcdTFFNzUiOiJ1IiwiXHUwMjg5Ijoi
dSIsIlx1MjQ9CkU1IjoidiIsIlx1RkY1NiI6InYiLCJcdTFFN0QiOiJ2IiwiXHUxRTdGIjoidiIs
Ilx1MDI4QiI6InYiLCJcdUE3NUYiOiJ2IiwiXD0KdTAyOEMiOiJ2IiwiXHVBNzYxIjoidnkiLCJc
dTI0RTYiOiJ3IiwiXHVGRjU3IjoidyIsIlx1MUU4MSI6InciLCJcdTFFODMiOiJ3PQoiLCJcdTAx
NzUiOiJ3IiwiXHUxRTg3IjoidyIsIlx1MUU4NSI6InciLCJcdTFFOTgiOiJ3IiwiXHUxRTg5Ijoi
dyIsIlx1MkM3MyI9CjoidyIsIlx1MjRFNyI6IngiLCJcdUZGNTgiOiJ4IiwiXHUxRThCIjoieCIs
Ilx1MUU4RCI6IngiLCJcdTI0RTgiOiJ5IiwiXHVGRj0KNTkiOiJ5IiwiXHUxRUYzIjoieSIsIlx1
MDBGRCI6InkiLCJcdTAxNzciOiJ5IiwiXHUxRUY5IjoieSIsIlx1MDIzMyI6InkiLCJcPQp1MUU4
RiI6InkiLCJcdTAwRkYiOiJ5IiwiXHUxRUY3IjoieSIsIlx1MUU5OSI6InkiLCJcdTFFRjUiOiJ5
IiwiXHUwMUI0IjoieSI9CiwiXHUwMjRGIjoieSIsIlx1MUVGRiI6InkiLCJcdTI0RTkiOiJ6Iiwi
XHVGRjVBIjoieiIsIlx1MDE3QSI6InoiLCJcdTFFOTEiOj0KInoiLCJcdTAxN0MiOiJ6IiwiXHUw
MTdFIjoieiIsIlx1MUU5MyI6InoiLCJcdTFFOTUiOiJ6IiwiXHUwMUI2IjoieiIsIlx1MDIyPQo1
IjoieiIsIlx1MDI0MCI6InoiLCJcdTJDNkMiOiJ6IiwiXHVBNzYzIjoieiJ9OworICAgIERJQUNS
SVRJQ1MgPTNEIHsiXHUyNEI2IjoiQSIsIlx1RkYyMSI6IkEiLCJcdTAwQzAiOiJBIiwiXHUwMEMx
IjoiQSIsIlw9CnUwMEMyIjoiQSIsIlx1MUVBNiI6IkEiLCJcdTFFQTQiOiJBIiwiXHUxRUFBIjoi
QSIsIlx1MUVBOCI6IkEiLCJcdTAwQzMiOiJBIj0KLCJcdTAxMDAiOiJBIiwiXHUwMTAyIjoiQSIs
Ilx1MUVCMCI6IkEiLCJcdTFFQUUiOiJBIiwiXHUxRUI0IjoiQSIsIlx1MUVCMiI6PQoiQSIsIlx1
MDIyNiI6IkEiLCJcdTAxRTAiOiJBIiwiXHUwMEM0IjoiQSIsIlx1MDFERSI6IkEiLCJcdTFFQTIi
OiJBIiwiXHUwMEM9CjUiOiJBIiwiXHUwMUZBIjoiQSIsIlx1MDFDRCI6IkEiLCJcdTAyMDAiOiJB
IiwiXHUwMjAyIjoiQSIsIlx1MUVBMCI6IkEiLCJcdT0KMUVBQyI6IkEiLCJcdTFFQjYiOiJBIiwi
XHUxRTAwIjoiQSIsIlx1MDEwNCI6IkEiLCJcdTAyM0EiOiJBIiwiXHUyQzZGIjoiQSIsPQoiXHVB
NzMyIjoiQUEiLCJcdTAwQzYiOiJBRSIsIlx1MDFGQyI6IkFFIiwiXHUwMUUyIjoiQUUiLCJcdUE3
MzQiOiJBTyIsIlx1QTc9CjM2IjoiQVUiLCJcdUE3MzgiOiJBViIsIlx1QTczQSI6IkFWIiwiXHVB
NzNDIjoiQVkiLCJcdTI0QjciOiJCIiwiXHVGRjIyIjoiQj0KIiwiXHUxRTAyIjoiQiIsIlx1MUUw
NCI6IkIiLCJcdTFFMDYiOiJCIiwiXHUwMjQzIjoiQiIsIlx1MDE4MiI6IkIiLCJcdTAxODEiPQo6
IkIiLCJcdTI0QjgiOiJDIiwiXHVGRjIzIjoiQyIsIlx1MDEwNiI6IkMiLCJcdTAxMDgiOiJDIiwi
XHUwMTBBIjoiQyIsIlx1MDE9CjBDIjoiQyIsIlx1MDBDNyI6IkMiLCJcdTFFMDgiOiJDIiwiXHUw
MTg3IjoiQyIsIlx1MDIzQiI6IkMiLCJcdUE3M0UiOiJDIiwiXD0KdTI0QjkiOiJEIiwiXHVGRjI0
IjoiRCIsIlx1MUUwQSI6IkQiLCJcdTAxMEUiOiJEIiwiXHUxRTBDIjoiRCIsIlx1MUUxMCI6IkQi
PQosIlx1MUUxMiI6IkQiLCJcdTFFMEUiOiJEIiwiXHUwMTEwIjoiRCIsIlx1MDE4QiI6IkQiLCJc
dTAxOEEiOiJEIiwiXHUwMTg5Ijo9CiJEIiwiXHVBNzc5IjoiRCIsIlx1MDFGMSI6IkRaIiwiXHUw
MUM0IjoiRFoiLCJcdTAxRjIiOiJEeiIsIlx1MDFDNSI6IkR6IiwiXD0KdTI0QkEiOiJFIiwiXHVG
RjI1IjoiRSIsIlx1MDBDOCI6IkUiLCJcdTAwQzkiOiJFIiwiXHUwMENBIjoiRSIsIlx1MUVDMCI6
IkUiPQosIlx1MUVCRSI6IkUiLCJcdTFFQzQiOiJFIiwiXHUxRUMyIjoiRSIsIlx1MUVCQyI6IkUi
LCJcdTAxMTIiOiJFIiwiXHUxRTE0Ijo9CiJFIiwiXHUxRTE2IjoiRSIsIlx1MDExNCI6IkUiLCJc
dTAxMTYiOiJFIiwiXHUwMENCIjoiRSIsIlx1MUVCQSI6IkUiLCJcdTAxMT0KQSI6IkUiLCJcdTAy
MDQiOiJFIiwiXHUwMjA2IjoiRSIsIlx1MUVCOCI6IkUiLCJcdTFFQzYiOiJFIiwiXHUwMjI4Ijoi
RSIsIlx1PQoxRTFDIjoiRSIsIlx1MDExOCI6IkUiLCJcdTFFMTgiOiJFIiwiXHUxRTFBIjoiRSIs
Ilx1MDE5MCI6IkUiLCJcdTAxOEUiOiJFIiw9CiJcdTI0QkIiOiJGIiwiXHVGRjI2IjoiRiIsIlx1
MUUxRSI6IkYiLCJcdTAxOTEiOiJGIiwiXHVBNzdCIjoiRiIsIlx1MjRCQyI6Ij0KRyIsIlx1RkYy
NyI6IkciLCJcdTAxRjQiOiJHIiwiXHUwMTFDIjoiRyIsIlx1MUUyMCI6IkciLCJcdTAxMUUiOiJH
IiwiXHUwMTIwPQoiOiJHIiwiXHUwMUU2IjoiRyIsIlx1MDEyMiI6IkciLCJcdTAxRTQiOiJHIiwi
XHUwMTkzIjoiRyIsIlx1QTdBMCI6IkciLCJcdUE9Cjc3RCI6IkciLCJcdUE3N0UiOiJHIiwiXHUy
NEJEIjoiSCIsIlx1RkYyOCI6IkgiLCJcdTAxMjQiOiJIIiwiXHUxRTIyIjoiSCIsIj0KXHUxRTI2
IjoiSCIsIlx1MDIxRSI6IkgiLCJcdTFFMjQiOiJIIiwiXHUxRTI4IjoiSCIsIlx1MUUyQSI6Ikgi
LCJcdTAxMjYiOiJIPQoiLCJcdTJDNjciOiJIIiwiXHUyQzc1IjoiSCIsIlx1QTc4RCI6IkgiLCJc
dTI0QkUiOiJJIiwiXHVGRjI5IjoiSSIsIlx1MDBDQyI9CjoiSSIsIlx1MDBDRCI6IkkiLCJcdTAw
Q0UiOiJJIiwiXHUwMTI4IjoiSSIsIlx1MDEyQSI6IkkiLCJcdTAxMkMiOiJJIiwiXHUwMT0KMzAi
OiJJIiwiXHUwMENGIjoiSSIsIlx1MUUyRSI6IkkiLCJcdTFFQzgiOiJJIiwiXHUwMUNGIjoiSSIs
Ilx1MDIwOCI6IkkiLCJcPQp1MDIwQSI6IkkiLCJcdTFFQ0EiOiJJIiwiXHUwMTJFIjoiSSIsIlx1
MUUyQyI6IkkiLCJcdTAxOTciOiJJIiwiXHUyNEJGIjoiSiI9CiwiXHVGRjJBIjoiSiIsIlx1MDEz
NCI6IkoiLCJcdTAyNDgiOiJKIiwiXHUyNEMwIjoiSyIsIlx1RkYyQiI6IksiLCJcdTFFMzAiOj0K
IksiLCJcdTAxRTgiOiJLIiwiXHUxRTMyIjoiSyIsIlx1MDEzNiI6IksiLCJcdTFFMzQiOiJLIiwi
XHUwMTk4IjoiSyIsIlx1MkM2PQo5IjoiSyIsIlx1QTc0MCI6IksiLCJcdUE3NDIiOiJLIiwiXHVB
NzQ0IjoiSyIsIlx1QTdBMiI6IksiLCJcdTI0QzEiOiJMIiwiXHU9CkZGMkMiOiJMIiwiXHUwMTNG
IjoiTCIsIlx1MDEzOSI6IkwiLCJcdTAxM0QiOiJMIiwiXHUxRTM2IjoiTCIsIlx1MUUzOCI6Ikwi
LD0KIlx1MDEzQiI6IkwiLCJcdTFFM0MiOiJMIiwiXHUxRTNBIjoiTCIsIlx1MDE0MSI6IkwiLCJc
dTAyM0QiOiJMIiwiXHUyQzYyIjoiPQpMIiwiXHUyQzYwIjoiTCIsIlx1QTc0OCI6IkwiLCJcdUE3
NDYiOiJMIiwiXHVBNzgwIjoiTCIsIlx1MDFDNyI6IkxKIiwiXHUwMUM9CjgiOiJMaiIsIlx1MjRD
MiI6Ik0iLCJcdUZGMkQiOiJNIiwiXHUxRTNFIjoiTSIsIlx1MUU0MCI6Ik0iLCJcdTFFNDIiOiJN
IiwiXD0KdTJDNkUiOiJNIiwiXHUwMTlDIjoiTSIsIlx1MjRDMyI6Ik4iLCJcdUZGMkUiOiJOIiwi
XHUwMUY4IjoiTiIsIlx1MDE0MyI6Ik4iPQosIlx1MDBEMSI6Ik4iLCJcdTFFNDQiOiJOIiwiXHUw
MTQ3IjoiTiIsIlx1MUU0NiI6Ik4iLCJcdTAxNDUiOiJOIiwiXHUxRTRBIjo9CiJOIiwiXHUxRTQ4
IjoiTiIsIlx1MDIyMCI6Ik4iLCJcdTAxOUQiOiJOIiwiXHVBNzkwIjoiTiIsIlx1QTdBNCI6Ik4i
LCJcdTAxQz0KQSI6Ik5KIiwiXHUwMUNCIjoiTmoiLCJcdTI0QzQiOiJPIiwiXHVGRjJGIjoiTyIs
Ilx1MDBEMiI6Ik8iLCJcdTAwRDMiOiJPIiwiPQpcdTAwRDQiOiJPIiwiXHUxRUQyIjoiTyIsIlx1
MUVEMCI6Ik8iLCJcdTFFRDYiOiJPIiwiXHUxRUQ0IjoiTyIsIlx1MDBENSI6Ik89CiIsIlx1MUU0
QyI6Ik8iLCJcdTAyMkMiOiJPIiwiXHUxRTRFIjoiTyIsIlx1MDE0QyI6Ik8iLCJcdTFFNTAiOiJP
IiwiXHUxRTUyIj0KOiJPIiwiXHUwMTRFIjoiTyIsIlx1MDIyRSI6Ik8iLCJcdTAyMzAiOiJPIiwi
XHUwMEQ2IjoiTyIsIlx1MDIyQSI6Ik8iLCJcdTFFPQpDRSI6Ik8iLCJcdTAxNTAiOiJPIiwiXHUw
MUQxIjoiTyIsIlx1MDIwQyI6Ik8iLCJcdTAyMEUiOiJPIiwiXHUwMUEwIjoiTyIsIlw9CnUxRURD
IjoiTyIsIlx1MUVEQSI6Ik8iLCJcdTFFRTAiOiJPIiwiXHUxRURFIjoiTyIsIlx1MUVFMiI6Ik8i
LCJcdTFFQ0MiOiJPIj0KLCJcdTFFRDgiOiJPIiwiXHUwMUVBIjoiTyIsIlx1MDFFQyI6Ik8iLCJc
dTAwRDgiOiJPIiwiXHUwMUZFIjoiTyIsIlx1MDE4NiI6PQoiTyIsIlx1MDE5RiI6Ik8iLCJcdUE3
NEEiOiJPIiwiXHVBNzRDIjoiTyIsIlx1MDFBMiI6Ik9JIiwiXHVBNzRFIjoiT08iLCJcdTA9CjIy
MiI6Ik9VIiwiXHUyNEM1IjoiUCIsIlx1RkYzMCI6IlAiLCJcdTFFNTQiOiJQIiwiXHUxRTU2Ijoi
UCIsIlx1MDFBNCI6IlAiLD0KIlx1MkM2MyI6IlAiLCJcdUE3NTAiOiJQIiwiXHVBNzUyIjoiUCIs
Ilx1QTc1NCI6IlAiLCJcdTI0QzYiOiJRIiwiXHVGRjMxIjoiPQpRIiwiXHVBNzU2IjoiUSIsIlx1
QTc1OCI6IlEiLCJcdTAyNEEiOiJRIiwiXHUyNEM3IjoiUiIsIlx1RkYzMiI6IlIiLCJcdTAxNTQ9
CiI6IlIiLCJcdTFFNTgiOiJSIiwiXHUwMTU4IjoiUiIsIlx1MDIxMCI6IlIiLCJcdTAyMTIiOiJS
IiwiXHUxRTVBIjoiUiIsIlx1MT0KRTVDIjoiUiIsIlx1MDE1NiI6IlIiLCJcdTFFNUUiOiJSIiwi
XHUwMjRDIjoiUiIsIlx1MkM2NCI6IlIiLCJcdUE3NUEiOiJSIiwiPQpcdUE3QTYiOiJSIiwiXHVB
NzgyIjoiUiIsIlx1MjRDOCI6IlMiLCJcdUZGMzMiOiJTIiwiXHUxRTlFIjoiUyIsIlx1MDE1QSI6
IlM9CiIsIlx1MUU2NCI6IlMiLCJcdTAxNUMiOiJTIiwiXHUxRTYwIjoiUyIsIlx1MDE2MCI6IlMi
LCJcdTFFNjYiOiJTIiwiXHUxRTYyIj0KOiJTIiwiXHUxRTY4IjoiUyIsIlx1MDIxOCI6IlMiLCJc
dTAxNUUiOiJTIiwiXHUyQzdFIjoiUyIsIlx1QTdBOCI6IlMiLCJcdUE3PQo4NCI6IlMiLCJcdTI0
QzkiOiJUIiwiXHVGRjM0IjoiVCIsIlx1MUU2QSI6IlQiLCJcdTAxNjQiOiJUIiwiXHUxRTZDIjoi
VCIsIlw9CnUwMjFBIjoiVCIsIlx1MDE2MiI6IlQiLCJcdTFFNzAiOiJUIiwiXHUxRTZFIjoiVCIs
Ilx1MDE2NiI6IlQiLCJcdTAxQUMiOiJUIj0KLCJcdTAxQUUiOiJUIiwiXHUwMjNFIjoiVCIsIlx1
QTc4NiI6IlQiLCJcdUE3MjgiOiJUWiIsIlx1MjRDQSI6IlUiLCJcdUZGMzUiPQo6IlUiLCJcdTAw
RDkiOiJVIiwiXHUwMERBIjoiVSIsIlx1MDBEQiI6IlUiLCJcdTAxNjgiOiJVIiwiXHUxRTc4Ijoi
VSIsIlx1MDE9CjZBIjoiVSIsIlx1MUU3QSI6IlUiLCJcdTAxNkMiOiJVIiwiXHUwMERDIjoiVSIs
Ilx1MDFEQiI6IlUiLCJcdTAxRDciOiJVIiwiXD0KdTAxRDUiOiJVIiwiXHUwMUQ5IjoiVSIsIlx1
MUVFNiI6IlUiLCJcdTAxNkUiOiJVIiwiXHUwMTcwIjoiVSIsIlx1MDFEMyI6IlUiPQosIlx1MDIx
NCI6IlUiLCJcdTAyMTYiOiJVIiwiXHUwMUFGIjoiVSIsIlx1MUVFQSI6IlUiLCJcdTFFRTgiOiJV
IiwiXHUxRUVFIjo9CiJVIiwiXHUxRUVDIjoiVSIsIlx1MUVGMCI6IlUiLCJcdTFFRTQiOiJVIiwi
XHUxRTcyIjoiVSIsIlx1MDE3MiI6IlUiLCJcdTFFNz0KNiI6IlUiLCJcdTFFNzQiOiJVIiwiXHUw
MjQ0IjoiVSIsIlx1MjRDQiI6IlYiLCJcdUZGMzYiOiJWIiwiXHUxRTdDIjoiViIsIlx1PQoxRTdF
IjoiViIsIlx1MDFCMiI6IlYiLCJcdUE3NUUiOiJWIiwiXHUwMjQ1IjoiViIsIlx1QTc2MCI6IlZZ
IiwiXHUyNENDIjoiVyI9CiwiXHVGRjM3IjoiVyIsIlx1MUU4MCI6IlciLCJcdTFFODIiOiJXIiwi
XHUwMTc0IjoiVyIsIlx1MUU4NiI6IlciLCJcdTFFODQiOj0KIlciLCJcdTFFODgiOiJXIiwiXHUy
QzcyIjoiVyIsIlx1MjRDRCI6IlgiLCJcdUZGMzgiOiJYIiwiXHUxRThBIjoiWCIsIlx1MUU4PQpD
IjoiWCIsIlx1MjRDRSI6IlkiLCJcdUZGMzkiOiJZIiwiXHUxRUYyIjoiWSIsIlx1MDBERCI6Ilki
LCJcdTAxNzYiOiJZIiwiXHU9CjFFRjgiOiJZIiwiXHUwMjMyIjoiWSIsIlx1MUU4RSI6IlkiLCJc
dTAxNzgiOiJZIiwiXHUxRUY2IjoiWSIsIlx1MUVGNCI6IlkiLD0KIlx1MDFCMyI6IlkiLCJcdTAy
NEUiOiJZIiwiXHUxRUZFIjoiWSIsIlx1MjRDRiI6IloiLCJcdUZGM0EiOiJaIiwiXHUwMTc5Ijoi
PQpaIiwiXHUxRTkwIjoiWiIsIlx1MDE3QiI6IloiLCJcdTAxN0QiOiJaIiwiXHUxRTkyIjoiWiIs
Ilx1MUU5NCI6IloiLCJcdTAxQjU9CiI6IloiLCJcdTAyMjQiOiJaIiwiXHUyQzdGIjoiWiIsIlx1
MkM2QiI6IloiLCJcdUE3NjIiOiJaIiwiXHUyNEQwIjoiYSIsIlx1Rj0KRjQxIjoiYSIsIlx1MUU5
QSI6ImEiLCJcdTAwRTAiOiJhIiwiXHUwMEUxIjoiYSIsIlx1MDBFMiI6ImEiLCJcdTFFQTciOiJh
IiwiPQpcdTFFQTUiOiJhIiwiXHUxRUFCIjoiYSIsIlx1MUVBOSI6ImEiLCJcdTAwRTMiOiJhIiwi
XHUwMTAxIjoiYSIsIlx1MDEwMyI6ImE9CiIsIlx1MUVCMSI6ImEiLCJcdTFFQUYiOiJhIiwiXHUx
RUI1IjoiYSIsIlx1MUVCMyI6ImEiLCJcdTAyMjciOiJhIiwiXHUwMUUxIj0KOiJhIiwiXHUwMEU0
IjoiYSIsIlx1MDFERiI6ImEiLCJcdTFFQTMiOiJhIiwiXHUwMEU1IjoiYSIsIlx1MDFGQiI6ImEi
LCJcdTAxPQpDRSI6ImEiLCJcdTAyMDEiOiJhIiwiXHUwMjAzIjoiYSIsIlx1MUVBMSI6ImEiLCJc
dTFFQUQiOiJhIiwiXHUxRUI3IjoiYSIsIlw9CnUxRTAxIjoiYSIsIlx1MDEwNSI6ImEiLCJcdTJD
NjUiOiJhIiwiXHUwMjUwIjoiYSIsIlx1QTczMyI6ImFhIiwiXHUwMEU2IjoiYT0KZSIsIlx1MDFG
RCI6ImFlIiwiXHUwMUUzIjoiYWUiLCJcdUE3MzUiOiJhbyIsIlx1QTczNyI6ImF1IiwiXHVBNzM5
IjoiYXYiLCJcPQp1QTczQiI6ImF2IiwiXHVBNzNEIjoiYXkiLCJcdTI0RDEiOiJiIiwiXHVGRjQy
IjoiYiIsIlx1MUUwMyI6ImIiLCJcdTFFMDUiOiI9CmIiLCJcdTFFMDciOiJiIiwiXHUwMTgwIjoi
YiIsIlx1MDE4MyI6ImIiLCJcdTAyNTMiOiJiIiwiXHUyNEQyIjoiYyIsIlx1RkY0Mz0KIjoiYyIs
Ilx1MDEwNyI6ImMiLCJcdTAxMDkiOiJjIiwiXHUwMTBCIjoiYyIsIlx1MDEwRCI6ImMiLCJcdTAw
RTciOiJjIiwiXHUxPQpFMDkiOiJjIiwiXHUwMTg4IjoiYyIsIlx1MDIzQyI6ImMiLCJcdUE3M0Yi
OiJjIiwiXHUyMTg0IjoiYyIsIlx1MjREMyI6ImQiLCI9Clx1RkY0NCI6ImQiLCJcdTFFMEIiOiJk
IiwiXHUwMTBGIjoiZCIsIlx1MUUwRCI6ImQiLCJcdTFFMTEiOiJkIiwiXHUxRTEzIjoiZD0KIiwi
XHUxRTBGIjoiZCIsIlx1MDExMSI6ImQiLCJcdTAxOEMiOiJkIiwiXHUwMjU2IjoiZCIsIlx1MDI1
NyI6ImQiLCJcdUE3N0EiPQo6ImQiLCJcdTAxRjMiOiJkeiIsIlx1MDFDNiI6ImR6IiwiXHUyNEQ0
IjoiZSIsIlx1RkY0NSI6ImUiLCJcdTAwRTgiOiJlIiwiXHU9CjAwRTkiOiJlIiwiXHUwMEVBIjoi
ZSIsIlx1MUVDMSI6ImUiLCJcdTFFQkYiOiJlIiwiXHUxRUM1IjoiZSIsIlx1MUVDMyI6ImUiLD0K
Ilx1MUVCRCI6ImUiLCJcdTAxMTMiOiJlIiwiXHUxRTE1IjoiZSIsIlx1MUUxNyI6ImUiLCJcdTAx
MTUiOiJlIiwiXHUwMTE3IjoiPQplIiwiXHUwMEVCIjoiZSIsIlx1MUVCQiI6ImUiLCJcdTAxMUIi
OiJlIiwiXHUwMjA1IjoiZSIsIlx1MDIwNyI6ImUiLCJcdTFFQjk9CiI6ImUiLCJcdTFFQzciOiJl
IiwiXHUwMjI5IjoiZSIsIlx1MUUxRCI6ImUiLCJcdTAxMTkiOiJlIiwiXHUxRTE5IjoiZSIsIlx1
MT0KRTFCIjoiZSIsIlx1MDI0NyI6ImUiLCJcdTAyNUIiOiJlIiwiXHUwMUREIjoiZSIsIlx1MjRE
NSI6ImYiLCJcdUZGNDYiOiJmIiwiPQpcdTFFMUYiOiJmIiwiXHUwMTkyIjoiZiIsIlx1QTc3QyI6
ImYiLCJcdTI0RDYiOiJnIiwiXHVGRjQ3IjoiZyIsIlx1MDFGNSI6Imc9CiIsIlx1MDExRCI6Imci
LCJcdTFFMjEiOiJnIiwiXHUwMTFGIjoiZyIsIlx1MDEyMSI6ImciLCJcdTAxRTciOiJnIiwiXHUw
MTIzIj0KOiJnIiwiXHUwMUU1IjoiZyIsIlx1MDI2MCI6ImciLCJcdUE3QTEiOiJnIiwiXHUxRDc5
IjoiZyIsIlx1QTc3RiI6ImciLCJcdTI0PQpENyI6ImgiLCJcdUZGNDgiOiJoIiwiXHUwMTI1Ijoi
aCIsIlx1MUUyMyI6ImgiLCJcdTFFMjciOiJoIiwiXHUwMjFGIjoiaCIsIlw9CnUxRTI1IjoiaCIs
Ilx1MUUyOSI6ImgiLCJcdTFFMkIiOiJoIiwiXHUxRTk2IjoiaCIsIlx1MDEyNyI6ImgiLCJcdTJD
NjgiOiJoIj0KLCJcdTJDNzYiOiJoIiwiXHUwMjY1IjoiaCIsIlx1MDE5NSI6Imh2IiwiXHUyNEQ4
IjoiaSIsIlx1RkY0OSI6ImkiLCJcdTAwRUMiPQo6ImkiLCJcdTAwRUQiOiJpIiwiXHUwMEVFIjoi
aSIsIlx1MDEyOSI6ImkiLCJcdTAxMkIiOiJpIiwiXHUwMTJEIjoiaSIsIlx1MDA9CkVGIjoiaSIs
Ilx1MUUyRiI6ImkiLCJcdTFFQzkiOiJpIiwiXHUwMUQwIjoiaSIsIlx1MDIwOSI6ImkiLCJcdTAy
MEIiOiJpIiwiXD0KdTFFQ0IiOiJpIiwiXHUwMTJGIjoiaSIsIlx1MUUyRCI6ImkiLCJcdTAyNjgi
OiJpIiwiXHUwMTMxIjoiaSIsIlx1MjREOSI6ImoiPQosIlx1RkY0QSI6ImoiLCJcdTAxMzUiOiJq
IiwiXHUwMUYwIjoiaiIsIlx1MDI0OSI6ImoiLCJcdTI0REEiOiJrIiwiXHVGRjRCIjo9CiJrIiwi
XHUxRTMxIjoiayIsIlx1MDFFOSI6ImsiLCJcdTFFMzMiOiJrIiwiXHUwMTM3IjoiayIsIlx1MUUz
NSI6ImsiLCJcdTAxOT0KOSI6ImsiLCJcdTJDNkEiOiJrIiwiXHVBNzQxIjoiayIsIlx1QTc0MyI6
ImsiLCJcdUE3NDUiOiJrIiwiXHVBN0EzIjoiayIsIlx1PQoyNERCIjoibCIsIlx1RkY0QyI6Imwi
LCJcdTAxNDAiOiJsIiwiXHUwMTNBIjoibCIsIlx1MDEzRSI6ImwiLCJcdTFFMzciOiJsIiw9CiJc
dTFFMzkiOiJsIiwiXHUwMTNDIjoibCIsIlx1MUUzRCI6ImwiLCJcdTFFM0IiOiJsIiwiXHUwMTdG
IjoibCIsIlx1MDE0MiI6Ij0KbCIsIlx1MDE5QSI6ImwiLCJcdTAyNkIiOiJsIiwiXHUyQzYxIjoi
bCIsIlx1QTc0OSI6ImwiLCJcdUE3ODEiOiJsIiwiXHVBNzQ3PQoiOiJsIiwiXHUwMUM5IjoibGoi
LCJcdTI0REMiOiJtIiwiXHVGRjREIjoibSIsIlx1MUUzRiI6Im0iLCJcdTFFNDEiOiJtIiwiXHU9
CjFFNDMiOiJtIiwiXHUwMjcxIjoibSIsIlx1MDI2RiI6Im0iLCJcdTI0REQiOiJuIiwiXHVGRjRF
IjoibiIsIlx1MDFGOSI6Im4iLD0KIlx1MDE0NCI6Im4iLCJcdTAwRjEiOiJuIiwiXHUxRTQ1Ijoi
biIsIlx1MDE0OCI6Im4iLCJcdTFFNDciOiJuIiwiXHUwMTQ2IjoiPQpuIiwiXHUxRTRCIjoibiIs
Ilx1MUU0OSI6Im4iLCJcdTAxOUUiOiJuIiwiXHUwMjcyIjoibiIsIlx1MDE0OSI6Im4iLCJcdUE3
OTE9CiI6Im4iLCJcdUE3QTUiOiJuIiwiXHUwMUNDIjoibmoiLCJcdTI0REUiOiJvIiwiXHVGRjRG
IjoibyIsIlx1MDBGMiI6Im8iLCJcdT0KMDBGMyI6Im8iLCJcdTAwRjQiOiJvIiwiXHUxRUQzIjoi
byIsIlx1MUVEMSI6Im8iLCJcdTFFRDciOiJvIiwiXHUxRUQ1IjoibyIsPQoiXHUwMEY1IjoibyIs
Ilx1MUU0RCI6Im8iLCJcdTAyMkQiOiJvIiwiXHUxRTRGIjoibyIsIlx1MDE0RCI6Im8iLCJcdTFF
NTEiOiI9Cm8iLCJcdTFFNTMiOiJvIiwiXHUwMTRGIjoibyIsIlx1MDIyRiI6Im8iLCJcdTAyMzEi
OiJvIiwiXHUwMEY2IjoibyIsIlx1MDIyQj0KIjoibyIsIlx1MUVDRiI6Im8iLCJcdTAxNTEiOiJv
IiwiXHUwMUQyIjoibyIsIlx1MDIwRCI6Im8iLCJcdTAyMEYiOiJvIiwiXHUwPQoxQTEiOiJvIiwi
XHUxRUREIjoibyIsIlx1MUVEQiI6Im8iLCJcdTFFRTEiOiJvIiwiXHUxRURGIjoibyIsIlx1MUVF
MyI6Im8iLCI9Clx1MUVDRCI6Im8iLCJcdTFFRDkiOiJvIiwiXHUwMUVCIjoibyIsIlx1MDFFRCI6
Im8iLCJcdTAwRjgiOiJvIiwiXHUwMUZGIjoibz0KIiwiXHUwMjU0IjoibyIsIlx1QTc0QiI6Im8i
LCJcdUE3NEQiOiJvIiwiXHUwMjc1IjoibyIsIlx1MDFBMyI6Im9pIiwiXHUwMjIzPQoiOiJvdSIs
Ilx1QTc0RiI6Im9vIiwiXHUyNERGIjoicCIsIlx1RkY1MCI6InAiLCJcdTFFNTUiOiJwIiwiXHUx
RTU3IjoicCIsIlw9CnUwMUE1IjoicCIsIlx1MUQ3RCI6InAiLCJcdUE3NTEiOiJwIiwiXHVBNzUz
IjoicCIsIlx1QTc1NSI6InAiLCJcdTI0RTAiOiJxIj0KLCJcdUZGNTEiOiJxIiwiXHUwMjRCIjoi
cSIsIlx1QTc1NyI6InEiLCJcdUE3NTkiOiJxIiwiXHUyNEUxIjoiciIsIlx1RkY1MiI6PQoiciIs
Ilx1MDE1NSI6InIiLCJcdTFFNTkiOiJyIiwiXHUwMTU5IjoiciIsIlx1MDIxMSI6InIiLCJcdTAy
MTMiOiJyIiwiXHUxRTU9CkIiOiJyIiwiXHUxRTVEIjoiciIsIlx1MDE1NyI6InIiLCJcdTFFNUYi
OiJyIiwiXHUwMjREIjoiciIsIlx1MDI3RCI6InIiLCJcdT0KQTc1QiI6InIiLCJcdUE3QTciOiJy
IiwiXHVBNzgzIjoiciIsIlx1MjRFMiI6InMiLCJcdUZGNTMiOiJzIiwiXHUwMERGIjoicyIsPQoi
XHUwMTVCIjoicyIsIlx1MUU2NSI6InMiLCJcdTAxNUQiOiJzIiwiXHUxRTYxIjoicyIsIlx1MDE2
MSI6InMiLCJcdTFFNjciOiI9CnMiLCJcdTFFNjMiOiJzIiwiXHUxRTY5IjoicyIsIlx1MDIxOSI6
InMiLCJcdTAxNUYiOiJzIiwiXHUwMjNGIjoicyIsIlx1QTdBOT0KIjoicyIsIlx1QTc4NSI6InMi
LCJcdTFFOUIiOiJzIiwiXHUyNEUzIjoidCIsIlx1RkY1NCI6InQiLCJcdTFFNkIiOiJ0IiwiXHUx
PQpFOTciOiJ0IiwiXHUwMTY1IjoidCIsIlx1MUU2RCI6InQiLCJcdTAyMUIiOiJ0IiwiXHUwMTYz
IjoidCIsIlx1MUU3MSI6InQiLCI9Clx1MUU2RiI6InQiLCJcdTAxNjciOiJ0IiwiXHUwMUFEIjoi
dCIsIlx1MDI4OCI6InQiLCJcdTJDNjYiOiJ0IiwiXHVBNzg3IjoidD0KIiwiXHVBNzI5IjoidHoi
LCJcdTI0RTQiOiJ1IiwiXHVGRjU1IjoidSIsIlx1MDBGOSI6InUiLCJcdTAwRkEiOiJ1IiwiXHUw
MEZCPQoiOiJ1IiwiXHUwMTY5IjoidSIsIlx1MUU3OSI6InUiLCJcdTAxNkIiOiJ1IiwiXHUxRTdC
IjoidSIsIlx1MDE2RCI6InUiLCJcdTA9CjBGQyI6InUiLCJcdTAxREMiOiJ1IiwiXHUwMUQ4Ijoi
dSIsIlx1MDFENiI6InUiLCJcdTAxREEiOiJ1IiwiXHUxRUU3IjoidSIsIj0KXHUwMTZGIjoidSIs
Ilx1MDE3MSI6InUiLCJcdTAxRDQiOiJ1IiwiXHUwMjE1IjoidSIsIlx1MDIxNyI6InUiLCJcdTAx
QjAiOiJ1PQoiLCJcdTFFRUIiOiJ1IiwiXHUxRUU5IjoidSIsIlx1MUVFRiI6InUiLCJcdTFFRUQi
OiJ1IiwiXHUxRUYxIjoidSIsIlx1MUVFNSI9CjoidSIsIlx1MUU3MyI6InUiLCJcdTAxNzMiOiJ1
IiwiXHUxRTc3IjoidSIsIlx1MUU3NSI6InUiLCJcdTAyODkiOiJ1IiwiXHUyND0KRTUiOiJ2Iiwi
XHVGRjU2IjoidiIsIlx1MUU3RCI6InYiLCJcdTFFN0YiOiJ2IiwiXHUwMjhCIjoidiIsIlx1QTc1
RiI6InYiLCJcPQp1MDI4QyI6InYiLCJcdUE3NjEiOiJ2eSIsIlx1MjRFNiI6InciLCJcdUZGNTci
OiJ3IiwiXHUxRTgxIjoidyIsIlx1MUU4MyI6Inc9CiIsIlx1MDE3NSI6InciLCJcdTFFODciOiJ3
IiwiXHUxRTg1IjoidyIsIlx1MUU5OCI6InciLCJcdTFFODkiOiJ3IiwiXHUyQzczIj0KOiJ3Iiwi
XHUyNEU3IjoieCIsIlx1RkY1OCI6IngiLCJcdTFFOEIiOiJ4IiwiXHUxRThEIjoieCIsIlx1MjRF
OCI6InkiLCJcdUZGPQo1OSI6InkiLCJcdTFFRjMiOiJ5IiwiXHUwMEZEIjoieSIsIlx1MDE3NyI6
InkiLCJcdTFFRjkiOiJ5IiwiXHUwMjMzIjoieSIsIlw9CnUxRThGIjoieSIsIlx1MDBGRiI6Inki
LCJcdTFFRjciOiJ5IiwiXHUxRTk5IjoieSIsIlx1MUVGNSI6InkiLCJcdTAxQjQiOiJ5Ij0KLCJc
dTAyNEYiOiJ5IiwiXHUxRUZGIjoieSIsIlx1MjRFOSI6InoiLCJcdUZGNUEiOiJ6IiwiXHUwMTdB
IjoieiIsIlx1MUU5MSI6PQoieiIsIlx1MDE3QyI6InoiLCJcdTAxN0UiOiJ6IiwiXHUxRTkzIjoi
eiIsIlx1MUU5NSI6InoiLCJcdTAxQjYiOiJ6IiwiXHUwMjI9CjUiOiJ6IiwiXHUwMjQwIjoieiIs
Ilx1MkM2QyI6InoiLCJcdUE3NjMiOiJ6IiwiXHUwMzg2IjoiXHUwMzkxIiwiXHUwMzg4IjoiXD0K
dTAzOTUiLCJcdTAzODkiOiJcdTAzOTciLCJcdTAzOEEiOiJcdTAzOTkiLCJcdTAzQUEiOiJcdTAz
OTkiLCJcdTAzOEMiOiJcdTAzPQo5RiIsIlx1MDM4RSI6Ilx1MDNBNSIsIlx1MDNBQiI6Ilx1MDNB
NSIsIlx1MDM4RiI6Ilx1MDNBOSIsIlx1MDNBQyI6Ilx1MDNCMSI9CiwiXHUwM0FEIjoiXHUwM0I1
IiwiXHUwM0FFIjoiXHUwM0I3IiwiXHUwM0FGIjoiXHUwM0I5IiwiXHUwM0NBIjoiXHUwM0I5Iiwi
XD0KdTAzOTAiOiJcdTAzQjkiLCJcdTAzQ0MiOiJcdTAzQkYiLCJcdTAzQ0QiOiJcdTAzQzUiLCJc
dTAzQ0IiOiJcdTAzQzUiLCJcdTAzPQpCMCI6Ilx1MDNDNSIsIlx1MDNDOSI6Ilx1MDNDOSIsIlx1
MDNDMiI6Ilx1MDNDMyJ9Owo9MjAKICAgICAkZG9jdW1lbnQgPTNEICQoZG9jdW1lbnQpOwo9MjAK
ICAgICBuZXh0VWlkPTNEKGZ1bmN0aW9uKCkgeyB2YXIgY291bnRlcj0zRDE7IHJldHVybiBmdW5j
dGlvbigpIHsgcmV0dXJuIGNvPQp1bnRlcisrOyB9OyB9KCkpOwo9MjAKPTIwCisgICAgZnVuY3Rp
b24gcmVpbnNlcnRFbGVtZW50KGVsZW1lbnQpIHsKKyAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0z
RCAkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7CisKKyAgICAgICAgZWxlbWVudC5iZWZv
cmUocGxhY2Vob2xkZXIpOworICAgICAgICBwbGFjZWhvbGRlci5iZWZvcmUoZWxlbWVudCk7Cisg
ICAgICAgIHBsYWNlaG9sZGVyLnJlbW92ZSgpOworICAgIH0KKwogICAgIGZ1bmN0aW9uIHN0cmlw
RGlhY3JpdGljcyhzdHIpIHsKLSAgICAgICAgdmFyIHJldCwgaSwgbCwgYzsKLQotICAgICAgICBp
ZiAoIXN0ciB8fCBzdHIubGVuZ3RoIDwgMSkgcmV0dXJuIHN0cjsKLQotICAgICAgICByZXQgPTNE
ICIiOwotICAgICAgICBmb3IgKGkgPTNEIDAsIGwgPTNEIHN0ci5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKLSAgICAgICAgICAgIGMgPTNEIHN0ci5jaGFyQXQoaSk7Ci0gICAgICAgICAgICByZXQgKz0z
RCBESUFDUklUSUNTW2NdIHx8IGM7CisgICAgICAgIC8vIFVzZWQgJ3VuaSByYW5nZSArIG5hbWVk
IGZ1bmN0aW9uJyBmcm9tIGh0dHA6Ly9qc3BlcmYuY29tL2RpYWNyaT0KdGljcy8xOAorICAgICAg
ICBmdW5jdGlvbiBtYXRjaChhKSB7CisgICAgICAgICAgICByZXR1cm4gRElBQ1JJVElDU1thXSB8
fCBhOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgcmV0dXJuIHN0
ci5yZXBsYWNlKC9bXlx1MDAwMC1cdTAwN0VdL2csIG1hdGNoKTsKICAgICB9Cj0yMAogICAgIGZ1
bmN0aW9uIGluZGV4T2YodmFsdWUsIGFycmF5KSB7CkBAIC0xODksMTAgKzE5Myw2IEBACiAgICAg
ICAgIH0pOwogICAgIH0KPTIwCi0gICAgJGRvY3VtZW50Lm9uKCJtb3VzZW1vdmUiLCBmdW5jdGlv
biAoZSkgewotICAgICAgICBsYXN0TW91c2VQb3NpdGlvbi54ID0zRCBlLnBhZ2VYOwotICAgICAg
ICBsYXN0TW91c2VQb3NpdGlvbi55ID0zRCBlLnBhZ2VZOwotICAgIH0pOwo9MjAKICAgICAvKioK
ICAgICAgKiBmaWx0ZXJzIG1vdXNlIGV2ZW50cyBzbyBhbiBldmVudCBpcyBmaXJlZCBvbmx5IGlm
IHRoZSBtb3VzZSBtb3ZlZC4KQEAgLTIzMCwyMCArMjMwLDYgQEAKICAgICAgICAgfTsKICAgICB9
Cj0yMAotICAgIC8qKgotICAgICAqIEEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIGEgdGh1bmsK
LSAgICAgKiBAcGFyYW0gZm9ybXVsYSBmdW5jdGlvbiB1c2VkIHRvIGxhemlseSBpbml0aWFsaXpl
IHRoZSB0aHVuawotICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufQotICAgICAqLwotICAgIGZ1bmN0
aW9uIHRodW5rKGZvcm11bGEpIHsKLSAgICAgICAgdmFyIGV2YWx1YXRlZCA9M0QgZmFsc2UsCi0g
ICAgICAgICAgICB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgaWYgKGV2YWx1YXRlZCA9M0Q9M0Q9M0QgZmFsc2UpIHsgdmFsdWUgPTNEIGZvcm11bGEoKTsg
ZXZhbHVhdGU9CmQgPTNEIHRydWU7IH0KLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAg
ICAgfTsKLSAgICB9OwotCiAgICAgZnVuY3Rpb24gaW5zdGFsbERlYm91bmNlZFNjcm9sbCh0aHJl
c2hvbGQsIGVsZW1lbnQpIHsKICAgICAgICAgdmFyIG5vdGlmeSA9M0QgZGVib3VuY2UodGhyZXNo
b2xkLCBmdW5jdGlvbiAoZSkgeyBlbGVtZW50LnRyaWdnZXIoPQoic2Nyb2xsLWRlYm91bmNlZCIs
IGUpO30pOwogICAgICAgICBlbGVtZW50Lm9uKCJzY3JvbGwiLCBmdW5jdGlvbiAoZSkgewpAQCAt
MjYzLDggKzI0OSw5IEBACiAgICAgICAgICAgICAkZWwuZm9jdXMoKTsKPTIwCiAgICAgICAgICAg
ICAvKiBtYWtlIHN1cmUgZWwgcmVjZWl2ZWQgZm9jdXMgc28gd2UgZG8gbm90IGVycm9yIG91dCB3
aGVuIHRyeT0KaW5nIHRvIG1hbmlwdWxhdGUgdGhlIGNhcmV0LgotICAgICAgICAgICAgICAgIHNv
bWV0aW1lcyBtb2RhbHMgb3Igb3RoZXJzIGxpc3RlbmVycyBtYXkgc3RlYWwgaXQgYWZ0ZXIgaXQ9
CidzIHNldCAqLwotICAgICAgICAgICAgaWYgKCRlbC5pcygiOnZpc2libGUiKSAmJiBlbCA9M0Q9
M0Q9M0QgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk9CiB7CisgICAgICAgICAgICAgICAgc29tZXRp
bWVzIG1vZGFscyBvciBvdGhlcnMgbGlzdGVuZXJzIG1heSBzdGVhbCBpdCBhZnRlciBpdD0KcyBz
ZXQgKi8KKyAgICAgICAgICAgIHZhciBpc1Zpc2libGUgPTNEIChlbC5vZmZzZXRXaWR0aCA+IDAg
fHwgZWwub2Zmc2V0SGVpZ2h0ID4gMCk7CisgICAgICAgICAgICBpZiAoaXNWaXNpYmxlICYmIGVs
ID0zRD0zRD0zRCBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7Cj0yMAogICAgICAgICAgICAgICAg
IC8qIGFmdGVyIHRoZSBmb2N1cyBpcyBzZXQgbW92ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCwgbmVj
ZXM9CnNhcnkgd2hlbiB3ZSB2YWwoKQogICAgICAgICAgICAgICAgICAgICBqdXN0IGJlZm9yZSBz
ZXR0aW5nIGZvY3VzICovCkBAIC0zMzMsMjcgKzMyMCwzNCBAQAogICAgIGZ1bmN0aW9uIHN5bmND
c3NDbGFzc2VzKGRlc3QsIHNyYywgYWRhcHRlcikgewogICAgICAgICB2YXIgY2xhc3NlcywgcmVw
bGFjZW1lbnRzID0zRCBbXSwgYWRhcHRlZDsKPTIwCi0gICAgICAgIGNsYXNzZXMgPTNEIGRlc3Qu
YXR0cigiY2xhc3MiKTsKKyAgICAgICAgY2xhc3NlcyA9M0QgJC50cmltKGRlc3QuYXR0cigiY2xh
c3MiKSk7CisKICAgICAgICAgaWYgKGNsYXNzZXMpIHsKICAgICAgICAgICAgIGNsYXNzZXMgPTNE
ICcnICsgY2xhc3NlczsgLy8gZm9yIElFIHdoaWNoIHJldHVybnMgb2JqZWN0Ci0gICAgICAgICAg
ICAkKGNsYXNzZXMuc3BsaXQoIiAiKSkuZWFjaDIoZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAg
ICQoY2xhc3Nlcy5zcGxpdCgvXHMrLykpLmVhY2gyKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmluZGV4T2YoInNlbGVjdDItIikgPTNEPTNEPTNEIDApIHsKICAgICAgICAg
ICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2godGhpcyk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAgICAgICAgY2xhc3NlcyA9M0Qgc3JjLmF0dHIo
ImNsYXNzIik7CisKKyAgICAgICAgY2xhc3NlcyA9M0QgJC50cmltKHNyYy5hdHRyKCJjbGFzcyIp
KTsKKwogICAgICAgICBpZiAoY2xhc3NlcykgewogICAgICAgICAgICAgY2xhc3NlcyA9M0QgJycg
KyBjbGFzc2VzOyAvLyBmb3IgSUUgd2hpY2ggcmV0dXJucyBvYmplY3QKLSAgICAgICAgICAgICQo
Y2xhc3Nlcy5zcGxpdCgiICIpKS5lYWNoMihmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgJChj
bGFzc2VzLnNwbGl0KC9ccysvKSkuZWFjaDIoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuaW5kZXhPZigic2VsZWN0Mi0iKSAhPTNEPTNEIDApIHsKICAgICAgICAgICAgICAg
ICAgICAgYWRhcHRlZCA9M0QgYWRhcHRlcih0aGlzKTsKKwogICAgICAgICAgICAgICAgICAgICBp
ZiAoYWRhcHRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2go
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaChhZGFwdGVk
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CisKICAgICAgICAgZGVzdC5hdHRyKCJjbGFzcyIsIHJlcGxhY2VtZW50
cy5qb2luKCIgIikpOwogICAgIH0KPTIwCkBAIC0zOTMsMTQgKzM4NywxNCBAQAogICAgIC8qKgog
ICAgICAqIFByb2R1Y2VzIGFuIGFqYXgtYmFzZWQgcXVlcnkgZnVuY3Rpb24KICAgICAgKgotICAg
ICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW10
ZXJzCisgICAgICogQHBhcmFtIG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlv
biBwYXJhbWV0ZXJzCiAgICAgICogQHBhcmFtIG9wdGlvbnMucGFyYW1zIHBhcmFtZXRlciBtYXAg
Zm9yIHRoZSB0cmFuc3BvcnQgYWpheCBjYWxsLCBjYT0KbiBjb250YWluIHN1Y2ggb3B0aW9ucyBh
cyBjYWNoZSwganNvbnBDYWxsYmFjaywgZXRjLiBzZWUgJC5hamF4CiAgICAgICogQHBhcmFtIG9w
dGlvbnMudHJhbnNwb3J0IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhl
ID0KYWpheCByZXF1ZXN0LiBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBwYXJhbWV0ZXJzIHN1cHBv
cnRlZCBieSAkLmFqYXgKICAgICAgKiBAcGFyYW0gb3B0aW9ucy51cmwgdXJsIGZvciB0aGUgZGF0
YQogICAgICAqIEBwYXJhbSBvcHRpb25zLmRhdGEgYSBmdW5jdGlvbihzZWFyY2hUZXJtLCBwYWdl
TnVtYmVyLCBjb250ZXh0KSB0aGE9CnQgc2hvdWxkIHJldHVybiBhbiBvYmplY3QgY29udGFpbmlu
ZyBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBmb3IgdGhlIGFib3ZlID0KdXJsLgotICAgICAqIEBw
YXJhbSBvcHRpb25zLmRhdGFUeXBlIHJlcXVlc3QgZGF0YSB0eXBlOiBhamF4LCBqc29ucCwgb3Ro
ZXIgZGF0YXQ9CmF0eXBlcyBzdXBwb3J0ZWQgYnkgalF1ZXJ5J3MgJC5hamF4IGZ1bmN0aW9uIG9y
IHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24gaWYgcz0KcGVjaWZpZWQKKyAgICAgKiBAcGFyYW0gb3B0
aW9ucy5kYXRhVHlwZSByZXF1ZXN0IGRhdGEgdHlwZTogYWpheCwganNvbnAsIG90aGVyIGRhdGF0
PQp5cGVzIHN1cHBvcnRlZCBieSBqUXVlcnkncyAkLmFqYXggZnVuY3Rpb24gb3IgdGhlIHRyYW5z
cG9ydCBmdW5jdGlvbiBpZiBzcGU9CmNpZmllZAogICAgICAqIEBwYXJhbSBvcHRpb25zLnF1aWV0
TWlsbGlzIChvcHRpb25hbCkgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIG09CmFraW5nIHRo
ZSBhamF4UmVxdWVzdCwgaGVscHMgZGVib3VuY2UgdGhlIGFqYXggZnVuY3Rpb24gaWYgaW52b2tl
ZCB0b28gb2Z0ZW4KLSAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZXN1bHRzIGEgZnVuY3Rpb24ocmVt
b3RlRGF0YSwgcGFnZU51bWJlcikgdGhhdCBjb252PQplcnRzIGRhdGEgcmV0dXJuZWQgZm9ybSB0
aGUgcmVtb3RlIHJlcXVlc3QgdG8gdGhlIGZvcm1hdCBleHBlY3RlZCBieSBTZWxlY3Q9CjIuCisg
ICAgICogQHBhcmFtIG9wdGlvbnMucmVzdWx0cyBhIGZ1bmN0aW9uKHJlbW90ZURhdGEsIHBhZ2VO
dW1iZXIsIHF1ZXJ5KSB0aD0KYXQgY29udmVydHMgZGF0YSByZXR1cm5lZCBmb3JtIHRoZSByZW1v
dGUgcmVxdWVzdCB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5PQogU2VsZWN0Mi4KICAgICAgKiAg
ICAgIFRoZSBleHBlY3RlZCBmb3JtYXQgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxv
d2luZyBrZXlzOgogICAgICAqICAgICAgcmVzdWx0cyBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2ls
bCBiZSB1c2VkIGFzIGNob2ljZXMKICAgICAgKiAgICAgIG1vcmUgKG9wdGlvbmFsKSBib29sZWFu
IGluZGljYXRpbmcgd2hldGhlciB0aGVyZSBhcmUgbW9yZSByZXN1PQpsdHMgYXZhaWxhYmxlCkBA
IC00MzEsNyArNDI1LDcgQEAKICAgICAgICAgICAgICAgICBkYXRhID0zRCBkYXRhID8gZGF0YS5j
YWxsKHNlbGYsIHF1ZXJ5LnRlcm0sIHF1ZXJ5LnBhZ2UsIHF1PQplcnkuY29udGV4dCkgOiBudWxs
OwogICAgICAgICAgICAgICAgIHVybCA9M0QgKHR5cGVvZiB1cmwgPTNEPTNEPTNEICdmdW5jdGlv
bicpID8gdXJsLmNhbGwoc2VsZiw9CiBxdWVyeS50ZXJtLCBxdWVyeS5wYWdlLCBxdWVyeS5jb250
ZXh0KSA6IHVybDsKPTIwCi0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHsgaGFuZGxlci5h
Ym9ydCgpOyB9CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIgJiYgdHlwZW9mIGhhbmRsZXIu
YWJvcnQgPTNEPTNEPTNEICJmdW5jdGlvbiIpID0KeyBoYW5kbGVyLmFib3J0KCk7IH0KPTIwCiAg
ICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmICgkLmlzRnVuY3Rpb24ob3B0aW9ucy5wYXJhbXMpKSB7CkBAIC00NDcsNyArNDQxLDE4IEBA
CiAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgIHN1
Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RP
IC0gcmVwbGFjZSBxdWVyeS5wYWdlIHdpdGggcXVlcnkgc28gdXNlcnMgaD0KYXZlIGFjY2VzcyB0
byB0ZXJtLCBwYWdlLCBldGMuCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9
M0Qgb3B0aW9ucy5yZXN1bHRzKGRhdGEsIHF1ZXJ5LnBhZ2UpOworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYWRkZWQgcXVlcnkgYXMgdGhpcmQgcGFyYW10ZXIgdG8ga2VlcCBiYWNrd2FyZHM9
CiBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9M0Qg
b3B0aW9ucy5yZXN1bHRzKGRhdGEsIHF1ZXJ5LnBhZ2UsID0KcXVlcnkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcXVlcnkuY2FsbGJhY2socmVzdWx0cyk7CisgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1
cywgZXJyb3JUaHJvd24peworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPTNE
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcjogdHJ1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqcVhIUjoganFYSFIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dFN0YXR1czogdGV4dFN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvclRocm93bjogZXJyb3JUaHJvd24sCisgICAgICAgICAgICAgICAgICAgICAgICB9Owor
CiAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5jYWxsYmFjayhyZXN1bHRzKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwpAQCAtNDY0LDcgKzQ2OSw3IEBA
CiAgICAgICoKICAgICAgKiBJZiB0aGUgYXJyYXkgZm9ybSBpcyB1c2VkIGl0IGlzIGFzc3VtZWQg
dGhhdCBpdCBjb250YWlucyBvYmplY3RzIHdpPQp0aCAnaWQnIGFuZCAndGV4dCcga2V5cy4KICAg
ICAgKgotICAgICAqIElmIHRoZSBvYmplY3QgZm9ybSBpcyB1c2VkIHRpIGlzIGFzc3VtZWQgdGhh
dCBpdCBjb250YWlucyAnZGF0YScgYW49CmQgJ3RleHQnIGtleXMuIFRoZSAnZGF0YScga2V5IHNo
b3VsZCBjb250YWluCisgICAgICogSWYgdGhlIG9iamVjdCBmb3JtIGlzIHVzZWQgaXQgaXMgYXNz
dW1lZCB0aGF0IGl0IGNvbnRhaW5zICdkYXRhJyBhbj0KZCAndGV4dCcga2V5cy4gVGhlICdkYXRh
JyBrZXkgc2hvdWxkIGNvbnRhaW4KICAgICAgKiBhbiBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2ls
bCBiZSB1c2VkIGFzIGNob2ljZXMuIFRoZXNlIG9iamVjdHMgbXVzPQp0IGNvbnRhaW4gYXQgbGVh
c3QgYW4gJ2lkJyBrZXkuIFRoZSAndGV4dCcKICAgICAgKiBrZXkgY2FuIGVpdGhlciBiZSBhIFN0
cmluZyBpbiB3aGljaCBjYXNlIGl0IGlzIGV4cGVjdGVkIHRoYXQgZWFjaCBlPQpsZW1lbnQgaW4g
dGhlICdkYXRhJyBhcnJheSBoYXMgYSBrZXkgd2l0aCB0aGUKICAgICAgKiB2YWx1ZSBvZiAndGV4
dCcgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1hdGNoIGNob2ljZXMuIEFsdGVybmF0aXZlbHksPQog
dGV4dCBjYW4gYmUgYSBmdW5jdGlvbihpdGVtKSB0aGF0IGNhbiBleHRyYWN0CkBAIC01MzMsMTQg
KzUzOCwxNyBAQAogICAgICAgICB2YXIgaXNGdW5jID0zRCAkLmlzRnVuY3Rpb24oZGF0YSk7CiAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiAocXVlcnkpIHsKICAgICAgICAgICAgIHZhciB0ID0zRCBx
dWVyeS50ZXJtLCBmaWx0ZXJlZCA9M0Qge3Jlc3VsdHM6IFtdfTsKLSAgICAgICAgICAgICQoaXNG
dW5jID8gZGF0YSgpIDogZGF0YSkuZWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGlzT2JqZWN0ID0zRCB0aGlzLnRleHQgIT0zRD0zRCB1bmRlZmluZWQsCi0gICAgICAgICAg
ICAgICAgICAgIHRleHQgPTNEIGlzT2JqZWN0ID8gdGhpcy50ZXh0IDogdGhpczsKLSAgICAgICAg
ICAgICAgICBpZiAodCA9M0Q9M0Q9M0QgIiIgfHwgcXVlcnkubWF0Y2hlcih0LCB0ZXh0KSkgewot
ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5yZXN1bHRzLnB1c2goaXNPYmplY3QgPyB0aGlz
IDoge2lkOiB0aGlzLCB0ZXg9CnQ6IHRoaXN9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIHF1ZXJ5LmNhbGxiYWNrKGZpbHRlcmVkKTsKKyAgICAgICAg
ICAgIHZhciByZXN1bHQgPTNEIGlzRnVuYyA/IGRhdGEocXVlcnkpIDogZGF0YTsKKyAgICAgICAg
ICAgIGlmICgkLmlzQXJyYXkocmVzdWx0KSkgeworICAgICAgICAgICAgICAgICQocmVzdWx0KS5l
YWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0zRCB0
aGlzLnRleHQgIT0zRD0zRCB1bmRlZmluZWQsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
ID0zRCBpc09iamVjdCA/IHRoaXMudGV4dCA6IHRoaXM7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0ID0zRD0zRD0zRCAiIiB8fCBxdWVyeS5tYXRjaGVyKHQsIHRleHQpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmaWx0ZXJlZC5yZXN1bHRzLnB1c2goaXNPYmplY3QgPyB0aGlzIDoge2lk
OiB0aGlzLD0KIHRleHQ6IHRoaXN9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHF1ZXJ5LmNhbGxiYWNrKGZpbHRlcmVkKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICB9Cj0yMApAQCAtNTU1LDExICs1NjMsMjQgQEAK
ICAgICBmdW5jdGlvbiBjaGVja0Zvcm1hdHRlcihmb3JtYXR0ZXIsIGZvcm1hdHRlck5hbWUpIHsK
ICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihmb3JtYXR0ZXIpKSByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgaWYgKCFmb3JtYXR0ZXIpIHJldHVybiBmYWxzZTsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGZvcm1hdHRlck5hbWUgKyIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGEgZmFsc3kgdmFsPQp1ZSIp
OworICAgICAgICBpZiAodHlwZW9mKGZvcm1hdHRlcikgPTNEPTNEPTNEICdzdHJpbmcnKSByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdHRlck5hbWUgKyIgbXVzdCBi
ZSBhIHN0cmluZywgZnVuY3Rpb24sIG9yIGZhPQpsc3kgdmFsdWUiKTsKICAgICB9Cj0yMAotICAg
IGZ1bmN0aW9uIGV2YWx1YXRlKHZhbCkgewotICAgICAgICByZXR1cm4gJC5pc0Z1bmN0aW9uKHZh
bCkgPyB2YWwoKSA6IHZhbDsKKyAgLyoqCisgICAqIFJldHVybnMgYSBnaXZlbiB2YWx1ZQorICAg
KiBJZiBnaXZlbiBhIGZ1bmN0aW9uLCByZXR1cm5zIGl0cyBvdXRwdXQKKyAgICoKKyAgICogQHBh
cmFtIHZhbCBzdHJpbmd8ZnVuY3Rpb24KKyAgICogQHBhcmFtIGNvbnRleHQgdmFsdWUgb2YgInRo
aXMiIHRvIGJlIHBhc3NlZCB0byBmdW5jdGlvbgorICAgKiBAcmV0dXJucyB7Kn0KKyAgICovCisg
ICAgZnVuY3Rpb24gZXZhbHVhdGUodmFsLCBjb250ZXh0KSB7CisgICAgICAgIGlmICgkLmlzRnVu
Y3Rpb24odmFsKSkgeworICAgICAgICAgICAgdmFyIGFyZ3MgPTNEIEFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKGFyZ3VtZW50cywgMik7CisgICAgICAgICAgICByZXR1cm4gdmFsLmFwcGx5KGNv
bnRleHQsIGFyZ3MpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWw7CiAgICAgfQo9MjAK
ICAgICBmdW5jdGlvbiBjb3VudFJlc3VsdHMocmVzdWx0cykgewpAQCAtNjI3LDYgKzY0OCwxNSBA
QAogICAgICAgICBpZiAob3JpZ2luYWwhPTNEPTNEaW5wdXQpIHJldHVybiBpbnB1dDsKICAgICB9
Cj0yMAorICAgIGZ1bmN0aW9uIGNsZWFudXBKUXVlcnlFbGVtZW50cygpIHsKKyAgICAgICAgdmFy
IHNlbGYgPTNEIHRoaXM7CisKKyAgICAgICAgJC5lYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKGks
IGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHNlbGZbZWxlbWVudF0ucmVtb3ZlKCk7CisgICAgICAg
ICAgICBzZWxmW2VsZW1lbnRdID0zRCBudWxsOworICAgICAgICB9KTsKKyAgICB9CisKICAgICAv
KioKICAgICAgKiBDcmVhdGVzIGEgbmV3IGNsYXNzCiAgICAgICoKQEAgLTY1NCw3ICs2ODQsNyBA
QAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICAgaW5pdDogZnVuY3Rpb24gKG9wdHMp
IHsKLSAgICAgICAgICAgIHZhciByZXN1bHRzLCBzZWFyY2gsIHJlc3VsdHNTZWxlY3RvciA9M0Qg
Ii5zZWxlY3QyLXJlc3VsdHMiLCBkPQppc2FibGVkLCByZWFkb25seTsKKyAgICAgICAgICAgIHZh
ciByZXN1bHRzLCBzZWFyY2gsIHJlc3VsdHNTZWxlY3RvciA9M0QgIi5zZWxlY3QyLXJlc3VsdHMi
Owo9MjAKICAgICAgICAgICAgIC8vIHByZXBhcmUgb3B0aW9ucwogICAgICAgICAgICAgdGhpcy5v
cHRzID0zRCBvcHRzID0zRCB0aGlzLnByZXBhcmVPcHRzKG9wdHMpOwpAQCAtNjY5LDE4ICs2OTks
MjggQEAKPTIwCiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9M0QgdGhpcy5jcmVhdGVDb250
YWluZXIoKTsKPTIwCisgICAgICAgICAgICB0aGlzLmxpdmVSZWdpb24gPTNEICQoIjxzcGFuPiIs
IHsKKyAgICAgICAgICAgICAgICAgICAgcm9sZTogInN0YXR1cyIsCisgICAgICAgICAgICAgICAg
ICAgICJhcmlhLWxpdmUiOiAicG9saXRlIgorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAg
ICAgICAgLmFkZENsYXNzKCJzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlIikKKyAgICAgICAgICAg
ICAgICAuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7CisKICAgICAgICAgICAgIHRoaXMuY29udGFp
bmVySWQ9M0QiczJpZF8iKyhvcHRzLmVsZW1lbnQuYXR0cigiaWQiKSB8fCAiYXV0b2dlPQpuIitu
ZXh0VWlkKCkpOwotICAgICAgICAgICAgdGhpcy5jb250YWluZXJTZWxlY3Rvcj0zRCIjIit0aGlz
LmNvbnRhaW5lcklkLnJlcGxhY2UoLyhbOyYsXC49ClwrXCpcfic6IlwhXF4jJCVAXFtcXVwoXCk9
M0Q+XHxdKS9nLCAnXFwkMScpOworICAgICAgICAgICAgdGhpcy5jb250YWluZXJFdmVudE5hbWU9
M0QgdGhpcy5jb250YWluZXJJZAorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oWy5dKS9nLCAn
XycpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyhbOyYsXC1cLlwrXCpcfic6IlwhXF4jJCVA
XFtcXVwoXCk9M0Q+XHxdKS9nLCAnXD0KXCQxJyk7CiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5l
ci5hdHRyKCJpZCIsIHRoaXMuY29udGFpbmVySWQpOwo9MjAKLSAgICAgICAgICAgIC8vIGNhY2hl
IHRoZSBib2R5IHNvIGZ1dHVyZSBsb29rdXBzIGFyZSBjaGVhcAotICAgICAgICAgICAgdGhpcy5i
b2R5ID0zRCB0aHVuayhmdW5jdGlvbigpIHsgcmV0dXJuIG9wdHMuZWxlbWVudC5jbG9zZXN0KCI9
CmJvZHkiKTsgfSk7CisgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hdHRyKCJ0aXRsZSIsIG9w
dHMuZWxlbWVudC5hdHRyKCJ0aXRsZSIpKTsKKworICAgICAgICAgICAgdGhpcy5ib2R5ID0zRCAk
KCJib2R5Iik7Cj0yMAogICAgICAgICAgICAgc3luY0Nzc0NsYXNzZXModGhpcy5jb250YWluZXIs
IHRoaXMub3B0cy5lbGVtZW50LCB0aGlzLm9wdHMuYWQ9CmFwdENvbnRhaW5lckNzc0NsYXNzKTsK
PTIwCiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hdHRyKCJzdHlsZSIsIG9wdHMuZWxlbWVu
dC5hdHRyKCJzdHlsZSIpKTsKLSAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNzcyhldmFsdWF0
ZShvcHRzLmNvbnRhaW5lckNzcykpOwotICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xh
c3MoZXZhbHVhdGUob3B0cy5jb250YWluZXJDc3NDbGFzcykpOworICAgICAgICAgICAgdGhpcy5j
b250YWluZXIuY3NzKGV2YWx1YXRlKG9wdHMuY29udGFpbmVyQ3NzLCB0aGlzLm9wdHMuZWxlbWU9
Cm50KSk7CisgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcyhldmFsdWF0ZShvcHRz
LmNvbnRhaW5lckNzc0NsYXNzLCB0aGlzLj0Kb3B0cy5lbGVtZW50KSk7Cj0yMAogICAgICAgICAg
ICAgdGhpcy5lbGVtZW50VGFiSW5kZXggPTNEIHRoaXMub3B0cy5lbGVtZW50LmF0dHIoInRhYmlu
ZGV4Iik7Cj0yMApAQCAtNjk3LDcgKzczNyw3IEBACj0yMAogICAgICAgICAgICAgc3luY0Nzc0Ns
YXNzZXModGhpcy5kcm9wZG93biwgdGhpcy5vcHRzLmVsZW1lbnQsIHRoaXMub3B0cy5hZGE9CnB0
RHJvcGRvd25Dc3NDbGFzcyk7Cj0yMAotICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5hZGRDbGFz
cyhldmFsdWF0ZShvcHRzLmRyb3Bkb3duQ3NzQ2xhc3MpKTsKKyAgICAgICAgICAgIHRoaXMuZHJv
cGRvd24uYWRkQ2xhc3MoZXZhbHVhdGUob3B0cy5kcm9wZG93bkNzc0NsYXNzLCB0aGlzLm9wPQp0
cy5lbGVtZW50KSk7CiAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmRhdGEoInNlbGVjdDIiLCB0
aGlzKTsKICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ub24oImNsaWNrIiwga2lsbEV2ZW50KTsK
PTIwCkBAIC03MTQsNyArNzU0LDIzIEBACiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5vbigi
Y2xpY2siLCBraWxsRXZlbnQpOwo9MjAKICAgICAgICAgICAgIGluc3RhbGxGaWx0ZXJlZE1vdXNl
TW92ZSh0aGlzLnJlc3VsdHMpOwotICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5vbigibW91c2Vt
b3ZlLWZpbHRlcmVkIHRvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWM9CmhlbmQiLCByZXN1bHRzU2Vs
ZWN0b3IsIHRoaXMuYmluZCh0aGlzLmhpZ2hsaWdodFVuZGVyRXZlbnQpKTsKKworICAgICAgICAg
ICAgdGhpcy5kcm9wZG93bi5vbigibW91c2Vtb3ZlLWZpbHRlcmVkIiwgcmVzdWx0c1NlbGVjdG9y
LCB0aGlzLmI9CmluZCh0aGlzLmhpZ2hsaWdodFVuZGVyRXZlbnQpKTsKKyAgICAgICAgICAgIHRo
aXMuZHJvcGRvd24ub24oInRvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIiwgcmVzdWx0c1Nl
bGVjPQp0b3IsIHRoaXMuYmluZChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl90b3VjaEV2ZW50ID0zRCB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0
VW5kZXJFdmVudChldmVudCk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICB0aGlzLmRy
b3Bkb3duLm9uKCJ0b3VjaG1vdmUiLCByZXN1bHRzU2VsZWN0b3IsIHRoaXMuYmluZCh0aGlzLj0K
dG91Y2hNb3ZlZCkpOworICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5vbigidG91Y2hzdGFydCB0
b3VjaGVuZCIsIHJlc3VsdHNTZWxlY3RvciwgdGhpcy49CmJpbmQodGhpcy5jbGVhclRvdWNoTW92
ZWQpKTsKKworICAgICAgICAgICAgLy8gV2FpdGluZyBmb3IgYSBjbGljayBldmVudCBvbiB0b3Vj
aCBkZXZpY2VzIHRvIHNlbGVjdCBvcHRpb249CiBhbmQgaGlkZSBkcm9wZG93bgorICAgICAgICAg
ICAgLy8gb3RoZXJ3aXNlIGNsaWNrIHdpbGwgYmUgdHJpZ2dlcmVkIG9uIGFuIHVuZGVybHlpbmcg
ZWxlbWVudAorICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5vbignY2xpY2snLCB0aGlzLmJpbmQo
ZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RvdWNoRXZlbnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG91Y2hFdmVudCA9M0QgZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SGlnaGxpZ2h0ZWQoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9KSk7Cj0yMAogICAgICAgICAgICAgaW5zdGFsbERlYm91bmNlZFNj
cm9sbCg4MCwgdGhpcy5yZXN1bHRzKTsKICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ub24oInNj
cm9sbC1kZWJvdW5jZWQiLCByZXN1bHRzU2VsZWN0b3IsIHRoaXMuYmluPQpkKHRoaXMubG9hZE1v
cmVJZk5lZWRlZCkpOwpAQCAtNzI2LDcgKzc4Miw3IEBACiAgICAgICAgICAgICAvLyBpZiBqcXVl
cnkubW91c2V3aGVlbCBwbHVnaW4gaXMgaW5zdGFsbGVkIHdlIGNhbiBwcmV2ZW50IG91dD0KLW9m
LWJvdW5kcyBzY3JvbGxpbmcgb2YgcmVzdWx0cyB2aWEgbW91c2V3aGVlbAogICAgICAgICAgICAg
aWYgKCQuZm4ubW91c2V3aGVlbCkgewogICAgICAgICAgICAgICAgIHJlc3VsdHMubW91c2V3aGVl
bChmdW5jdGlvbiAoZSwgZGVsdGEsIGRlbHRhWCwgZGVsdGFZKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciB0b3AgPTNEIHJlc3VsdHMuc2Nyb2xsVG9wKCksIGhlaWdodDsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHRvcCA9M0QgcmVzdWx0cy5zY3JvbGxUb3AoKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRlbHRhWSA+IDAgJiYgdG9wIC0gZGVsdGFZIDw9M0QgMCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0cy5zY3JvbGxUb3AoMCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBraWxsRXZlbnQoZSk7CkBAIC03NTIsNyArODA4LDEwIEBACiAgICAgICAgICAgICAvLyB0
cmFwIGFsbCBtb3VzZSBldmVudHMgZnJvbSBsZWF2aW5nIHRoZSBkcm9wZG93bi4gc29tZXRpbWVz
ID0KdGhlcmUgbWF5IGJlIGEgbW9kYWwgdGhhdCBpcyBsaXN0ZW5pbmcKICAgICAgICAgICAgIC8v
IGZvciBtb3VzZSBldmVudHMgb3V0c2lkZSBvZiBpdHNlbGYgc28gaXQgY2FuIGNsb3NlIGl0c2Vs
Zi4gPQpzaW5jZSB0aGUgZHJvcGRvd24gaXMgbm93IG91dHNpZGUgdGhlIHNlbGVjdDIncwogICAg
ICAgICAgICAgLy8gZG9tIGl0IHdpbGwgdHJpZ2dlciB0aGUgcG9wdXAgY2xvc2UsIHdoaWNoIGlz
IG5vdCB3aGF0IHdlIHc9CmFudAotICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5vbigiY2xpY2sg
bW91c2V1cCBtb3VzZWRvd24iLCBmdW5jdGlvbiAoZSkgeyBlLnM9CnRvcFByb3BhZ2F0aW9uKCk7
IH0pOworICAgICAgICAgICAgLy8gZm9jdXNpbiBjYW4gY2F1c2UgZm9jdXMgd2FycyBiZXR3ZWVu
IG1vZGFscyBhbmQgc2VsZWN0MiBzaW49CmNlIHRoZSBkcm9wZG93biBpcyBvdXRzaWRlIHRoZSBt
b2RhbC4KKyAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ub24oImNsaWNrIG1vdXNldXAgbW91c2Vk
b3duIHRvdWNoc3RhcnQgdG91Y2hlbmQgPQpmb2N1c2luIiwgZnVuY3Rpb24gKGUpIHsgZS5zdG9w
UHJvcGFnYXRpb24oKTsgfSk7CisKKyAgICAgICAgICAgIHRoaXMubmV4dFNlYXJjaFRlcm0gPTNE
IHVuZGVmaW5lZDsKPTIwCiAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRoaXMub3B0cy5p
bml0U2VsZWN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgc2VsZWN0aW9u
IGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSA9CnNvdXJjZSBlbGVtZW50CkBAIC03
ODIsMTkgKzg0MSwyOSBAQAogICAgICAgICAgICAgb3B0cy5lbGVtZW50LnByb3AoImF1dG9mb2N1
cyIsIGZhbHNlKTsKICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9mb2N1cykgdGhpcy5mb2N1cygp
Owo9MjAKLSAgICAgICAgICAgIHRoaXMubmV4dFNlYXJjaFRlcm0gPTNEIHVuZGVmaW5lZDsKKyAg
ICAgICAgICAgIHRoaXMuc2VhcmNoLmF0dHIoInBsYWNlaG9sZGVyIiwgb3B0cy5zZWFyY2hJbnB1
dFBsYWNlaG9sZGVyKTsKICAgICAgICAgfSwKPTIwCiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAg
ICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50PTNEdGhp
cy5vcHRzLmVsZW1lbnQsIHNlbGVjdDIgPTNEIGVsZW1lbnQuZGF0YSgic2VsPQplY3QyIik7Cisg
ICAgICAgICAgICB2YXIgZWxlbWVudD0zRHRoaXMub3B0cy5lbGVtZW50LCBzZWxlY3QyID0zRCBl
bGVtZW50LmRhdGEoInNlbD0KZWN0MiIpLCBzZWxmID0zRCB0aGlzOwo9MjAKICAgICAgICAgICAg
IHRoaXMuY2xvc2UoKTsKPTIwCi0gICAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eU9ic2VydmVy
KSB7IGRlbGV0ZSB0aGlzLnByb3BlcnR5T2JzZXJ2ZXI7IHRoaT0Kcy5wcm9wZXJ0eU9ic2VydmVy
ID0zRCBudWxsOyB9CisgICAgICAgICAgICBpZiAoZWxlbWVudC5sZW5ndGggJiYgZWxlbWVudFsw
XS5kZXRhY2hFdmVudCkgeworICAgICAgICAgICAgICAgIGVsZW1lbnQuZWFjaChmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFu
Z2UiLCBzZWxmLl9zeW5jKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5T2JzZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLnByb3BlcnR5T2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgIHRoaXMu
cHJvcGVydHlPYnNlcnZlciA9M0QgbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX3N5bmMgPTNEIG51bGw7Cj0yMAogICAgICAgICAgICAgaWYgKHNlbGVjdDIgIT0zRD0zRCB1
bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICBzZWxlY3QyLmNvbnRhaW5lci5yZW1vdmUoKTsK
KyAgICAgICAgICAgICAgICBzZWxlY3QyLmxpdmVSZWdpb24ucmVtb3ZlKCk7CiAgICAgICAgICAg
ICAgICAgc2VsZWN0Mi5kcm9wZG93bi5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICBlbGVtZW50
CiAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygic2VsZWN0Mi1vZmZzY3JlZW4iKQpA
QCAtODA4LDYgKzg3NywxNCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBl
bGVtZW50LnNob3coKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2xlYW51cEpRdWVy
eUVsZW1lbnRzLmNhbGwodGhpcywKKyAgICAgICAgICAgICAgICAiY29udGFpbmVyIiwKKyAgICAg
ICAgICAgICAgICAibGl2ZVJlZ2lvbiIsCisgICAgICAgICAgICAgICAgImRyb3Bkb3duIiwKKyAg
ICAgICAgICAgICAgICAicmVzdWx0cyIsCisgICAgICAgICAgICAgICAgInNlYXJjaCIKKyAgICAg
ICAgICAgICk7CiAgICAgICAgIH0sCj0yMAogICAgICAgICAvLyBhYnN0cmFjdApAQCAtODUyLDcg
KzkyOSw3IEBACj0yMAogICAgICAgICAgICAgb3B0cyA9M0QgJC5leHRlbmQoe30sIHsKICAgICAg
ICAgICAgICAgICBwb3B1bGF0ZVJlc3VsdHM6IGZ1bmN0aW9uKGNvbnRhaW5lciwgcmVzdWx0cywg
cXVlcnkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBvcHVsYXRlLCAgZGF0YSwgcmVzdWx0
LCBjaGlsZHJlbiwgaWQ9M0R0aGlzLm9wdHMuPQppZDsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHBvcHVsYXRlLCBpZD0zRHRoaXMub3B0cy5pZCwgbGl2ZVJlZ2lvbj0zRHRoaXMubGl2PQplUmVn
aW9uOwo9MjAKICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGU9M0RmdW5jdGlvbihyZXN1bHRz
LCBjb250YWluZXIsIGRlcHRoKSB7Cj0yMApAQCAtODYwLDYgKzkzNyw4IEBACj0yMAogICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9M0Qgb3B0cy5zb3J0UmVzdWx0cyhyZXN1bHRzLCBj
b250YWluZXIsIHE9CnVlcnkpOwo9MjAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxl
Y3QgdGhlIGNyZWF0ZWQgbm9kZXMgZm9yIGJ1bGsgYXBwZW5kCisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgbm9kZXMgPTNEIFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0z
RCAwLCBsID0zRCByZXN1bHRzLmxlbmd0aDsgaSA8IGw7IGkgPTNEIGk9CiArIDEpIHsKPTIwCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PTNEcmVzdWx0c1tpXTsKQEAgLTg3Niwx
NiArOTU1LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7
IG5vZGUuYWRkQ2xhc3MoInNlbGVjdDItZGlzYWJsZT0KZCIpOyB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvbXBvdW5kKSB7IG5vZGUuYWRkQ2xhc3MoInNlbGVjdDItcmVzdWx0
LT0Kd2l0aC1jaGlsZHJlbiIpOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5h
ZGRDbGFzcyhzZWxmLm9wdHMuZm9ybWF0UmVzdWx0Q3NzQ2xhc3Mocj0KZXN1bHQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIoInJvbGUiLCAicHJlc2VudGF0aW9uIik7
Cj0yMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPTNEJChkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwuYWRk
Q2xhc3MoInNlbGVjdDItcmVzdWx0LWxhYmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGFiZWwuYXR0cigiaWQiLCAic2VsZWN0Mi1yZXN1bHQtbGFiZWwtIiArIG5leD0KdFVpZCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5hdHRyKCJyb2xlIiwgIm9wdGlv
biIpOwo9MjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQ9M0RvcHRzLmZv
cm1hdFJlc3VsdChyZXN1bHQsIGxhYmVsLCBxPQp1ZXJ5LCBzZWxmLm9wdHMuZXNjYXBlTWFya3Vw
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVkIT0zRD0zRHVuZGVm
aW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5odG1sKGZvcm1h
dHRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kKGxhYmVs
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cj0yMAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUuYXBwZW5kKGxhYmVsKTsKPTIwCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbXBvdW5kKSB7Cj0yMApAQCAtODk2LDggKzk3OCwxMiBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KPTIwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS5kYXRhKCJzZWxlY3QyLWRhdGEiLCByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5lci5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZXMucHVzaChub2RlWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYnVsayBhcHBlbmQgdGhlIGNyZWF0ZWQgbm9kZXMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQobm9kZXMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZVJlZ2lvbi50ZXh0KG9wdHMuZm9ybWF0TWF0Y2hlcyhyZXN1bHRzLmxl
bmd0aCk9Cik7CiAgICAgICAgICAgICAgICAgICAgIH07Cj0yMAogICAgICAgICAgICAgICAgICAg
ICBwb3B1bGF0ZShyZXN1bHRzLCBjb250YWluZXIsIDApOwpAQCAtOTUxLDkgKzEwMzcsOCBAQAo9
MjAKICAgICAgICAgICAgICAgICAgICAgcXVlcnkuY2FsbGJhY2soZGF0YSk7CiAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBpbnNp
ZGUgdmFsKCkgd2UgY29uc3RydWN0IGNob2ljZT0KcyBmcm9tIG9wdGlvbnMgYW5kIHRoZXJlIGlk
IGlzIGhhcmRjb2RlZAorICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ug
aW5zaWRlIHZhbCgpIHdlIGNvbnN0cnVjdCBjaG9pY2U9CnMgZnJvbSBvcHRpb25zIGFuZCB0aGVp
ciBpZCBpcyBoYXJkY29kZWQKICAgICAgICAgICAgICAgICBvcHRzLmlkPTNEZnVuY3Rpb24oZSkg
eyByZXR1cm4gZS5pZDsgfTsKLSAgICAgICAgICAgICAgICBvcHRzLmZvcm1hdFJlc3VsdENzc0Ns
YXNzID0zRCBmdW5jdGlvbihkYXRhKSB7IHJldHVybiBkYXRhPQouY3NzOyB9OwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoISgicXVlcnkiIGluIG9wdHMpKSB7Cj0y
MApAQCAtOTkxLDYgKzEwNzYsMTYgQEAKICAgICAgICAgICAgICAgICB0aHJvdyAicXVlcnkgZnVu
Y3Rpb24gbm90IGRlZmluZWQgZm9yIFNlbGVjdDIgIiArIG9wdHMuZWxlPQptZW50LmF0dHIoImlk
Iik7CiAgICAgICAgICAgICB9Cj0yMAorICAgICAgICAgICAgaWYgKG9wdHMuY3JlYXRlU2VhcmNo
Q2hvaWNlUG9zaXRpb24gPTNEPTNEPTNEICd0b3AnKSB7CisgICAgICAgICAgICAgICAgb3B0cy5j
cmVhdGVTZWFyY2hDaG9pY2VQb3NpdGlvbiA9M0QgZnVuY3Rpb24obGlzdCwgaXRlbSkgez0KIGxp
c3QudW5zaGlmdChpdGVtKTsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KG9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlUG9zaXRpb24gPTNEPTNEPTNEICdib3R0b20nKSB7Cisg
ICAgICAgICAgICAgICAgb3B0cy5jcmVhdGVTZWFyY2hDaG9pY2VQb3NpdGlvbiA9M0QgZnVuY3Rp
b24obGlzdCwgaXRlbSkgez0KIGxpc3QucHVzaChpdGVtKTsgfTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZihvcHRzLmNyZWF0ZVNlYXJjaENob2ljZVBvc2l0aW9u
KSAhPTNEPTNEICJmdW5jPQp0aW9uIikgIHsKKyAgICAgICAgICAgICAgICB0aHJvdyAiaW52YWxp
ZCBjcmVhdGVTZWFyY2hDaG9pY2VQb3NpdGlvbiBvcHRpb24gbXVzdCBiZSAnPQp0b3AnLCAnYm90
dG9tJyBvciBhIGN1c3RvbSBmdW5jdGlvbiI7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IHJldHVybiBvcHRzOwogICAgICAgICB9LAo9MjAKQEAgLTk5OSw3ICsxMDk0LDcgQEAKICAgICAg
ICAgICovCiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIG1vbml0b3JTb3VyY2U6IGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBlbCA9M0QgdGhpcy5vcHRzLmVsZW1lbnQsIHN5bmM7
CisgICAgICAgICAgICB2YXIgZWwgPTNEIHRoaXMub3B0cy5lbGVtZW50LCBvYnNlcnZlciwgc2Vs
ZiA9M0QgdGhpczsKPTIwCiAgICAgICAgICAgICBlbC5vbigiY2hhbmdlLnNlbGVjdDIiLCB0aGlz
LmJpbmQoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRzLmVsZW1l
bnQuZGF0YSgic2VsZWN0Mi1jaGFuZ2UtdHJpZ2dlcmVkIikgIT0KPTNEPTNEIHRydWUpIHsKQEAg
LTEwMDcsOSArMTEwMiw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSkpOwo9
MjAKLSAgICAgICAgICAgIHN5bmMgPTNEIHRoaXMuYmluZChmdW5jdGlvbiAoKSB7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgZW5hYmxlZCwgcmVhZG9ubHksIHNlbGYgPTNEIHRoaXM7CisgICAgICAg
ICAgICB0aGlzLl9zeW5jID0zRCB0aGlzLmJpbmQoZnVuY3Rpb24gKCkgewo9MjAKICAgICAgICAg
ICAgICAgICAvLyBzeW5jIGVuYWJsZWQgc3RhdGUKICAgICAgICAgICAgICAgICB2YXIgZGlzYWJs
ZWQgPTNEIGVsLnByb3AoImRpc2FibGVkIik7CkBAIC0xMDIxLDM1ICsxMTE0LDM0IEBACiAgICAg
ICAgICAgICAgICAgdGhpcy5yZWFkb25seShyZWFkb25seSk7Cj0yMAogICAgICAgICAgICAgICAg
IHN5bmNDc3NDbGFzc2VzKHRoaXMuY29udGFpbmVyLCB0aGlzLm9wdHMuZWxlbWVudCwgdGhpcy5v
cHQ9CnMuYWRhcHRDb250YWluZXJDc3NDbGFzcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250
YWluZXIuYWRkQ2xhc3MoZXZhbHVhdGUodGhpcy5vcHRzLmNvbnRhaW5lckNzc0NsYT0Kc3MpKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcyhldmFsdWF0ZSh0aGlzLm9w
dHMuY29udGFpbmVyQ3NzQ2xhPQpzcywgdGhpcy5vcHRzLmVsZW1lbnQpKTsKPTIwCiAgICAgICAg
ICAgICAgICAgc3luY0Nzc0NsYXNzZXModGhpcy5kcm9wZG93biwgdGhpcy5vcHRzLmVsZW1lbnQs
IHRoaXMub3B0cz0KLmFkYXB0RHJvcGRvd25Dc3NDbGFzcyk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5kcm9wZG93bi5hZGRDbGFzcyhldmFsdWF0ZSh0aGlzLm9wdHMuZHJvcGRvd25Dc3NDbGFzcz0K
KSk7CisgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5hZGRDbGFzcyhldmFsdWF0ZSh0aGlz
Lm9wdHMuZHJvcGRvd25Dc3NDbGFzcz0KLCB0aGlzLm9wdHMuZWxlbWVudCkpOwo9MjAKICAgICAg
ICAgICAgIH0pOwo9MjAKLSAgICAgICAgICAgIC8vIG1vemlsbGEgYW5kIElFCi0gICAgICAgICAg
ICBlbC5vbigicHJvcGVydHljaGFuZ2Uuc2VsZWN0MiBET01BdHRyTW9kaWZpZWQuc2VsZWN0MiIs
IHN5bmMpOwotCi0KLSAgICAgICAgICAgIC8vIGhvbGQgb250byBhIHJlZmVyZW5jZSBvZiB0aGUg
Y2FsbGJhY2sgdG8gd29yayBhcm91bmQgYSBjaHJvPQptaXVtIGJ1ZwotICAgICAgICAgICAgaWYg
KHRoaXMubXV0YXRpb25DYWxsYmFjayA9M0Q9M0Q9M0QgdW5kZWZpbmVkKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5tdXRhdGlvbkNhbGxiYWNrID0zRCBmdW5jdGlvbiAobXV0YXRpb25zKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKHN5bmMpOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIElFOC0xMCAoSUU5LzEwIHdvbid0IGZpcmUgcHJvcGVydHlD
aGFuZ2UgdmlhIGF0dGFjaEV2ZW50TGlzPQp0ZW5lcikKKyAgICAgICAgICAgIGlmIChlbC5sZW5n
dGggJiYgZWxbMF0uYXR0YWNoRXZlbnQpIHsKKyAgICAgICAgICAgICAgICBlbC5lYWNoKGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5
Y2hhbmdlIiwgc2VsZi5fc3luYyk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
Cj0yMAotICAgICAgICAgICAgLy8gc2FmYXJpIGFuZCBjaHJvbWUKLSAgICAgICAgICAgIGlmICh0
eXBlb2YgV2ViS2l0TXV0YXRpb25PYnNlcnZlciAhPTNEPTNEICJ1bmRlZmluZWQiKSB7CisgICAg
ICAgICAgICAvLyBzYWZhcmksIGNocm9tZSwgZmlyZWZveCwgSUUxMQorICAgICAgICAgICAgb2Jz
ZXJ2ZXIgPTNEIHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5XZWJLaXRNdXRhdGlv
bk89CmJzZXJ2ZXJ8fCB3aW5kb3cuTW96TXV0YXRpb25PYnNlcnZlcjsKKyAgICAgICAgICAgIGlm
IChvYnNlcnZlciAhPTNEPTNEIHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgIGlmICh0aGlz
LnByb3BlcnR5T2JzZXJ2ZXIpIHsgZGVsZXRlIHRoaXMucHJvcGVydHlPYnNlcnZlcjs9CiB0aGlz
LnByb3BlcnR5T2JzZXJ2ZXIgPTNEIG51bGw7IH0KLSAgICAgICAgICAgICAgICB0aGlzLnByb3Bl
cnR5T2JzZXJ2ZXIgPTNEIG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKHRoaXMuPQptdXRhdGlv
bkNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5T2JzZXJ2ZXIgPTNEIG5l
dyBvYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zPQopIHsKKyAgICAgICAgICAgICAgICAgICAg
JC5lYWNoKG11dGF0aW9ucywgc2VsZi5fc3luYyk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eU9ic2VydmVyLm9ic2VydmUoZWwuZ2V0KDApLCB7IGF0
dHJpYnV0ZXM6dHJ1ZT0KLCBzdWJ0cmVlOmZhbHNlIH0pOwogICAgICAgICAgICAgfQogICAgICAg
ICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICAgdHJpZ2dlclNlbGVjdDogZnVu
Y3Rpb24oZGF0YSkgewotICAgICAgICAgICAgdmFyIGV2dCA9M0QgJC5FdmVudCgic2VsZWN0Mi1z
ZWxlY3RpbmciLCB7IHZhbDogdGhpcy5pZChkYXRhKSw9CiBvYmplY3Q6IGRhdGEgfSk7CisgICAg
ICAgICAgICB2YXIgZXZ0ID0zRCAkLkV2ZW50KCJzZWxlY3QyLXNlbGVjdGluZyIsIHsgdmFsOiB0
aGlzLmlkKGRhdGEpLD0KIG9iamVjdDogZGF0YSwgY2hvaWNlOiBkYXRhIH0pOwogICAgICAgICAg
ICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcihldnQpOwogICAgICAgICAgICAgcmV0dXJuICFl
dnQuaXNEZWZhdWx0UHJldmVudGVkKCk7CiAgICAgICAgIH0sCkBAIC0xMDcxLDcgKzExNjMsNyBA
QAogICAgICAgICAgICAgLy8gc28gaGVyZSB3ZSB0cmlnZ2VyIHRoZSBjbGljayBldmVudCBtYW51
YWxseQogICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQuY2xpY2soKTsKPTIwCi0gICAgICAg
ICAgICAvLyBWYWxpZGF0aW9uRW5naW5lIGlnbm9yZWEgdGhlIGNoYW5nZSBldmVudCBhbmQgbGlz
dGVucyBpbnN0ZT0KYWQgdG8gYmx1cgorICAgICAgICAgICAgLy8gVmFsaWRhdGlvbkVuZ2luZSBp
Z25vcmVzIHRoZSBjaGFuZ2UgZXZlbnQgYW5kIGxpc3RlbnMgaW5zdGU9CmFkIHRvIGJsdXIKICAg
ICAgICAgICAgIC8vIHNvIGhlcmUgd2UgdHJpZ2dlciB0aGUgYmx1ciBldmVudCBtYW51YWxseSBp
ZiBzbyBkZXNpcmVkCiAgICAgICAgICAgICBpZiAodGhpcy5vcHRzLmJsdXJPbkNoYW5nZSkKICAg
ICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5ibHVyKCk7CkBAIC0xMTE1LDE3ICsxMjA3
LDE2IEBACiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIHJlYWRvbmx5OiBmdW5jdGlvbihl
bmFibGVkKSB7CiAgICAgICAgICAgICBpZiAoZW5hYmxlZCA9M0Q9M0Q9M0QgdW5kZWZpbmVkKSBl
bmFibGVkID0zRCBmYWxzZTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkb25seSA9M0Q9M0Q9
M0QgZW5hYmxlZCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRvbmx5
ID0zRD0zRD0zRCBlbmFibGVkKSByZXR1cm47CiAgICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9
M0QgZW5hYmxlZDsKPTIwCiAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5wcm9wKCJyZWFk
b25seSIsIGVuYWJsZWQpOwogICAgICAgICAgICAgdGhpcy5lbmFibGVJbnRlcmZhY2UoKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJh
Y3QKICAgICAgICAgb3BlbmVkOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
cy5jb250YWluZXIuaGFzQ2xhc3MoInNlbGVjdDItZHJvcGRvd24tb3BlbiIpOworICAgICAgICAg
ICAgcmV0dXJuICh0aGlzLmNvbnRhaW5lcikgPyB0aGlzLmNvbnRhaW5lci5oYXNDbGFzcygic2Vs
ZWN0Mi1kcm89CnBkb3duLW9wZW4iKSA6IGZhbHNlOwogICAgICAgICB9LAo9MjAKICAgICAgICAg
Ly8gYWJzdHJhY3QKQEAgLTExMzUsMjAgKzEyMjYsNTggQEAKICAgICAgICAgICAgICAgICBoZWln
aHQgPTNEIHRoaXMuY29udGFpbmVyLm91dGVySGVpZ2h0KGZhbHNlKSwKICAgICAgICAgICAgICAg
ICB3aWR0aCA9M0QgdGhpcy5jb250YWluZXIub3V0ZXJXaWR0aChmYWxzZSksCiAgICAgICAgICAg
ICAgICAgZHJvcEhlaWdodCA9M0QgJGRyb3Bkb3duLm91dGVySGVpZ2h0KGZhbHNlKSwKLSAgICAg
ICAgICAgICAgICB2aWV3UG9ydFJpZ2h0ID0zRCAkKHdpbmRvdykuc2Nyb2xsTGVmdCgpICsgJCh3
aW5kb3cpLndpZHRoPQooKSwKLSAgICAgICAgICAgICAgICB2aWV3cG9ydEJvdHRvbSA9M0QgJCh3
aW5kb3cpLnNjcm9sbFRvcCgpICsgJCh3aW5kb3cpLmhlaWdoPQp0KCksCisgICAgICAgICAgICAg
ICAgJHdpbmRvdyA9M0QgJCh3aW5kb3cpLAorICAgICAgICAgICAgICAgIHdpbmRvd1dpZHRoID0z
RCAkd2luZG93LndpZHRoKCksCisgICAgICAgICAgICAgICAgd2luZG93SGVpZ2h0ID0zRCAkd2lu
ZG93LmhlaWdodCgpLAorICAgICAgICAgICAgICAgIHZpZXdQb3J0UmlnaHQgPTNEICR3aW5kb3cu
c2Nyb2xsTGVmdCgpICsgd2luZG93V2lkdGgsCisgICAgICAgICAgICAgICAgdmlld3BvcnRCb3R0
b20gPTNEICR3aW5kb3cuc2Nyb2xsVG9wKCkgKyB3aW5kb3dIZWlnaHQsCiAgICAgICAgICAgICAg
ICAgZHJvcFRvcCA9M0Qgb2Zmc2V0LnRvcCArIGhlaWdodCwKICAgICAgICAgICAgICAgICBkcm9w
TGVmdCA9M0Qgb2Zmc2V0LmxlZnQsCiAgICAgICAgICAgICAgICAgZW5vdWdoUm9vbUJlbG93ID0z
RCBkcm9wVG9wICsgZHJvcEhlaWdodCA8PTNEIHZpZXdwb3J0Qm90dD0Kb20sCi0gICAgICAgICAg
ICAgICAgZW5vdWdoUm9vbUFib3ZlID0zRCAob2Zmc2V0LnRvcCAtIGRyb3BIZWlnaHQpID49M0Qg
dGhpcy5ibz0KZHkoKS5zY3JvbGxUb3AoKSwKKyAgICAgICAgICAgICAgICBlbm91Z2hSb29tQWJv
dmUgPTNEIChvZmZzZXQudG9wIC0gZHJvcEhlaWdodCkgPj0zRCAkd2luZG93PQouc2Nyb2xsVG9w
KCksCiAgICAgICAgICAgICAgICAgZHJvcFdpZHRoID0zRCAkZHJvcGRvd24ub3V0ZXJXaWR0aChm
YWxzZSksCiAgICAgICAgICAgICAgICAgZW5vdWdoUm9vbU9uUmlnaHQgPTNEIGRyb3BMZWZ0ICsg
ZHJvcFdpZHRoIDw9M0Qgdmlld1BvcnRSaT0KZ2h0LAogICAgICAgICAgICAgICAgIGFib3ZlTm93
ID0zRCAkZHJvcGRvd24uaGFzQ2xhc3MoInNlbGVjdDItZHJvcC1hYm92ZSIpLAogICAgICAgICAg
ICAgICAgIGJvZHlPZmZzZXQsCiAgICAgICAgICAgICAgICAgYWJvdmUsCisgICAgICAgICAgICAg
ICAgY2hhbmdlRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgIGNzcywKICAgICAgICAgICAgICAg
ICByZXN1bHRzTGlzdE5vZGU7Cj0yMAorICAgICAgICAgICAgLy8gYWx3YXlzIHByZWZlciB0aGUg
Y3VycmVudCBhYm92ZS9iZWxvdyBhbGlnbm1lbnQsIHVubGVzcyB0aGU9CnJlIGlzIG5vdCBlbm91
Z2ggcm9vbQorICAgICAgICAgICAgaWYgKGFib3ZlTm93KSB7CisgICAgICAgICAgICAgICAgYWJv
dmUgPTNEIHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFlbm91Z2hSb29tQWJvdmUgJiYgZW5v
dWdoUm9vbUJlbG93KSB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZURpcmVjdGlvbiA9M0Qg
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWJvdmUgPTNEIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWJvdmUgPTNEIGZh
bHNlOworICAgICAgICAgICAgICAgIGlmICghZW5vdWdoUm9vbUJlbG93ICYmIGVub3VnaFJvb21B
Ym92ZSkgeworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VEaXJlY3Rpb24gPTNEIHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGFib3ZlID0zRCB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9pZiB3ZSBhcmUgY2hhbmdpbmcgZGlyZWN0aW9u
IHdlIG5lZWQgdG8gZ2V0IHBvc2l0aW9ucyB3aGVuIGQ9CnJvcGRvd24gaXMgaGlkZGVuOworICAg
ICAgICAgICAgaWYgKGNoYW5nZURpcmVjdGlvbikgeworICAgICAgICAgICAgICAgICRkcm9wZG93
bi5oaWRlKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0zRCB0aGlzLmNvbnRhaW5lci5vZmZz
ZXQoKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPTNEIHRoaXMuY29udGFpbmVyLm91dGVySGVp
Z2h0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9M0QgdGhpcy5jb250YWluZXIub3V0
ZXJXaWR0aChmYWxzZSk7CisgICAgICAgICAgICAgICAgZHJvcEhlaWdodCA9M0QgJGRyb3Bkb3du
Lm91dGVySGVpZ2h0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB2aWV3UG9ydFJpZ2h0ID0zRCAk
d2luZG93LnNjcm9sbExlZnQoKSArIHdpbmRvd1dpZHRoOworICAgICAgICAgICAgICAgIHZpZXdw
b3J0Qm90dG9tID0zRCAkd2luZG93LnNjcm9sbFRvcCgpICsgd2luZG93SGVpZ2h0OworICAgICAg
ICAgICAgICAgIGRyb3BUb3AgPTNEIG9mZnNldC50b3AgKyBoZWlnaHQ7CisgICAgICAgICAgICAg
ICAgZHJvcExlZnQgPTNEIG9mZnNldC5sZWZ0OworICAgICAgICAgICAgICAgIGRyb3BXaWR0aCA9
M0QgJGRyb3Bkb3duLm91dGVyV2lkdGgoZmFsc2UpOworICAgICAgICAgICAgICAgIGVub3VnaFJv
b21PblJpZ2h0ID0zRCBkcm9wTGVmdCArIGRyb3BXaWR0aCA8PTNEIHZpZXdQb3J0Umk9CmdodDsK
KyAgICAgICAgICAgICAgICAkZHJvcGRvd24uc2hvdygpOworCisgICAgICAgICAgICAgICAgLy8g
Zml4IHNvIHRoZSBjdXJzb3IgZG9lcyBub3QgbW92ZSB0byB0aGUgbGVmdCB3aXRoaW4gdGhlID0K
c2VhcmNoLXRleHRib3ggaW4gSUUKKyAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoKCk7
CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuZHJvcGRvd25BdXRv
V2lkdGgpIHsKICAgICAgICAgICAgICAgICByZXN1bHRzTGlzdE5vZGUgPTNEICQoJy5zZWxlY3Qy
LXJlc3VsdHMnLCAkZHJvcGRvd24pWzBdOwogICAgICAgICAgICAgICAgICRkcm9wZG93bi5hZGRD
bGFzcygnc2VsZWN0Mi1kcm9wLWF1dG8td2lkdGgnKTsKQEAgLTExNTYsNiArMTI4NSw3IEBACiAg
ICAgICAgICAgICAgICAgLy8gQWRkIHNjcm9sbGJhciB3aWR0aCB0byBkcm9wZG93biBpZiB2ZXJ0
aWNhbCBzY3JvbGxiYXIgaT0KcyBwcmVzZW50CiAgICAgICAgICAgICAgICAgZHJvcFdpZHRoID0z
RCAkZHJvcGRvd24ub3V0ZXJXaWR0aChmYWxzZSkgKyAocmVzdWx0c0xpc3RObz0KZGUuc2Nyb2xs
SGVpZ2h0ID0zRD0zRD0zRCByZXN1bHRzTGlzdE5vZGUuY2xpZW50SGVpZ2h0ID8gMCA6IHNjcm9s
bEJhckRpbWVuPQpzaW9ucy53aWR0aCk7CiAgICAgICAgICAgICAgICAgZHJvcFdpZHRoID4gd2lk
dGggPyB3aWR0aCA9M0QgZHJvcFdpZHRoIDogZHJvcFdpZHRoID0zRCB3aT0KZHRoOworICAgICAg
ICAgICAgICAgIGRyb3BIZWlnaHQgPTNEICRkcm9wZG93bi5vdXRlckhlaWdodChmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgZW5vdWdoUm9vbU9uUmlnaHQgPTNEIGRyb3BMZWZ0ICsgZHJvcFdpZHRo
IDw9M0Qgdmlld1BvcnRSaT0KZ2h0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7
CkBAIC0xMTYzLDQzICsxMjkzLDM3IEBACiAgICAgICAgICAgICB9Cj0yMAogICAgICAgICAgICAg
Ly9jb25zb2xlLmxvZygiYmVsb3cvIGRyb3B0b3A6IiwgZHJvcFRvcCwgImRyb3BIZWlnaHQiLCBk
cm9wSGU9CmlnaHQsICJzdW0iLCAoZHJvcFRvcCtkcm9wSGVpZ2h0KSsiIHZpZXdwb3J0IGJvdHRv
bSIsIHZpZXdwb3J0Qm90dG9tLCAiZW5vdT0KZ2g/IiwgZW5vdWdoUm9vbUJlbG93KTsKLSAgICAg
ICAgICAgIC8vY29uc29sZS5sb2coImFib3ZlLyBvZmZzZXQudG9wIiwgb2Zmc2V0LnRvcCwgImRy
b3BIZWlnaHQiLCBkPQpyb3BIZWlnaHQsICJ0b3AiLCAob2Zmc2V0LnRvcC1kcm9wSGVpZ2h0KSwg
InNjcm9sbFRvcCIsIHRoaXMuYm9keSgpLnNjcm9sbFQ9Cm9wKCksICJlbm91Z2g/IiwgZW5vdWdo
Um9vbUFib3ZlKTsKKyAgICAgICAgICAgIC8vY29uc29sZS5sb2coImFib3ZlLyBvZmZzZXQudG9w
Iiwgb2Zmc2V0LnRvcCwgImRyb3BIZWlnaHQiLCBkPQpyb3BIZWlnaHQsICJ0b3AiLCAob2Zmc2V0
LnRvcC1kcm9wSGVpZ2h0KSwgInNjcm9sbFRvcCIsIHRoaXMuYm9keS5zY3JvbGxUb3A9CigpLCAi
ZW5vdWdoPyIsIGVub3VnaFJvb21BYm92ZSk7Cj0yMAogICAgICAgICAgICAgLy8gZml4IHBvc2l0
aW9uaW5nIHdoZW4gYm9keSBoYXMgYW4gb2Zmc2V0IGFuZCBpcyBub3QgcG9zaXRpb249Cjogc3Rh
dGljCi0gICAgICAgICAgICBpZiAodGhpcy5ib2R5KCkuY3NzKCdwb3NpdGlvbicpICE9M0Q9M0Qg
J3N0YXRpYycpIHsKLSAgICAgICAgICAgICAgICBib2R5T2Zmc2V0ID0zRCB0aGlzLmJvZHkoKS5v
ZmZzZXQoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmJvZHkuY3NzKCdwb3NpdGlvbicpICE9M0Q9
M0QgJ3N0YXRpYycpIHsKKyAgICAgICAgICAgICAgICBib2R5T2Zmc2V0ID0zRCB0aGlzLmJvZHku
b2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgZHJvcFRvcCAtPTNEIGJvZHlPZmZzZXQudG9wOwog
ICAgICAgICAgICAgICAgIGRyb3BMZWZ0IC09M0QgYm9keU9mZnNldC5sZWZ0OwogICAgICAgICAg
ICAgfQo9MjAKLSAgICAgICAgICAgIC8vIGFsd2F5cyBwcmVmZXIgdGhlIGN1cnJlbnQgYWJvdmUv
YmVsb3cgYWxpZ25tZW50LCB1bmxlc3MgdGhlPQpyZSBpcyBub3QgZW5vdWdoIHJvb20KLSAgICAg
ICAgICAgIGlmIChhYm92ZU5vdykgewotICAgICAgICAgICAgICAgIGFib3ZlID0zRCB0cnVlOwot
ICAgICAgICAgICAgICAgIGlmICghZW5vdWdoUm9vbUFib3ZlICYmIGVub3VnaFJvb21CZWxvdykg
YWJvdmUgPTNEIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBh
Ym92ZSA9M0QgZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbm91Z2hSb29tQmVsb3cgJiYg
ZW5vdWdoUm9vbUFib3ZlKSBhYm92ZSA9M0QgdHJ1ZTsKKyAgICAgICAgICAgIGlmICghZW5vdWdo
Um9vbU9uUmlnaHQpIHsKKyAgICAgICAgICAgICAgICBkcm9wTGVmdCA9M0Qgb2Zmc2V0LmxlZnQg
KyB0aGlzLmNvbnRhaW5lci5vdXRlcldpZHRoKGZhbHNlPQopIC0gZHJvcFdpZHRoOwogICAgICAg
ICAgICAgfQo9MjAKLSAgICAgICAgICAgIGlmICghZW5vdWdoUm9vbU9uUmlnaHQpIHsKLSAgICAg
ICAgICAgICAgIGRyb3BMZWZ0ID0zRCBvZmZzZXQubGVmdCArIHdpZHRoIC0gZHJvcFdpZHRoOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY3NzID0zRCAgeworICAgICAgICAgICAgICAgIGxl
ZnQ6IGRyb3BMZWZ0LAorICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aAorICAgICAgICAgICAg
fTsKPTIwCiAgICAgICAgICAgICBpZiAoYWJvdmUpIHsKLSAgICAgICAgICAgICAgICBkcm9wVG9w
ID0zRCBvZmZzZXQudG9wIC0gZHJvcEhlaWdodDsKKyAgICAgICAgICAgICAgICBjc3MudG9wID0z
RCBvZmZzZXQudG9wIC0gZHJvcEhlaWdodDsKKyAgICAgICAgICAgICAgICBjc3MuYm90dG9tID0z
RCAnYXV0byc7CiAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoInNlbGVj
dDItZHJvcC1hYm92ZSIpOwogICAgICAgICAgICAgICAgICRkcm9wZG93bi5hZGRDbGFzcygic2Vs
ZWN0Mi1kcm9wLWFib3ZlIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBjc3MudG9wID0zRCBkcm9wVG9wOworICAgICAgICAgICAgICAgIGNzcy5i
b3R0b20gPTNEICdhdXRvJzsKICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVD
bGFzcygic2VsZWN0Mi1kcm9wLWFib3ZlIik7CiAgICAgICAgICAgICAgICAgJGRyb3Bkb3duLnJl
bW92ZUNsYXNzKCJzZWxlY3QyLWRyb3AtYWJvdmUiKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgY3NzID0zRCAkLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdG9wOiBkcm9wVG9wLAot
ICAgICAgICAgICAgICAgIGxlZnQ6IGRyb3BMZWZ0LAotICAgICAgICAgICAgICAgIHdpZHRoOiB3
aWR0aAotICAgICAgICAgICAgfSwgZXZhbHVhdGUodGhpcy5vcHRzLmRyb3Bkb3duQ3NzKSk7Cisg
ICAgICAgICAgICBjc3MgPTNEICQuZXh0ZW5kKGNzcywgZXZhbHVhdGUodGhpcy5vcHRzLmRyb3Bk
b3duQ3NzLCB0aGlzLm9wdD0Kcy5lbGVtZW50KSk7Cj0yMAogICAgICAgICAgICAgJGRyb3Bkb3du
LmNzcyhjc3MpOwogICAgICAgICB9LApAQCAtMTIzNyw2ICsxMzYxLDEyIEBACj0yMAogICAgICAg
ICAgICAgdGhpcy5vcGVuaW5nKCk7Cj0yMAorICAgICAgICAgICAgLy8gT25seSBiaW5kIHRoZSBk
b2N1bWVudCBtb3VzZW1vdmUgd2hlbiB0aGUgZHJvcGRvd24gaXMgdmlzaWI9CmxlCisgICAgICAg
ICAgICAkZG9jdW1lbnQub24oIm1vdXNlbW92ZS5zZWxlY3QyRXZlbnQiLCBmdW5jdGlvbiAoZSkg
eworICAgICAgICAgICAgICAgIGxhc3RNb3VzZVBvc2l0aW9uLnggPTNEIGUucGFnZVg7CisgICAg
ICAgICAgICAgICAgbGFzdE1vdXNlUG9zaXRpb24ueSA9M0QgZS5wYWdlWTsKKyAgICAgICAgICAg
IH0pOworCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSwKPTIwCkBAIC0xMjQ1
LDM1ICsxMzc1LDM4IEBACiAgICAgICAgICAqLwogICAgICAgICAvLyBhYnN0cmFjdAogICAgICAg
ICBvcGVuaW5nOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBjaWQgPTNEIHRoaXMuY29u
dGFpbmVySWQsCisgICAgICAgICAgICB2YXIgY2lkID0zRCB0aGlzLmNvbnRhaW5lckV2ZW50TmFt
ZSwKICAgICAgICAgICAgICAgICBzY3JvbGwgPTNEICJzY3JvbGwuIiArIGNpZCwKICAgICAgICAg
ICAgICAgICByZXNpemUgPTNEICJyZXNpemUuIitjaWQsCiAgICAgICAgICAgICAgICAgb3JpZW50
ID0zRCAib3JpZW50YXRpb25jaGFuZ2UuIitjaWQsCi0gICAgICAgICAgICAgICAgbWFzaywgbWFz
a0NzczsKKyAgICAgICAgICAgICAgICBtYXNrOwo9MjAKICAgICAgICAgICAgIHRoaXMuY29udGFp
bmVyLmFkZENsYXNzKCJzZWxlY3QyLWRyb3Bkb3duLW9wZW4iKS5hZGRDbGFzcygic2VsPQplY3Qy
LWNvbnRhaW5lci1hY3RpdmUiKTsKPTIwCiAgICAgICAgICAgICB0aGlzLmNsZWFyRHJvcGRvd25B
bGlnbm1lbnRQcmVmZXJlbmNlKCk7Cj0yMAotICAgICAgICAgICAgaWYodGhpcy5kcm9wZG93blsw
XSAhPTNEPTNEIHRoaXMuYm9keSgpLmNoaWxkcmVuKCkubGFzdCgpWzBdKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5kcm9wZG93bi5kZXRhY2goKS5hcHBlbmRUbyh0aGlzLmJvZHkoKSk7CisgICAg
ICAgICAgICBpZih0aGlzLmRyb3Bkb3duWzBdICE9M0Q9M0QgdGhpcy5ib2R5LmNoaWxkcmVuKCku
bGFzdCgpWzBdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5kZXRhY2goKS5hcHBl
bmRUbyh0aGlzLmJvZHkpOwogICAgICAgICAgICAgfQo9MjAKLSAgICAgICAgICAgIC8vIGNyZWF0
ZSB0aGUgZHJvcGRvd24gbWFzayBpZiBkb2VzbnQgYWxyZWFkeSBleGlzdAorICAgICAgICAgICAg
Ly8gY3JlYXRlIHRoZSBkcm9wZG93biBtYXNrIGlmIGRvZXNuJ3QgYWxyZWFkeSBleGlzdAogICAg
ICAgICAgICAgbWFzayA9M0QgJCgiI3NlbGVjdDItZHJvcC1tYXNrIik7CiAgICAgICAgICAgICBp
ZiAobWFzay5sZW5ndGggPTNEPTNEIDApIHsKICAgICAgICAgICAgICAgICBtYXNrID0zRCAkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKICAgICAgICAgICAgICAgICBtYXNrLmF0dHIo
ImlkIiwic2VsZWN0Mi1kcm9wLW1hc2siKS5hdHRyKCJjbGFzcyIsInNlbGVjdDItPQpkcm9wLW1h
c2siKTsKICAgICAgICAgICAgICAgICBtYXNrLmhpZGUoKTsKLSAgICAgICAgICAgICAgICBtYXNr
LmFwcGVuZFRvKHRoaXMuYm9keSgpKTsKKyAgICAgICAgICAgICAgICBtYXNrLmFwcGVuZFRvKHRo
aXMuYm9keSk7CiAgICAgICAgICAgICAgICAgbWFzay5vbigibW91c2Vkb3duIHRvdWNoc3RhcnQg
Y2xpY2siLCBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IElF
IGZyb20gZ2VuZXJhdGluZyBhIGNsaWNrIGV2ZW50IG9uIHRoZSBib2R5CisgICAgICAgICAgICAg
ICAgICAgIHJlaW5zZXJ0RWxlbWVudChtYXNrKTsKKwogICAgICAgICAgICAgICAgICAgICB2YXIg
ZHJvcGRvd24gPTNEICQoIiNzZWxlY3QyLWRyb3AiKSwgc2VsZjsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGRyb3Bkb3duLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGY9M0Rkcm9wZG93bi5kYXRhKCJzZWxlY3QyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc2VsZi5vcHRzLnNlbGVjdE9uQmx1cikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuc2VsZWN0SGlnaGxpZ2h0ZWQoe25vRm9jdXM6IHRydWV9KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2Uoe2ZvY3VzOmZh
bHNlfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMzAzLDcg
KzE0MzYsNyBAQAogICAgICAgICAgICAgdmFyIHRoYXQgPTNEIHRoaXM7CiAgICAgICAgICAgICB0
aGlzLmNvbnRhaW5lci5wYXJlbnRzKCkuYWRkKHdpbmRvdykuZWFjaChmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgICAgICAgJCh0aGlzKS5vbihyZXNpemUrIiAiK3Njcm9sbCsiICIrb3JpZW50LCBm
dW5jdGlvbiAoZSkgewotICAgICAgICAgICAgICAgICAgICB0aGF0LnBvc2l0aW9uRHJvcGRvd24o
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQub3BlbmVkKCkpIHRoYXQucG9zaXRpb25E
cm9wZG93bigpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Cj0yMApAQCAt
MTMxNCw3ICsxNDQ3LDcgQEAKICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgIGlmICghdGhpcy5vcGVuZWQoKSkgcmV0dXJuOwo9MjAKLSAgICAgICAgICAgIHZhciBjaWQg
PTNEIHRoaXMuY29udGFpbmVySWQsCisgICAgICAgICAgICB2YXIgY2lkID0zRCB0aGlzLmNvbnRh
aW5lckV2ZW50TmFtZSwKICAgICAgICAgICAgICAgICBzY3JvbGwgPTNEICJzY3JvbGwuIiArIGNp
ZCwKICAgICAgICAgICAgICAgICByZXNpemUgPTNEICJyZXNpemUuIitjaWQsCiAgICAgICAgICAg
ICAgICAgb3JpZW50ID0zRCAib3JpZW50YXRpb25jaGFuZ2UuIitjaWQ7CkBAIC0xMzMwLDYgKzE0
NjMsOCBAQAogICAgICAgICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlQ2xhc3MoInNlbGVjdDIt
ZHJvcGRvd24tb3BlbiIpLnJlbW92ZUNsYXM9CnMoInNlbGVjdDItY29udGFpbmVyLWFjdGl2ZSIp
OwogICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmVtcHR5KCk7Cj0yMAorICAgICAgICAgICAgLy8g
Tm93IHRoYXQgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCwgdW5iaW5kIHRoZSBnbG9iYWwgZG9jdW1l
bnQ9CiBtb3VzZW1vdmUgZXZlbnQKKyAgICAgICAgICAgICRkb2N1bWVudC5vZmYoIm1vdXNlbW92
ZS5zZWxlY3QyRXZlbnQiKTsKPTIwCiAgICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7CiAg
ICAgICAgICAgICB0aGlzLnNlYXJjaC5yZW1vdmVDbGFzcygic2VsZWN0Mi1hY3RpdmUiKTsKQEAg
LTEzNTMsMTIgKzE0ODgsMTIgQEAKPTIwCiAgICAgICAgIC8vYWJzdHJhY3QKICAgICAgICAgZ2V0
TWF4aW11bVNlbGVjdGlvblNpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIGV2
YWx1YXRlKHRoaXMub3B0cy5tYXhpbXVtU2VsZWN0aW9uU2l6ZSk7CisgICAgICAgICAgICByZXR1
cm4gZXZhbHVhdGUodGhpcy5vcHRzLm1heGltdW1TZWxlY3Rpb25TaXplLCB0aGlzLm9wdHMuZWxl
bT0KZW50KTsKICAgICAgICAgfSwKPTIwCiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIGVu
c3VyZUhpZ2hsaWdodFZpc2libGU6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciByZXN1
bHRzID0zRCB0aGlzLnJlc3VsdHMsIGNoaWxkcmVuLCBpbmRleCwgY2hpbGQsIGhiLCByYiwgPQp5
LCBtb3JlOworICAgICAgICAgICAgdmFyIHJlc3VsdHMgPTNEIHRoaXMucmVzdWx0cywgY2hpbGRy
ZW4sIGluZGV4LCBjaGlsZCwgaGIsIHJiLCA9CnksIG1vcmUsIHRvcE9mZnNldDsKPTIwCiAgICAg
ICAgICAgICBpbmRleCA9M0QgdGhpcy5oaWdobGlnaHQoKTsKPTIwCkBAIC0xMzc4LDcgKzE1MTMs
OSBAQAo9MjAKICAgICAgICAgICAgIGNoaWxkID0zRCAkKGNoaWxkcmVuW2luZGV4XSk7Cj0yMAot
ICAgICAgICAgICAgaGIgPTNEIGNoaWxkLm9mZnNldCgpLnRvcCArIGNoaWxkLm91dGVySGVpZ2h0
KHRydWUpOworICAgICAgICAgICAgdG9wT2Zmc2V0ID0zRCAoY2hpbGQub2Zmc2V0KCkgfHwge30p
LnRvcCB8fCAwOworCisgICAgICAgICAgICBoYiA9M0QgdG9wT2Zmc2V0ICsgY2hpbGQub3V0ZXJI
ZWlnaHQodHJ1ZSk7Cj0yMAogICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyB0aGUgbGFzdCBjaGls
ZCBsZXRzIGFsc28gbWFrZSBzdXJlIHNlbGVjdDItbW9yZS09CnJlc3VsdHMgaXMgdmlzaWJsZQog
ICAgICAgICAgICAgaWYgKGluZGV4ID0zRD0zRD0zRCBjaGlsZHJlbi5sZW5ndGggLSAxKSB7CkBA
IC0xMzkyLDcgKzE1MjksNyBAQAogICAgICAgICAgICAgaWYgKGhiID4gcmIpIHsKICAgICAgICAg
ICAgICAgICByZXN1bHRzLnNjcm9sbFRvcChyZXN1bHRzLnNjcm9sbFRvcCgpICsgKGhiIC0gcmIp
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHkgPTNEIGNoaWxkLm9mZnNldCgpLnRvcCAt
IHJlc3VsdHMub2Zmc2V0KCkudG9wOworICAgICAgICAgICAgeSA9M0QgdG9wT2Zmc2V0IC0gcmVz
dWx0cy5vZmZzZXQoKS50b3A7Cj0yMAogICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSB0b3Ag
b2YgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZQogICAgICAgICAgICAgaWYgKHkgPCAwICYmIGNoaWxk
LmNzcygnZGlzcGxheScpICE9M0QgJ25vbmUnICkgewpAQCAtMTQwMiw3ICsxNTM5LDcgQEAKPTIw
CiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIGZpbmRIaWdobGlnaHRhYmxlQ2hvaWNlczog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzLmZpbmQoIi5zZWxl
Y3QyLXJlc3VsdC1zZWxlY3RhYmxlOm5vdCguc2VsZT0KY3QyLWRpc2FibGVkKSIpOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1yZXN1bHQtc2VsZWN0YWJs
ZTpub3QoLnNlbGU9CmN0Mi1kaXNhYmxlZCk6bm90KC5zZWxlY3QyLXNlbGVjdGVkKSIpOwogICAg
ICAgICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QKQEAgLTE0MzgsOCArMTU3NSwxMyBAQAog
ICAgICAgICAgICAgY2hvaWNlID0zRCAkKGNob2ljZXNbaW5kZXhdKTsKICAgICAgICAgICAgIGNo
b2ljZS5hZGRDbGFzcygic2VsZWN0Mi1oaWdobGlnaHRlZCIpOwo9MjAKKyAgICAgICAgICAgIC8v
IGVuc3VyZSBhc3Npc3RpdmUgdGVjaG5vbG9neSBjYW4gZGV0ZXJtaW5lIHRoZSBhY3RpdmUgY2hv
aWNlCisgICAgICAgICAgICB0aGlzLnNlYXJjaC5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQi
LCBjaG9pY2UuZmluZCgiLnNlbGVjdD0KMi1yZXN1bHQtbGFiZWwiKS5hdHRyKCJpZCIpKTsKKwog
ICAgICAgICAgICAgdGhpcy5lbnN1cmVIaWdobGlnaHRWaXNpYmxlKCk7Cj0yMAorICAgICAgICAg
ICAgdGhpcy5saXZlUmVnaW9uLnRleHQoY2hvaWNlLnRleHQoKSk7CisKICAgICAgICAgICAgIGRh
dGEgPTNEIGNob2ljZS5kYXRhKCJzZWxlY3QyLWRhdGEiKTsKICAgICAgICAgICAgIGlmIChkYXRh
KSB7CiAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcih7IHR5cGU6ICJz
ZWxlY3QyLWhpZ2hsaWdodCIsIHZhbD0KOiB0aGlzLmlkKGRhdGEpLCBjaG9pY2U6IGRhdGEgfSk7
CkBAIC0xNDUwLDYgKzE1OTIsMTQgQEAKICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5maW5kKCIu
c2VsZWN0Mi1oaWdobGlnaHRlZCIpLnJlbW92ZUNsYXNzKCJzZWxlY3QyPQotaGlnaGxpZ2h0ZWQi
KTsKICAgICAgICAgfSwKPTIwCisgICAgICAgIHRvdWNoTW92ZWQ6IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgdGhpcy5fdG91Y2hNb3ZlZCA9M0QgdHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjbGVhclRvdWNoTW92ZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHRoaXMuX3RvdWNoTW92
ZWQgPTNEIGZhbHNlOworICAgICAgICB9LAorCiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAg
IGNvdW50U2VsZWN0YWJsZVJlc3VsdHM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluZEhpZ2hsaWdodGFibGVDaG9pY2VzKCkubGVuZ3RoOwpAQCAtMTQ3Miw3ICsxNjIy
LDYgQEAKICAgICAgICAgICAgIHZhciByZXN1bHRzID0zRCB0aGlzLnJlc3VsdHMsCiAgICAgICAg
ICAgICAgICAgbW9yZSA9M0QgcmVzdWx0cy5maW5kKCJsaS5zZWxlY3QyLW1vcmUtcmVzdWx0cyIp
LAogICAgICAgICAgICAgICAgIGJlbG93LCAvLyBwaXhlbHMgdGhlIGVsZW1lbnQgaXMgYmVsb3cg
dGhlIHNjcm9sbCBmb2xkLCBiZWw9Cm93PTNEPTNEMCBpcyB3aGVuIHRoZSBlbGVtZW50IGlzIHN0
YXJ0aW5nIHRvIGJlIHZpc2libGUKLSAgICAgICAgICAgICAgICBvZmZzZXQgPTNEIC0xLCAvLyBp
bmRleCBvZiBmaXJzdCBlbGVtZW50IHdpdGhvdXQgZGF0YQogICAgICAgICAgICAgICAgIHBhZ2Ug
PTNEIHRoaXMucmVzdWx0c1BhZ2UgKyAxLAogICAgICAgICAgICAgICAgIHNlbGY9M0R0aGlzLAog
ICAgICAgICAgICAgICAgIHRlcm09M0R0aGlzLnNlYXJjaC52YWwoKSwKQEAgLTE0OTksNyArMTY0
OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdHByb2Nlc3NSZXN1bHRzKGRhdGEs
IGZhbHNlLCBmYWxzZSk7Cj0yMAogICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5tb3JlPTNE
PTNEPTNEdHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbW9yZS5kZXRhY2goKS5hcHBl
bmRUbyhyZXN1bHRzKS50ZXh0KHNlbGYub3B0cy5mb3I9Cm1hdExvYWRNb3JlKHBhZ2UrMSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbW9yZS5kZXRhY2goKS5hcHBlbmRUbyhyZXN1bHRzKS50
ZXh0KGV2YWx1YXRlKHNlbGY9Ci5vcHRzLmZvcm1hdExvYWRNb3JlLCBzZWxmLm9wdHMuZWxlbWVu
dCwgcGFnZSsxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChm
dW5jdGlvbigpIHsgc2VsZi5sb2FkTW9yZUlmTmVlZD0KZWQoKTsgfSwgMTApOwogICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgbW9yZS5yZW1vdmUo
KTsKQEAgLTE1NDgsNiArMTY5NywxMiBAQAogICAgICAgICAgICAgZnVuY3Rpb24gcG9zdFJlbmRl
cigpIHsKICAgICAgICAgICAgICAgICBzZWFyY2gucmVtb3ZlQ2xhc3MoInNlbGVjdDItYWN0aXZl
Iik7CiAgICAgICAgICAgICAgICAgc2VsZi5wb3NpdGlvbkRyb3Bkb3duKCk7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdHMuZmluZCgnLnNlbGVjdDItbm8tcmVzdWx0cywuc2VsZWN0Mi1zZWxl
Y3Rpb24tbD0KaW1pdCwuc2VsZWN0Mi1zZWFyY2hpbmcnKS5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi5saXZlUmVnaW9uLnRleHQocmVzdWx0cy50ZXh0KCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5saXZlUmVnaW9uLnRleHQoc2VsZi5vcHRzLmZvcm1hdE1hdGNoZXMocmVzdWx0cy5mPQppbmQo
Jy5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlJykubGVuZ3RoKSk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQo9MjAKICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlcihodG1sKSB7
CkBAIC0xNTYxLDE0ICsxNzE2LDE0IEBACiAgICAgICAgICAgICBpZiAobWF4U2VsU2l6ZSA+PTNE
MSkgewogICAgICAgICAgICAgICAgIGRhdGEgPTNEIHRoaXMuZGF0YSgpOwogICAgICAgICAgICAg
ICAgIGlmICgkLmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPj0zRCBtYXhTZWxTaXplICYm
IGNoZWM9CmtGb3JtYXR0ZXIob3B0cy5mb3JtYXRTZWxlY3Rpb25Ub29CaWcsICJmb3JtYXRTZWxl
Y3Rpb25Ub29CaWciKSkgewotICAgICAgICAgICAgICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0z
RCdzZWxlY3QyLXNlbGVjdGlvbi1saW1pdCc+IiArIG9wdHM9Ci5mb3JtYXRTZWxlY3Rpb25Ub29C
aWcobWF4U2VsU2l6ZSkgKyAiPC9saT4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyKCI8
bGkgY2xhc3M9M0Qnc2VsZWN0Mi1zZWxlY3Rpb24tbGltaXQnPiIgKyBldmFsPQp1YXRlKG9wdHMu
Zm9ybWF0U2VsZWN0aW9uVG9vQmlnLCBvcHRzLmVsZW1lbnQsIG1heFNlbFNpemUpICsgIjwvbGk+
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9Cj0yMAogICAgICAgICAgICAgaWYgKHNlYXJjaC52YWwoKS5sZW5ndGggPCBvcHRz
Lm1pbmltdW1JbnB1dExlbmd0aCkgewogICAgICAgICAgICAgICAgIGlmIChjaGVja0Zvcm1hdHRl
cihvcHRzLmZvcm1hdElucHV0VG9vU2hvcnQsICJmb3JtYXRJbnB1dFQ9Cm9vU2hvcnQiKSkgewot
ICAgICAgICAgICAgICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3Vs
dHMnPiIgKyBvcHRzLmZvcm09CmF0SW5wdXRUb29TaG9ydChzZWFyY2gudmFsKCksIG9wdHMubWlu
aW11bUlucHV0TGVuZ3RoKSArICI8L2xpPiIpOworICAgICAgICAgICAgICAgICAgICByZW5kZXIo
IjxsaSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3VsdHMnPiIgKyBldmFsdWF0ZSg9Cm9wdHMuZm9y
bWF0SW5wdXRUb29TaG9ydCwgb3B0cy5lbGVtZW50LCBzZWFyY2gudmFsKCksIG9wdHMubWluaW11
bUlucHV0TGVuZz0KdGgpICsgIjwvbGk+Iik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyKCIiKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNTc4
LDcgKzE3MzMsNyBAQAo9MjAKICAgICAgICAgICAgIGlmIChvcHRzLm1heGltdW1JbnB1dExlbmd0
aCAmJiBzZWFyY2gudmFsKCkubGVuZ3RoID4gb3B0cy5tYXhpPQptdW1JbnB1dExlbmd0aCkgewog
ICAgICAgICAgICAgICAgIGlmIChjaGVja0Zvcm1hdHRlcihvcHRzLmZvcm1hdElucHV0VG9vTG9u
ZywgImZvcm1hdElucHV0VG89Cm9Mb25nIikpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVy
KCI8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1uby1yZXN1bHRzJz4iICsgb3B0cy5mb3JtPQphdElucHV0
VG9vTG9uZyhzZWFyY2gudmFsKCksIG9wdHMubWF4aW11bUlucHV0TGVuZ3RoKSArICI8L2xpPiIp
OworICAgICAgICAgICAgICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJl
c3VsdHMnPiIgKyBldmFsdWF0ZSg9Cm9wdHMuZm9ybWF0SW5wdXRUb29Mb25nLCBvcHRzLmVsZW1l
bnQsIHNlYXJjaC52YWwoKSwgb3B0cy5tYXhpbXVtSW5wdXRMZW5ndD0KaCkgKyAiPC9saT4iKTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICByZW5kZXIoIiIp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTE1ODYsNyArMTc0MSw3IEBACiAgICAgICAgICAgICB9
Cj0yMAogICAgICAgICAgICAgaWYgKG9wdHMuZm9ybWF0U2VhcmNoaW5nICYmIHRoaXMuZmluZEhp
Z2hsaWdodGFibGVDaG9pY2VzKCkubGU9Cm5ndGggPTNEPTNEPTNEIDApIHsKLSAgICAgICAgICAg
ICAgICByZW5kZXIoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLXNlYXJjaGluZyc+IiArIG9wdHMuZm9y
bWF0U2VhPQpyY2hpbmcoKSArICI8L2xpPiIpOworICAgICAgICAgICAgICAgIHJlbmRlcigiPGxp
IGNsYXNzPTNEJ3NlbGVjdDItc2VhcmNoaW5nJz4iICsgZXZhbHVhdGUob3B0cy49CmZvcm1hdFNl
YXJjaGluZywgb3B0cy5lbGVtZW50KSArICI8L2xpPiIpOwogICAgICAgICAgICAgfQo9MjAKICAg
ICAgICAgICAgIHNlYXJjaC5hZGRDbGFzcygic2VsZWN0Mi1hY3RpdmUiKTsKQEAgLTE2MjEsNiAr
MTc3NiwxMiBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQo9MjAKKyAgICAgICAgICAgICAgICAvLyBoYW5kbGUgYWpheCBlcnJvcgorICAgICAgICAgICAg
ICAgIGlmKGRhdGEuaGFzRXJyb3IgIT0zRD0zRCB1bmRlZmluZWQgJiYgY2hlY2tGb3JtYXR0ZXIo
b3B0cy49CmZvcm1hdEFqYXhFcnJvciwgImZvcm1hdEFqYXhFcnJvciIpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPTNEJ3NlbGVjdDItYWpheC1lcnJvcic+IiArIGV2
YWx1YXRlKD0Kb3B0cy5mb3JtYXRBamF4RXJyb3IsIG9wdHMuZWxlbWVudCwgZGF0YS5qcVhIUiwg
ZGF0YS50ZXh0U3RhdHVzLCBkYXRhLmVycm9yPQpUaHJvd24pICsgIjwvbGk+Iik7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAg
ICAvLyBzYXZlIGNvbnRleHQsIGlmIGFueQogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9
M0QgKGRhdGEuY29udGV4dD0zRD0zRD0zRHVuZGVmaW5lZCkgPyBudWxsIDo9CiBkYXRhLmNvbnRl
eHQ7CiAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgZGVmYXVsdCBjaG9pY2UgYW5kIHByZXBl
bmQgaXQgdG8gdGhlIGxpc3QKQEAgLTE2MzEsMTMgKzE3OTIsMTMgQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcXVhbChzZWxmLmlkKHRoaXMpLCBzZWxmLmlkKGRlZikpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9M0Q9M0Q9M0QgMCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0cy51bnNoaWZ0KGRlZik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5vcHRzLmNyZWF0ZVNlYXJjaENob2ljZVBvc2l0aW9uKGRhdGEu
cmVzdT0KbHRzLCBkZWYpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQo9MjAKICAgICAgICAgICAgICAgICBpZiAoZGF0
YS5yZXN1bHRzLmxlbmd0aCA9M0Q9M0Q9M0QgMCAmJiBjaGVja0Zvcm1hdHRlcihvcHRzPQouZm9y
bWF0Tm9NYXRjaGVzLCAiZm9ybWF0Tm9NYXRjaGVzIikpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmVuZGVyKCI8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1uby1yZXN1bHRzJz4iICsgb3B0cy5mb3JtPQph
dE5vTWF0Y2hlcyhzZWFyY2gudmFsKCkpICsgIjwvbGk+Iik7CisgICAgICAgICAgICAgICAgICAg
IHJlbmRlcigiPGxpIGNsYXNzPTNEJ3NlbGVjdDItbm8tcmVzdWx0cyc+IiArIGV2YWx1YXRlKD0K
b3B0cy5mb3JtYXROb01hdGNoZXMsIG9wdHMuZWxlbWVudCwgc2VhcmNoLnZhbCgpKSArICI8L2xp
PiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQo9MjAK
QEAgLTE2NDUsNyArMTgwNiw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5vcHRzLnBvcHVsYXRl
UmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdHMsIGRhdGEucmVzdWx0cz0KLCB7dGVybTogc2VhcmNo
LnZhbCgpLCBwYWdlOiB0aGlzLnJlc3VsdHNQYWdlLCBjb250ZXh0Om51bGx9KTsKPTIwCiAgICAg
ICAgICAgICAgICAgaWYgKGRhdGEubW9yZSA9M0Q9M0Q9M0QgdHJ1ZSAmJiBjaGVja0Zvcm1hdHRl
cihvcHRzLmZvcm1hdD0KTG9hZE1vcmUsICJmb3JtYXRMb2FkTW9yZSIpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCI8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1tb3JlLXJlc3Vs
dHMnPiIgKz0KIHNlbGYub3B0cy5lc2NhcGVNYXJrdXAob3B0cy5mb3JtYXRMb2FkTW9yZSh0aGlz
LnJlc3VsdHNQYWdlKSkgKyAiPC9saT4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLW1vcmUtcmVzdWx0cyc+IiArPQogb3B0cy5lc2Nh
cGVNYXJrdXAoZXZhbHVhdGUob3B0cy5mb3JtYXRMb2FkTW9yZSwgb3B0cy5lbGVtZW50LCB0aGlz
LnJlc3VsdHM9ClBhZ2UpKSArICI8L2xpPiIpOwogICAgICAgICAgICAgICAgICAgICB3aW5kb3cu
c2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZi5sb2FkTW9yZUlmTmVlZGVkKCk9CjsgfSwgMTAp
OwogICAgICAgICAgICAgICAgIH0KPTIwCkBAIC0xNjgzLDYgKzE4NDQsMTAgQEAKPTIwCiAgICAg
ICAgIC8vIGFic3RyYWN0CiAgICAgICAgIHNlbGVjdEhpZ2hsaWdodGVkOiBmdW5jdGlvbiAob3B0
aW9ucykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RvdWNoTW92ZWQpIHsKKyAgICAgICAgICAg
ICAgdGhpcy5jbGVhclRvdWNoTW92ZWQoKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgdmFyIGluZGV4PTNEdGhpcy5oaWdobGlnaHQoKSwKICAgICAg
ICAgICAgICAgICBoaWdobGlnaHRlZD0zRHRoaXMucmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1oaWdo
bGlnaHRlZCIpLAogICAgICAgICAgICAgICAgIGRhdGEgPTNEIGhpZ2hsaWdodGVkLmNsb3Nlc3Qo
Jy5zZWxlY3QyLXJlc3VsdCcpLmRhdGEoInNlbGU9CmN0Mi1kYXRhIik7CkBAIC0xNzA4LDEyICsx
ODczLDEyIEBACiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIGdldFBsYWNlaG9sZGVyT3B0
aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgewotICAgICAg
ICAgICAgICAgIHZhciBmaXJzdE9wdGlvbiA9M0QgdGhpcy5zZWxlY3QuY2hpbGRyZW4oKS5maXJz
dCgpOworICAgICAgICAgICAgICAgIHZhciBmaXJzdE9wdGlvbiA9M0QgdGhpcy5zZWxlY3QuY2hp
bGRyZW4oJ29wdGlvbicpLmZpcnN0KCk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5w
bGFjZWhvbGRlck9wdGlvbiAhPTNEPTNEIHVuZGVmaW5lZCApIHsKICAgICAgICAgICAgICAgICAg
ICAgLy9EZXRlcm1pbmUgdGhlIHBsYWNlaG9sZGVyIG9wdGlvbiBiYXNlZCBvbiB0aGUgc3BlY2lm
PQppZWQgcGxhY2Vob2xkZXJPcHRpb24gc2V0dGluZwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKHRoaXMub3B0cy5wbGFjZWhvbGRlck9wdGlvbiA9M0Q9M0Q9M0QgImZpcnN0IiA9CiYmIGZp
cnN0T3B0aW9uKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiB0aGlzLm9w
dHMucGxhY2Vob2xkZXJPcHRpb24gPTNEPTNEPTNEICI9CmZ1bmN0aW9uIiAmJiB0aGlzLm9wdHMu
cGxhY2Vob2xkZXJPcHRpb24odGhpcy5zZWxlY3QpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGZpcnN0T3B0aW9uLnRleHQoKSA9M0Q9M0Q9M0QgIiIgJiYgZmlyc3RPcHRpb24uPQp2YWwo
KSA9M0Q9M0Q9M0QgIiIpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQudHJpbShmaXJz
dE9wdGlvbi50ZXh0KCkpID0zRD0zRD0zRCAiIiAmJiBmaXJzPQp0T3B0aW9uLnZhbCgpID0zRD0z
RD0zRCAiIikgewogICAgICAgICAgICAgICAgICAgICAvL05vIGV4cGxpY2l0IHBsYWNlaG9sZGVy
IG9wdGlvbiBzcGVjaWZpZWQsIHVzZSB0aGUgZmk9CnJzdCBpZiBpdCdzIGJsYW5rCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmaXJzdE9wdGlvbjsKICAgICAgICAgICAgICAgICB9CkBAIC0x
NzI5LDcgKzE4OTQsNyBAQAogICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgICBpbml0Q29udGFp
bmVyV2lkdGg6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVDb250
YWluZXJXaWR0aCgpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3R5bGUsIGF0dHJzLCBtYXRjaGVz
LCBpLCBsOworICAgICAgICAgICAgICAgIHZhciBzdHlsZSwgYXR0cnMsIG1hdGNoZXMsIGksIGws
IGF0dHI7Cj0yMAogICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMud2lkdGggPTNEPTNEPTNE
ICJvZmYiKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMTc0MSw4ICsx
OTA2LDggQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICE9M0Q9M0QgdW5kZWZpbmVk
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9M0Qgc3R5bGUuc3BsaXQoJzsnKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9M0QgMCwgbCA9M0QgYXR0cnMubGVuZ3Ro
OyBpIDwgbDsgaSA9M0QgaSArPQogMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZXMgPTNEIGF0dHJzW2ldLnJlcGxhY2UoL1xzL2csICcnKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAubWF0Y2goL1teLV13aWR0aDooKFstK10/KFswLTldKlwuKT9bMC05XSs9
CikocHh8ZW18ZXh8JXxpbnxjbXxtbXxwdHxwYykpL2kpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF0dHIgPTNEIGF0dHJzW2ldLnJlcGxhY2UoL1xzL2csICcnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVzID0zRCBhdHRyLm1hdGNoKC9ed2lkdGg6KChbLStdPyhb
MC05XSpcPQouKT9bMC05XSspKHB4fGVtfGV4fCV8aW58Y218bW18cHR8cGMpKS9pKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPTNEPTNEIG51bGwgJiYgbWF0Y2hl
cy5sZW5ndGggPj0KPTNEIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTc4MSwxNiArMTk0
NiwxOSBAQAogICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9M0QgJChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKSkuYXR0cih7CiAgICAgICAgICAgICAgICAgImNsYXNzIjogInNlbGVjdDIt
Y29udGFpbmVyIgogICAgICAgICAgICAgfSkuaHRtbChbCi0gICAgICAgICAgICAgICAgIjxhIGhy
ZWY9M0QnamF2YXNjcmlwdDp2b2lkKDApJyBvbmNsaWNrPTNEJ3JldHVybiBmYWxzZTsnID0KY2xh
c3M9M0Qnc2VsZWN0Mi1jaG9pY2UnIHRhYmluZGV4PTNEJy0xJz4iLAotICAgICAgICAgICAgICAg
ICIgICA8c3BhbiBjbGFzcz0zRCdzZWxlY3QyLWNob3Nlbic+Jm5ic3A7PC9zcGFuPjxhYmJyIGNs
YXM9CnM9M0Qnc2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWNsb3NlJz48L2FiYnI+IiwKLSAgICAgICAg
ICAgICAgICAiICAgPHNwYW4gY2xhc3M9M0Qnc2VsZWN0Mi1hcnJvdyc+PGI+PC9iPjwvc3Bhbj4i
LAorICAgICAgICAgICAgICAgICI8YSBocmVmPTNEJ2phdmFzY3JpcHQ6dm9pZCgwKScgY2xhc3M9
M0Qnc2VsZWN0Mi1jaG9pY2UnIHQ9CmFiaW5kZXg9M0QnLTEnPiIsCisgICAgICAgICAgICAgICAg
IiAgIDxzcGFuIGNsYXNzPTNEJ3NlbGVjdDItY2hvc2VuJz4mIzE2MDs8L3NwYW4+PGFiYnIgY2xh
cz0Kcz0zRCdzZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xvc2UnPjwvYWJicj4iLAorICAgICAgICAg
ICAgICAgICIgICA8c3BhbiBjbGFzcz0zRCdzZWxlY3QyLWFycm93JyByb2xlPTNEJ3ByZXNlbnRh
dGlvbic+PGI9CiByb2xlPTNEJ3ByZXNlbnRhdGlvbic+PC9iPjwvc3Bhbj4iLAogICAgICAgICAg
ICAgICAgICI8L2E+IiwKLSAgICAgICAgICAgICAgICAiPGlucHV0IGNsYXNzPTNEJ3NlbGVjdDIt
Zm9jdXNzZXIgc2VsZWN0Mi1vZmZzY3JlZW4nIHR5cGU9Cj0zRCd0ZXh0Jy8+IiwKKyAgICAgICAg
ICAgICAgICAiPGxhYmVsIGZvcj0zRCcnIGNsYXNzPTNEJ3NlbGVjdDItb2Zmc2NyZWVuJz48L2xh
YmVsPiIsCisgICAgICAgICAgICAgICAgIjxpbnB1dCBjbGFzcz0zRCdzZWxlY3QyLWZvY3Vzc2Vy
IHNlbGVjdDItb2Zmc2NyZWVuJyB0eXBlPQo9M0QndGV4dCcgYXJpYS1oYXNwb3B1cD0zRCd0cnVl
JyByb2xlPTNEJ2J1dHRvbicgLz4iLAogICAgICAgICAgICAgICAgICI8ZGl2IGNsYXNzPTNEJ3Nl
bGVjdDItZHJvcCBzZWxlY3QyLWRpc3BsYXktbm9uZSc+IiwKICAgICAgICAgICAgICAgICAiICAg
PGRpdiBjbGFzcz0zRCdzZWxlY3QyLXNlYXJjaCc+IiwKLSAgICAgICAgICAgICAgICAiICAgICAg
IDxpbnB1dCB0eXBlPTNEJ3RleHQnIGF1dG9jb21wbGV0ZT0zRCdvZmYnIGF1dG9jb3JyPQplY3Q9
M0Qnb2ZmJyBhdXRvY2FwaXRhbGl6ZT0zRCdvZmYnIHNwZWxsY2hlY2s9M0QnZmFsc2UnIGNsYXNz
PTNEJ3NlbGVjdDItaW49CnB1dCcvPiIsCisgICAgICAgICAgICAgICAgIiAgICAgICA8bGFiZWwg
Zm9yPTNEJycgY2xhc3M9M0Qnc2VsZWN0Mi1vZmZzY3JlZW4nPjwvbGFiZT0KbD4iLAorICAgICAg
ICAgICAgICAgICIgICAgICAgPGlucHV0IHR5cGU9M0QndGV4dCcgYXV0b2NvbXBsZXRlPTNEJ29m
ZicgYXV0b2NvcnI9CmVjdD0zRCdvZmYnIGF1dG9jYXBpdGFsaXplPTNEJ29mZicgc3BlbGxjaGVj
az0zRCdmYWxzZScgY2xhc3M9M0Qnc2VsZWN0Mi1pbj0KcHV0JyByb2xlPTNEJ2NvbWJvYm94JyBh
cmlhLWV4cGFuZGVkPTNEJ3RydWUnIiwKKyAgICAgICAgICAgICAgICAiICAgICAgIGFyaWEtYXV0
b2NvbXBsZXRlPTNEJ2xpc3QnIC8+IiwKICAgICAgICAgICAgICAgICAiICAgPC9kaXY+IiwKLSAg
ICAgICAgICAgICAgICAiICAgPHVsIGNsYXNzPTNEJ3NlbGVjdDItcmVzdWx0cyc+IiwKKyAgICAg
ICAgICAgICAgICAiICAgPHVsIGNsYXNzPTNEJ3NlbGVjdDItcmVzdWx0cycgcm9sZT0zRCdsaXN0
Ym94Jz4iLAogICAgICAgICAgICAgICAgICIgICA8L3VsPiIsCiAgICAgICAgICAgICAgICAgIjwv
ZGl2PiJdLmpvaW4oIiIpKTsKICAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7CkBAIC0xODE5
LDE3ICsxOTg3LDE5IEBACj0yMAogICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLnZhbCh0aGlz
LmZvY3Vzc2VyLnZhbCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuc2VhcmNo
LmZvY3VzKCk7Ci0gICAgICAgICAgICAvLyBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBhZnRl
ciBmb2N1c3NpbmcsIG90aGVyd2lzZSBpdCB3aT0KbGwgYmUgYXQgdGhlIGJlZ2lubmluZyBhbmQK
LSAgICAgICAgICAgIC8vIG5ldyB0ZXh0IHdpbGwgYXBwZWFyICpiZWZvcmUqIGZvY3Vzc2VyLnZh
bCgpCi0gICAgICAgICAgICBlbCA9M0QgdGhpcy5zZWFyY2guZ2V0KDApOwotICAgICAgICAgICAg
aWYgKGVsLmNyZWF0ZVRleHRSYW5nZSkgewotICAgICAgICAgICAgICAgIHJhbmdlID0zRCBlbC5j
cmVhdGVUZXh0UmFuZ2UoKTsKLSAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGVsLnNldFNlbGVjdGlvblJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgbGVuID0zRCB0aGlzLnNl
YXJjaC52YWwoKS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2Uo
bGVuLCBsZW4pOworICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5zaG91bGRGb2N1c0lucHV0KHRo
aXMpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsKKyAgICAgICAgICAg
ICAgICAvLyBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBhZnRlciBmb2N1c3NpbmcsIG90aGVy
d2lzZSBpPQp0IHdpbGwgYmUgYXQgdGhlIGJlZ2lubmluZyBhbmQKKyAgICAgICAgICAgICAgICAv
LyBuZXcgdGV4dCB3aWxsIGFwcGVhciAqYmVmb3JlKiBmb2N1c3Nlci52YWwoKQorICAgICAgICAg
ICAgICAgIGVsID0zRCB0aGlzLnNlYXJjaC5nZXQoMCk7CisgICAgICAgICAgICAgICAgaWYgKGVs
LmNyZWF0ZVRleHRSYW5nZSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZSA9M0QgZWwuY3Jl
YXRlVGV4dFJhbmdlKCk7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0KCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChlbC5zZXRTZWxlY3Rpb25SYW5nZSkgeworICAgICAgICAgICAgICAgICAgICBs
ZW4gPTNEIHRoaXMuc2VhcmNoLnZhbCgpLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgZWwu
c2V0U2VsZWN0aW9uUmFuZ2UobGVuLCBsZW4pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KPTIwCiAgICAgICAgICAgICAvLyBpbml0aWFsaXplcyBzZWFyY2gncyB2YWx1ZSB3aXRo
IG5leHRTZWFyY2hUZXJtIChpZiBkZWZpbmVkID0KYnkgdXNlcikKQEAgLTE4NDcsMTQgKzIwMTcs
MTMgQEAKICAgICAgICAgfSwKPTIwCiAgICAgICAgIC8vIHNpbmdsZQotICAgICAgICBjbG9zZTog
ZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgICBjbG9zZTogZnVuY3Rpb24gKCkgewogICAgICAg
ICAgICAgaWYgKCF0aGlzLm9wZW5lZCgpKSByZXR1cm47CiAgICAgICAgICAgICB0aGlzLnBhcmVu
dC5jbG9zZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwo9MjAKLSAgICAgICAgICAgIHBhcmFtcyA9
M0QgcGFyYW1zIHx8IHtmb2N1czogdHJ1ZX07Ci0gICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnJl
bW92ZUF0dHIoImRpc2FibGVkIik7Ci0KLSAgICAgICAgICAgIGlmIChwYXJhbXMuZm9jdXMpIHsK
KyAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIucHJvcCgiZGlzYWJsZWQiLCBmYWxzZSk7CisKKyAg
ICAgICAgICAgIGlmICh0aGlzLm9wdHMuc2hvdWxkRm9jdXNJbnB1dCh0aGlzKSkgewogICAgICAg
ICAgICAgICAgIHRoaXMuZm9jdXNzZXIuZm9jdXMoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSwKQEAgLTE4NjQsOCArMjAzMywxMCBAQAogICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkKCkp
IHsKICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKLSAg
ICAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmZvY3VzKCk7CisgICAgICAgICAgICAgICAgdGhp
cy5mb2N1c3Nlci5wcm9wKCJkaXNhYmxlZCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5vcHRzLnNob3VsZEZvY3VzSW5wdXQodGhpcykpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5mb2N1c3Nlci5mb2N1cygpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfSwKPTIwCkBAIC0xODc3LDggKzIwNDgsMTEgQEAKICAgICAgICAgLy8gc2luZ2xl
CiAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgdGhpcy5wYXJlbnQu
Y2FuY2VsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB0aGlzLmZvY3Vzc2Vy
LnJlbW92ZUF0dHIoImRpc2FibGVkIik7Ci0gICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmZvY3Vz
KCk7CisgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnByb3AoImRpc2FibGVkIiwgZmFsc2UpOwor
CisgICAgICAgICAgICBpZiAodGhpcy5vcHRzLnNob3VsZEZvY3VzSW5wdXQodGhpcykpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmZvY3VzKCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0sCj0yMAogICAgICAgICAvLyBzaW5nbGUKQEAgLTE4ODYsNiArMjA2MCwxMSBAQAogICAg
ICAgICAgICAgJCgibGFiZWxbZm9yPTNEJyIgKyB0aGlzLmZvY3Vzc2VyLmF0dHIoJ2lkJykgKyAi
J10iKQogICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlzLm9wdHMuZWxlbWVudC5hdHRy
KCJpZCIpKTsKICAgICAgICAgICAgIHRoaXMucGFyZW50LmRlc3Ryb3kuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKworICAgICAgICAgICAgY2xlYW51cEpRdWVyeUVsZW1lbnRzLmNhbGwodGhpcywK
KyAgICAgICAgICAgICAgICAic2VsZWN0aW9uIiwKKyAgICAgICAgICAgICAgICAiZm9jdXNzZXIi
CisgICAgICAgICAgICApOwogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gc2luZ2xlCkBAIC0x
ODkzLDcgKzIwNzIsOSBAQAo9MjAKICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24sCiAgICAgICAg
ICAgICAgICAgY29udGFpbmVyID0zRCB0aGlzLmNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICBk
cm9wZG93biA9M0QgdGhpcy5kcm9wZG93bjsKKyAgICAgICAgICAgICAgICBkcm9wZG93biA9M0Qg
dGhpcy5kcm9wZG93biwKKyAgICAgICAgICAgICAgICBpZFN1ZmZpeCA9M0QgbmV4dFVpZCgpLAor
ICAgICAgICAgICAgICAgIGVsZW1lbnRMYWJlbDsKPTIwCiAgICAgICAgICAgICBpZiAodGhpcy5v
cHRzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoIDwgMCkgewogICAgICAgICAgICAgICAgIHRoaXMu
c2hvd1NlYXJjaChmYWxzZSk7CkBAIC0xOTA1LDE3ICsyMDg2LDQwIEBACj0yMAogICAgICAgICAg
ICAgdGhpcy5mb2N1c3NlciA9M0QgY29udGFpbmVyLmZpbmQoIi5zZWxlY3QyLWZvY3Vzc2VyIik7
Cj0yMAorICAgICAgICAgICAgLy8gYWRkIGFyaWEgYXNzb2NpYXRpb25zCisgICAgICAgICAgICBz
ZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItY2hvc2VuIikuYXR0cigiaWQiLCAic2VsZWN0Mi1jaG9z
ZW4tIj0KK2lkU3VmZml4KTsKKyAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIuYXR0cigiYXJpYS1s
YWJlbGxlZGJ5IiwgInNlbGVjdDItY2hvc2VuLSIraWRTdWZmPQppeCk7CisgICAgICAgICAgICB0
aGlzLnJlc3VsdHMuYXR0cigiaWQiLCAic2VsZWN0Mi1yZXN1bHRzLSIraWRTdWZmaXgpOworICAg
ICAgICAgICAgdGhpcy5zZWFyY2guYXR0cigiYXJpYS1vd25zIiwgInNlbGVjdDItcmVzdWx0cy0i
K2lkU3VmZml4KTsKKwogICAgICAgICAgICAgLy8gcmV3cml0ZSBsYWJlbHMgZnJvbSBvcmlnaW5h
bCBlbGVtZW50IHRvIGZvY3Vzc2VyCi0gICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmF0dHIoImlk
IiwgInMyaWRfYXV0b2dlbiIrbmV4dFVpZCgpKTsKLQotICAgICAgICAgICAgJCgibGFiZWxbZm9y
PTNEJyIgKyB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJpZCIpICsgIiddIikKKyAgICAgICAgICAg
IHRoaXMuZm9jdXNzZXIuYXR0cigiaWQiLCAiczJpZF9hdXRvZ2VuIitpZFN1ZmZpeCk7CisKKyAg
ICAgICAgICAgIGVsZW1lbnRMYWJlbCA9M0QgJCgibGFiZWxbZm9yPTNEJyIgKyB0aGlzLm9wdHMu
ZWxlbWVudC5hdHRyKCJpPQpkIikgKyAiJ10iKTsKKworICAgICAgICAgICAgdGhpcy5mb2N1c3Nl
ci5wcmV2KCkKKyAgICAgICAgICAgICAgICAudGV4dChlbGVtZW50TGFiZWwudGV4dCgpKQogICAg
ICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlzLmZvY3Vzc2VyLmF0dHIoJ2lkJykpOwo9MjAK
KyAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgb3JpZ2luYWwgZWxlbWVudCByZXRhaW5zIGFuIGFj
Y2Vzc2libGUgbmFtZQorICAgICAgICAgICAgdmFyIG9yaWdpbmFsVGl0bGUgPTNEIHRoaXMub3B0
cy5lbGVtZW50LmF0dHIoInRpdGxlIik7CisgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5h
dHRyKCJ0aXRsZSIsIChvcmlnaW5hbFRpdGxlIHx8IGVsZW1lbnRMYWJlbD0KLnRleHQoKSkpOwor
CiAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmF0dHIoInRhYmluZGV4IiwgdGhpcy5lbGVtZW50
VGFiSW5kZXgpOwo9MjAKKyAgICAgICAgICAgIC8vIHdyaXRlIGxhYmVsIGZvciBzZWFyY2ggZmll
bGQgdXNpbmcgdGhlIGxhYmVsIGZyb20gdGhlIGZvY3VzPQpzZXIgZWxlbWVudAorICAgICAgICAg
ICAgdGhpcy5zZWFyY2guYXR0cigiaWQiLCB0aGlzLmZvY3Vzc2VyLmF0dHIoJ2lkJykgKyAnX3Nl
YXJjaCcpOworCisgICAgICAgICAgICB0aGlzLnNlYXJjaC5wcmV2KCkKKyAgICAgICAgICAgICAg
ICAudGV4dCgkKCJsYWJlbFtmb3I9M0QnIiArIHRoaXMuZm9jdXNzZXIuYXR0cignaWQnKSArICIn
XSIpPQoudGV4dCgpKQorICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlzLnNlYXJjaC5h
dHRyKCdpZCcpKTsKKwogICAgICAgICAgICAgdGhpcy5zZWFyY2gub24oImtleWRvd24iLCB0aGlz
LmJpbmQoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcmZh
Y2VFbmFibGVkKCkpIHJldHVybjsKPTIwCisgICAgICAgICAgICAgICAgLy8gZmlsdGVyIDIyOSBr
ZXlDb2RlcyAoaW5wdXQgbWV0aG9kIGVkaXRvciBpcyBwcm9jZXNzaW5nID0Ka2V5IGlucHV0KQor
ICAgICAgICAgICAgICAgIGlmICgyMjkgPTNEPTNEIGUua2V5Q29kZSkgcmV0dXJuOworCiAgICAg
ICAgICAgICAgICAgaWYgKGUud2hpY2ggPTNEPTNEPTNEIEtFWS5QQUdFX1VQIHx8IGUud2hpY2gg
PTNEPTNEPTNEIEtFWT0KLlBBR0VfRE9XTikgewogICAgICAgICAgICAgICAgICAgICAvLyBwcmV2
ZW50IHRoZSBwYWdlIGZyb20gc2Nyb2xsaW5nCiAgICAgICAgICAgICAgICAgICAgIGtpbGxFdmVu
dChlKTsKQEAgLTE5NDUsOSArMjE0OSwxMSBAQAogICAgICAgICAgICAgdGhpcy5zZWFyY2gub24o
ImJsdXIiLCB0aGlzLmJpbmQoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgIC8vIGEgd29y
a2Fyb3VuZCBmb3IgY2hyb21lIHRvIGtlZXAgdGhlIHNlYXJjaCBmaWVsZCBmb2N1c3M9CmVkIHdo
ZW4gdGhlIHNjcm9sbCBiYXIgaXMgdXNlZCB0byBzY3JvbGwgdGhlIGRyb3Bkb3duLgogICAgICAg
ICAgICAgICAgIC8vIHdpdGhvdXQgdGhpcyB0aGUgc2VhcmNoIGZpZWxkIGxvc2VzIGZvY3VzIHdo
aWNoIGlzIGFubm89CnlpbmcKLSAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxl
bWVudCA9M0Q9M0Q9M0QgdGhpcy5ib2R5KCkuZ2V0KDApKSB7CisgICAgICAgICAgICAgICAgaWYg
KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPTNEPTNEPTNEIHRoaXMuYm9keS5nZXQoMCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQodGhpcy5iaW5kKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfSksIDApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0pKTsKQEAgLTE5OTMsNyArMjE5OSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSkpOwo9MjAKLSAgICAgICAgICAgIHNlbGVjdGlvbi5vbigibW91c2Vkb3duIiwgImFi
YnIiLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5vbigi
bW91c2Vkb3duIHRvdWNoc3RhcnQiLCAiYWJiciIsIHRoaXMuYmluZChmdW5jdGlvPQpuIChlKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW50ZXJmYWNlRW5hYmxlZCgpKSByZXR1cm47
CiAgICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpOwogICAgICAgICAgICAgICAgIGtpbGxFdmVu
dEltbWVkaWF0ZWx5KGUpOwpAQCAtMjAwMSw3ICsyMjA3LDkgQEAKICAgICAgICAgICAgICAgICB0
aGlzLnNlbGVjdGlvbi5mb2N1cygpOwogICAgICAgICAgICAgfSkpOwo9MjAKLSAgICAgICAgICAg
IHNlbGVjdGlvbi5vbigibW91c2Vkb3duIiwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CisgICAg
ICAgICAgICBzZWxlY3Rpb24ub24oIm1vdXNlZG93biB0b3VjaHN0YXJ0IiwgdGhpcy5iaW5kKGZ1
bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgLy8gUHJldmVudCBJRSBmcm9tIGdlbmVyYXRp
bmcgYSBjbGljayBldmVudCBvbiB0aGUgYm9keQorICAgICAgICAgICAgICAgIHJlaW5zZXJ0RWxl
bWVudChzZWxlY3Rpb24pOwo9MjAKICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGFpbmVy
Lmhhc0NsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUiKSkgewogICAgICAgICAgICAgICAg
ICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKCQuRXZlbnQoInNlbGVjdDItZm9jdXMiKSk7
CkBAIC0yMDE2LDcgKzIyMjQsMTEgQEAKICAgICAgICAgICAgICAgICBraWxsRXZlbnQoZSk7CiAg
ICAgICAgICAgICB9KSk7Cj0yMAotICAgICAgICAgICAgZHJvcGRvd24ub24oIm1vdXNlZG93biIs
IHRoaXMuYmluZChmdW5jdGlvbigpIHsgdGhpcy5zZWFyY2guZm89CmN1cygpOyB9KSk7CisgICAg
ICAgICAgICBkcm9wZG93bi5vbigibW91c2Vkb3duIHRvdWNoc3RhcnQiLCB0aGlzLmJpbmQoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5zaG91bGRGb2N1c0lucHV0
KHRoaXMpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLmZvY3VzKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkpOwo9MjAKICAgICAgICAgICAgIHNlbGVjdGlv
bi5vbigiZm9jdXMiLCB0aGlzLmJpbmQoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgIGtp
bGxFdmVudChlKTsKQEAgLTIwODUsNiArMjI5Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLnVwZGF0ZVNlbGVjdGlvbihzZWxlY3RlZCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldFBsYWNlaG9s
ZGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5leHRTZWFyY2hUZXJtID0zRCBz
ZWxmLm9wdHMubmV4dFNlYXJjaFRlcm0ocz0KZWxlY3RlZCwgc2VsZi5zZWFyY2gudmFsKCkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
CkBAIC0yMDkyLDggKzIzMDUsOCBAQAo9MjAKICAgICAgICAgaXNQbGFjZWhvbGRlck9wdGlvblNl
bGVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIHZhciBwbGFjZWhvbGRlck9wdGlvbjsK
LSAgICAgICAgICAgIGlmICghdGhpcy5nZXRQbGFjZWhvbGRlcigpKSByZXR1cm4gZmFsc2U7IC8v
IG5vIHBsYWNlaG9sZGVyIHNwPQplY2lmaWVkIHNvIG5vIG9wdGlvbiBzaG91bGQgYmUgY29uc2lk
ZXJlZAotICAgICAgICAgICAgcmV0dXJuICgocGxhY2Vob2xkZXJPcHRpb24gPTNEIHRoaXMuZ2V0
UGxhY2Vob2xkZXJPcHRpb24oKSkgIT0KPTNEPTNEIHVuZGVmaW5lZCAmJiBwbGFjZWhvbGRlck9w
dGlvbi5pcygnOnNlbGVjdGVkJykpCisgICAgICAgICAgICBpZiAodGhpcy5nZXRQbGFjZWhvbGRl
cigpID0zRD0zRD0zRCB1bmRlZmluZWQpIHJldHVybiBmYWxzZTsgLz0KLyBubyBwbGFjZWhvbGRl
ciBzcGVjaWZpZWQgc28gbm8gb3B0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkCisgICAgICAgICAg
ICByZXR1cm4gKChwbGFjZWhvbGRlck9wdGlvbiA9M0QgdGhpcy5nZXRQbGFjZWhvbGRlck9wdGlv
bigpKSAhPQo9M0Q9M0QgdW5kZWZpbmVkICYmIHBsYWNlaG9sZGVyT3B0aW9uLnByb3AoInNlbGVj
dGVkIikpCiAgICAgICAgICAgICAgICAgfHwgKHRoaXMub3B0cy5lbGVtZW50LnZhbCgpID0zRD0z
RD0zRCAiIikKICAgICAgICAgICAgICAgICB8fCAodGhpcy5vcHRzLmVsZW1lbnQudmFsKCkgPTNE
PTNEPTNEIHVuZGVmaW5lZCkKICAgICAgICAgICAgICAgICB8fCAodGhpcy5vcHRzLmVsZW1lbnQu
dmFsKCkgPTNEPTNEPTNEIG51bGwpOwpAQCAtMjEwNyw3ICsyMzIwLDcgQEAKICAgICAgICAgICAg
IGlmIChvcHRzLmVsZW1lbnQuZ2V0KDApLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9M0Q9M0Q9M0Qg
InNlbGVjPQp0IikgewogICAgICAgICAgICAgICAgIC8vIGluc3RhbGwgdGhlIHNlbGVjdGlvbiBp
bml0aWFsaXplcgogICAgICAgICAgICAgICAgIG9wdHMuaW5pdFNlbGVjdGlvbiA9M0QgZnVuY3Rp
b24gKGVsZW1lbnQsIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rl
ZCA9M0QgZWxlbWVudC5maW5kKCI6c2VsZWN0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHNlbGVjdGVkID0zRCBlbGVtZW50LmZpbmQoIm9wdGlvbiIpLmZpbHRlcihmdW5jdGlvPQpuKCkg
eyByZXR1cm4gdGhpcy5zZWxlY3RlZCAmJiAhdGhpcy5kaXNhYmxlZCB9KTsKICAgICAgICAgICAg
ICAgICAgICAgLy8gYSBzaW5nbGUgc2VsZWN0IGJveCBhbHdheXMgaGFzIGEgdmFsdWUsIG5vIG5l
ZWQgdG8gPQpudWxsIGNoZWNrICdzZWxlY3RlZCcKICAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2soc2VsZi5vcHRpb25Ub0RhdGEoc2VsZWN0ZWQpKTsKICAgICAgICAgICAgICAgICB9OwpAQCAt
MjIyNCwxMCArMjQzNywxMyBAQAogICAgICAgICAgICAgdGhpcy5uZXh0U2VhcmNoVGVybSA9M0Qg
dGhpcy5vcHRzLm5leHRTZWFyY2hUZXJtKGRhdGEsIHRoaXMuc2U9CmFyY2gudmFsKCkpOwogICAg
ICAgICAgICAgdGhpcy5jbG9zZSgpOwo9MjAKLSAgICAgICAgICAgIGlmICghb3B0aW9ucyB8fCAh
b3B0aW9ucy5ub0ZvY3VzKQorICAgICAgICAgICAgaWYgKCghb3B0aW9ucyB8fCAhb3B0aW9ucy5u
b0ZvY3VzKSAmJiB0aGlzLm9wdHMuc2hvdWxkRm9jdXNJbnA9CnV0KHRoaXMpKSB7CiAgICAgICAg
ICAgICAgICAgdGhpcy5mb2N1c3Nlci5mb2N1cygpOwotCi0gICAgICAgICAgICBpZiAoIWVxdWFs
KG9sZCwgdGhpcy5pZChkYXRhKSkpIHsgdGhpcy50cmlnZ2VyQ2hhbmdlKHthZGRlZDpkYT0KdGEs
cmVtb3ZlZDpvbGREYXRhfSk7IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFl
cXVhbChvbGQsIHRoaXMuaWQoZGF0YSkpKSB7CisgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2Vy
Q2hhbmdlKHsgYWRkZWQ6IGRhdGEsIHJlbW92ZWQ6IG9sZERhdGEgfSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0sCj0yMAogICAgICAgICAvLyBzaW5nbGUKQEAgLTIyNzcsNyArMjQ5Myw3IEBA
CiAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHsKICAgICAgICAgICAgICAgICB0aGlzLnNl
bGVjdAogICAgICAgICAgICAgICAgICAgICAudmFsKHZhbCkKLSAgICAgICAgICAgICAgICAgICAg
LmZpbmQoIjpzZWxlY3RlZCIpLmVhY2gyKGZ1bmN0aW9uIChpLCBlbG0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgLmZpbmQoIm9wdGlvbiIpLmZpbHRlcihmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMu
c2VsZWN0PQplZCB9KS5lYWNoMihmdW5jdGlvbiAoaSwgZWxtKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhID0zRCBzZWxmLm9wdGlvblRvRGF0YShlbG0pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTIzNDks
NiArMjU2NSw3IEBACiAgICAgICAgICAgICB9KS5odG1sKFsKICAgICAgICAgICAgICAgICAiPHVs
IGNsYXNzPTNEJ3NlbGVjdDItY2hvaWNlcyc+IiwKICAgICAgICAgICAgICAgICAiICA8bGkgY2xh
c3M9M0Qnc2VsZWN0Mi1zZWFyY2gtZmllbGQnPiIsCisgICAgICAgICAgICAgICAgIiAgICA8bGFi
ZWwgZm9yPTNEJycgY2xhc3M9M0Qnc2VsZWN0Mi1vZmZzY3JlZW4nPjwvbGFiZWw+IiwKICAgICAg
ICAgICAgICAgICAiICAgIDxpbnB1dCB0eXBlPTNEJ3RleHQnIGF1dG9jb21wbGV0ZT0zRCdvZmYn
IGF1dG9jb3JyZWN0PQo9M0Qnb2ZmJyBhdXRvY2FwaXRhbGl6ZT0zRCdvZmYnIHNwZWxsY2hlY2s9
M0QnZmFsc2UnIGNsYXNzPTNEJ3NlbGVjdDItaW5wdXQ9Cic+IiwKICAgICAgICAgICAgICAgICAi
ICA8L2xpPiIsCiAgICAgICAgICAgICAgICAgIjwvdWw+IiwKQEAgLTIzNjcsMTIgKzI1ODQsMTIg
QEAKICAgICAgICAgICAgIC8vIFRPRE8gdmFsaWRhdGUgcGxhY2Vob2xkZXIgaXMgYSBzdHJpbmcg
aWYgc3BlY2lmaWVkCj0yMAogICAgICAgICAgICAgaWYgKG9wdHMuZWxlbWVudC5nZXQoMCkudGFn
TmFtZS50b0xvd2VyQ2FzZSgpID0zRD0zRD0zRCAic2VsZWM9CnQiKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gaW5zdGFsbCBzdGhlIHNlbGVjdGlvbiBpbml0aWFsaXplcgorICAgICAgICAgICAgICAg
IC8vIGluc3RhbGwgdGhlIHNlbGVjdGlvbiBpbml0aWFsaXplcgogICAgICAgICAgICAgICAgIG9w
dHMuaW5pdFNlbGVjdGlvbiA9M0QgZnVuY3Rpb24gKGVsZW1lbnQsIGNhbGxiYWNrKSB7Cj0yMAog
ICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9M0QgW107Cj0yMAotICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50LmZpbmQoIjpzZWxlY3RlZCIpLmVhY2gyKGZ1bmN0aW9uIChpLCBlbG0pIHsK
KyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5maW5kKCJvcHRpb24iKS5maWx0ZXIoZnVuY3Rp
b24oKSB7IHJldHVybiB0aGlzPQouc2VsZWN0ZWQgJiYgIXRoaXMuZGlzYWJsZWQgfSkuZWFjaDIo
ZnVuY3Rpb24gKGksIGVsbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKHNl
bGYub3B0aW9uVG9EYXRhKGVsbSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7CkBAIC0yNDE3LDYgKzI2MzQsNyBAQAogICAgICAg
ICAgICAgcmV0dXJuIG9wdHM7CiAgICAgICAgIH0sCj0yMAorICAgICAgICAvLyBtdWx0aQogICAg
ICAgICBzZWxlY3RDaG9pY2U6IGZ1bmN0aW9uIChjaG9pY2UpIHsKPTIwCiAgICAgICAgICAgICB2
YXIgc2VsZWN0ZWQgPTNEIHRoaXMuY29udGFpbmVyLmZpbmQoIi5zZWxlY3QyLXNlYXJjaC1jaG9p
Y2UtZj0Kb2N1cyIpOwpAQCAtMjQ0MCw2ICsyNjU4LDExIEBACiAgICAgICAgICAgICAkKCJsYWJl
bFtmb3I9M0QnIiArIHRoaXMuc2VhcmNoLmF0dHIoJ2lkJykgKyAiJ10iKQogICAgICAgICAgICAg
ICAgIC5hdHRyKCdmb3InLCB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJpZCIpKTsKICAgICAgICAg
ICAgIHRoaXMucGFyZW50LmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAg
ICAgICAgY2xlYW51cEpRdWVyeUVsZW1lbnRzLmNhbGwodGhpcywKKyAgICAgICAgICAgICAgICAi
c2VhcmNoQ29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAic2VsZWN0aW9uIgorICAgICAgICAg
ICAgKTsKICAgICAgICAgfSwKPTIwCiAgICAgICAgIC8vIG11bHRpCkBAIC0yNDU5LDEwICsyNjgy
LDEzIEBACj0yMAogICAgICAgICAgICAgLy8gcmV3cml0ZSBsYWJlbHMgZnJvbSBvcmlnaW5hbCBl
bGVtZW50IHRvIGZvY3Vzc2VyCiAgICAgICAgICAgICB0aGlzLnNlYXJjaC5hdHRyKCJpZCIsICJz
MmlkX2F1dG9nZW4iK25leHRVaWQoKSk7Ci0gICAgICAgICAgICAkKCJsYWJlbFtmb3I9M0QnIiAr
IHRoaXMub3B0cy5lbGVtZW50LmF0dHIoImlkIikgKyAiJ10iKQorCisgICAgICAgICAgICB0aGlz
LnNlYXJjaC5wcmV2KCkKKyAgICAgICAgICAgICAgICAudGV4dCgkKCJsYWJlbFtmb3I9M0QnIiAr
IHRoaXMub3B0cy5lbGVtZW50LmF0dHIoImlkIikgKyAiPQonXSIpLnRleHQoKSkKICAgICAgICAg
ICAgICAgICAuYXR0cignZm9yJywgdGhpcy5zZWFyY2guYXR0cignaWQnKSk7Cj0yMAogICAgICAg
ICAgICAgdGhpcy5zZWFyY2gub24oImlucHV0IHBhc3RlIiwgdGhpcy5iaW5kKGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaC5hdHRyKCdwbGFjZWhvbGRlcicpICYm
IHRoaXMuc2VhcmNoLnZhbCgpLmw9CmVuZ3RoID0zRD0zRCAwKSByZXR1cm47CiAgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLmlzSW50ZXJmYWNlRW5hYmxlZCgpKSByZXR1cm47CiAgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLm9wZW5lZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Bl
bigpOwpAQCAtMjQ5MSwxMyArMjcxNywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0ZWRDaG9pY2UgPTNEIG5leHQubGVuZ3RoID8gbmV4dCA6IG51bGw7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS53aGljaCA9M0Q9M0Q9M0Qg
S0VZLkJBQ0tTUEFDRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdChz
ZWxlY3RlZC5maXJzdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLndp
ZHRoKDEwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hvaWNlID0zRCBwcmV2
Lmxlbmd0aCA/IHByZXYgOiBuZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
dW5zZWxlY3Qoc2VsZWN0ZWQuZmlyc3QoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnNlYXJjaC53aWR0aCgxMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0ZWRDaG9pY2UgPTNEIHByZXYubGVuZ3RoID8gcHJldiA6IG5leHQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9M0Q9
M0QgS0VZLkRFTEVURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdChz
ZWxlY3RlZC5maXJzdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLndp
ZHRoKDEwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hvaWNlID0zRCBuZXh0
Lmxlbmd0aCA/IG5leHQgOiBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
dW5zZWxlY3Qoc2VsZWN0ZWQuZmlyc3QoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnNlYXJjaC53aWR0aCgxMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0ZWRDaG9pY2UgPTNEIG5leHQubGVuZ3RoID8gbmV4dCA6IG51bGw7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9M0Q9
M0QgS0VZLkVOVEVSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENob2ljZSA9
M0QgbnVsbDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjY3NSw4ICsyOTAzLDE5IEBACj0y
MAogICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaCgpOwo9MjAKKyAgICAgICAgICAgIC8vIGlu
aXRpYWxpemVzIHNlYXJjaCdzIHZhbHVlIHdpdGggbmV4dFNlYXJjaFRlcm0gKGlmIGRlZmluZWQg
PQpieSB1c2VyKQorICAgICAgICAgICAgLy8gaWdub3JlIG5leHRTZWFyY2hUZXJtIGlmIHRoZSBk
cm9wZG93biBpcyBvcGVuZWQgYnkgdGhlIHVzZXI9CiBwcmVzc2luZyBhIGxldHRlcgorICAgICAg
ICAgICAgaWYodGhpcy5zZWFyY2gudmFsKCkgPTNEPTNEPTNEICIiKSB7CisgICAgICAgICAgICAg
ICAgaWYodGhpcy5uZXh0U2VhcmNoVGVybSAhPTNEIHVuZGVmaW5lZCl7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuc2VhcmNoLnZhbCh0aGlzLm5leHRTZWFyY2hUZXJtKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZWFyY2guc2VsZWN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlc3VsdHModHJ1ZSk7Ci0gICAgICAg
ICAgICB0aGlzLnNlYXJjaC5mb2N1cygpOworICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5zaG91
bGRGb2N1c0lucHV0KHRoaXMpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMo
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIo
JC5FdmVudCgic2VsZWN0Mi1vcGVuIikpOwogICAgICAgICB9LAo9MjAKQEAgLTI3MzMsMTIgKzI5
NzIsMTggQEAKICAgICAgICAgLy8gbXVsdGkKICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChk
YXRhLCBvcHRpb25zKSB7Cj0yMAotICAgICAgICAgICAgaWYgKCF0aGlzLnRyaWdnZXJTZWxlY3Qo
ZGF0YSkpIHsgcmV0dXJuOyB9CisgICAgICAgICAgICBpZiAoIXRoaXMudHJpZ2dlclNlbGVjdChk
YXRhKSB8fCBkYXRhLnRleHQgPTNEPTNEPTNEICIiKSB7IHJldD0KdXJuOyB9Cj0yMAogICAgICAg
ICAgICAgdGhpcy5hZGRTZWxlY3RlZENob2ljZShkYXRhKTsKPTIwCiAgICAgICAgICAgICB0aGlz
Lm9wdHMuZWxlbWVudC50cmlnZ2VyKHsgdHlwZTogInNlbGVjdGVkIiwgdmFsOiB0aGlzLmlkKGRh
dD0KYSksIGNob2ljZTogZGF0YSB9KTsKPTIwCisgICAgICAgICAgICAvLyBrZWVwIHRyYWNrIG9m
IHRoZSBzZWFyY2gncyB2YWx1ZSBiZWZvcmUgaXQgZ2V0cyBjbGVhcmVkCisgICAgICAgICAgICB0
aGlzLm5leHRTZWFyY2hUZXJtID0zRCB0aGlzLm9wdHMubmV4dFNlYXJjaFRlcm0oZGF0YSwgdGhp
cy5zZT0KYXJjaC52YWwoKSk7CisKKyAgICAgICAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTsKKyAg
ICAgICAgICAgIHRoaXMudXBkYXRlUmVzdWx0cygpOworCiAgICAgICAgICAgICBpZiAodGhpcy5z
ZWxlY3QgfHwgIXRoaXMub3B0cy5jbG9zZU9uU2VsZWN0KSB0aGlzLnBvc3Rwcm9jZXNzUj0KZXN1
bHRzKGRhdGEsIGZhbHNlLCB0aGlzLm9wdHMuY2xvc2VPblNlbGVjdD0zRD0zRD0zRHRydWUpOwo9
MjAKICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuY2xvc2VPblNlbGVjdCkgewpAQCAtMjc1Miw2
ICsyOTk3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSByZWFjaGVkIG1h
eCBzZWxlY3Rpb24gc2l6ZSByZXBhaW50IHRoZSByZT0Kc3VsdHMgc28gY2hvaWNlcwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXJlIHJlcGxhY2VkIHdpdGggdGhlIG1heCBzZWxlY3Rpb24g
cmVhY2hlZCBtZXM9CnNhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUmVz
dWx0cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGluaXRpYWxpemVzIHNlYXJjaCdzIHZhbHVlIHdpdGggbmV4dFNlYXJjaFRl
cm0gPQphbmQgdXBkYXRlIHNlYXJjaCByZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
KHRoaXMubmV4dFNlYXJjaFRlcm0gIT0zRCB1bmRlZmluZWQpeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuc2VhcmNoLnZhbCh0aGlzLm5leHRTZWFyY2hUZXJtKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlc3VsdHMoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5zZWxlY3QoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB0aGlzLnBv
c2l0aW9uRHJvcGRvd24oKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjc2MSw3ICsz
MDEzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Cj0yMAotICAgICAgICAg
ICAgLy8gc2luY2UgaXQncyBub3QgcG9zc2libGUgdG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBo
YXMgYWxyZWE9CmR5IGJlZW4KKyAgICAgICAgICAgIC8vIHNpbmNlIGl0cyBub3QgcG9zc2libGUg
dG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBoYXMgYWxyZWFkPQp5IGJlZW4KICAgICAgICAgICAg
IC8vIGFkZGVkIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgYSBuZXcgZWxlbWVu
dCBiZWZvPQpyZSBmaXJpbmcgY2hhbmdlCiAgICAgICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2Uo
eyBhZGRlZDogZGF0YSB9KTsKPTIwCkBAIC0yNzgwLDcgKzMwMzIsNyBAQAogICAgICAgICAgICAg
ICAgIGVuYWJsZWRJdGVtID0zRCAkKAogICAgICAgICAgICAgICAgICAgICAiPGxpIGNsYXNzPTNE
J3NlbGVjdDItc2VhcmNoLWNob2ljZSc+IiArCiAgICAgICAgICAgICAgICAgICAgICIgICAgPGRp
dj48L2Rpdj4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgICA8YSBocmVmPTNEJyMnIG9uY2xp
Y2s9M0QncmV0dXJuIGZhbHNlOycgY2xhc3M9M0QnPQpzZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xv
c2UnIHRhYmluZGV4PTNEJy0xJz48L2E+IiArCisgICAgICAgICAgICAgICAgICAgICIgICAgPGEg
aHJlZj0zRCcjJyBjbGFzcz0zRCdzZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xvcz0KZScgdGFiaW5k
ZXg9M0QnLTEnPjwvYT4iICsKICAgICAgICAgICAgICAgICAgICAgIjwvbGk+IiksCiAgICAgICAg
ICAgICAgICAgZGlzYWJsZWRJdGVtID0zRCAkKAogICAgICAgICAgICAgICAgICAgICAiPGxpIGNs
YXNzPTNEJ3NlbGVjdDItc2VhcmNoLWNob2ljZSBzZWxlY3QyLWxvY2tlZCc+IiArCkBAIC0yODA3
LDEzICszMDU5LDExIEBACiAgICAgICAgICAgICAgICAgICAub24oImNsaWNrIGRibGNsaWNrIiwg
dGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJ
bnRlcmZhY2VFbmFibGVkKCkpIHJldHVybjsKPTIwCi0gICAgICAgICAgICAgICAgICAkKGUudGFy
Z2V0KS5jbG9zZXN0KCIuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlIikuZmFkZU91dCgnZj0KYXN0Jywg
dGhpcy5iaW5kKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNlbGVj
dCgkKGUudGFyZ2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZmlu
ZCgiLnNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1cyIpLj0KcmVtb3ZlQ2xhc3MoInNlbGVjdDIt
c2VhcmNoLWNob2ljZS1mb2N1cyIpOwotICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoKCk7Ci0gICAgICAgICAg
ICAgICAgICB9KSkuZGVxdWV1ZSgpOworICAgICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdCgk
KGUudGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5maW5kKCIuc2Vs
ZWN0Mi1zZWFyY2gtY2hvaWNlLWZvY3VzIikucmVtbz0KdmVDbGFzcygic2VsZWN0Mi1zZWFyY2gt
Y2hvaWNlLWZvY3VzIik7CiAgICAgICAgICAgICAgICAgICBraWxsRXZlbnQoZSk7CisgICAgICAg
ICAgICAgICAgICB0aGlzLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2Vh
cmNoKCk7CiAgICAgICAgICAgICAgIH0pKS5vbigiZm9jdXMiLCB0aGlzLmJpbmQoZnVuY3Rpb24g
KCkgewogICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW50ZXJmYWNlRW5hYmxlZCgpKSBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0
Mi1jb250YWluZXItYWN0aXZlIik7CkBAIC0yODMzLDcgKzMwODMsNiBAQAogICAgICAgICAgICAg
dmFyIHZhbCA9M0QgdGhpcy5nZXRWYWwoKSwKICAgICAgICAgICAgICAgICBkYXRhLAogICAgICAg
ICAgICAgICAgIGluZGV4OwotCiAgICAgICAgICAgICBzZWxlY3RlZCA9M0Qgc2VsZWN0ZWQuY2xv
c2VzdCgiLnNlbGVjdDItc2VhcmNoLWNob2ljZSIpOwo9MjAKICAgICAgICAgICAgIGlmIChzZWxl
Y3RlZC5sZW5ndGggPTNEPTNEPTNEIDApIHsKQEAgLTI4NDgsMTUgKzMwOTcsMjcgQEAKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Cj0yMAorICAgICAgICAgICAgdmFyIGV2
dCA9M0QgJC5FdmVudCgic2VsZWN0Mi1yZW1vdmluZyIpOworICAgICAgICAgICAgZXZ0LnZhbCA9
M0QgdGhpcy5pZChkYXRhKTsKKyAgICAgICAgICAgIGV2dC5jaG9pY2UgPTNEIGRhdGE7CisgICAg
ICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKGV2dCk7CisKKyAgICAgICAgICAgIGlm
IChldnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHdoaWxlKChpbmRleCA9M0QgaW5kZXhP
Zih0aGlzLmlkKGRhdGEpLCB2YWwpKSA+PTNEIDApIHsKICAgICAgICAgICAgICAgICB2YWwuc3Bs
aWNlKGluZGV4LCAxKTsKICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbCh2YWwpOwogICAgICAg
ICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy5wb3N0cHJvY2Vzc1Jlc3VsdHMoKTsKICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgc2VsZWN0ZWQucmVtb3ZlKCk7Cj0yMAotICAgICAg
ICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcih7IHR5cGU6ICJyZW1vdmVkIiwgdmFsOiB0
aGlzLmlkKGRhdGE9CiksIGNob2ljZTogZGF0YSB9KTsKKyAgICAgICAgICAgIHRoaXMub3B0cy5l
bGVtZW50LnRyaWdnZXIoeyB0eXBlOiAic2VsZWN0Mi1yZW1vdmVkIiwgdmFsOiB0aGlzPQouaWQo
ZGF0YSksIGNob2ljZTogZGF0YSB9KTsKICAgICAgICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSh7
IHJlbW92ZWQ6IGRhdGEgfSk7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
LAo9MjAKICAgICAgICAgLy8gbXVsdGkKQEAgLTI4NzYsNyArMzEzNyw3IEBACiAgICAgICAgICAg
ICB9KTsKPTIwCiAgICAgICAgICAgICBjb21wb3VuZC5lYWNoMihmdW5jdGlvbihpLCBjaG9pY2Up
IHsKLSAgICAgICAgICAgICAgICAvLyBoaWRlIGFuIG9wdGdyb3VwIGlmIGl0IGRvZXNudCBoYXZl
IGFueSBzZWxlY3RhYmxlIGNoaWxkPQpyZW4KKyAgICAgICAgICAgICAgICAvLyBoaWRlIGFuIG9w
dGdyb3VwIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgc2VsZWN0YWJsZSBjaGlsPQpkcmVuCiAgICAg
ICAgICAgICAgICAgaWYgKCFjaG9pY2UuaXMoJy5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlJykK
ICAgICAgICAgICAgICAgICAgICAgJiYgY2hvaWNlLmZpbmQoIi5zZWxlY3QyLXJlc3VsdC1zZWxl
Y3RhYmxlOm5vdCguc2VsZWN0PQoyLXNlbGVjdGVkKSIpLmxlbmd0aCA9M0Q9M0Q9M0QgMCkgewog
ICAgICAgICAgICAgICAgICAgICBjaG9pY2UuYWRkQ2xhc3MoInNlbGVjdDItc2VsZWN0ZWQiKTsK
QEAgLTI4ODcsMTEgKzMxNDgsMTEgQEAKICAgICAgICAgICAgICAgICBzZWxmLmhpZ2hsaWdodCgw
KTsKICAgICAgICAgICAgIH0KPTIwCi0gICAgICAgICAgICAvL0lmIGFsbCByZXN1bHRzIGFyZSBj
aG9zZW4gcmVuZGVyIGZvcm1hdE5vTUF0Y2hlcworICAgICAgICAgICAgLy9JZiBhbGwgcmVzdWx0
cyBhcmUgY2hvc2VuIHJlbmRlciBmb3JtYXROb01hdGNoZXMKICAgICAgICAgICAgIGlmKCF0aGlz
Lm9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlICYmICFjaG9pY2VzLmZpbHRlcignLnNlbGVjdDItPQpy
ZXN1bHQ6bm90KC5zZWxlY3QyLXNlbGVjdGVkKScpLmxlbmd0aCA+IDApewogICAgICAgICAgICAg
ICAgIGlmKCFkYXRhIHx8IGRhdGEgJiYgIWRhdGEubW9yZSAmJiB0aGlzLnJlc3VsdHMuZmluZCgi
LnNlbGU9CmN0Mi1uby1yZXN1bHRzIikubGVuZ3RoID0zRD0zRD0zRCAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChjaGVja0Zvcm1hdHRlcihzZWxmLm9wdHMuZm9ybWF0Tm9NYXRjaGVzLCAi
Zm9ybWF0Tj0Kb01hdGNoZXMiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1
bHRzLmFwcGVuZCgiPGxpIGNsYXNzPTNEJ3NlbGVjdDItbm8tcmVzdWw9CnRzJz4iICsgc2VsZi5v
cHRzLmZvcm1hdE5vTWF0Y2hlcyhzZWxmLnNlYXJjaC52YWwoKSkgKyAiPC9saT4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5hcHBlbmQoIjxsaSBjbGFzcz0zRCdzZWxl
Y3QyLW5vLXJlc3VsPQp0cyc+IiArIGV2YWx1YXRlKHNlbGYub3B0cy5mb3JtYXROb01hdGNoZXMs
IHNlbGYub3B0cy5lbGVtZW50LCBzZWxmLnNlYXJjaC49CnZhbCgpKSArICI8L2xpPiIpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
Mjk2OSw3ICszMjMwLDkgQEAKICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0zRCAwOyBqIDwg
b2xkLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbCh0aGlzLm9w
dHMuaWQoY3VycmVudFtpXSksIHRoaXMub3B0cy5pZChvbGRbaj0KXSkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50LnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGktLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGk+MCl7CisgICAgICAgICAgICAg
ICAgICAgICAgICAJaS0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgb2xkLnNwbGljZShqLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGot
LTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjk4Miw3ICszMjQ1LDcgQEAKPTIwCiAgICAg
ICAgIC8vIG11bHRpCiAgICAgICAgIHZhbDogZnVuY3Rpb24gKHZhbCwgdHJpZ2dlckNoYW5nZSkg
ewotICAgICAgICAgICAgdmFyIG9sZERhdGEsIHNlbGY9M0R0aGlzLCBjaGFuZ2VEZXRhaWxzOwor
ICAgICAgICAgICAgdmFyIG9sZERhdGEsIHNlbGY9M0R0aGlzOwo9MjAKICAgICAgICAgICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID0zRD0zRD0zRCAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZ2V0VmFsKCk7CkBAIC0zMDIxLDcgKzMyODQsNyBAQAogICAgICAgICAgICAgICAgICAg
ICBzZWxmLnVwZGF0ZVNlbGVjdGlvbihkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgc2VsZi5j
bGVhclNlYXJjaCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyQ2hhbmdlKHNlbGYuYnVpbGRDaGFu
Z2VEZXRhaWxzKG9sZERhdGE9CiwgdGhpcy5kYXRhKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYudHJpZ2dlckNoYW5nZShzZWxmLmJ1aWxkQ2hhbmdlRGV0YWlscyhvbGREYXRhPQos
IHNlbGYuZGF0YSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0KQEAgLTMwNjUsNyArMzMyOCw3IEBACiAgICAgICAgICAgICB2YXIg
c2VsZj0zRHRoaXMsIGlkcywgb2xkOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg
PTNEPTNEPTNEIDApIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uCi0g
ICAgICAgICAgICAgICAgICAgICAuZmluZCgiLnNlbGVjdDItc2VhcmNoLWNob2ljZSIpCisgICAg
ICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2UiKQogICAg
ICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbigpIHsgcmV0dXJuICQodGhpcykuZGF0YSgi
c2VsZWN0Mi1kYXRhIik9CjsgfSkKICAgICAgICAgICAgICAgICAgICAgIC5nZXQoKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CkBAIC0zMTA1LDcgKzMzNjgsNyBAQAogICAgICAgICAgICAgICAgICAg
ICBpZiAoInRhZ3MiIGluIG9wdHMpIHtvcHRzLm11bHRpcGxlID0zRCBtdWx0aXBsZSA9M0QgdHI9
CnVlO30KICAgICAgICAgICAgICAgICB9Cj0yMAotICAgICAgICAgICAgICAgIHNlbGVjdDIgPTNE
IG11bHRpcGxlID8gbmV3IE11bHRpU2VsZWN0MigpIDogbmV3IFNpbmdsZVNlbGU9CmN0MigpOwor
ICAgICAgICAgICAgICAgIHNlbGVjdDIgPTNEIG11bHRpcGxlID8gbmV3IHdpbmRvdy5TZWxlY3Qy
WyJjbGFzcyJdLm11bHRpKCk9CiA6IG5ldyB3aW5kb3cuU2VsZWN0MlsiY2xhc3MiXS5zaW5nbGUo
KTsKICAgICAgICAgICAgICAgICBzZWxlY3QyLmluaXQob3B0cyk7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKHR5cGVvZihhcmdzWzBdKSA9M0Q9M0Q9M0QgInN0cmluZyIpIHsKPTIwCkBAIC0zMTI5
LDcgKzMzOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9M0Qgc2VsZWN0MlttZXRo
b2RdLmFwcGx5KHNlbGVjdDIsIGFyZ3Muc2xpY2UoMSk9Cik7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGlmIChpbmRleE9mKGFyZ3NbMF0sIHZhbHVlTWV0aG9kcykgPj0zRCAw
Ci0gICAgICAgICAgICAgICAgICAgIHx8IChpbmRleE9mKGFyZ3NbMF0sIHByb3BlcnR5TWV0aG9k
cykgJiYgYXJncy5sZW5ndGggPQo9M0Q9M0QgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgfHwg
KGluZGV4T2YoYXJnc1swXSwgcHJvcGVydHlNZXRob2RzKSA+PTNEIDAgJiYgYXJncy5sPQplbmd0
aCA9M0Q9M0QgMSkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhYm9y
dCB0aGUgaXRlcmF0aW9uLCByZWFkeSB0byByZXR1cm4gPQpmaXJzdCBtYXRjaGVkIHZhbHVlCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTMxNjAsMTkgKzM0MjMs
MTMgQEAKICAgICAgICAgc29ydFJlc3VsdHM6IGZ1bmN0aW9uIChyZXN1bHRzLCBjb250YWluZXIs
IHF1ZXJ5KSB7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgfSwKLSAgICAg
ICAgZm9ybWF0UmVzdWx0Q3NzQ2xhc3M6IGZ1bmN0aW9uKGRhdGEpIHtyZXR1cm4gdW5kZWZpbmVk
O30sCisgICAgICAgIGZvcm1hdFJlc3VsdENzc0NsYXNzOiBmdW5jdGlvbihkYXRhKSB7cmV0dXJu
IGRhdGEuY3NzO30sCiAgICAgICAgIGZvcm1hdFNlbGVjdGlvbkNzc0NsYXNzOiBmdW5jdGlvbihk
YXRhLCBjb250YWluZXIpIHtyZXR1cm4gdW5kZWZpbj0KZWQ7fSwKLSAgICAgICAgZm9ybWF0Tm9N
YXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiTm8gbWF0Y2hlcyBmb3VuZCI7IH0sCi0gICAg
ICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0z
RCBtaW4gLSBpbnB1dD0KLmxlbmd0aDsgcmV0dXJuICJQbGVhc2UgZW50ZXIgIiArIG4gKyAiIG1v
cmUgY2hhcmFjdGVyIiArIChuID0zRD0zRCAxPyAiIiA6PQogInMiKTsgfSwKLSAgICAgICAgZm9y
bWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9M0QgaW5wdXQu
bGVuZ3RoPQogLSBtYXg7IHJldHVybiAiUGxlYXNlIGRlbGV0ZSAiICsgbiArICIgY2hhcmFjdGVy
IiArIChuID0zRD0zRCAxPyAiIiA6ICJzIik9CjsgfSwKLSAgICAgICAgZm9ybWF0U2VsZWN0aW9u
VG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICJZb3UgY2FuIG9ubHkgc2VsPQplY3Qg
IiArIGxpbWl0ICsgIiBpdGVtIiArIChsaW1pdCA9M0Q9M0QgMSA/ICIiIDogInMiKTsgfSwKLSAg
ICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiTG9h
ZGluZyBtb3JlIHJlc3VsPQp0cy4uLiI7IH0sCi0gICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVu
Y3Rpb24gKCkgeyByZXR1cm4gIlNlYXJjaGluZy4uLiI7IH0sCiAgICAgICAgIG1pbmltdW1SZXN1
bHRzRm9yU2VhcmNoOiAwLAogICAgICAgICBtaW5pbXVtSW5wdXRMZW5ndGg6IDAsCiAgICAgICAg
IG1heGltdW1JbnB1dExlbmd0aDogbnVsbCwKICAgICAgICAgbWF4aW11bVNlbGVjdGlvblNpemU6
IDAsCi0gICAgICAgIGlkOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5pZDsgfSwKKyAgICAgICAg
aWQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID0zRD0zRCB1bmRlZmluZWQgPyBudWxsIDogZS5p
ZDsgfSwKICAgICAgICAgbWF0Y2hlcjogZnVuY3Rpb24odGVybSwgdGV4dCkgewogICAgICAgICAg
ICAgcmV0dXJuIHN0cmlwRGlhY3JpdGljcygnJyt0ZXh0KS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yo
c3RyaXBEaWE9CmNyaXRpY3MoJycrdGVybSkudG9VcHBlckNhc2UoKSkgPj0zRCAwOwogICAgICAg
ICB9LApAQCAtMzE4NCw5ICszNDQxLDQzIEBACiAgICAgICAgIHNlbGVjdE9uQmx1cjogZmFsc2Us
CiAgICAgICAgIGFkYXB0Q29udGFpbmVyQ3NzQ2xhc3M6IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIGM7
IH0sCiAgICAgICAgIGFkYXB0RHJvcGRvd25Dc3NDbGFzczogZnVuY3Rpb24oYykgeyByZXR1cm4g
bnVsbDsgfSwKLSAgICAgICAgbmV4dFNlYXJjaFRlcm06IGZ1bmN0aW9uKHNlbGVjdGVkT2JqZWN0
LCBjdXJyZW50U2VhcmNoVGVybSkgeyByZXR1PQpybiB1bmRlZmluZWQ7IH0KKyAgICAgICAgbmV4
dFNlYXJjaFRlcm06IGZ1bmN0aW9uKHNlbGVjdGVkT2JqZWN0LCBjdXJyZW50U2VhcmNoVGVybSkg
eyByZXR1PQpybiB1bmRlZmluZWQ7IH0sCisgICAgICAgIHNlYXJjaElucHV0UGxhY2Vob2xkZXI6
ICcnLAorICAgICAgICBjcmVhdGVTZWFyY2hDaG9pY2VQb3NpdGlvbjogJ3RvcCcsCisgICAgICAg
IHNob3VsZEZvY3VzSW5wdXQ6IGZ1bmN0aW9uIChpbnN0YW5jZSkgeworICAgICAgICAgICAgLy8g
QXR0ZW1wdCB0byBkZXRlY3QgdG91Y2ggZGV2aWNlcworICAgICAgICAgICAgdmFyIHN1cHBvcnRz
VG91Y2hFdmVudHMgPTNEICgoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRz
ID4gMCkpOworCisgICAgICAgICAgICAvLyBPbmx5IGRldmljZXMgd2hpY2ggc3VwcG9ydCB0b3Vj
aCBldmVudHMgc2hvdWxkIGJlIHNwZWNpYWwgYz0KYXNlZAorICAgICAgICAgICAgaWYgKCFzdXBw
b3J0c1RvdWNoRXZlbnRzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIE5ldmVyIGZvY3VzIHRoZSBpbnB1dCBpZiBzZWFyY2gg
aXMgZGlzYWJsZWQKKyAgICAgICAgICAgIGlmIChpbnN0YW5jZS5vcHRzLm1pbmltdW1SZXN1bHRz
Rm9yU2VhcmNoIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9Owo9MjAK
KyAgICAkLmZuLnNlbGVjdDIubG9jYWxlcyA9M0QgW107CisKKyAgICAkLmZuLnNlbGVjdDIubG9j
YWxlc1snZW4nXSA9M0QgeworICAgICAgICAgZm9ybWF0TWF0Y2hlczogZnVuY3Rpb24gKG1hdGNo
ZXMpIHsgaWYgKG1hdGNoZXMgPTNEPTNEPTNEIDEpIHsgcmU9CnR1cm4gIk9uZSByZXN1bHQgaXMg
YXZhaWxhYmxlLCBwcmVzcyBlbnRlciB0byBzZWxlY3QgaXQuIjsgfSByZXR1cm4gbWF0Y2hlcz0K
ICsgIiByZXN1bHRzIGFyZSBhdmFpbGFibGUsIHVzZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRv
IG5hdmlnYXRlLiI7IH0sCisgICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsg
cmV0dXJuICJObyBtYXRjaGVzIGZvdW5kIjsgfSwKKyAgICAgICAgIGZvcm1hdEFqYXhFcnJvcjog
ZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgeyByZXR1PQpybiAiTG9h
ZGluZyBmYWlsZWQiOyB9LAorICAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24g
KGlucHV0LCBtaW4pIHsgdmFyIG4gPTNEIG1pbiAtIGlucHU9CnQubGVuZ3RoOyByZXR1cm4gIlBs
ZWFzZSBlbnRlciAiICsgbiArICIgb3IgbW9yZSBjaGFyYWN0ZXIiICsgKG4gPTNEPTNEIDEgPz0K
ICIiIDogInMiKTsgfSwKKyAgICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlu
cHV0LCBtYXgpIHsgdmFyIG4gPTNEIGlucHV0Lmxlbmd0PQpoIC0gbWF4OyByZXR1cm4gIlBsZWFz
ZSBkZWxldGUgIiArIG4gKyAiIGNoYXJhY3RlciIgKyAobiA9M0Q9M0QgMSA/ICIiIDogInM9CiIp
OyB9LAorICAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsg
cmV0dXJuICJZb3UgY2FuIG9ubHkgc2U9CmxlY3QgIiArIGxpbWl0ICsgIiBpdGVtIiArIChsaW1p
dCA9M0Q9M0QgMSA/ICIiIDogInMiKTsgfSwKKyAgICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5j
dGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIkxvYWRpbmcgbW9yZSByZXN1PQpsdHM9RTI9ODA9
QTYiOyB9LAorICAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi
U2VhcmNoaW5nPUUyPTgwPUE2IjsgfSwKKyAgICB9OworCisgICAgJC5leHRlbmQoJC5mbi5zZWxl
Y3QyLmRlZmF1bHRzLCAkLmZuLnNlbGVjdDIubG9jYWxlc1snZW4nXSk7CisKICAgICAkLmZuLnNl
bGVjdDIuYWpheERlZmF1bHRzID0zRCB7CiAgICAgICAgIHRyYW5zcG9ydDogJC5hamF4LAogICAg
ICAgICBwYXJhbXM6IHsKCmRpZmYgLXIgMmE4MmE3YmM5MWU3ZWYxYmFhZjI4MjA4OTIzZThiM2Zk
Y2UzZmRiYiAtciA0ZDg4M2RhMjE4MTE5ZjhhZDkyMzJiNj0KMTFiY2YwYmRmODZjZTc2YzkgY2xp
ZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLWJhc2UuanMKLS0tIGEvY2xp
ZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLWJhc2UuanMKKysrIGIvY2xp
ZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLWJhc2UuanMKQEAgLTE0MSw3
ICsxNDEsNyBAQAogICAgICAgICAgICA9MjAKICAgICAgICAgICAgICAgICAvLyBzY3JvbGwgdG8g
Zmlyc3QgaW5wdXQgZWxlbWVudAogICAgICAgICAgICAgICAgIGlmICghc2lsZW50KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICQodGhpcy5jb250YWluZXIpLmFuaW1hdGUoeworICAgICAgICAgICAg
ICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JvbGxUb3A6IGlucHV0X2VsZW1lbnQuJGVsLm9mZnNldCgpLnRvcCAtIDIwCiAgICAgICAg
ICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgICAgICAgICAgfQoKZGlmZiAtciAyYTgyYTdi
YzkxZTdlZjFiYWFmMjgyMDg5MjNlOGIzZmRjZTNmZGJiIC1yIDRkODgzZGEyMTgxMTlmOGFkOTIz
MmI2PQoxMWJjZjBiZGY4NmNlNzZjOSBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rv
b2xzLWZvcm0td29ya2Zsb3cuanMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29s
cy90b29scy1mb3JtLXdvcmtmbG93LmpzCisrKyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMv
dG9vbHMvdG9vbHMtZm9ybS13b3JrZmxvdy5qcwpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGV4dGVuc2lvbnMudW5zaGlmdCh7CiAgICAgICAgICAgICAg
ICAgMCA6ICdMZWF2ZSB1bmNoYW5nZWQnLAotICAgICAgICAgICAgICAgIDEgOiAnJworICAgICAg
ICAgICAgICAgIDEgOiAnX19lbXB0eV9fJwogICAgICAgICAgICAgfSk7Cj0yMAogICAgICAgICAg
ICAgLy8gY3JlYXRlIGN1c3RvbSBzdWIgc2VjdGlvbgpAQCAtMTUzLDcgKzE1Myw4IEBACiAgICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50ICAgIDogJ25ld3R5cGUnLAogICAgICAgICAgICAgICAg
ICAgICBsYWJlbCAgICAgICA6ICdDaGFuZ2UgZGF0YXR5cGUnLAogICAgICAgICAgICAgICAgICAg
ICB0eXBlICAgICAgICA6ICdzZWxlY3QnLAotICAgICAgICAgICAgICAgICAgICBpZ25vcmUgICAg
ICA6ICcnLAorICAgICAgICAgICAgICAgICAgICBpZ25vcmUgICAgICA6ICdfX2VtcHR5X18nLAor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA6ICdfX2VtcHR5X18nLAogICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zICAgICA6IGV4dGVuc2lvbnMsCiAgICAgICAgICAgICAgICAgICAg
IGhlbHAgICAgICAgIDogJ1RoaXMgYWN0aW9uIHdpbGwgY2hhbmdlIHRoZSBkYXRhdHlwZSBvZj0K
IHRoZSBvdXRwdXQgdG8gdGhlIGluZGljYXRlZCB2YWx1ZS4nCiAgICAgICAgICAgICAgICAgfSx7
CgpkaWZmIC1yIDJhODJhN2JjOTFlN2VmMWJhYWYyODIwODkyM2U4YjNmZGNlM2ZkYmIgLXIgNGQ4
ODNkYTIxODExOWY4YWQ5MjMyYjY9CjExYmNmMGJkZjg2Y2U3NmM5IGNsaWVudC9nYWxheHkvc2Ny
aXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VsZWN0LWNvbnRlbnQuanMKLS0tIGEvY2xpZW50L2dhbGF4
eS9zY3JpcHRzL212Yy90b29scy90b29scy1zZWxlY3QtY29udGVudC5qcworKysgYi9jbGllbnQv
Z2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLXNlbGVjdC1jb250ZW50LmpzCkBAIC03NSw2
ICs3NSw3IEBACiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHRoaXMuc2VsZWN0X211bHRp
cGxlID0zRCBuZXcgVWkuU2VsZWN0LlZpZXcoewogICAgICAgICAgICAgICAgIG11bHRpcGxlICAg
IDogdHJ1ZSwKKyAgICAgICAgICAgICAgICBzZWFyY2hhYmxlICA6IGZhbHNlLAogICAgICAgICAg
ICAgICAgIGVycm9yX3RleHQgIDogaGRhX2Vycm9yLAogICAgICAgICAgICAgICAgIG9uY2hhbmdl
ICAgIDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignY2hh
bmdlJyk7CgpUaGlzIGRpZmYgaXMgc28gYmlnIHRoYXQgd2UgbmVlZGVkIHRvIHRydW5jYXRlIHRo
ZSByZW1haW5kZXIuCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFs
L2NvbW1pdHMvMDgxODY1YjViYTFjLwpDaGFuZ2VzZXQ6ICAgMDgxODY1YjViYTFjCkJyYW5jaDog
ICAgICByZWxlYXNlXzE1LjAzClVzZXI6ICAgICAgICBtYXJ0ZW5zb24KRGF0ZTogICAgICAgIDIw
MTUtMDItMjMgMTg6NTM6MTMrMDA6MDAKU3VtbWFyeTogICAgIGZpeCBlcnJvciBwcmV2ZW50aW5n
IGNoYW5nZSBvZiB1c2VybmFtZSBpbiBUUwpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDRk
ODgzZGEyMTgxMTlmOGFkOTIzMmI2MTFiY2YwYmRmODZjZTc2YzkgLXIgMDgxODY1YjViYTFjYTkw
YmU5OTljY2Y9CjFjNWRhY2JmZjVlM2YxZmRiIHRlbXBsYXRlcy91c2VyL2luZm8ubWFrbwotLS0g
YS90ZW1wbGF0ZXMvdXNlci9pbmZvLm1ha28KKysrIGIvdGVtcGxhdGVzL3VzZXIvaW5mby5tYWtv
CkBAIC05OSwxMyArOTksMTMgQEAKICAgICAgICAgICAgICAgICA8bGFiZWw+UHVibGljIG5hbWU6
PC9sYWJlbD4KICAgICAgICAgICAgICAgICAlaWYgdC53ZWJhcHAubmFtZSA9M0Q9M0QgJ3Rvb2xf
c2hlZCc6CiAgICAgICAgICAgICAgICAgICAgICVpZiB1c2VyLmFjdGl2ZV9yZXBvc2l0b3JpZXM6
Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0zRCJoaWRkZW4iIG5hbWU9M0Qi
dXNlcm5hbWUiIHZhbHVlPTNEIj0KJHt1c2VybmFtZSB8IGh9Ii8+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8aW5wdXQgdHlwZT0zRCJoaWRkZW4iIGlkPTNEIm5hbWVfaW5wdXQiIG5hbWU9M0Qi
dT0Kc2VybmFtZSIgdmFsdWU9M0QiJHt1c2VybmFtZSB8IGh9Ii8+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAke3VzZXJuYW1lIHwgaH0KICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xh
c3M9M0QidG9vbFBhcmFtSGVscCIgc3R5bGU9M0QiY2xlYXI6IGJvdGg7PQoiPgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3QgY2hhbmdlIHlvdXIgcHVibGljIG5hbWUgYWZ0
ZXIgeW91IGg9CmF2ZSBjcmVhdGVkIGEgcmVwb3NpdG9yeSBpbiB0aGlzIHRvb2wgc2hlZC4KICAg
ICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAlZWxzZToK
LSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPTNEInRleHQiIG5hbWU9M0QidXNl
cm5hbWUiIHNpemU9M0QiNDAiPQogdmFsdWU9M0QiJHt1c2VybmFtZSB8IGh9Ii8+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0zRCJ0ZXh0IiBpZD0zRCJuYW1lX2lucHV0IiBu
YW1lPTNEInVzZT0Kcm5hbWUiIHNpemU9M0QiNDAiIHZhbHVlPTNEIiR7dXNlcm5hbWUgfCBofSIv
PjxkaXYgY2xhc3M9M0QidG9vbFBhcmFtSGVscCIgPQpzdHlsZT0zRCJjbGVhcjogYm90aDsiPgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgcHVibGljIG5hbWUgcHJvdmlkZXMgYSBt
ZWFucyBvZiBpZGVudGlmeWk9Cm5nIHlvdSBwdWJsaWNseSB3aXRoaW4gdGhpcyB0b29sIHNoZWQu
IFB1YmxpYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzIG11c3QgYmUgYXQgbGVh
c3QgZm91ciBjaGFyYWN0ZXJzIGluIGxlbmc9CnRoIGFuZCBjb250YWluIG9ubHkgbG93ZXItY2Fz
ZSBsZXR0ZXJzLCBudW1iZXJzLAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5
LWNlbnRyYWwvY29tbWl0cy9jYjIwMDUwNGJmZTIvCkNoYW5nZXNldDogICBjYjIwMDUwNGJmZTIK
QnJhbmNoOiAgICAgIHJlbGVhc2VfMTUuMDMKVXNlcjogICAgICAgIGRhbm5vbgpEYXRlOiAgICAg
ICAgMjAxNS0wMi0yMyAyMDowNzo1OCswMDowMApTdW1tYXJ5OiAgICAgQnVnZml4IGZvciBjbGlj
a2luZyBjYW5jZWwgaW4gYSBtZW51IGFuZCBoYXZpbmcgdGhlIGFjdGlvbiBoYXA9CnBlbiBhbnl3
YXkuCkFmZmVjdGVkICM6ICAzIGZpbGVzCgpkaWZmIC1yIDA4MTg2NWI1YmExY2E5MGJlOTk5Y2Nm
MWM1ZGFjYmZmNWUzZjFmZGIgLXIgY2IyMDA1MDRiZmUyZjQ3NTViN2FhNjk9CmFiNGJlZmQxMzFi
ZmNkNTUxIGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdWkvcG9wdXAtbWVudS5qcwotLS0gYS9j
bGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3VpL3BvcHVwLW1lbnUuanMKKysrIGIvY2xpZW50L2dh
bGF4eS9zY3JpcHRzL212Yy91aS9wb3B1cC1tZW51LmpzCkBAIC01NSw4ICs1NSwxMSBAQAogICAg
ICAgICAgICAgICAgIGlmKCBvcHRpb24uZnVuYyApewogICAgICAgICAgICAgICAgICAgICAkKCB0
aGlzICkuY2hpbGRyZW4oICdhLnBvcHVwbWVudS1vcHRpb24nICkuY2xpY2soIGZ1bmM9CnRpb24o
IGV2ZW50ICl7CiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uZnVuYy5jYWxsKCBtZW51
LCBldmVudCwgb3B0aW9uICk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IHBy
ZXZlbnREZWZhdWx0IG90aGVyd2lzZSBjbGlja2luZyAiY2FuYz0KZWwiCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvbiBhIHB1cmdlIG9yIHNvbWV0aGluZyBzdGlsbCBuYXZpZ2F0ZXMgYW5k
IGNhdT0Kc2VzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0aW9uLgorICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGJ1YmJsZSB1cCBzbyB0aGF0IGFuIG9wdGlvbiBjbGljayB3aWxsIGNhbGwg
dGhlPQogY2xvc2UgYmVoYXZpb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9KTsKCmRpZmYgLXIgMDgxODY1YjViYTFjYTkwYmU5OTljY2YxYzVkYWNiZmY1ZTNmMWZk
YiAtciBjYjIwMDUwNGJmZTJmNDc1NWI3YWE2OT0KYWI0YmVmZDEzMWJmY2Q1NTEgc3RhdGljL3Nj
cmlwdHMvbXZjL3VpL3BvcHVwLW1lbnUuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvbXZjL3VpL3Bv
cHVwLW1lbnUuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZjL3VpL3BvcHVwLW1lbnUuanMKQEAg
LTU1LDggKzU1LDExIEBACiAgICAgICAgICAgICAgICAgaWYoIG9wdGlvbi5mdW5jICl7CiAgICAg
ICAgICAgICAgICAgICAgICQoIHRoaXMgKS5jaGlsZHJlbiggJ2EucG9wdXBtZW51LW9wdGlvbicg
KS5jbGljayggZnVuYz0KdGlvbiggZXZlbnQgKXsKICAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbi5mdW5jLmNhbGwoIG1lbnUsIGV2ZW50LCBvcHRpb24gKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIG11c3QgcHJldmVudERlZmF1bHQgb3RoZXJ3aXNlIGNsaWNraW5nICJjYW5j
PQplbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIGEgcHVyZ2Ugb3Igc29tZXRoaW5n
IHN0aWxsIG5hdmlnYXRlcyBhbmQgY2F1PQpzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBhY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnViYmxlIHVwIHNvIHRoYXQgYW4gb3B0
aW9uIGNsaWNrIHdpbGwgY2FsbCB0aGU9CiBjbG9zZSBiZWhhdmlvcgotICAgICAgICAgICAgICAg
ICAgICAgICAgLy9yZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwoKZGlmZiAtciAwODE4NjViNWJhMWNhOTBiZTk5
OWNjZjFjNWRhY2JmZjVlM2YxZmRiIC1yIGNiMjAwNTA0YmZlMmY0NzU1YjdhYTY5PQphYjRiZWZk
MTMxYmZjZDU1MSBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3VpL3BvcHVwLW1lbnUuanMKLS0t
IGEvc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy91aS9wb3B1cC1tZW51LmpzCisrKyBiL3N0YXRp
Yy9zY3JpcHRzL3BhY2tlZC9tdmMvdWkvcG9wdXAtbWVudS5qcwpAQCAtMSwxICsxLDEgQEAKLWRl
ZmluZShbXSxmdW5jdGlvbigpe3ZhciBhPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxp
emU6ZnVuY3Rpb24oZCxjPQope3RoaXMuJGJ1dHRvbj0zRGQ7aWYoIXRoaXMuJGJ1dHRvbi5zaXpl
KCkpe3RoaXMuJGJ1dHRvbj0zRCQoIjxkaXYvPiIpfXRoaXM9Ci5vcHRpb25zPTNEY3x8W107dmFy
IGU9M0R0aGlzO3RoaXMuJGJ1dHRvbi5jbGljayhmdW5jdGlvbihmKXskKCIucG9wbWVudS13cj0K
YXBwZXIiKS5yZW1vdmUoKTtlLl9yZW5kZXJBbmRTaG93KGYpO3JldHVybiBmYWxzZX0pfSxfcmVu
ZGVyQW5kU2hvdzpmdW5jdGlvPQpuKGMpe3RoaXMucmVuZGVyKCk7dGhpcy4kZWwuYXBwZW5kVG8o
ImJvZHkiKS5jc3ModGhpcy5fZ2V0U2hvd25Qb3NpdGlvbihjKSk9Ci5zaG93KCk7dGhpcy5fc2V0
VXBDbG9zZUJlaGF2aW9yKCl9LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMuJGVsLmFkZENsYXNzKCJw
bz0KcG1lbnUtd3JhcHBlciIpLmhpZGUoKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KS5odG1s
KHRoaXMudGVtcGxhdGUodGhpcy4kPQpidXR0b24uYXR0cigiaWQiKSx0aGlzLm9wdGlvbnMpKTtp
Zih0aGlzLm9wdGlvbnMubGVuZ3RoKXt2YXIgYz0zRHRoaXM7dGhpcy49CiRlbC5maW5kKCJsaSIp
LmVhY2goZnVuY3Rpb24oZSxkKXt2YXIgZj0zRGMub3B0aW9uc1tlXTtpZihmLmZ1bmMpeyQodGhp
cykuYz0KaGlsZHJlbigiYS5wb3B1cG1lbnUtb3B0aW9uIikuY2xpY2soZnVuY3Rpb24oZyl7Zi5m
dW5jLmNhbGwoYyxnLGYpfSl9fSl9cmV0PQp1cm4gdGhpc30sdGVtcGxhdGU6ZnVuY3Rpb24oZCxj
KXtyZXR1cm5bJzx1bCBpZD0zRCInLGQsJy1tZW51IiBjbGFzcz0zRCJkcm89CnBkb3duLW1lbnUi
PicsdGhpcy5fdGVtcGxhdGVPcHRpb25zKGMpLCI8L3VsPiJdLmpvaW4oIiIpfSxfdGVtcGxhdGVP
cHRpb25zOj0KZnVuY3Rpb24oYyl7aWYoIWMubGVuZ3RoKXtyZXR1cm4iPGxpPihubyBvcHRpb25z
KTwvbGk+In1yZXR1cm4gXy5tYXAoYyxmdW5jPQp0aW9uKGYpe2lmKGYuZGl2aWRlcil7cmV0dXJu
JzxsaSBjbGFzcz0zRCJkaXZpZGVyIj48L2xpPid9ZWxzZXtpZihmLmhlYWRlcik9CntyZXR1cm5b
JzxsaSBjbGFzcz0zRCJoZWFkIj48YSBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKTsiPicsZi5o
dG1sLCI8L2E+PD0KL2xpPiJdLmpvaW4oIiIpfX12YXIgZT0zRGYuaHJlZnx8ImphdmFzY3JpcHQ6
dm9pZCgwKTsiLGc9M0QoZi50YXJnZXQpPygnIHRhPQpyZ2V0PTNEIicrZi50YXJnZXQrJyInKToo
IiIpLGQ9M0QoZi5jaGVja2VkKT8oJzxzcGFuIGNsYXNzPTNEImZhIGZhLWNoZWNrIj49Cjwvc3Bh
bj4nKTooIiIpO3JldHVyblsnPGxpPjxhIGNsYXNzPTNEInBvcHVwbWVudS1vcHRpb24iIGhyZWY9
M0QiJyxlLCciJyxnLD0KIj4iLGQsZi5odG1sLCI8L2E+PC9saT4iXS5qb2luKCIiKX0pLmpvaW4o
IiIpfSxfZ2V0U2hvd25Qb3NpdGlvbjpmdW5jdGlvbihkPQope3ZhciBlPTNEdGhpcy4kZWwud2lk
dGgoKTt2YXIgYz0zRGQucGFnZVgtZS8yO2M9M0RNYXRoLm1pbihjLCQoZG9jdW1lbnQpLnM9CmNy
b2xsTGVmdCgpKyQod2luZG93KS53aWR0aCgpLWUtNSk7Yz0zRE1hdGgubWF4KGMsJChkb2N1bWVu
dCkuc2Nyb2xsTGVmdCgpKz0KNSk7cmV0dXJue3RvcDpkLnBhZ2VZLGxlZnQ6Y319LF9zZXRVcENs
b3NlQmVoYXZpb3I6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXM7PQpmdW5jdGlvbiBjKGcpeyQoZG9j
dW1lbnQpLm9mZigiY2xpY2suY2xvc2VfcG9wdXAiKTtpZih3aW5kb3cucGFyZW50IT0zRD0zRHc9
CmluZG93KXt0cnl7JCh3aW5kb3cucGFyZW50LmRvY3VtZW50KS5vZmYoImNsaWNrLmNsb3NlX3Bv
cHVwIil9Y2F0Y2goZil7fX1lbD0Kc2V7dHJ5eyQoImlmcmFtZSNnYWxheHlfbWFpbiIpLmNvbnRl
bnRzKCkub2ZmKCJjbGljay5jbG9zZV9wb3B1cCIpfWNhdGNoKGYpPQp7fX1lLnJlbW92ZSgpfSQo
Imh0bWwiKS5vbmUoImNsaWNrLmNsb3NlX3BvcHVwIixjKTtpZih3aW5kb3cucGFyZW50IT0zRD0z
RHc9CmluZG93KXt0cnl7JCh3aW5kb3cucGFyZW50LmRvY3VtZW50KS5maW5kKCJodG1sIikub25l
KCJjbGljay5jbG9zZV9wb3B1cCIsYz0KKX1jYXRjaChkKXt9fWVsc2V7dHJ5eyQoImlmcmFtZSNn
YWxheHlfbWFpbiIpLmNvbnRlbnRzKCkub25lKCJjbGljay5jbG9zZV9wPQpvcHVwIixjKX1jYXRj
aChkKXt9fX0sYWRkSXRlbTpmdW5jdGlvbihkLGMpe2M9M0QoYz49M0QwKT9jOnRoaXMub3B0aW9u
cy5sZW49Cmd0aDt0aGlzLm9wdGlvbnMuc3BsaWNlKGMsMCxkKTtyZXR1cm4gdGhpc30scmVtb3Zl
SXRlbTpmdW5jdGlvbihjKXtpZihjPj0zRD0KMCl7dGhpcy5vcHRpb25zLnNwbGljZShjLDEpfXJl
dHVybiB0aGlzfSxmaW5kSW5kZXhCeUh0bWw6ZnVuY3Rpb24oZCl7Zm9yKHZhPQpyIGM9M0QwO2M8
dGhpcy5vcHRpb25zLmxlbmd0aDtjKyspe2lmKF8uaGFzKHRoaXMub3B0aW9uc1tjXSwiaHRtbCIp
JiYodGhpcy49Cm9wdGlvbnNbY10uaHRtbD0zRD0zRD0zRGQpKXtyZXR1cm4gY319cmV0dXJuIG51
bGx9LGZpbmRJdGVtQnlIdG1sOmZ1bmN0aW9uKD0KYyl7cmV0dXJuIHRoaXMub3B0aW9uc1sodGhp
cy5maW5kSW5kZXhCeUh0bWwoYykpXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1PQpybiJQb3B1
cE1lbnUifX0pO2EuY3JlYXRlPTNEZnVuY3Rpb24gYihkLGMpe3JldHVybiBuZXcgYShkLGMpfTth
Lm1ha2VfcG9wdXA9Cm1lbnU9M0RmdW5jdGlvbihkLGUpe3ZhciBjPTNEW107Xy5lYWNoKGUsZnVu
Y3Rpb24oaCxmKXt2YXIgZz0zRHtodG1sOmZ9O2lmKD0KaD0zRD0zRD0zRG51bGwpe2cuaGVhZGVy
PTNEdHJ1ZX1lbHNle2lmKGpRdWVyeS50eXBlKGgpPTNEPTNEPTNEImZ1bmN0aW9uIil7PQpnLmZ1
bmM9M0RofX1jLnB1c2goZyl9KTtyZXR1cm4gbmV3IGEoJChkKSxjKX07YS5jb252ZXJ0TGlua3NU
b09wdGlvbnM9M0RmdW49CmN0aW9uKGUsYyl7ZT0zRCQoZSk7Yz0zRGN8fCJhIjt2YXIgZD0zRFtd
O2UuZmluZChjKS5lYWNoKGZ1bmN0aW9uKGosZyl7dmFyID0KaD0zRHt9LGY9M0QkKGopO2guaHRt
bD0zRGYudGV4dCgpO2lmKGYuYXR0cigiaHJlZiIpKXt2YXIgbD0zRGYuYXR0cigiaHJlZiIpPQos
bT0zRGYuYXR0cigidGFyZ2V0Iiksaz0zRGYuYXR0cigiY29uZmlybSIpO2guZnVuYz0zRGZ1bmN0
aW9uKCl7aWYoKGspJiYoIWM9Cm9uZmlybShrKSkpe3JldHVybn1zd2l0Y2gobSl7Y2FzZSJfcGFy
ZW50Ijp3aW5kb3cucGFyZW50LmxvY2F0aW9uPTNEbDticmVhaz0KO2Nhc2UiX3RvcCI6d2luZG93
LnRvcC5sb2NhdGlvbj0zRGw7YnJlYWs7ZGVmYXVsdDp3aW5kb3cubG9jYXRpb249M0RsfX19ZC5w
PQp1c2goaCl9KTtyZXR1cm4gZH07YS5mcm9tRXhpc3RpbmdEb209M0RmdW5jdGlvbihmLGUsYyl7
Zj0zRCQoZik7ZT0zRCQoZSk7dmE9CnIgZD0zRGEuY29udmVydExpbmtzVG9PcHRpb25zKGUsYyk7
ZS5yZW1vdmUoKTtyZXR1cm4gbmV3IGEoZixkKX07YS5tYWtlX3BvcD0KdXBfbWVudXM9M0RmdW5j
dGlvbihlLGQsZil7ZT0zRGV8fGRvY3VtZW50O2Q9M0RkfHwiZGl2W3BvcHVwbWVudV0iO2Y9M0Rm
fHxmPQp1bmN0aW9uKGcsaCl7cmV0dXJuIiMiK2cuYXR0cigicG9wdXBtZW51Iil9O3ZhciBjPTNE
W107JChlKS5maW5kKGQpLmVhY2goZnU9Cm5jdGlvbigpe3ZhciBnPTNEJCh0aGlzKSxoPTNEJChl
KS5maW5kKGYoZyxlKSk7Yy5wdXNoKGEuZnJvbURvbShoLGcpKTtoLmFkZD0KQ2xhc3MoInBvcHVw
Iil9KTtyZXR1cm4gY307cmV0dXJuIGF9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk
ZWZpbmUoW10sZnVuY3Rpb24oKXt2YXIgYT0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFs
aXplOmZ1bmN0aW9uKGQsYz0KKXt0aGlzLiRidXR0b249M0RkO2lmKCF0aGlzLiRidXR0b24uc2l6
ZSgpKXt0aGlzLiRidXR0b249M0QkKCI8ZGl2Lz4iKX10aGlzPQoub3B0aW9ucz0zRGN8fFtdO3Zh
ciBlPTNEdGhpczt0aGlzLiRidXR0b24uY2xpY2soZnVuY3Rpb24oZil7JCgiLnBvcG1lbnUtd3I9
CmFwcGVyIikucmVtb3ZlKCk7ZS5fcmVuZGVyQW5kU2hvdyhmKTtyZXR1cm4gZmFsc2V9KX0sX3Jl
bmRlckFuZFNob3c6ZnVuY3Rpbz0KbihjKXt0aGlzLnJlbmRlcigpO3RoaXMuJGVsLmFwcGVuZFRv
KCJib2R5IikuY3NzKHRoaXMuX2dldFNob3duUG9zaXRpb24oYykpPQouc2hvdygpO3RoaXMuX3Nl
dFVwQ2xvc2VCZWhhdmlvcigpfSxyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLiRlbC5hZGRDbGFzcygi
cG89CnBtZW51LXdyYXBwZXIiKS5oaWRlKCkuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUifSkuaHRt
bCh0aGlzLnRlbXBsYXRlKHRoaXMuJD0KYnV0dG9uLmF0dHIoImlkIiksdGhpcy5vcHRpb25zKSk7
aWYodGhpcy5vcHRpb25zLmxlbmd0aCl7dmFyIGM9M0R0aGlzO3RoaXMuPQokZWwuZmluZCgibGki
KS5lYWNoKGZ1bmN0aW9uKGUsZCl7dmFyIGY9M0RjLm9wdGlvbnNbZV07aWYoZi5mdW5jKXskKHRo
aXMpLmM9CmhpbGRyZW4oImEucG9wdXBtZW51LW9wdGlvbiIpLmNsaWNrKGZ1bmN0aW9uKGcpe2Yu
ZnVuYy5jYWxsKGMsZyxmKTtnLnByZXZlbj0KdERlZmF1bHQoKX0pfX0pfXJldHVybiB0aGlzfSx0
ZW1wbGF0ZTpmdW5jdGlvbihkLGMpe3JldHVyblsnPHVsIGlkPTNEIicsZCwnPQotbWVudSIgY2xh
c3M9M0QiZHJvcGRvd24tbWVudSI+Jyx0aGlzLl90ZW1wbGF0ZU9wdGlvbnMoYyksIjwvdWw+Il0u
am9pbigiIik9Cn0sX3RlbXBsYXRlT3B0aW9uczpmdW5jdGlvbihjKXtpZighYy5sZW5ndGgpe3Jl
dHVybiI8bGk+KG5vIG9wdGlvbnMpPC9saT4ifT0KcmV0dXJuIF8ubWFwKGMsZnVuY3Rpb24oZil7
aWYoZi5kaXZpZGVyKXtyZXR1cm4nPGxpIGNsYXNzPTNEImRpdmlkZXIiPjwvbGk+PQonfWVsc2V7
aWYoZi5oZWFkZXIpe3JldHVyblsnPGxpIGNsYXNzPTNEImhlYWQiPjxhIGhyZWY9M0QiamF2YXNj
cmlwdDp2b2lkKDA9Cik7Ij4nLGYuaHRtbCwiPC9hPjwvbGk+Il0uam9pbigiIil9fXZhciBlPTNE
Zi5ocmVmfHwiamF2YXNjcmlwdDp2b2lkKDApOyIsZz0KPTNEKGYudGFyZ2V0KT8oJyB0YXJnZXQ9
M0QiJytmLnRhcmdldCsnIicpOigiIiksZD0zRChmLmNoZWNrZWQpPygnPHNwYW4gY2xhPQpzcz0z
RCJmYSBmYS1jaGVjayI+PC9zcGFuPicpOigiIik7cmV0dXJuWyc8bGk+PGEgY2xhc3M9M0QicG9w
dXBtZW51LW9wdGlvbiI9CiBocmVmPTNEIicsZSwnIicsZywiPiIsZCxmLmh0bWwsIjwvYT48L2xp
PiJdLmpvaW4oIiIpfSkuam9pbigiIil9LF9nZXRTaG93bj0KUG9zaXRpb246ZnVuY3Rpb24oZCl7
dmFyIGU9M0R0aGlzLiRlbC53aWR0aCgpO3ZhciBjPTNEZC5wYWdlWC1lLzI7Yz0zRE1hdGguPQpt
aW4oYywkKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrJCh3aW5kb3cpLndpZHRoKCktZS01KTtjPTNE
TWF0aC5tYXgoYywkKGRvY3U9Cm1lbnQpLnNjcm9sbExlZnQoKSs1KTtyZXR1cm57dG9wOmQucGFn
ZVksbGVmdDpjfX0sX3NldFVwQ2xvc2VCZWhhdmlvcjpmdW5jdD0KaW9uKCl7dmFyIGU9M0R0aGlz
O2Z1bmN0aW9uIGMoZyl7JChkb2N1bWVudCkub2ZmKCJjbGljay5jbG9zZV9wb3B1cCIpO2lmKHdp
PQpuZG93LnBhcmVudCE9M0Q9M0R3aW5kb3cpe3RyeXskKHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQp
Lm9mZigiY2xpY2suY2xvc2VfcG89CnB1cCIpfWNhdGNoKGYpe319ZWxzZXt0cnl7JCgiaWZyYW1l
I2dhbGF4eV9tYWluIikuY29udGVudHMoKS5vZmYoImNsaWNrLmNsbz0Kc2VfcG9wdXAiKX1jYXRj
aChmKXt9fWUucmVtb3ZlKCl9JCgiaHRtbCIpLm9uZSgiY2xpY2suY2xvc2VfcG9wdXAiLGMpO2lm
KHdpPQpuZG93LnBhcmVudCE9M0Q9M0R3aW5kb3cpe3RyeXskKHdpbmRvdy5wYXJlbnQuZG9jdW1l
bnQpLmZpbmQoImh0bWwiKS5vbmUoImM9CmxpY2suY2xvc2VfcG9wdXAiLGMpfWNhdGNoKGQpe319
ZWxzZXt0cnl7JCgiaWZyYW1lI2dhbGF4eV9tYWluIikuY29udGVudHMoKT0KLm9uZSgiY2xpY2su
Y2xvc2VfcG9wdXAiLGMpfWNhdGNoKGQpe319fSxhZGRJdGVtOmZ1bmN0aW9uKGQsYyl7Yz0zRChj
Pj0zRDApPQo/Yzp0aGlzLm9wdGlvbnMubGVuZ3RoO3RoaXMub3B0aW9ucy5zcGxpY2UoYywwLGQp
O3JldHVybiB0aGlzfSxyZW1vdmVJdGVtOmY9CnVuY3Rpb24oYyl7aWYoYz49M0QwKXt0aGlzLm9w
dGlvbnMuc3BsaWNlKGMsMSl9cmV0dXJuIHRoaXN9LGZpbmRJbmRleEJ5SHRtbD0KOmZ1bmN0aW9u
KGQpe2Zvcih2YXIgYz0zRDA7Yzx0aGlzLm9wdGlvbnMubGVuZ3RoO2MrKyl7aWYoXy5oYXModGhp
cy5vcHRpb25zPQpbY10sImh0bWwiKSYmKHRoaXMub3B0aW9uc1tjXS5odG1sPTNEPTNEPTNEZCkp
e3JldHVybiBjfX1yZXR1cm4gbnVsbH0sZmluZEk9CnRlbUJ5SHRtbDpmdW5jdGlvbihjKXtyZXR1
cm4gdGhpcy5vcHRpb25zWyh0aGlzLmZpbmRJbmRleEJ5SHRtbChjKSldfSx0b1N0cj0KaW5nOmZ1
bmN0aW9uKCl7cmV0dXJuIlBvcHVwTWVudSJ9fSk7YS5jcmVhdGU9M0RmdW5jdGlvbiBiKGQsYyl7
cmV0dXJuIG5ldyBhPQooZCxjKX07YS5tYWtlX3BvcHVwbWVudT0zRGZ1bmN0aW9uKGQsZSl7dmFy
IGM9M0RbXTtfLmVhY2goZSxmdW5jdGlvbihoLGYpe3Y9CmFyIGc9M0R7aHRtbDpmfTtpZihoPTNE
PTNEPTNEbnVsbCl7Zy5oZWFkZXI9M0R0cnVlfWVsc2V7aWYoalF1ZXJ5LnR5cGUoaCk9Cj0zRD0z
RD0zRCJmdW5jdGlvbiIpe2cuZnVuYz0zRGh9fWMucHVzaChnKX0pO3JldHVybiBuZXcgYSgkKGQp
LGMpfTthLmNvbnZlcj0KdExpbmtzVG9PcHRpb25zPTNEZnVuY3Rpb24oZSxjKXtlPTNEJChlKTtj
PTNEY3x8ImEiO3ZhciBkPTNEW107ZS5maW5kKGMpLmVhPQpjaChmdW5jdGlvbihqLGcpe3ZhciBo
PTNEe30sZj0zRCQoaik7aC5odG1sPTNEZi50ZXh0KCk7aWYoZi5hdHRyKCJocmVmIikpe3Y9CmFy
IGw9M0RmLmF0dHIoImhyZWYiKSxtPTNEZi5hdHRyKCJ0YXJnZXQiKSxrPTNEZi5hdHRyKCJjb25m
aXJtIik7aC5mdW5jPTNEZj0KdW5jdGlvbigpe2lmKChrKSYmKCFjb25maXJtKGspKSl7cmV0dXJu
fXN3aXRjaChtKXtjYXNlIl9wYXJlbnQiOndpbmRvdy5wYXJlPQpudC5sb2NhdGlvbj0zRGw7YnJl
YWs7Y2FzZSJfdG9wIjp3aW5kb3cudG9wLmxvY2F0aW9uPTNEbDticmVhaztkZWZhdWx0OndpbmQ9
Cm93LmxvY2F0aW9uPTNEbH19fWQucHVzaChoKX0pO3JldHVybiBkfTthLmZyb21FeGlzdGluZ0Rv
bT0zRGZ1bmN0aW9uKGYsZSxjKT0Ke2Y9M0QkKGYpO2U9M0QkKGUpO3ZhciBkPTNEYS5jb252ZXJ0
TGlua3NUb09wdGlvbnMoZSxjKTtlLnJlbW92ZSgpO3JldHVybiBuPQpldyBhKGYsZCl9O2EubWFr
ZV9wb3B1cF9tZW51cz0zRGZ1bmN0aW9uKGUsZCxmKXtlPTNEZXx8ZG9jdW1lbnQ7ZD0zRGR8fCJk
aXY9Cltwb3B1cG1lbnVdIjtmPTNEZnx8ZnVuY3Rpb24oZyxoKXtyZXR1cm4iIyIrZy5hdHRyKCJw
b3B1cG1lbnUiKX07dmFyIGM9M0RbXT0KOyQoZSkuZmluZChkKS5lYWNoKGZ1bmN0aW9uKCl7dmFy
IGc9M0QkKHRoaXMpLGg9M0QkKGUpLmZpbmQoZihnLGUpKTtjLnB1c2goPQphLmZyb21Eb20oaCxn
KSk7aC5hZGRDbGFzcygicG9wdXAiKX0pO3JldHVybiBjfTtyZXR1cm4gYX0pOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1j
ZW50cmFsL2NvbW1pdHMvOTM4MDFkNmZhN2JkLwpDaGFuZ2VzZXQ6ICAgOTM4MDFkNmZhN2JkCkJy
YW5jaDogICAgICByZWxlYXNlXzE1LjAzClVzZXI6ICAgICAgICBkYW5ub24KRGF0ZTogICAgICAg
IDIwMTUtMDItMjMgMjE6Mjg6MDErMDA6MDAKU3VtbWFyeTogICAgIFZlcmlmeSBhbmQgYXBwbHkg
QGptY2hpbHRvbidzIGZpeCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qbWNoPQppbHRvbi9nYWxh
eHktY2VudHJhbC9jb21taXQvMzA2YTg2NTU4YTdlZTdiZTFiYzJkNjhjZDkzOWIxNmI1ZjE4NjNk
NCB0byBuZXg9CnQtc3RhYmxlLiAgU2hvdWxkIGJlIHJlZmFjdG9yZWQgaW50byB1c2luZyB0aGUg
c2FtZSBnYWxheHkubWVudS5qcyBvYmplY3RzID0KLS0gSSdtIGFzc3VtaW5nIHRoYXQncyB3aHkg
dGhpbmdzIGxpa2UgUG9wdXBNZW51LmZyb21FeGlzdGluZ0RvbSBleGlzdCBhbmQgPQphcmUgb3Ro
ZXJ3aXNlIHVudXNlZC4KQWZmZWN0ZWQgIzogIDMgZmlsZXMKCmRpZmYgLXIgY2IyMDA1MDRiZmUy
ZjQ3NTViN2FhNjlhYjRiZWZkMTMxYmZjZDU1MSAtciA5MzgwMWQ2ZmE3YmQzMmE4MWRlMzk3MT0K
Mzc5NTMzMTJjY2E3YTQzYTEgY2xpZW50L2dhbGF4eS9zY3JpcHRzL2dhbGF4eS5iYXNlLmpzCi0t
LSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9nYWxheHkuYmFzZS5qcworKysgYi9jbGllbnQvZ2Fs
YXh5L3NjcmlwdHMvZ2FsYXh5LmJhc2UuanMKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBvcHRpb25zWyBsaW5rLnRleHQoKSBdID0zRCB7
CiAgICAgICAgICAgICAgICAgICAgIHVybDogaHJlZiwKLSAgICAgICAgICAgICAgICAgICAgYWN0
aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigg
ZXZlbnQgKSB7Cj0yMAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmVzIGNvbmZp
cm0gdGV4dCwgc2VuZCB0aGUgZGlhbG9nCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFj
b25maXJtdGV4dCB8fCBjb25maXJtKCBjb25maXJtdGV4dCApICkgewpAQCAtMTg1LDcgKzE4NSwx
MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfTsKICAg
ICAgICAgICAgIH0KCmRpZmYgLXIgY2IyMDA1MDRiZmUyZjQ3NTViN2FhNjlhYjRiZWZkMTMxYmZj
ZDU1MSAtciA5MzgwMWQ2ZmE3YmQzMmE4MWRlMzk3MT0KMzc5NTMzMTJjY2E3YTQzYTEgc3RhdGlj
L3NjcmlwdHMvZ2FsYXh5LmJhc2UuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvZ2FsYXh5LmJhc2Uu
anMKKysrIGIvc3RhdGljL3NjcmlwdHMvZ2FsYXh5LmJhc2UuanMKQEAgLTE3MSw3ICsxNzEsNyBA
QAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBvcHRpb25zWyBsaW5rLnRl
eHQoKSBdID0zRCB7CiAgICAgICAgICAgICAgICAgICAgIHVybDogaHJlZiwKLSAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9u
OiBmdW5jdGlvbiggZXZlbnQgKSB7Cj0yMAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYg
dGhlcmVzIGNvbmZpcm0gdGV4dCwgc2VuZCB0aGUgZGlhbG9nCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFjb25maXJtdGV4dCB8fCBjb25maXJtKCBjb25maXJtdGV4dCApICkgewpAQCAt
MTg1LDcgKzE4NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIH0KCmRpZmYgLXIgY2IyMDA1MDRiZmUyZjQ3NTViN2FhNjlh
YjRiZWZkMTMxYmZjZDU1MSAtciA5MzgwMWQ2ZmE3YmQzMmE4MWRlMzk3MT0KMzc5NTMzMTJjY2E3
YTQzYTEgc3RhdGljL3NjcmlwdHMvcGFja2VkL2dhbGF4eS5iYXNlLmpzCi0tLSBhL3N0YXRpYy9z
Y3JpcHRzL3BhY2tlZC9nYWxheHkuYmFzZS5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNrZWQv
Z2FsYXh5LmJhc2UuanMKQEAgLTEsMSArMSwxIEBACi0oZnVuY3Rpb24oKXt2YXIgYj0zRDA7dmFy
IGM9M0RbIm1zIiwibW96Iiwid2Via2l0IiwibyJdO2Zvcih2YXIgYT0zRDA7YTxjLj0KbGVuZ3Ro
JiYhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsrK2Epe3dpbmRvdy5yZXF1ZXN0QW5pbWF0
aW9uRnJhbWU9M0R3PQppbmRvd1tjW2FdKyJSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXTt3aW5kb3cu
Y2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lPTNEd2k9Cm5kb3dbY1thXSsiQ2FuY2VsUmVxdWVz
dEFuaW1hdGlvbkZyYW1lIl19aWYoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpez0Kd2lu
ZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT0zRGZ1bmN0aW9uKGgsZSl7dmFyIGQ9M0RuZXcgRGF0
ZSgpLmdldFRpbWUoKTt2PQphciBmPTNETWF0aC5tYXgoMCwxNi0oZC1iKSk7dmFyIGc9M0R3aW5k
b3cuc2V0VGltZW91dChmdW5jdGlvbigpe2goZCtmKX0sZik9CjtiPTNEZCtmO3JldHVybiBnfX1p
Zighd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRj0K
cmFtZT0zRGZ1bmN0aW9uKGQpe2NsZWFyVGltZW91dChkKX19fSgpKTtpZighQXJyYXkuaW5kZXhP
Zil7QXJyYXkucHJvdG90eXBlPQouaW5kZXhPZj0zRGZ1bmN0aW9uKGMpe2Zvcih2YXIgYj0zRDAs
YT0zRHRoaXMubGVuZ3RoO2I8YTtiKyspe2lmKHRoaXNbYl09M0Q9Cj0zRGMpe3JldHVybiBifX1y
ZXR1cm4gLTF9fWZ1bmN0aW9uIG9ial9sZW5ndGgoYyl7aWYoYy5sZW5ndGghPTNEPTNEdW5kZWZp
bj0KZWQpe3JldHVybiBjLmxlbmd0aH12YXIgYj0zRDA7Zm9yKHZhciBhIGluIGMpe2IrK31yZXR1
cm4gYn0kLmZuLm1ha2VBYnNvbHV0PQplPTNEZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2YXIgYz0zRGIucG9zaXQ9CmlvbigpO2IuY3NzKHtw
b3NpdGlvbjoiYWJzb2x1dGUiLG1hcmdpbkxlZnQ6MCxtYXJnaW5Ub3A6MCx0b3A6Yy50b3AsbGVm
dDpjLj0KbGVmdCxyaWdodDokKHdpbmRvdykud2lkdGgoKS0oYy5sZWZ0K2Iud2lkdGgoKSl9KTtp
ZihhKXtiLnJlbW92ZSgpLmFwcGVuZFRvPQooImJvZHkiKX19KX07ZnVuY3Rpb24gbWFrZV9wb3B1
cG1lbnUoYixjKXt2YXIgYT0zRChiLmRhdGEoIm1lbnVfb3B0aW9ucyIpKTs9CmIuZGF0YSgibWVu
dV9vcHRpb25zIixjKTtpZihhKXtyZXR1cm59Yi5iaW5kKCJjbGljay5zaG93X3BvcHVwIixmdW5j
dGlvbihkKT0KeyQoIi5wb3BtZW51LXdyYXBwZXIiKS5yZW1vdmUoKTtzZXRUaW1lb3V0KGZ1bmN0
aW9uKCl7dmFyIGc9M0QkKCI8dWwgY2xhc3M9Cj0zRCdkcm9wZG93bi1tZW51JyBpZD0zRCciK2Iu
YXR0cigiaWQiKSsiLW1lbnUnPjwvdWw+Iik7dmFyIGY9M0RiLmRhdGEoIm1lbj0KdV9vcHRpb25z
Iik7aWYob2JqX2xlbmd0aChmKTw9M0QwKXskKCI8bGk+Tm8gT3B0aW9ucy48L2xpPiIpLmFwcGVu
ZFRvKGcpfSQuPQplYWNoKGYsZnVuY3Rpb24oaixpKXtpZihpKXt2YXIgbD0zRGkuYWN0aW9ufHxp
O2cuYXBwZW5kKCQoIjxsaT48L2xpPiIpLmFwcGU9Cm5kKCQoIjxhPiIpLmF0dHIoImhyZWYiLGku
dXJsKS5odG1sKGopLmNsaWNrKGwpKSl9ZWxzZXtnLmFwcGVuZCgkKCI8bGk+PC9saT0KPiIpLmFk
ZENsYXNzKCJoZWFkIikuYXBwZW5kKCQoIjxhIGhyZWY9M0QnIyc+PC9hPiIpLmh0bWwoaikpKX19
KTt2YXIgaD0zRCQoPQoiPGRpdiBjbGFzcz0zRCdwb3BtZW51LXdyYXBwZXInIHN0eWxlPTNEJ3Bv
c2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwOyB0b3A6IC09CjEwMDA7Jz48L2Rpdj4iKS5hcHBlbmQo
ZykuYXBwZW5kVG8oImJvZHkiKTt2YXIgZT0zRGQucGFnZVgtaC53aWR0aCgpLzI7ZT0zRD0KTWF0
aC5taW4oZSwkKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrJCh3aW5kb3cpLndpZHRoKCktJChoKS53
aWR0aCgpLTUpO2U9M0RNPQphdGgubWF4KGUsJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKzUpO2gu
Y3NzKHt0b3A6ZC5wYWdlWSxsZWZ0OmV9KX0sMTApO3NldFQ9CmltZW91dChmdW5jdGlvbigpe3Zh
ciBmPTNEZnVuY3Rpb24oaCl7JChoKS5iaW5kKCJjbGljay5jbG9zZV9wb3B1cCIsZnVuY3Rpbz0K
bigpeyQoIi5wb3BtZW51LXdyYXBwZXIiKS5yZW1vdmUoKTtoLnVuYmluZCgiY2xpY2suY2xvc2Vf
cG9wdXAiKX0pfTtmKCQod2luPQpkb3cuZG9jdW1lbnQpKTtmKCQod2luZG93LnRvcC5kb2N1bWVu
dCkpO2Zvcih2YXIgZT0zRHdpbmRvdy50b3AuZnJhbWVzLmxlbmc9CnRoO2UtLTspe3ZhciBnPTNE
JCh3aW5kb3cudG9wLmZyYW1lc1tlXS5kb2N1bWVudCk7ZihnKX19LDUwKTtyZXR1cm4gZmFsc2V9
KT0KfWZ1bmN0aW9uIG1ha2VfcG9wdXBfbWVudXMoYSl7YT0zRGF8fGRvY3VtZW50OyQoYSkuZmlu
ZCgiZGl2W3BvcHVwbWVudV0iKS5lPQphY2goZnVuY3Rpb24oKXt2YXIgYj0zRHt9O3ZhciBkPTNE
JCh0aGlzKTtkLmZpbmQoImEiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9Cj0zRCQodGhpcyksaT0z
RGcuZ2V0KDApLGU9M0RpLmdldEF0dHJpYnV0ZSgiY29uZmlybSIpLGY9M0RpLmdldEF0dHJpYnV0
ZSgiaD0KcmVmIiksaD0zRGkuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKTtpZighZil7YltnLnRleHQo
KV09M0RudWxsfWVsc2V7YltnLnRleHQoPQopXT0zRHt1cmw6ZixhY3Rpb246ZnVuY3Rpb24oKXtp
ZighZXx8Y29uZmlybShlKSl7aWYoaCl7d2luZG93Lm9wZW4oZixoKTtyZXQ9CnVybiBmYWxzZX1l
bHNle2cuY2xpY2soKX19fX19fSk7dmFyIGM9M0QkKGEpLmZpbmQoIiMiK2QuYXR0cigicG9wdXBt
ZW51IikpOz0KYy5maW5kKCJhIikuYmluZCgiY2xpY2siLGZ1bmN0aW9uKGYpe2Yuc3RvcFByb3Bh
Z2F0aW9uKCk7cmV0dXJuIHRydWV9KTttYWtlPQpfcG9wdXBtZW51KGMsYik7Yy5hZGRDbGFzcygi
cG9wdXAiKTtkLnJlbW92ZSgpfSl9JC5mbi5yZWZyZXNoX3NlbGVjdDI9M0RmdW49CmN0aW9uKCl7
dmFyIGI9M0QkKHRoaXMpO3ZhciBhPTNEe3BsYWNlaG9sZGVyOiJDbGljayB0byBzZWxlY3QiLGNs
b3NlT25TZWxlYz0KdDohYi5pcygiW01VTFRJUExFXSIpLGRyb3Bkb3duQXV0b1dpZHRoOnRydWUs
Y29udGFpbmVyQ3NzQ2xhc3M6InNlbGVjdDItbWluPQp3aWR0aCJ9O3JldHVybiBiLnNlbGVjdDIo
YSl9O2Z1bmN0aW9uIHJlcGxhY2VfYmlnX3NlbGVjdF9pbnB1dHMoYSxjLGIpe2lmKCE9CmpRdWVy
eS5mbi5zZWxlY3QyKXtyZXR1cm59aWYoYT0zRD0zRD0zRHVuZGVmaW5lZCl7YT0zRDIwfWlmKGM9
M0Q9M0Q9M0R1bmRlZj0KaW5lZCl7Yz0zRDMwMDB9Yj0zRGJ8fCQoInNlbGVjdCIpO2IuZWFjaChm
dW5jdGlvbigpe3ZhciBlPTNEJCh0aGlzKS5ub3QoIlttPQp1bHRpcGxlXSIpO3ZhciBkPTNEZS5m
aW5kKCJvcHRpb24iKS5sZW5ndGg7aWYoKGQ8YSl8fChkPmMpKXtyZXR1cm59aWYoZS5oYXM9CkNs
YXNzKCJuby1hdXRvY29tcGxldGUiKSl7cmV0dXJufWUucmVmcmVzaF9zZWxlY3QyKCl9KX0kLmZu
Lm1ha2VfdGV4dF9lZGl0YT0KYmxlPTNEZnVuY3Rpb24oZyl7dmFyIGQ9M0QoIm51bV9jb2xzIiBp
biBnP2cubnVtX2NvbHM6MzApLGM9M0QoIm51bV9yb3dzIiBpPQpuIGc/Zy5udW1fcm93czo0KSxl
PTNEKCJ1c2VfdGV4dGFyZWEiIGluIGc/Zy51c2VfdGV4dGFyZWE6ZmFsc2UpLGI9M0QoIm9uX2Y9
CmluaXNoIiBpbiBnP2cub25fZmluaXNoOm51bGwpLGY9M0QoImhlbHBfdGV4dCIgaW4gZz9nLmhl
bHBfdGV4dDpudWxsKTt2YXIgYT0KPTNEJCh0aGlzKTthLmFkZENsYXNzKCJlZGl0YWJsZS10ZXh0
IikuY2xpY2soZnVuY3Rpb24obCl7aWYoJCh0aGlzKS5jaGlsZHJlPQpuKCI6aW5wdXQiKS5sZW5n
dGg+MCl7cmV0dXJufWEucmVtb3ZlQ2xhc3MoImVkaXRhYmxlLXRleHQiKTt2YXIgaT0zRGZ1bmN0
aW89Cm4obSl7YS5maW5kKCI6aW5wdXQiKS5yZW1vdmUoKTtpZihtIT0zRD0zRCIiKXthLnRleHQo
bSl9ZWxzZXthLmh0bWwoIjxicj4iKT0KfWEuYWRkQ2xhc3MoImVkaXRhYmxlLXRleHQiKTtpZihi
KXtiKG0pfX07dmFyIGg9M0QoImN1cl90ZXh0IiBpbiBnP2cuY3VyX3RlPQp4dDphLnRleHQoKSks
ayxqO2lmKGUpe2s9M0QkKCI8dGV4dGFyZWEvPiIpLmF0dHIoe3Jvd3M6Yyxjb2xzOmR9KS50ZXh0
KCQudHI9CmltKGgpKS5rZXl1cChmdW5jdGlvbihtKXtpZihtLmtleUNvZGU9M0Q9M0Q9M0QyNyl7
aShoKX19KTtqPTNEJCgiPGJ1dHRvbi8+Ij0KKS50ZXh0KCJEb25lIikuY2xpY2soZnVuY3Rpb24o
KXtpKGsudmFsKCkpO3JldHVybiBmYWxzZX0pfWVsc2V7az0zRCQoIjxpbnB1PQp0IHR5cGU9M0Qn
dGV4dCcvPiIpLmF0dHIoe3ZhbHVlOiQudHJpbShoKSxzaXplOmR9KS5ibHVyKGZ1bmN0aW9uKCl7
aShoKX0pLms9CmV5dXAoZnVuY3Rpb24obSl7aWYobS5rZXlDb2RlPTNEPTNEPTNEMjcpeyQodGhp
cykudHJpZ2dlcigiYmx1ciIpfWVsc2V7aWYobT0KLmtleUNvZGU9M0Q9M0Q9M0QxMyl7aSgkKHRo
aXMpLnZhbCgpKX19bS5zdG9wUHJvcGFnYXRpb24oKX0pfWEudGV4dCgiIik7YS5hPQpwcGVuZChr
KTtpZihqKXthLmFwcGVuZChqKX1rLmZvY3VzKCk7ay5zZWxlY3QoKTtsLnN0b3BQcm9wYWdhdGlv
bigpfSk7aWYoZik9CnthLmF0dHIoInRpdGxlIixmKS50b29sdGlwKCl9cmV0dXJuIGF9O2Z1bmN0
aW9uIGFzeW5jX3NhdmVfdGV4dChkLGYsZSxhLGMsaD0KLGksZyxiKXtpZihjPTNEPTNEPTNEdW5k
ZWZpbmVkKXtjPTNEMzB9aWYoaT0zRD0zRD0zRHVuZGVmaW5lZCl7aT0zRDR9JCgiIyIrPQpkKS5j
bGljayhmdW5jdGlvbigpe2lmKCQoIiNyZW5hbWluZy1hY3RpdmUiKS5sZW5ndGg+MCl7cmV0dXJu
fXZhciBsPTNEJCgiIyI9CitmKSxrPTNEbC50ZXh0KCksajtpZihoKXtqPTNEJCgiPHRleHRhcmVh
PjwvdGV4dGFyZWE+IikuYXR0cih7cm93czppLGNvbHM6Yz0KfSkudGV4dCgkLnRyaW0oaykpfWVs
c2V7aj0zRCQoIjxpbnB1dCB0eXBlPTNEJ3RleHQnPjwvaW5wdXQ+IikuYXR0cih7dmFsdWU6PQok
LnRyaW0oayksc2l6ZTpjfSl9ai5hdHRyKCJpZCIsInJlbmFtaW5nLWFjdGl2ZSIpO2ouYmx1cihm
dW5jdGlvbigpeyQodGhpcyk9Ci5yZW1vdmUoKTtsLnNob3coKTtpZihiKXtiKGopfX0pO2oua2V5
dXAoZnVuY3Rpb24obil7aWYobi5rZXlDb2RlPTNEPTNEPTNEMj0KNyl7JCh0aGlzKS50cmlnZ2Vy
KCJibHVyIil9ZWxzZXtpZihuLmtleUNvZGU9M0Q9M0Q9M0QxMyl7dmFyIG09M0R7fTttW2FdPTNE
PQokKHRoaXMpLnZhbCgpOyQodGhpcykudHJpZ2dlcigiYmx1ciIpOyQuYWpheCh7dXJsOmUsZGF0
YTptLGVycm9yOmZ1bmN0aW9uKCk9CnthbGVydCgiVGV4dCBlZGl0aW5nIGZvciBlbHQgIitmKyIg
ZmFpbGVkIil9LHN1Y2Nlc3M6ZnVuY3Rpb24obyl7aWYobyE9M0Q9Cj0zRCIiKXtsLnRleHQobyl9
ZWxzZXtsLmh0bWwoIjxlbT5Ob25lPC9lbT4iKX1pZihiKXtiKGopfX19KX19fSk7aWYoZyl7Zyhq
KT0KfWwuaGlkZSgpO2ouaW5zZXJ0QWZ0ZXIobCk7ai5mb2N1cygpO2ouc2VsZWN0KCk7cmV0dXJu
fSl9ZnVuY3Rpb24gY29tbWF0aXplPQooYil7Yis9M0QiIjt2YXIgYT0zRC8oXGQrKShcZHszfSkv
O3doaWxlKGEudGVzdChiKSl7Yj0zRGIucmVwbGFjZShhLCIkMSwkMiI9Cil9cmV0dXJuIGJ9ZnVu
Y3Rpb24gcmVzZXRfdG9vbF9zZWFyY2goYSl7dmFyIGM9M0QkKCIjZ2FsYXh5X3Rvb2xzIikuY29u
dGVudD0KcygpO2lmKGMubGVuZ3RoPTNEPTNEPTNEMCl7Yz0zRCQoZG9jdW1lbnQpfSQodGhpcyku
cmVtb3ZlQ2xhc3MoInNlYXJjaF9hY3RpPQp2ZSIpO2MuZmluZCgiLnRvb2xUaXRsZSIpLnJlbW92
ZUNsYXNzKCJzZWFyY2hfbWF0Y2giKTtjLmZpbmQoIi50b29sU2VjdGlvbkI9Cm9keSIpLmhpZGUo
KTtjLmZpbmQoIi50b29sVGl0bGUiKS5zaG93KCk7Yy5maW5kKCIudG9vbFBhbmVsTGFiZWwiKS5z
aG93KCk7Yz0KLmZpbmQoIi50b29sU2VjdGlvbldyYXBwZXIiKS5lYWNoKGZ1bmN0aW9uKCl7aWYo
JCh0aGlzKS5hdHRyKCJpZCIpIT0zRD0zRCJyPQplY2VudGx5X3VzZWRfd3JhcHBlciIpeyQodGhp
cykuc2hvdygpfWVsc2V7aWYoJCh0aGlzKS5oYXNDbGFzcygidXNlcl9wcmVmX3Y9CmlzaWJsZSIp
KXskKHRoaXMpLnNob3coKX19fSk7Yy5maW5kKCIjc2VhcmNoLW5vLXJlc3VsdHMiKS5oaWRlKCk7
Yy5maW5kKCIjcz0KZWFyY2gtc3Bpbm5lciIpLmhpZGUoKTtpZihhKXt2YXIgYj0zRGMuZmluZCgi
I3Rvb2wtc2VhcmNoLXF1ZXJ5Iik7Yi52YWwoInNlPQphcmNoIHRvb2xzIil9fXZhciBHYWxheHlB
c3luYz0zRGZ1bmN0aW9uKGEpe3RoaXMudXJsX2RpY3Q9M0R7fTt0aGlzLmxvZ19hY3Q9Cmlvbj0z
RChhPTNEPTNEPTNEdW5kZWZpbmVkP2ZhbHNlOmEpfTtHYWxheHlBc3luYy5wcm90b3R5cGUuc2V0
X2Z1bmNfdXJsPTNEZj0KdW5jdGlvbihhLGIpe3RoaXMudXJsX2RpY3RbYV09M0RifTtHYWxheHlB
c3luYy5wcm90b3R5cGUuc2V0X3VzZXJfcHJlZj0zRGZ1PQpuY3Rpb24oYSxiKXt2YXIgYz0zRHRo
aXMudXJsX2RpY3RbYXJndW1lbnRzLmNhbGxlZV07aWYoYz0zRD0zRD0zRHVuZGVmaW5lZCk9Cnty
ZXR1cm4gZmFsc2V9JC5hamF4KHt1cmw6YyxkYXRhOntwcmVmX25hbWU6YSxwcmVmX3ZhbHVlOmJ9
LGVycm9yOmZ1bmN0aW9uKD0KKXtyZXR1cm4gZmFsc2V9LHN1Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1
cm4gdHJ1ZX19KX07R2FsYXh5QXN5bmMucHJvdG90eXBlLmxvPQpnX3VzZXJfYWN0aW9uPTNEZnVu
Y3Rpb24oYyxiLGQpe2lmKCF0aGlzLmxvZ19hY3Rpb24pe3JldHVybn12YXIgYT0zRHRoaXMudXI9
CmxfZGljdFthcmd1bWVudHMuY2FsbGVlXTtpZihhPTNEPTNEPTNEdW5kZWZpbmVkKXtyZXR1cm4g
ZmFsc2V9JC5hamF4KHt1cmw6YT0KLGRhdGE6e2FjdGlvbjpjLGNvbnRleHQ6YixwYXJhbXM6ZH0s
ZXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9LHN1Y2Nlc3M6PQpmdW5jdGlvbigpe3JldHVy
biB0cnVlfX0pfTtmdW5jdGlvbiBpbml0X3JlZnJlc2hfb25fY2hhbmdlKCl7JCgic2VsZWN0W3Jl
ZnI9CmVzaF9vbl9jaGFuZ2U9M0QndHJ1ZSddIikub2ZmKCJjaGFuZ2UiKS5jaGFuZ2UoZnVuY3Rp
b24oKXt2YXIgYT0zRCQodGhpcyksZT0KPTNEYS52YWwoKSxkPTNEZmFsc2UsYz0zRGEuYXR0cigi
cmVmcmVzaF9vbl9jaGFuZ2VfdmFsdWVzIik7aWYoYyl7Yz0zRGMuc3BsPQppdCgiLCIpO3ZhciBi
PTNEYS5hdHRyKCJsYXN0X3NlbGVjdGVkX3ZhbHVlIik7aWYoJC5pbkFycmF5KGUsYyk9M0Q9M0Q9
M0QtMSY9CiYkLmluQXJyYXkoYixjKT0zRD0zRD0zRC0xKXtyZXR1cm59fSQod2luZG93KS50cmln
Z2VyKCJyZWZyZXNoX29uX2NoYW5nZSIpOz0KJChkb2N1bWVudCkudHJpZ2dlcigiY29udmVydF90
b192YWx1ZXMiKTthLmdldCgwKS5mb3JtLnN1Ym1pdCgpfSk7JCgiOmNoZWNrPQpib3hbcmVmcmVz
aF9vbl9jaGFuZ2U9M0QndHJ1ZSddIikub2ZmKCJjbGljayIpLmNsaWNrKGZ1bmN0aW9uKCl7dmFy
IGE9M0QkKHQ9CmhpcyksZT0zRGEudmFsKCksZD0zRGZhbHNlLGM9M0RhLmF0dHIoInJlZnJlc2hf
b25fY2hhbmdlX3ZhbHVlcyIpO2lmKGMpe2M9Cj0zRGMuc3BsaXQoIiwiKTt2YXIgYj0zRGEuYXR0
cigibGFzdF9zZWxlY3RlZF92YWx1ZSIpO2lmKCQuaW5BcnJheShlLGMpPTNEPQo9M0Q9M0QtMSYm
JC5pbkFycmF5KGIsYyk9M0Q9M0Q9M0QtMSl7cmV0dXJufX0kKHdpbmRvdykudHJpZ2dlcigicmVm
cmVzaF9vbl89CmNoYW5nZSIpO2EuZ2V0KDApLmZvcm0uc3VibWl0KCl9KTskKCJhW2NvbmZpcm1d
Iikub2ZmKCJjbGljayIpLmNsaWNrKGZ1bmN0aT0Kb24oKXtyZXR1cm4gY29uZmlybSgkKHRoaXMp
LmF0dHIoImNvbmZpcm0iKSl9KX1qUXVlcnkuZm4ucHJldmVudERvdWJsZVN1Ym1pPQpzc2lvbj0z
RGZ1bmN0aW9uKCl7JCh0aGlzKS5vbigic3VibWl0IixmdW5jdGlvbihiKXt2YXIgYT0zRCQodGhp
cyk7aWYoYS5kYXQ9CmEoInN1Ym1pdHRlZCIpPTNEPTNEPTNEdHJ1ZSl7Yi5wcmV2ZW50RGVmYXVs
dCgpfWVsc2V7YS5kYXRhKCJzdWJtaXR0ZWQiLHRydT0KZSl9fSk7cmV0dXJuIHRoaXN9OyQoZG9j
dW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7aW5pdF9yZWZyZXNoX29uX2NoYW5nZSgpO2lmPQooJC5m
bi50b29sdGlwKXskKCIudW5pZmllZC1wYW5lbC1oZWFkZXIgW3RpdGxlXSIpLnRvb2x0aXAoe3Bs
YWNlbWVudDoiYm90dG89Cm0ifSk7JCgiW3RpdGxlXSIpLnRvb2x0aXAoKX1tYWtlX3BvcHVwX21l
bnVzKCk7cmVwbGFjZV9iaWdfc2VsZWN0X2lucHV0cygyMD0KLDE1MDApOyQoImEiKS5jbGljayhm
dW5jdGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2YXIgYz0zRChwYXJlbnQuZnJhbWVzJiZwYXJlPQpu
dC5mcmFtZXMuZ2FsYXh5X21haW4pO2lmKChiLmF0dHIoInRhcmdldCIpPTNEPTNEImdhbGF4eV9t
YWluIikmJighYykpe3ZhciA9CmE9M0RiLmF0dHIoImhyZWYiKTtpZihhLmluZGV4T2YoIj8iKT0z
RD0zRC0xKXthKz0zRCI/In1lbHNle2ErPTNEIiYifWErPTNEIj0KdXNlX3BhbmVscz0zRFRydWUi
O2IuYXR0cigiaHJlZiIsYSk7Yi5hdHRyKCJ0YXJnZXQiLCJfc2VsZiIpfXJldHVybiBifSl9KTsK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisoZnVuY3Rpb24oKXt2YXIgYj0zRDA7dmFyIGM9
M0RbIm1zIiwibW96Iiwid2Via2l0IiwibyJdO2Zvcih2YXIgYT0zRDA7YTxjLj0KbGVuZ3RoJiYh
d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsrK2Epe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9u
RnJhbWU9M0R3PQppbmRvd1tjW2FdKyJSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXTt3aW5kb3cuY2Fu
Y2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lPTNEd2k9Cm5kb3dbY1thXSsiQ2FuY2VsUmVxdWVzdEFu
aW1hdGlvbkZyYW1lIl19aWYoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpez0Kd2luZG93
LnJlcXVlc3RBbmltYXRpb25GcmFtZT0zRGZ1bmN0aW9uKGgsZSl7dmFyIGQ9M0RuZXcgRGF0ZSgp
LmdldFRpbWUoKTt2PQphciBmPTNETWF0aC5tYXgoMCwxNi0oZC1iKSk7dmFyIGc9M0R3aW5kb3cu
c2V0VGltZW91dChmdW5jdGlvbigpe2goZCtmKX0sZik9CjtiPTNEZCtmO3JldHVybiBnfX1pZigh
d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRj0KcmFt
ZT0zRGZ1bmN0aW9uKGQpe2NsZWFyVGltZW91dChkKX19fSgpKTtpZighQXJyYXkuaW5kZXhPZil7
QXJyYXkucHJvdG90eXBlPQouaW5kZXhPZj0zRGZ1bmN0aW9uKGMpe2Zvcih2YXIgYj0zRDAsYT0z
RHRoaXMubGVuZ3RoO2I8YTtiKyspe2lmKHRoaXNbYl09M0Q9Cj0zRGMpe3JldHVybiBifX1yZXR1
cm4gLTF9fWZ1bmN0aW9uIG9ial9sZW5ndGgoYyl7aWYoYy5sZW5ndGghPTNEPTNEdW5kZWZpbj0K
ZWQpe3JldHVybiBjLmxlbmd0aH12YXIgYj0zRDA7Zm9yKHZhciBhIGluIGMpe2IrK31yZXR1cm4g
Yn0kLmZuLm1ha2VBYnNvbHV0PQplPTNEZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2YXIgYz0zRGIucG9zaXQ9CmlvbigpO2IuY3NzKHtwb3Np
dGlvbjoiYWJzb2x1dGUiLG1hcmdpbkxlZnQ6MCxtYXJnaW5Ub3A6MCx0b3A6Yy50b3AsbGVmdDpj
Lj0KbGVmdCxyaWdodDokKHdpbmRvdykud2lkdGgoKS0oYy5sZWZ0K2Iud2lkdGgoKSl9KTtpZihh
KXtiLnJlbW92ZSgpLmFwcGVuZFRvPQooImJvZHkiKX19KX07ZnVuY3Rpb24gbWFrZV9wb3B1cG1l
bnUoYixjKXt2YXIgYT0zRChiLmRhdGEoIm1lbnVfb3B0aW9ucyIpKTs9CmIuZGF0YSgibWVudV9v
cHRpb25zIixjKTtpZihhKXtyZXR1cm59Yi5iaW5kKCJjbGljay5zaG93X3BvcHVwIixmdW5jdGlv
bihkKT0KeyQoIi5wb3BtZW51LXdyYXBwZXIiKS5yZW1vdmUoKTtzZXRUaW1lb3V0KGZ1bmN0aW9u
KCl7dmFyIGc9M0QkKCI8dWwgY2xhc3M9Cj0zRCdkcm9wZG93bi1tZW51JyBpZD0zRCciK2IuYXR0
cigiaWQiKSsiLW1lbnUnPjwvdWw+Iik7dmFyIGY9M0RiLmRhdGEoIm1lbj0KdV9vcHRpb25zIik7
aWYob2JqX2xlbmd0aChmKTw9M0QwKXskKCI8bGk+Tm8gT3B0aW9ucy48L2xpPiIpLmFwcGVuZFRv
KGcpfSQuPQplYWNoKGYsZnVuY3Rpb24oaixpKXtpZihpKXt2YXIgbD0zRGkuYWN0aW9ufHxpO2cu
YXBwZW5kKCQoIjxsaT48L2xpPiIpLmFwcGU9Cm5kKCQoIjxhPiIpLmF0dHIoImhyZWYiLGkudXJs
KS5odG1sKGopLmNsaWNrKGwpKSl9ZWxzZXtnLmFwcGVuZCgkKCI8bGk+PC9saT0KPiIpLmFkZENs
YXNzKCJoZWFkIikuYXBwZW5kKCQoIjxhIGhyZWY9M0QnIyc+PC9hPiIpLmh0bWwoaikpKX19KTt2
YXIgaD0zRCQoPQoiPGRpdiBjbGFzcz0zRCdwb3BtZW51LXdyYXBwZXInIHN0eWxlPTNEJ3Bvc2l0
aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwOyB0b3A6IC09CjEwMDA7Jz48L2Rpdj4iKS5hcHBlbmQoZyku
YXBwZW5kVG8oImJvZHkiKTt2YXIgZT0zRGQucGFnZVgtaC53aWR0aCgpLzI7ZT0zRD0KTWF0aC5t
aW4oZSwkKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrJCh3aW5kb3cpLndpZHRoKCktJChoKS53aWR0
aCgpLTUpO2U9M0RNPQphdGgubWF4KGUsJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKzUpO2guY3Nz
KHt0b3A6ZC5wYWdlWSxsZWZ0OmV9KX0sMTApO3NldFQ9CmltZW91dChmdW5jdGlvbigpe3ZhciBm
PTNEZnVuY3Rpb24oaCl7JChoKS5iaW5kKCJjbGljay5jbG9zZV9wb3B1cCIsZnVuY3Rpbz0Kbigp
eyQoIi5wb3BtZW51LXdyYXBwZXIiKS5yZW1vdmUoKTtoLnVuYmluZCgiY2xpY2suY2xvc2VfcG9w
dXAiKX0pfTtmKCQod2luPQpkb3cuZG9jdW1lbnQpKTtmKCQod2luZG93LnRvcC5kb2N1bWVudCkp
O2Zvcih2YXIgZT0zRHdpbmRvdy50b3AuZnJhbWVzLmxlbmc9CnRoO2UtLTspe3ZhciBnPTNEJCh3
aW5kb3cudG9wLmZyYW1lc1tlXS5kb2N1bWVudCk7ZihnKX19LDUwKTtyZXR1cm4gZmFsc2V9KT0K
fWZ1bmN0aW9uIG1ha2VfcG9wdXBfbWVudXMoYSl7YT0zRGF8fGRvY3VtZW50OyQoYSkuZmluZCgi
ZGl2W3BvcHVwbWVudV0iKS5lPQphY2goZnVuY3Rpb24oKXt2YXIgYj0zRHt9O3ZhciBkPTNEJCh0
aGlzKTtkLmZpbmQoImEiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9Cj0zRCQodGhpcyksaT0zRGcu
Z2V0KDApLGU9M0RpLmdldEF0dHJpYnV0ZSgiY29uZmlybSIpLGY9M0RpLmdldEF0dHJpYnV0ZSgi
aD0KcmVmIiksaD0zRGkuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKTtpZighZil7YltnLnRleHQoKV09
M0RudWxsfWVsc2V7YltnLnRleHQoPQopXT0zRHt1cmw6ZixhY3Rpb246ZnVuY3Rpb24oail7aWYo
IWV8fGNvbmZpcm0oZSkpe2lmKGgpe3dpbmRvdy5vcGVuKGYsaCk7cmU9CnR1cm4gZmFsc2V9ZWxz
ZXtnLmNsaWNrKCl9fWVsc2V7ai5wcmV2ZW50RGVmYXVsdCgpfX19fX0pO3ZhciBjPTNEJChhKS5m
aW5kKD0KIiMiK2QuYXR0cigicG9wdXBtZW51IikpO2MuZmluZCgiYSIpLmJpbmQoImNsaWNrIixm
dW5jdGlvbihmKXtmLnN0b3BQcm9wYWdhPQp0aW9uKCk7cmV0dXJuIHRydWV9KTttYWtlX3BvcHVw
bWVudShjLGIpO2MuYWRkQ2xhc3MoInBvcHVwIik7ZC5yZW1vdmUoKX0pfSQ9Ci5mbi5yZWZyZXNo
X3NlbGVjdDI9M0RmdW5jdGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2YXIgYT0zRHtwbGFjZWhvbGRl
cjoiQ2xpYz0KayB0byBzZWxlY3QiLGNsb3NlT25TZWxlY3Q6IWIuaXMoIltNVUxUSVBMRV0iKSxk
cm9wZG93bkF1dG9XaWR0aDp0cnVlLGNvbnRhPQppbmVyQ3NzQ2xhc3M6InNlbGVjdDItbWlud2lk
dGgifTtyZXR1cm4gYi5zZWxlY3QyKGEpfTtmdW5jdGlvbiByZXBsYWNlX2JpZ189CnNlbGVjdF9p
bnB1dHMoYSxjLGIpe2lmKCFqUXVlcnkuZm4uc2VsZWN0Mil7cmV0dXJufWlmKGE9M0Q9M0Q9M0R1
bmRlZmluZWQpez0KYT0zRDIwfWlmKGM9M0Q9M0Q9M0R1bmRlZmluZWQpe2M9M0QzMDAwfWI9M0Ri
fHwkKCJzZWxlY3QiKTtiLmVhY2goZnVuY3Rpb24oPQope3ZhciBlPTNEJCh0aGlzKS5ub3QoIltt
dWx0aXBsZV0iKTt2YXIgZD0zRGUuZmluZCgib3B0aW9uIikubGVuZ3RoO2lmKChkPGE9Cil8fChk
PmMpKXtyZXR1cm59aWYoZS5oYXNDbGFzcygibm8tYXV0b2NvbXBsZXRlIikpe3JldHVybn1lLnJl
ZnJlc2hfc2VsZWN0Mj0KKCl9KX0kLmZuLm1ha2VfdGV4dF9lZGl0YWJsZT0zRGZ1bmN0aW9uKGcp
e3ZhciBkPTNEKCJudW1fY29scyIgaW4gZz9nLm51bV9jPQpvbHM6MzApLGM9M0QoIm51bV9yb3dz
IiBpbiBnP2cubnVtX3Jvd3M6NCksZT0zRCgidXNlX3RleHRhcmVhIiBpbiBnP2cudXNlX3Q9CmV4
dGFyZWE6ZmFsc2UpLGI9M0QoIm9uX2ZpbmlzaCIgaW4gZz9nLm9uX2ZpbmlzaDpudWxsKSxmPTNE
KCJoZWxwX3RleHQiIGluID0KZz9nLmhlbHBfdGV4dDpudWxsKTt2YXIgYT0zRCQodGhpcyk7YS5h
ZGRDbGFzcygiZWRpdGFibGUtdGV4dCIpLmNsaWNrKGZ1bmN0PQppb24obCl7aWYoJCh0aGlzKS5j
aGlsZHJlbigiOmlucHV0IikubGVuZ3RoPjApe3JldHVybn1hLnJlbW92ZUNsYXNzKCJlZGl0YWI9
CmxlLXRleHQiKTt2YXIgaT0zRGZ1bmN0aW9uKG0pe2EuZmluZCgiOmlucHV0IikucmVtb3ZlKCk7
aWYobSE9M0Q9M0QiIil7YS50ZT0KeHQobSl9ZWxzZXthLmh0bWwoIjxicj4iKX1hLmFkZENsYXNz
KCJlZGl0YWJsZS10ZXh0Iik7aWYoYil7YihtKX19O3ZhciBoPTNEPQooImN1cl90ZXh0IiBpbiBn
P2cuY3VyX3RleHQ6YS50ZXh0KCkpLGssajtpZihlKXtrPTNEJCgiPHRleHRhcmVhLz4iKS5hdHRy
KHs9CnJvd3M6Yyxjb2xzOmR9KS50ZXh0KCQudHJpbShoKSkua2V5dXAoZnVuY3Rpb24obSl7aWYo
bS5rZXlDb2RlPTNEPTNEPTNEMjcpez0KaShoKX19KTtqPTNEJCgiPGJ1dHRvbi8+IikudGV4dCgi
RG9uZSIpLmNsaWNrKGZ1bmN0aW9uKCl7aShrLnZhbCgpKTtyZXR1cm4gPQpmYWxzZX0pfWVsc2V7
az0zRCQoIjxpbnB1dCB0eXBlPTNEJ3RleHQnLz4iKS5hdHRyKHt2YWx1ZTokLnRyaW0oaCksc2l6
ZTpkfSk9Ci5ibHVyKGZ1bmN0aW9uKCl7aShoKX0pLmtleXVwKGZ1bmN0aW9uKG0pe2lmKG0ua2V5
Q29kZT0zRD0zRD0zRDI3KXskKHRoaXMpLj0KdHJpZ2dlcigiYmx1ciIpfWVsc2V7aWYobS5rZXlD
b2RlPTNEPTNEPTNEMTMpe2koJCh0aGlzKS52YWwoKSl9fW0uc3RvcFByb3BhPQpnYXRpb24oKX0p
fWEudGV4dCgiIik7YS5hcHBlbmQoayk7aWYoail7YS5hcHBlbmQoail9ay5mb2N1cygpO2suc2Vs
ZWN0KCk7bC49CnN0b3BQcm9wYWdhdGlvbigpfSk7aWYoZil7YS5hdHRyKCJ0aXRsZSIsZikudG9v
bHRpcCgpfXJldHVybiBhfTtmdW5jdGlvbiBhcz0KeW5jX3NhdmVfdGV4dChkLGYsZSxhLGMsaCxp
LGcsYil7aWYoYz0zRD0zRD0zRHVuZGVmaW5lZCl7Yz0zRDMwfWlmKGk9M0Q9M0Q9Cj0zRHVuZGVm
aW5lZCl7aT0zRDR9JCgiIyIrZCkuY2xpY2soZnVuY3Rpb24oKXtpZigkKCIjcmVuYW1pbmctYWN0
aXZlIikubGVuZz0KdGg+MCl7cmV0dXJufXZhciBsPTNEJCgiIyIrZiksaz0zRGwudGV4dCgpLGo7
aWYoaCl7aj0zRCQoIjx0ZXh0YXJlYT48L3RleHRhPQpyZWE+IikuYXR0cih7cm93czppLGNvbHM6
Y30pLnRleHQoJC50cmltKGspKX1lbHNle2o9M0QkKCI8aW5wdXQgdHlwZT0zRCd0ZXg9CnQnPjwv
aW5wdXQ+IikuYXR0cih7dmFsdWU6JC50cmltKGspLHNpemU6Y30pfWouYXR0cigiaWQiLCJyZW5h
bWluZy1hY3RpdmUiKT0KO2ouYmx1cihmdW5jdGlvbigpeyQodGhpcykucmVtb3ZlKCk7bC5zaG93
KCk7aWYoYil7YihqKX19KTtqLmtleXVwKGZ1bmN0aW9uPQoobil7aWYobi5rZXlDb2RlPTNEPTNE
PTNEMjcpeyQodGhpcykudHJpZ2dlcigiYmx1ciIpfWVsc2V7aWYobi5rZXlDb2RlPTNEPQo9M0Q9
M0QxMyl7dmFyIG09M0R7fTttW2FdPTNEJCh0aGlzKS52YWwoKTskKHRoaXMpLnRyaWdnZXIoImJs
dXIiKTskLmFqYXgoe3U9CnJsOmUsZGF0YTptLGVycm9yOmZ1bmN0aW9uKCl7YWxlcnQoIlRleHQg
ZWRpdGluZyBmb3IgZWx0ICIrZisiIGZhaWxlZCIpfSxzdT0KY2Nlc3M6ZnVuY3Rpb24obyl7aWYo
byE9M0Q9M0QiIil7bC50ZXh0KG8pfWVsc2V7bC5odG1sKCI8ZW0+Tm9uZTwvZW0+Iil9aWYoPQpi
KXtiKGopfX19KX19fSk7aWYoZyl7ZyhqKX1sLmhpZGUoKTtqLmluc2VydEFmdGVyKGwpO2ouZm9j
dXMoKTtqLnNlbGVjdCgpO3I9CmV0dXJufSl9ZnVuY3Rpb24gY29tbWF0aXplKGIpe2IrPTNEIiI7
dmFyIGE9M0QvKFxkKykoXGR7M30pLzt3aGlsZShhLnRlc3QoYj0KKSl7Yj0zRGIucmVwbGFjZShh
LCIkMSwkMiIpfXJldHVybiBifWZ1bmN0aW9uIHJlc2V0X3Rvb2xfc2VhcmNoKGEpe3ZhciBjPTNE
PQokKCIjZ2FsYXh5X3Rvb2xzIikuY29udGVudHMoKTtpZihjLmxlbmd0aD0zRD0zRD0zRDApe2M9
M0QkKGRvY3VtZW50KX0kKHRoaXM9CikucmVtb3ZlQ2xhc3MoInNlYXJjaF9hY3RpdmUiKTtjLmZp
bmQoIi50b29sVGl0bGUiKS5yZW1vdmVDbGFzcygic2VhcmNoX21hdD0KY2giKTtjLmZpbmQoIi50
b29sU2VjdGlvbkJvZHkiKS5oaWRlKCk7Yy5maW5kKCIudG9vbFRpdGxlIikuc2hvdygpO2MuZmlu
ZCgiPQoudG9vbFBhbmVsTGFiZWwiKS5zaG93KCk7Yy5maW5kKCIudG9vbFNlY3Rpb25XcmFwcGVy
IikuZWFjaChmdW5jdGlvbigpe2lmKCQ9Cih0aGlzKS5hdHRyKCJpZCIpIT0zRD0zRCJyZWNlbnRs
eV91c2VkX3dyYXBwZXIiKXskKHRoaXMpLnNob3coKX1lbHNle2lmKCQodD0KaGlzKS5oYXNDbGFz
cygidXNlcl9wcmVmX3Zpc2libGUiKSl7JCh0aGlzKS5zaG93KCl9fX0pO2MuZmluZCgiI3NlYXJj
aC1uby1yPQplc3VsdHMiKS5oaWRlKCk7Yy5maW5kKCIjc2VhcmNoLXNwaW5uZXIiKS5oaWRlKCk7
aWYoYSl7dmFyIGI9M0RjLmZpbmQoIiN0b289Cmwtc2VhcmNoLXF1ZXJ5Iik7Yi52YWwoInNlYXJj
aCB0b29scyIpfX12YXIgR2FsYXh5QXN5bmM9M0RmdW5jdGlvbihhKXt0aGlzLj0KdXJsX2RpY3Q9
M0R7fTt0aGlzLmxvZ19hY3Rpb249M0QoYT0zRD0zRD0zRHVuZGVmaW5lZD9mYWxzZTphKX07R2Fs
YXh5QXN5bmMuPQpwcm90b3R5cGUuc2V0X2Z1bmNfdXJsPTNEZnVuY3Rpb24oYSxiKXt0aGlzLnVy
bF9kaWN0W2FdPTNEYn07R2FsYXh5QXN5bmMucHI9Cm90b3R5cGUuc2V0X3VzZXJfcHJlZj0zRGZ1
bmN0aW9uKGEsYil7dmFyIGM9M0R0aGlzLnVybF9kaWN0W2FyZ3VtZW50cy5jYWxsZT0KZV07aWYo
Yz0zRD0zRD0zRHVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlfSQuYWpheCh7dXJsOmMsZGF0YTp7cHJl
Zl9uYW1lOmEscHJlPQpmX3ZhbHVlOmJ9LGVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxz
dWNjZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRydWV9fSk9Cn07R2FsYXh5QXN5bmMucHJvdG90eXBl
LmxvZ191c2VyX2FjdGlvbj0zRGZ1bmN0aW9uKGMsYixkKXtpZighdGhpcy5sb2dfYWN0aT0Kb24p
e3JldHVybn12YXIgYT0zRHRoaXMudXJsX2RpY3RbYXJndW1lbnRzLmNhbGxlZV07aWYoYT0zRD0z
RD0zRHVuZGVmaW5lZCl7PQpyZXR1cm4gZmFsc2V9JC5hamF4KHt1cmw6YSxkYXRhOnthY3Rpb246
Yyxjb250ZXh0OmIscGFyYW1zOmR9LGVycm9yOmZ1bmN0aW89Cm4oKXtyZXR1cm4gZmFsc2V9LHN1
Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZX19KX07ZnVuY3Rpb24gaW5pdF9yZWZyZXNoXz0K
b25fY2hhbmdlKCl7JCgic2VsZWN0W3JlZnJlc2hfb25fY2hhbmdlPTNEJ3RydWUnXSIpLm9mZigi
Y2hhbmdlIikuY2hhbmdlKGZ1PQpuY3Rpb24oKXt2YXIgYT0zRCQodGhpcyksZT0zRGEudmFsKCks
ZD0zRGZhbHNlLGM9M0RhLmF0dHIoInJlZnJlc2hfb25fY2hhbmc9CmVfdmFsdWVzIik7aWYoYyl7
Yz0zRGMuc3BsaXQoIiwiKTt2YXIgYj0zRGEuYXR0cigibGFzdF9zZWxlY3RlZF92YWx1ZSIpO2lm
KD0KJC5pbkFycmF5KGUsYyk9M0Q9M0Q9M0QtMSYmJC5pbkFycmF5KGIsYyk9M0Q9M0Q9M0QtMSl7
cmV0dXJufX0kKHdpbmRvdykudHJpPQpnZ2VyKCJyZWZyZXNoX29uX2NoYW5nZSIpOyQoZG9jdW1l
bnQpLnRyaWdnZXIoImNvbnZlcnRfdG9fdmFsdWVzIik7YS5nZXQoMCk9Ci5mb3JtLnN1Ym1pdCgp
fSk7JCgiOmNoZWNrYm94W3JlZnJlc2hfb25fY2hhbmdlPTNEJ3RydWUnXSIpLm9mZigiY2xpY2si
KS5jbD0KaWNrKGZ1bmN0aW9uKCl7dmFyIGE9M0QkKHRoaXMpLGU9M0RhLnZhbCgpLGQ9M0RmYWxz
ZSxjPTNEYS5hdHRyKCJyZWZyZXNoX29uPQpfY2hhbmdlX3ZhbHVlcyIpO2lmKGMpe2M9M0RjLnNw
bGl0KCIsIik7dmFyIGI9M0RhLmF0dHIoImxhc3Rfc2VsZWN0ZWRfdmFsdWU9CiIpO2lmKCQuaW5B
cnJheShlLGMpPTNEPTNEPTNELTEmJiQuaW5BcnJheShiLGMpPTNEPTNEPTNELTEpe3JldHVybn19
JCh3aW5kbz0KdykudHJpZ2dlcigicmVmcmVzaF9vbl9jaGFuZ2UiKTthLmdldCgwKS5mb3JtLnN1
Ym1pdCgpfSk7JCgiYVtjb25maXJtXSIpLm9mPQpmKCJjbGljayIpLmNsaWNrKGZ1bmN0aW9uKCl7
cmV0dXJuIGNvbmZpcm0oJCh0aGlzKS5hdHRyKCJjb25maXJtIikpfSl9alF1ZXI9CnkuZm4ucHJl
dmVudERvdWJsZVN1Ym1pc3Npb249M0RmdW5jdGlvbigpeyQodGhpcykub24oInN1Ym1pdCIsZnVu
Y3Rpb24oYil7dj0KYXIgYT0zRCQodGhpcyk7aWYoYS5kYXRhKCJzdWJtaXR0ZWQiKT0zRD0zRD0z
RHRydWUpe2IucHJldmVudERlZmF1bHQoKX1lbHNlPQp7YS5kYXRhKCJzdWJtaXR0ZWQiLHRydWUp
fX0pO3JldHVybiB0aGlzfTskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe2luaXQ9Cl9yZWZy
ZXNoX29uX2NoYW5nZSgpO2lmKCQuZm4udG9vbHRpcCl7JCgiLnVuaWZpZWQtcGFuZWwtaGVhZGVy
IFt0aXRsZV0iKS50bz0Kb2x0aXAoe3BsYWNlbWVudDoiYm90dG9tIn0pOyQoIlt0aXRsZV0iKS50
b29sdGlwKCl9bWFrZV9wb3B1cF9tZW51cygpO3JlcGxhPQpjZV9iaWdfc2VsZWN0X2lucHV0cygy
MCwxNTAwKTskKCJhIikuY2xpY2soZnVuY3Rpb24oKXt2YXIgYj0zRCQodGhpcyk7dmFyIGM9Cj0z
RChwYXJlbnQuZnJhbWVzJiZwYXJlbnQuZnJhbWVzLmdhbGF4eV9tYWluKTtpZigoYi5hdHRyKCJ0
YXJnZXQiKT0zRD0zRCJnYT0KbGF4eV9tYWluIikmJighYykpe3ZhciBhPTNEYi5hdHRyKCJocmVm
Iik7aWYoYS5pbmRleE9mKCI/Iik9M0Q9M0QtMSl7YSs9M0QiPQo/In1lbHNle2ErPTNEIiYifWEr
PTNEInVzZV9wYW5lbHM9M0RUcnVlIjtiLmF0dHIoImhyZWYiLGEpO2IuYXR0cigidGFyZ2V0Iiw9
CiJfc2VsZiIpfXJldHVybiBifSl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgoKaHR0
cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzMzZmQ0M2Y3
NTkwZi8KQ2hhbmdlc2V0OiAgIDMzZmQ0M2Y3NTkwZgpCcmFuY2g6ICAgICAgcmVsZWFzZV8xNS4w
MwpVc2VyOiAgICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0wMi0yMyAyMjox
NDozNyswMDowMApTdW1tYXJ5OiAgICAgVUksIGhpc3RvcnkgcGFuZWw6IGNvcnJlY3RseSBkZWZh
dWx0IGNsZWFyTWVzc2FnZXMgdGFyZ2V0IHdoZW49CiBubyBldmVudCBpcyBnaXZlbgpBZmZlY3Rl
ZCAjOiAgOCBmaWxlcwoKZGlmZiAtciA5MzgwMWQ2ZmE3YmQzMmE4MWRlMzk3MTM3OTUzMzEyY2Nh
N2E0M2ExIC1yIDMzZmQ0M2Y3NTkwZjE3ZWQ2MTFjZTA3PQoxNzhjYWU4YzJiNzA1MjVkMCBjbGll
bnQvZ2FsYXh5L3NjcmlwdHMvbXZjL2hpc3RvcnkvaGlzdG9yeS1wYW5lbC1lZGl0LWN1cnI9CmVu
dC5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL2hpc3RvcnkvaGlzdG9yeS1wYW5l
bC1lZGl0LWN1cnJlbnQuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5
L2hpc3RvcnktcGFuZWwtZWRpdC1jdXJyZW50LmpzCkBAIC0zNzksMjEgKzM3OSwzMSBAQAogICAg
IH0sCj0yMAogLy9UT0RPOiB0aGlzIHNlZW1zIG1vcmUgbGlrZSBhIHBlciB1c2VyIG1lc3NhZ2Ug
dGhhbiBhIGhpc3RvcnkgbWVzc2FnZTsgSU89ClcsIHRoaXMgZG9lc24ndCBiZWxvbmcgaGVyZQor
ICAgIC8qKiBPdmVycmlkZSB0byBwcmVzZXJ2ZSB0aGUgcXVvdGEgbWVzc2FnZSAqLworICAgIGNs
ZWFyTWVzc2FnZXMgOiBmdW5jdGlvbiggZXYgKXsKKyAgICAgICAgdmFyICR0YXJnZXQgPTNEICFf
LmlzVW5kZWZpbmVkKCBldiApPworICAgICAgICAgICAgJCggZXYuY3VycmVudFRhcmdldCApCisg
ICAgICAgICAgICA6dGhpcy4kbWVzc2FnZXMoKS5jaGlsZHJlbiggJ1tjbGFzcyQ9M0QibWVzc2Fn
ZSJdJyApOworICAgICAgICAkdGFyZ2V0ID0zRCAkdGFyZ2V0Lm5vdCggJy5xdW90YS1tZXNzYWdl
JyApOworICAgICAgICAkdGFyZ2V0LmZhZGVPdXQoIHRoaXMuZnhTcGVlZCwgZnVuY3Rpb24oKXsK
KyAgICAgICAgICAgICQoIHRoaXMgKS5yZW1vdmUoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH0sCisKICAgICAvKiogU2hvdyB0aGUgb3ZlciBxdW90YSBtZXNzYWdl
ICh3aGljaCBoYXBwZW5zIHRvIGJlIGluIHRoZSBoaXN0b3J5IHBhPQpuZWwpLgogICAgICAqLwog
ICAgIHNob3dRdW90YU1lc3NhZ2UgOiBmdW5jdGlvbigpewotICAgICAgICB2YXIgbXNnID0zRCB0
aGlzLiRlbC5maW5kKCAnLnF1b3RhLW1lc3NhZ2UnICk7Ci0gICAgICAgIC8vdGhpcy5sb2coIHRo
aXMgKyAnIHNob3dpbmcgcXVvdGEgbWVzc2FnZTonLCBtc2csIHVzZXJEYXRhICk7Ci0gICAgICAg
IGlmKCBtc2cuaXMoICc6aGlkZGVuJyApICl7IG1zZy5zbGlkZURvd24oIHRoaXMuZnhTcGVlZCAp
OyB9CisgICAgICAgIHZhciAkbXNnID0zRCB0aGlzLiQoICcucXVvdGEtbWVzc2FnZScgKTsKKyAg
ICAgICAgaWYoICRtc2cuaXMoICc6aGlkZGVuJyApICl7ICRtc2cuc2xpZGVEb3duKCB0aGlzLmZ4
U3BlZWQgKTsgfQogICAgIH0sCj0yMAogLy9UT0RPOiB0aGlzIHNlZW1zIG1vcmUgbGlrZSBhIHBl
ciB1c2VyIG1lc3NhZ2UgdGhhbiBhIGhpc3RvcnkgbWVzc2FnZQogICAgIC8qKiBIaWRlIHRoZSBv
dmVyIHF1b3RhIG1lc3NhZ2UgKHdoaWNoIGhhcHBlbnMgdG8gYmUgaW4gdGhlIGhpc3RvcnkgcGE9
Cm5lbCkuCiAgICAgICovCiAgICAgaGlkZVF1b3RhTWVzc2FnZSA6IGZ1bmN0aW9uKCl7Ci0gICAg
ICAgIHZhciBtc2cgPTNEIHRoaXMuJGVsLmZpbmQoICcucXVvdGEtbWVzc2FnZScgKTsKLSAgICAg
ICAgLy90aGlzLmxvZyggdGhpcyArICcgaGlkaW5nIHF1b3RhIG1lc3NhZ2U6JywgbXNnLCB1c2Vy
RGF0YSApOwotICAgICAgICBpZiggIW1zZy5pcyggJzpoaWRkZW4nICkgKXsgbXNnLnNsaWRlVXAo
IHRoaXMuZnhTcGVlZCApOyB9CisgICAgICAgIHZhciAkbXNnID0zRCB0aGlzLiQoICcucXVvdGEt
bWVzc2FnZScgKTsKKyAgICAgICAgaWYoICEkbXNnLmlzKCAnOmhpZGRlbicgKSApeyAkbXNnLnNs
aWRlVXAoIHRoaXMuZnhTcGVlZCApOyB9CiAgICAgfSwKPTIwCiAgICAgLyoqIFJldHVybiBhIHN0
cmluZyByZXAgb2YgdGhlIGhpc3RvcnkKCmRpZmYgLXIgOTM4MDFkNmZhN2JkMzJhODFkZTM5NzEz
Nzk1MzMxMmNjYTdhNDNhMSAtciAzM2ZkNDNmNzU5MGYxN2VkNjExY2UwNz0KMTc4Y2FlOGMyYjcw
NTI1ZDAgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwuanMK
LS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwuanMK
KysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwuanMK
QEAgLTM4MSwxMiArMzgxLDkgQEAKICAgICAvKiogZXZlbnQgbWFwICovCiAgICAgZXZlbnRzIDog
Xy5leHRlbmQoIF8uY2xvbmUoIF9zdXBlci5wcm90b3R5cGUuZXZlbnRzICksIHsKICAgICAgICAg
Ly8gdG9nZ2xlIGxpc3QgaXRlbSBzZWxlY3RvcnMKLSAgICAgICAgJ2NsaWNrIC5zaG93LXNlbGVj
dG9ycy1idG4nICAgICAgICAgICAgICAgICA6ICd0b2dnbGVTZWxlY3RvcnMnCisgICAgICAgICdj
bGljayAuc2hvdy1zZWxlY3RvcnMtYnRuJyAgICAgICAgIDogJ3RvZ2dsZVNlbGVjdG9ycycsCiAg
ICAgICAgIC8vIGFsbG93IChlcnJvcikgbWVzc2FnZXMgdG8gYmUgY2xpY2tlZCBhd2F5Ci0vL1RP
RE86IHN3aXRjaCB0byBjb21tb24gY2xvc2UgKFgpIGlkaW9tCi0gICAgICAgIC8vJ2NsaWNrIC5t
ZXNzYWdlcycgICAgICAgICAgICAgICA6ICdjbGVhck1lc3NhZ2VzJywKLS8vVE9ETzogcmVtb3Zl
Ci0gICAgICAgIC8vJ2NsaWNrIC5oaXN0b3J5LXNlYXJjaC1idG4nICAgICA6ICd0b2dnbGVTZWFy
Y2hDb250cm9scycKKyAgICAgICAgJ2NsaWNrIC5tZXNzYWdlcyBbY2xhc3MkPTNEbWVzc2FnZV0n
ICA6ICdjbGVhck1lc3NhZ2VzJwogICAgIH0pLAo9MjAKICAgICAvKiogSGFuZGxlIHRoZSB1c2Vy
IHRvZ2dsaW5nIHRoZSBkZWxldGVkIHZpc2liaWxpdHkgYnk6CkBAIC00NTcsMTQgKzQ1NCwxNCBA
QAogICAgICAqLwogICAgIGVycm9ySGFuZGxlciA6IGZ1bmN0aW9uKCBtb2RlbCwgeGhyLCBvcHRp
b25zLCBtc2csIGRldGFpbHMgKXsKICAgICAgICAgdGhpcy5lcnJvciggbW9kZWwsIHhociwgb3B0
aW9ucywgbXNnLCBkZXRhaWxzICk7Ci0vL1RPRE86IGdldHRpbmcgSlNPTiBwYXJzZSBlcnJvcnMg
ZnJvbSBqcSBtaWdyYXRlCj0yMAogICAgICAgICAvLyBpbnRlcnJ1cHRlZCBhamF4CiAgICAgICAg
IGlmKCB4aHIgJiYgeGhyLnN0YXR1cyA9M0Q9M0Q9M0QgMCAmJiB4aHIucmVhZHlTdGF0ZSA9M0Q9
M0Q9M0QgMCApeworICAgICAgICAgICAgLy9UT0RPOiBnbWFpbCBzdHlsZSAncmV0cnlpbmcgaW4g
TnMnCj0yMAogICAgICAgICAvLyBiYWQgZ2F0ZXdheQogICAgICAgICB9IGVsc2UgaWYoIHhociAm
JiB4aHIuc3RhdHVzID0zRD0zRD0zRCA1MDIgKXsKLS8vVE9ETzogZ21haWwgc3R5bGUgJ3JlY29u
bmVjdGluZyBpbiBOcycKKyAgICAgICAgICAgIC8vVE9ETzogZ21haWwgc3R5bGUgJ3JldHJ5aW5n
IGluIE5zJwo9MjAKICAgICAgICAgLy8gb3RoZXJ3aXNlLCBzaG93IGFuIGVycm9yIG1lc3NhZ2Ug
aW5zaWRlIHRoZSBwYW5lbAogICAgICAgICB9IGVsc2UgewpAQCAtNTUxLDcgKzU0OCw3IEBACiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAkbXNnLmFwcGVuZCggJyAnLCAkZGV0YWls
c0xpbmsgKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gJG1zZ0NvbnRhaW5lci5odG1sKCAk
bXNnICk7CisgICAgICAgIHJldHVybiAkbXNnQ29udGFpbmVyLmFwcGVuZCggJG1zZyApOwogICAg
IH0sCj0yMAogICAgIC8qKiBjb252ZXJ0IG1zZyBhbmQgZGV0YWlscyBpbnRvIG1vZGFsIG9wdGlv
bnMgdXNhYmxlIGJ5IEdhbGF4eS5tb2RhbCA9CiovCkBAIC01ODIsMTAgKzU3OSwxMiBAQAo9MjAK
ICAgICAvKiogUmVtb3ZlIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBwYW5lbC4gKi8KICAgICBjbGVh
ck1lc3NhZ2VzIDogZnVuY3Rpb24oIGV2ICl7Ci0gICAgICAgICQoIGV2LmN1cnJlbnRUYXJnZXQg
KS5mYWRlT3V0KCB0aGlzLmZ4U3BlZWQsIGZ1bmN0aW9uKCl7CisgICAgICAgIHZhciAkdGFyZ2V0
ID0zRCAhXy5pc1VuZGVmaW5lZCggZXYgKT8KKyAgICAgICAgICAgICQoIGV2LmN1cnJlbnRUYXJn
ZXQgKQorICAgICAgICAgICAgOnRoaXMuJG1lc3NhZ2VzKCkuY2hpbGRyZW4oICdbY2xhc3MkPTNE
Im1lc3NhZ2UiXScgKTsKKyAgICAgICAgJHRhcmdldC5mYWRlT3V0KCB0aGlzLmZ4U3BlZWQsIGZ1
bmN0aW9uKCl7CiAgICAgICAgICAgICAkKCB0aGlzICkucmVtb3ZlKCk7CiAgICAgICAgIH0pOwot
ICAgICAgICAvL3RoaXMuJG1lc3NhZ2VzKCkuY2hpbGRyZW4oKS5ub3QoICcucXVvdGEtbWVzc2Fn
ZScgKS5yZW1vdmUoKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfSwKPTIwCgpkaWZmIC1y
IDkzODAxZDZmYTdiZDMyYTgxZGUzOTcxMzc5NTMzMTJjY2E3YTQzYTEgLXIgMzNmZDQzZjc1OTBm
MTdlZDYxMWNlMDc9CjE3OGNhZThjMmI3MDUyNWQwIGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMv
bGlzdC9saXN0LXBhbmVsLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvbGlzdC9s
aXN0LXBhbmVsLmpzCisrKyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvbGlzdC9saXN0LXBh
bmVsLmpzCkBAIC0xMTksNiArMTE5LDggQEAKICAgICBfc2V0VXBMaXN0ZW5lcnMgOiBmdW5jdGlv
bigpewogICAgICAgICB0aGlzLm9mZigpOwo9MjAKKyAgICAgICAgLy9UT0RPOiBtb3ZlIGVycm9y
SGFuZGxlciBkb3duIGludG8gbGlzdC1wYW5lbCBmcm9tIGhpc3RvcnktcGFuZWwgPQpvcgorICAg
ICAgICAvLyAgcGFzcyB0byBnbG9iYWwgZXJyb3IgaGFuZGxlciAoR2FsYXh5KQogICAgICAgICB0
aGlzLm9uKCAnZXJyb3InLCBmdW5jdGlvbiggbW9kZWwsIHhociwgb3B0aW9ucywgbXNnLCBkZXRh
aWxzICl7CiAgICAgICAgICAgICAvL3RoaXMuZXJyb3JIYW5kbGVyKCBtb2RlbCwgeGhyLCBvcHRp
b25zLCBtc2csIGRldGFpbHMgKTsKICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIG1vZGVsLCB4
aHIsIG9wdGlvbnMsIG1zZywgZGV0YWlscyApOwoKZGlmZiAtciA5MzgwMWQ2ZmE3YmQzMmE4MWRl
Mzk3MTM3OTUzMzEyY2NhN2E0M2ExIC1yIDMzZmQ0M2Y3NTkwZjE3ZWQ2MTFjZTA3PQoxNzhjYWU4
YzJiNzA1MjVkMCBzdGF0aWMvc2NyaXB0cy9tdmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVsLWVkaXQt
Y3VycmVudC5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9tdmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVs
LWVkaXQtY3VycmVudC5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9tdmMvaGlzdG9yeS9oaXN0b3J5
LXBhbmVsLWVkaXQtY3VycmVudC5qcwpAQCAtMzc5LDIxICszNzksMzEgQEAKICAgICB9LAo9MjAK
IC8vVE9ETzogdGhpcyBzZWVtcyBtb3JlIGxpa2UgYSBwZXIgdXNlciBtZXNzYWdlIHRoYW4gYSBo
aXN0b3J5IG1lc3NhZ2U7IElPPQpXLCB0aGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUKKyAgICAvKiog
T3ZlcnJpZGUgdG8gcHJlc2VydmUgdGhlIHF1b3RhIG1lc3NhZ2UgKi8KKyAgICBjbGVhck1lc3Nh
Z2VzIDogZnVuY3Rpb24oIGV2ICl7CisgICAgICAgIHZhciAkdGFyZ2V0ID0zRCAhXy5pc1VuZGVm
aW5lZCggZXYgKT8KKyAgICAgICAgICAgICQoIGV2LmN1cnJlbnRUYXJnZXQgKQorICAgICAgICAg
ICAgOnRoaXMuJG1lc3NhZ2VzKCkuY2hpbGRyZW4oICdbY2xhc3MkPTNEIm1lc3NhZ2UiXScgKTsK
KyAgICAgICAgJHRhcmdldCA9M0QgJHRhcmdldC5ub3QoICcucXVvdGEtbWVzc2FnZScgKTsKKyAg
ICAgICAgJHRhcmdldC5mYWRlT3V0KCB0aGlzLmZ4U3BlZWQsIGZ1bmN0aW9uKCl7CisgICAgICAg
ICAgICAkKCB0aGlzICkucmVtb3ZlKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9LAorCiAgICAgLyoqIFNob3cgdGhlIG92ZXIgcXVvdGEgbWVzc2FnZSAod2hpY2gg
aGFwcGVucyB0byBiZSBpbiB0aGUgaGlzdG9yeSBwYT0KbmVsKS4KICAgICAgKi8KICAgICBzaG93
UXVvdGFNZXNzYWdlIDogZnVuY3Rpb24oKXsKLSAgICAgICAgdmFyIG1zZyA9M0QgdGhpcy4kZWwu
ZmluZCggJy5xdW90YS1tZXNzYWdlJyApOwotICAgICAgICAvL3RoaXMubG9nKCB0aGlzICsgJyBz
aG93aW5nIHF1b3RhIG1lc3NhZ2U6JywgbXNnLCB1c2VyRGF0YSApOwotICAgICAgICBpZiggbXNn
LmlzKCAnOmhpZGRlbicgKSApeyBtc2cuc2xpZGVEb3duKCB0aGlzLmZ4U3BlZWQgKTsgfQorICAg
ICAgICB2YXIgJG1zZyA9M0QgdGhpcy4kKCAnLnF1b3RhLW1lc3NhZ2UnICk7CisgICAgICAgIGlm
KCAkbXNnLmlzKCAnOmhpZGRlbicgKSApeyAkbXNnLnNsaWRlRG93biggdGhpcy5meFNwZWVkICk7
IH0KICAgICB9LAo9MjAKIC8vVE9ETzogdGhpcyBzZWVtcyBtb3JlIGxpa2UgYSBwZXIgdXNlciBt
ZXNzYWdlIHRoYW4gYSBoaXN0b3J5IG1lc3NhZ2UKICAgICAvKiogSGlkZSB0aGUgb3ZlciBxdW90
YSBtZXNzYWdlICh3aGljaCBoYXBwZW5zIHRvIGJlIGluIHRoZSBoaXN0b3J5IHBhPQpuZWwpLgog
ICAgICAqLwogICAgIGhpZGVRdW90YU1lc3NhZ2UgOiBmdW5jdGlvbigpewotICAgICAgICB2YXIg
bXNnID0zRCB0aGlzLiRlbC5maW5kKCAnLnF1b3RhLW1lc3NhZ2UnICk7Ci0gICAgICAgIC8vdGhp
cy5sb2coIHRoaXMgKyAnIGhpZGluZyBxdW90YSBtZXNzYWdlOicsIG1zZywgdXNlckRhdGEgKTsK
LSAgICAgICAgaWYoICFtc2cuaXMoICc6aGlkZGVuJyApICl7IG1zZy5zbGlkZVVwKCB0aGlzLmZ4
U3BlZWQgKTsgfQorICAgICAgICB2YXIgJG1zZyA9M0QgdGhpcy4kKCAnLnF1b3RhLW1lc3NhZ2Un
ICk7CisgICAgICAgIGlmKCAhJG1zZy5pcyggJzpoaWRkZW4nICkgKXsgJG1zZy5zbGlkZVVwKCB0
aGlzLmZ4U3BlZWQgKTsgfQogICAgIH0sCj0yMAogICAgIC8qKiBSZXR1cm4gYSBzdHJpbmcgcmVw
IG9mIHRoZSBoaXN0b3J5CgpkaWZmIC1yIDkzODAxZDZmYTdiZDMyYTgxZGUzOTcxMzc5NTMzMTJj
Y2E3YTQzYTEgLXIgMzNmZDQzZjc1OTBmMTdlZDYxMWNlMDc9CjE3OGNhZThjMmI3MDUyNWQwIHN0
YXRpYy9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwuanMKLS0tIGEvc3RhdGljL3Nj
cmlwdHMvbXZjL2hpc3RvcnkvaGlzdG9yeS1wYW5lbC5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9t
dmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVsLmpzCkBAIC0zODEsMTIgKzM4MSw5IEBACiAgICAgLyoq
IGV2ZW50IG1hcCAqLwogICAgIGV2ZW50cyA6IF8uZXh0ZW5kKCBfLmNsb25lKCBfc3VwZXIucHJv
dG90eXBlLmV2ZW50cyApLCB7CiAgICAgICAgIC8vIHRvZ2dsZSBsaXN0IGl0ZW0gc2VsZWN0b3Jz
Ci0gICAgICAgICdjbGljayAuc2hvdy1zZWxlY3RvcnMtYnRuJyAgICAgICAgICAgICAgICAgOiAn
dG9nZ2xlU2VsZWN0b3JzJworICAgICAgICAnY2xpY2sgLnNob3ctc2VsZWN0b3JzLWJ0bicgICAg
ICAgICA6ICd0b2dnbGVTZWxlY3RvcnMnLAogICAgICAgICAvLyBhbGxvdyAoZXJyb3IpIG1lc3Nh
Z2VzIHRvIGJlIGNsaWNrZWQgYXdheQotLy9UT0RPOiBzd2l0Y2ggdG8gY29tbW9uIGNsb3NlIChY
KSBpZGlvbQotICAgICAgICAvLydjbGljayAubWVzc2FnZXMnICAgICAgICAgICAgICAgOiAnY2xl
YXJNZXNzYWdlcycsCi0vL1RPRE86IHJlbW92ZQotICAgICAgICAvLydjbGljayAuaGlzdG9yeS1z
ZWFyY2gtYnRuJyAgICAgOiAndG9nZ2xlU2VhcmNoQ29udHJvbHMnCisgICAgICAgICdjbGljayAu
bWVzc2FnZXMgW2NsYXNzJD0zRG1lc3NhZ2VdJyAgOiAnY2xlYXJNZXNzYWdlcycKICAgICB9KSwK
PTIwCiAgICAgLyoqIEhhbmRsZSB0aGUgdXNlciB0b2dnbGluZyB0aGUgZGVsZXRlZCB2aXNpYmls
aXR5IGJ5OgpAQCAtNDU3LDE0ICs0NTQsMTQgQEAKICAgICAgKi8KICAgICBlcnJvckhhbmRsZXIg
OiBmdW5jdGlvbiggbW9kZWwsIHhociwgb3B0aW9ucywgbXNnLCBkZXRhaWxzICl7CiAgICAgICAg
IHRoaXMuZXJyb3IoIG1vZGVsLCB4aHIsIG9wdGlvbnMsIG1zZywgZGV0YWlscyApOwotLy9UT0RP
OiBnZXR0aW5nIEpTT04gcGFyc2UgZXJyb3JzIGZyb20ganEgbWlncmF0ZQo9MjAKICAgICAgICAg
Ly8gaW50ZXJydXB0ZWQgYWpheAogICAgICAgICBpZiggeGhyICYmIHhoci5zdGF0dXMgPTNEPTNE
PTNEIDAgJiYgeGhyLnJlYWR5U3RhdGUgPTNEPTNEPTNEIDAgKXsKKyAgICAgICAgICAgIC8vVE9E
TzogZ21haWwgc3R5bGUgJ3JldHJ5aW5nIGluIE5zJwo9MjAKICAgICAgICAgLy8gYmFkIGdhdGV3
YXkKICAgICAgICAgfSBlbHNlIGlmKCB4aHIgJiYgeGhyLnN0YXR1cyA9M0Q9M0Q9M0QgNTAyICl7
Ci0vL1RPRE86IGdtYWlsIHN0eWxlICdyZWNvbm5lY3RpbmcgaW4gTnMnCisgICAgICAgICAgICAv
L1RPRE86IGdtYWlsIHN0eWxlICdyZXRyeWluZyBpbiBOcycKPTIwCiAgICAgICAgIC8vIG90aGVy
d2lzZSwgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGluc2lkZSB0aGUgcGFuZWwKICAgICAgICAgfSBl
bHNlIHsKQEAgLTU1MSw3ICs1NDgsNyBAQAogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgJG1zZy5hcHBlbmQoICcgJywgJGRldGFpbHNMaW5rICk7CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuICRtc2dDb250YWluZXIuaHRtbCggJG1zZyApOworICAgICAgICByZXR1cm4gJG1zZ0Nv
bnRhaW5lci5hcHBlbmQoICRtc2cgKTsKICAgICB9LAo9MjAKICAgICAvKiogY29udmVydCBtc2cg
YW5kIGRldGFpbHMgaW50byBtb2RhbCBvcHRpb25zIHVzYWJsZSBieSBHYWxheHkubW9kYWwgPQoq
LwpAQCAtNTgyLDEwICs1NzksMTIgQEAKPTIwCiAgICAgLyoqIFJlbW92ZSBhbGwgbWVzc2FnZXMg
ZnJvbSB0aGUgcGFuZWwuICovCiAgICAgY2xlYXJNZXNzYWdlcyA6IGZ1bmN0aW9uKCBldiApewot
ICAgICAgICAkKCBldi5jdXJyZW50VGFyZ2V0ICkuZmFkZU91dCggdGhpcy5meFNwZWVkLCBmdW5j
dGlvbigpeworICAgICAgICB2YXIgJHRhcmdldCA9M0QgIV8uaXNVbmRlZmluZWQoIGV2ICk/Cisg
ICAgICAgICAgICAkKCBldi5jdXJyZW50VGFyZ2V0ICkKKyAgICAgICAgICAgIDp0aGlzLiRtZXNz
YWdlcygpLmNoaWxkcmVuKCAnW2NsYXNzJD0zRCJtZXNzYWdlIl0nICk7CisgICAgICAgICR0YXJn
ZXQuZmFkZU91dCggdGhpcy5meFNwZWVkLCBmdW5jdGlvbigpewogICAgICAgICAgICAgJCggdGhp
cyApLnJlbW92ZSgpOwogICAgICAgICB9KTsKLSAgICAgICAgLy90aGlzLiRtZXNzYWdlcygpLmNo
aWxkcmVuKCkubm90KCAnLnF1b3RhLW1lc3NhZ2UnICkucmVtb3ZlKCk7CiAgICAgICAgIHJldHVy
biB0aGlzOwogICAgIH0sCj0yMAoKZGlmZiAtciA5MzgwMWQ2ZmE3YmQzMmE4MWRlMzk3MTM3OTUz
MzEyY2NhN2E0M2ExIC1yIDMzZmQ0M2Y3NTkwZjE3ZWQ2MTFjZTA3PQoxNzhjYWU4YzJiNzA1MjVk
MCBzdGF0aWMvc2NyaXB0cy9tdmMvbGlzdC9saXN0LXBhbmVsLmpzCi0tLSBhL3N0YXRpYy9zY3Jp
cHRzL212Yy9saXN0L2xpc3QtcGFuZWwuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZjL2xpc3Qv
bGlzdC1wYW5lbC5qcwpAQCAtMTE5LDYgKzExOSw4IEBACiAgICAgX3NldFVwTGlzdGVuZXJzIDog
ZnVuY3Rpb24oKXsKICAgICAgICAgdGhpcy5vZmYoKTsKPTIwCisgICAgICAgIC8vVE9ETzogbW92
ZSBlcnJvckhhbmRsZXIgZG93biBpbnRvIGxpc3QtcGFuZWwgZnJvbSBoaXN0b3J5LXBhbmVsID0K
b3IKKyAgICAgICAgLy8gIHBhc3MgdG8gZ2xvYmFsIGVycm9yIGhhbmRsZXIgKEdhbGF4eSkKICAg
ICAgICAgdGhpcy5vbiggJ2Vycm9yJywgZnVuY3Rpb24oIG1vZGVsLCB4aHIsIG9wdGlvbnMsIG1z
ZywgZGV0YWlscyApewogICAgICAgICAgICAgLy90aGlzLmVycm9ySGFuZGxlciggbW9kZWwsIHho
ciwgb3B0aW9ucywgbXNnLCBkZXRhaWxzICk7CiAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCBt
b2RlbCwgeGhyLCBvcHRpb25zLCBtc2csIGRldGFpbHMgKTsKCmRpZmYgLXIgOTM4MDFkNmZhN2Jk
MzJhODFkZTM5NzEzNzk1MzMxMmNjYTdhNDNhMSAtciAzM2ZkNDNmNzU5MGYxN2VkNjExY2UwNz0K
MTc4Y2FlOGMyYjcwNTI1ZDAgc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy9oaXN0b3J5L2hpc3Rv
cnktcGFuZWwtZWRpdC1jdXJyPQplbnQuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvcGFja2VkL212
Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwtZWRpdC1jdXJyZW50LmpzCisrKyBiL3N0YXRpYy9zY3Jp
cHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVsLWVkaXQtY3VycmVudC5qcwpAQCAt
MSwxICsxLDEgQEAKLWRlZmluZShbIm12Yy9oaXN0b3J5L2hpc3RvcnktbW9kZWwiLCJtdmMvaGlz
dG9yeS9oaXN0b3J5LXBhbmVsLWVkaXQiLCJtdmMvPQpjb2xsZWN0aW9uL2NvbGxlY3Rpb24tcGFu
ZWwiLCJtdmMvYmFzZS1tdmMiLCJ1dGlscy9sb2NhbGl6YXRpb24iXSxmdW5jdGlvbig9CmQsYyxh
LGgsYil7dmFyIGU9M0RoLlNlc3Npb25TdG9yYWdlTW9kZWwuZXh0ZW5kKHtkZWZhdWx0czp7dGFn
c0VkaXRvclNob3duOj0KZmFsc2UsYW5ub3RhdGlvbkVkaXRvclNob3duOmZhbHNlLHNjcm9sbFBv
c2l0aW9uOjB9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0PQp1cm4iSGlzdG9yeVBhbmVsUHJlZnMo
IitKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKSsiKSJ9fSk7ZS5zdG9yYWdlS2V5PQo9M0Rm
dW5jdGlvbiBmKCl7cmV0dXJuKCJoaXN0b3J5LXBhbmVsIil9O3ZhciBnPTNEYy5IaXN0b3J5UGFu
ZWxFZGl0O3ZhciBpPQo9M0RnLmV4dGVuZCh7Y2xhc3NOYW1lOmcucHJvdG90eXBlLmNsYXNzTmFt
ZSsiIGN1cnJlbnQtaGlzdG9yeS1wYW5lbCIsZW1wdHk9Ck1zZzpiKCJUaGlzIGhpc3RvcnkgaXMg
ZW1wdHkuIENsaWNrICdHZXQgRGF0YScgb24gdGhlIGxlZnQgdG9vbCBtZW51IHRvIHN0YT0KcnQi
KSxub25lRm91bmRNc2c6YigiTm8gbWF0Y2hpbmcgZGF0YXNldHMgZm91bmQiKSxIRENBVmlld0Ns
YXNzOmcucHJvdG90eXBlPQouSERDQVZpZXdDbGFzcy5leHRlbmQoe2ZvbGRvdXRTdHlsZToiZHJp
bGxkb3duIn0pLGluaXRpYWxpemU6ZnVuY3Rpb24oail7aj0KPTNEanx8e307dGhpcy5wcmVmZXJl
bmNlcz0zRG5ldyBlKF8uZXh0ZW5kKHtpZDplLnN0b3JhZ2VLZXkoKX0sXy5waWNrKGosXy5rPQpl
eXMoZS5wcm90b3R5cGUuZGVmYXVsdHMpKSkpO2cucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0
aGlzLGopO3RoaXMucGFuZWw9ClN0YWNrPTNEW107dGhpcy5jdXJyZW50Q29udGVudElkPTNEai5j
dXJyZW50Q29udGVudElkfHxudWxsfSxfc2V0VXBMaXN0ZW5lcj0KczpmdW5jdGlvbigpe2cucHJv
dG90eXBlLl9zZXRVcExpc3RlbmVycy5jYWxsKHRoaXMpO3ZhciBqPTNEdGhpczt0aGlzLiRzY3Jv
PQpsbENvbnRhaW5lcigpLm9uKCJzY3JvbGwiLGZ1bmN0aW9uKGspe2lmKGouJGVsLmlzKCI6dmlz
aWJsZSIpKXtqLnByZWZlcmVuY2U9CnMuc2V0KCJzY3JvbGxQb3NpdGlvbiIsJCh0aGlzKS5zY3Jv
bGxUb3AoKSl9fSk7dGhpcy5vbigibmV3LW1vZGVsIixmdW5jdGlvbj0KKCl7ai5wcmVmZXJlbmNl
cy5zZXQoInNjcm9sbFBvc2l0aW9uIiwwKX0pfSxsb2FkQ3VycmVudEhpc3Rvcnk6ZnVuY3Rpb24o
ayl7PQp0aGlzLmRlYnVnKHRoaXMrIi5sb2FkQ3VycmVudEhpc3RvcnkiKTt2YXIgaj0zRHRoaXM7
cmV0dXJuIHRoaXMubG9hZEhpc3Rvcnk9CldpdGhEZXRhaWxzKCJjdXJyZW50IixrKS50aGVuKGZ1
bmN0aW9uKG0sbCl7ai50cmlnZ2VyKCJjdXJyZW50LWhpc3RvcnkiLGopfT0KKX0sc3dpdGNoVG9I
aXN0b3J5OmZ1bmN0aW9uKG0sbCl7dmFyIGo9M0R0aGlzLGs9M0RmdW5jdGlvbigpe3JldHVybiBq
UXVlcnkuPQpnZXRKU09OKGdhbGF4eV9jb25maWcucm9vdCsiaGlzdG9yeS9zZXRfYXNfY3VycmVu
dD9pZD0zRCIrbSl9O3JldHVybiB0aGlzLmw9Cm9hZEhpc3RvcnlXaXRoRGV0YWlscyhtLGwsayku
dGhlbihmdW5jdGlvbihvLG4pe2oudHJpZ2dlcigic3dpdGNoZWQtaGlzdG9yeT0KIixqKX0pfSxj
cmVhdGVOZXdIaXN0b3J5OmZ1bmN0aW9uKGwpe2lmKCFHYWxheHl8fCFHYWxheHkuY3VyclVzZXJ8
fEdhbGF4eS5jPQp1cnJVc2VyLmlzQW5vbnltb3VzKCkpe3RoaXMuZGlzcGxheU1lc3NhZ2UoImVy
cm9yIixiKCJZb3UgbXVzdCBiZSBsb2dnZWQgaW49CiB0byBjcmVhdGUgaGlzdG9yaWVzIikpO3Jl
dHVybiAkLndoZW4oKX12YXIgaj0zRHRoaXMsaz0zRGZ1bmN0aW9uKCl7cmV0dXJuID0KalF1ZXJ5
LmdldEpTT04oZ2FsYXh5X2NvbmZpZy5yb290KyJoaXN0b3J5L2NyZWF0ZV9uZXdfY3VycmVudCIp
fTtyZXR1cm4gdGhpPQpzLmxvYWRIaXN0b3J5KHVuZGVmaW5lZCxsLGspLnRoZW4oZnVuY3Rpb24o
bixtKXtqLnRyaWdnZXIoIm5ldy1oaXN0b3J5IixqKX09Cil9LHNldE1vZGVsOmZ1bmN0aW9uKGss
aixsKXtnLnByb3RvdHlwZS5zZXRNb2RlbC5jYWxsKHRoaXMsayxqLGwpO2lmKHRoaXMubT0Kb2Rl
bCl7dGhpcy5sb2coImNoZWNraW5nIGZvciB1cGRhdGVzIik7dGhpcy5tb2RlbC5jaGVja0ZvclVw
ZGF0ZXMoKX1yZXR1cm4gPQp0aGlzfSxfc2V0VXBDb2xsZWN0aW9uTGlzdGVuZXJzOmZ1bmN0aW9u
KCl7Zy5wcm90b3R5cGUuX3NldFVwQ29sbGVjdGlvbkxpc3Q9CmVuZXJzLmNhbGwodGhpcyk7dGhp
cy5jb2xsZWN0aW9uLm9uKCJzdGF0ZTpyZWFkeSIsZnVuY3Rpb24oayxsLGope2lmKCghay5nZT0K
dCgidmlzaWJsZSIpKSYmKCF0aGlzLnN0b3JhZ2UuZ2V0KCJzaG93X2hpZGRlbiIpKSl7dGhpcy5y
ZW1vdmVJdGVtVmlldyhrKX19PQosdGhpcyl9LF9zZXRVcE1vZGVsTGlzdGVuZXJzOmZ1bmN0aW9u
KCl7Zy5wcm90b3R5cGUuX3NldFVwTW9kZWxMaXN0ZW5lcnMuY2E9CmxsKHRoaXMpO2lmKEdhbGF4
eSYmR2FsYXh5LnF1b3RhTWV0ZXIpe3RoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwiY2hhbmdlOm5p
Yz0KZV9zaXplIixmdW5jdGlvbigpe0dhbGF4eS5xdW90YU1ldGVyLnVwZGF0ZSgpfSl9fSxfYnVp
bGROZXdSZW5kZXI6ZnVuY3Rpb24oPQope2lmKCF0aGlzLm1vZGVsKXtyZXR1cm4gJCgpfXZhciBq
PTNEZy5wcm90b3R5cGUuX2J1aWxkTmV3UmVuZGVyLmNhbGwodGhpcyk9CjtqLmZpbmQoIi5zZWFy
Y2giKS5wcmVwZW5kVG8oai5maW5kKCIuY29udHJvbHMiKSk7dGhpcy5fcmVuZGVyUXVvdGFNZXNz
YWdlKD0Kaik7cmV0dXJuIGp9LF9yZW5kZXJRdW90YU1lc3NhZ2U6ZnVuY3Rpb24oail7aj0zRGp8
fHRoaXMuJGVsO3JldHVybiAkKHRoaXMuPQp0ZW1wbGF0ZXMucXVvdGFNc2coe30sdGhpcykpLnBy
ZXBlbmRUbyhqLmZpbmQoIi5tZXNzYWdlcyIpKX0sX3JlbmRlckVtcHR5TWU9CnNzYWdlOmZ1bmN0
aW9uKGwpe3ZhciBrPTNEdGhpcyxqPTNEay4kZW1wdHlNZXNzYWdlKGwpLG09M0QkKCIudG9vbE1l
bnVDb250YT0KaW5lciIpO2lmKChfLmlzRW1wdHkoay52aWV3cykmJiFrLnNlYXJjaEZvcikmJihH
YWxheHkmJkdhbGF4eS51cGxvYWQmJm0uc2l6PQplKCkpKXtqLmVtcHR5KCk7ai5odG1sKFtiKCJU
aGlzIGhpc3RvcnkgaXMgZW1wdHkiKSwiLiAiLGIoIllvdSBjYW4gIiksJzxhIGM9Cmxhc3M9M0Qi
dXBsb2FkZXItbGluayIgaHJlZj0zRCJqYXZhc2NyaXB0OnZvaWQoMCkiPicsYigibG9hZCB5b3Vy
IG93biBkYXRhIj0KKSwiPC9hPiIsYigiIG9yICIpLCc8YSBjbGFzcz0zRCJnZXQtZGF0YS1saW5r
IiBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKSI+PQonLGIoImdldCBkYXRhIGZyb20gYW4gZXh0
ZXJuYWwgc291cmNlIiksIjwvYT4iXS5qb2luKCIiKSk7ai5maW5kKCIudXBsb2FkZXI9Ci1saW5r
IikuY2xpY2soZnVuY3Rpb24obil7R2FsYXh5LnVwbG9hZC5zaG93KG4pfSk7ai5maW5kKCIuZ2V0
LWRhdGEtbGluayIpLj0KY2xpY2soZnVuY3Rpb24obil7bS5wYXJlbnQoKS5zY3JvbGxUb3AoMCk7
bS5maW5kKCdzcGFuOmNvbnRhaW5zKCJHZXQgRGF0YSIpPQonKS5jbGljaygpfSk7cmV0dXJuIGou
c2hvdygpfXJldHVybiBnLnByb3RvdHlwZS5fcmVuZGVyRW1wdHlNZXNzYWdlLmNhbGwodGg9Cmlz
LGwpfSxfcmVuZGVyVGFnczpmdW5jdGlvbihqKXt2YXIgaz0zRHRoaXM7Zy5wcm90b3R5cGUuX3Jl
bmRlclRhZ3MuY2FsbCh0aD0KaXMsaik7aWYodGhpcy5wcmVmZXJlbmNlcy5nZXQoInRhZ3NFZGl0
b3JTaG93biIpKXt0aGlzLnRhZ3NFZGl0b3IudG9nZ2xlKHRyPQp1ZSl9dGhpcy50YWdzRWRpdG9y
Lm9uKCJoaWRkZW5VbnRpbEFjdGl2YXRlZDpzaG93biBoaWRkZW5VbnRpbEFjdGl2YXRlZDpoaWQ9
CmRlbiIsZnVuY3Rpb24obCl7ay5wcmVmZXJlbmNlcy5zZXQoInRhZ3NFZGl0b3JTaG93biIsbC5o
aWRkZW4pfSl9LF9yZW5kZXJBbj0Kbm90YXRpb246ZnVuY3Rpb24oail7dmFyIGs9M0R0aGlzO2cu
cHJvdG90eXBlLl9yZW5kZXJBbm5vdGF0aW9uLmNhbGwodGhpcyxqPQopO2lmKHRoaXMucHJlZmVy
ZW5jZXMuZ2V0KCJhbm5vdGF0aW9uRWRpdG9yU2hvd24iKSl7dGhpcy5hbm5vdGF0aW9uRWRpdG9y
LnQ9Cm9nZ2xlKHRydWUpfXRoaXMuYW5ub3RhdGlvbkVkaXRvci5vbigiaGlkZGVuVW50aWxBY3Rp
dmF0ZWQ6c2hvd24gaGlkZGVuVW50aT0KbEFjdGl2YXRlZDpoaWRkZW4iLGZ1bmN0aW9uKGwpe2su
cHJlZmVyZW5jZXMuc2V0KCJhbm5vdGF0aW9uRWRpdG9yU2hvd24iLGwuPQpoaWRkZW4pfSl9LF9z
d2FwTmV3UmVuZGVyOmZ1bmN0aW9uKGspe2cucHJvdG90eXBlLl9zd2FwTmV3UmVuZGVyLmNhbGwo
dGhpcyw9CmspO3ZhciBqPTNEdGhpcztfLmRlbGF5KGZ1bmN0aW9uKCl7dmFyIGw9M0RqLnByZWZl
cmVuY2VzLmdldCgic2Nyb2xsUG9zaXRpbz0KbiIpO2lmKGwpe2ouc2Nyb2xsVG8obCl9fSwxMCk7
cmV0dXJuIHRoaXN9LF9hdHRhY2hJdGVtczpmdW5jdGlvbihrKXtnLnByb3RvPQp0eXBlLl9hdHRh
Y2hJdGVtcy5jYWxsKHRoaXMsayk7dmFyIGo9M0R0aGlzLGw7aWYoai5jdXJyZW50Q29udGVudElk
JiYobD0zRGo9Ci52aWV3RnJvbU1vZGVsSWQoai5jdXJyZW50Q29udGVudElkKSkpe2ouc2V0Q3Vy
cmVudENvbnRlbnQobCl9cmV0dXJuIHRoaXN9LD0KYWRkSXRlbVZpZXc6ZnVuY3Rpb24obCxtLGsp
e3ZhciBqPTNEZy5wcm90b3R5cGUuYWRkSXRlbVZpZXcuY2FsbCh0aGlzLGwsbSxrPQopO2lmKCFq
KXtyZXR1cm4gan1pZih0aGlzLnBhbmVsU3RhY2subGVuZ3RoKXtyZXR1cm4gdGhpcy5fY29sbGFw
c2VEcmlsbGRvd249ClBhbmVsKCl9cmV0dXJuIGp9LF9zZXRVcEl0ZW1WaWV3TGlzdGVuZXJzOmZ1
bmN0aW9uKGspe3ZhciBqPTNEdGhpcztnLnByb3RvdD0KeXBlLl9zZXRVcEl0ZW1WaWV3TGlzdGVu
ZXJzLmNhbGwoaixrKTtrLm9uKCJleHBhbmRlZDpkcmlsbGRvd24iLGZ1bmN0aW9uKG0sPQpsKXt0
aGlzLl9leHBhbmREcmlsbGRvd25QYW5lbChsKX0sdGhpcyk7ay5vbigiY29sbGFwc2VkOmRyaWxs
ZG93biIsZnVuY3Rpb249CihtLGwpe3RoaXMuX2NvbGxhcHNlRHJpbGxkb3duUGFuZWwobCl9LHRo
aXMpO2sub24oImRpc3BsYXkgZWRpdCBwYXJhbXMgcmVydT0KbiByZXBvcnQtZXJyIHZpc3VhbGl6
ZSIsZnVuY3Rpb24obCxtKXt0aGlzLnNldEN1cnJlbnRDb250ZW50KGwpfSx0aGlzKTtyZXR1PQpy
biB0aGlzfSxzZXRDdXJyZW50Q29udGVudDpmdW5jdGlvbihqKXt0aGlzLiQoIi5oaXN0b3J5LWNv
bnRlbnQuY3VycmVudC1jb249CnRlbnQiKS5yZW1vdmVDbGFzcygiY3VycmVudC1jb250ZW50Iik7
aWYoail7ai4kZWwuYWRkQ2xhc3MoImN1cnJlbnQtY29udGVudD0KIik7dGhpcy5jdXJyZW50Q29u
dGVudElkPTNEai5tb2RlbC5pZH1lbHNle3RoaXMuY3VycmVudENvbnRlbnRJZD0zRG51bGx9fSxf
PQpleHBhbmREcmlsbGRvd25QYW5lbDpmdW5jdGlvbihqKXt0aGlzLnBhbmVsU3RhY2sucHVzaChq
KTt0aGlzLiQoIj4gLmNvbnRyb2w9CnMiKS5hZGQodGhpcy4kbGlzdCgpKS5oaWRlKCk7ai5wYXJl
bnROYW1lPTNEdGhpcy5tb2RlbC5nZXQoIm5hbWUiKTt0aGlzLiRlbD0KLmFwcGVuZChqLnJlbmRl
cigpLiRlbCl9LF9jb2xsYXBzZURyaWxsZG93blBhbmVsOmZ1bmN0aW9uKGope3RoaXMucGFuZWxT
dGFjPQprLnBvcCgpO3RoaXMucmVuZGVyKCl9LGNvbm5lY3RUb1F1b3RhTWV0ZXI6ZnVuY3Rpb24o
ail7aWYoIWope3JldHVybiB0aGlzfXQ9Cmhpcy5saXN0ZW5UbyhqLCJxdW90YTpvdmVyIix0aGlz
LnNob3dRdW90YU1lc3NhZ2UpO3RoaXMubGlzdGVuVG8oaiwicXVvdGE6dT0KbmRlciIsdGhpcy5o
aWRlUXVvdGFNZXNzYWdlKTt0aGlzLm9uKCJyZW5kZXJlZCByZW5kZXJlZDppbml0aWFsIixmdW5j
dGlvbigpPQp7aWYoaiYmai5pc092ZXJRdW90YSgpKXt0aGlzLnNob3dRdW90YU1lc3NhZ2UoKX19
KTtyZXR1cm4gdGhpc30sc2hvd1F1b3RhTWU9CnNzYWdlOmZ1bmN0aW9uKCl7dmFyIGo9M0R0aGlz
LiRlbC5maW5kKCIucXVvdGEtbWVzc2FnZSIpO2lmKGouaXMoIjpoaWRkZW4iKT0KKXtqLnNsaWRl
RG93bih0aGlzLmZ4U3BlZWQpfX0saGlkZVF1b3RhTWVzc2FnZTpmdW5jdGlvbigpe3ZhciBqPTNE
dGhpcy4kZWwuPQpmaW5kKCIucXVvdGEtbWVzc2FnZSIpO2lmKCFqLmlzKCI6aGlkZGVuIikpe2ou
c2xpZGVVcCh0aGlzLmZ4U3BlZWQpfX0sdG9TdHI9CmluZzpmdW5jdGlvbigpe3JldHVybiJDdXJy
ZW50SGlzdG9yeVBhbmVsKCIrKCh0aGlzLm1vZGVsKT8odGhpcy5tb2RlbC5nZXQoIj0KbmFtZSIp
KTooIiIpKSsiKSJ9fSk7aS5wcm90b3R5cGUudGVtcGxhdGVzPTNEKGZ1bmN0aW9uKCl7dmFyIGo9
M0RoLndyYXBUZW1wPQpsYXRlKFsnPGRpdiBjbGFzcz0zRCJxdW90YS1tZXNzYWdlIGVycm9ybWVz
c2FnZSI+JyxiKCJZb3UgYXJlIG92ZXIgeW91ciBkaXM9CmsgcXVvdGEiKSwiLiAiLGIoIlRvb2wg
ZXhlY3V0aW9uIGlzIG9uIGhvbGQgdW50aWwgeW91ciBkaXNrIHVzYWdlIGRyb3BzIGJlbD0Kb3cg
eW91ciBhbGxvY2F0ZWQgcXVvdGEiKSwiLiIsIjwvZGl2PiJdLCJoaXN0b3J5Iik7cmV0dXJuIF8u
ZXh0ZW5kKF8uY2xvbmUoPQpnLnByb3RvdHlwZS50ZW1wbGF0ZXMpLHtxdW90YU1zZzpqfSl9KCkp
O3JldHVybntDdXJyZW50SGlzdG9yeVBhbmVsOml9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQorZGVmaW5lKFsibXZjL2hpc3RvcnkvaGlzdG9yeS1tb2RlbCIsIm12Yy9oaXN0b3J5L2hp
c3RvcnktcGFuZWwtZWRpdCIsIm12Yy89CmNvbGxlY3Rpb24vY29sbGVjdGlvbi1wYW5lbCIsIm12
Yy9iYXNlLW12YyIsInV0aWxzL2xvY2FsaXphdGlvbiJdLGZ1bmN0aW9uKD0KZCxjLGEsaCxiKXt2
YXIgZT0zRGguU2Vzc2lvblN0b3JhZ2VNb2RlbC5leHRlbmQoe2RlZmF1bHRzOnt0YWdzRWRpdG9y
U2hvd246PQpmYWxzZSxhbm5vdGF0aW9uRWRpdG9yU2hvd246ZmFsc2Usc2Nyb2xsUG9zaXRpb246
MH0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXQ9CnVybiJIaXN0b3J5UGFuZWxQcmVmcygiK0pTT04u
c3RyaW5naWZ5KHRoaXMudG9KU09OKCkpKyIpIn19KTtlLnN0b3JhZ2VLZXk9Cj0zRGZ1bmN0aW9u
IGYoKXtyZXR1cm4oImhpc3RvcnktcGFuZWwiKX07dmFyIGc9M0RjLkhpc3RvcnlQYW5lbEVkaXQ7
dmFyIGk9Cj0zRGcuZXh0ZW5kKHtjbGFzc05hbWU6Zy5wcm90b3R5cGUuY2xhc3NOYW1lKyIgY3Vy
cmVudC1oaXN0b3J5LXBhbmVsIixlbXB0eT0KTXNnOmIoIlRoaXMgaGlzdG9yeSBpcyBlbXB0eS4g
Q2xpY2sgJ0dldCBEYXRhJyBvbiB0aGUgbGVmdCB0b29sIG1lbnUgdG8gc3RhPQpydCIpLG5vbmVG
b3VuZE1zZzpiKCJObyBtYXRjaGluZyBkYXRhc2V0cyBmb3VuZCIpLEhEQ0FWaWV3Q2xhc3M6Zy5w
cm90b3R5cGU9Ci5IRENBVmlld0NsYXNzLmV4dGVuZCh7Zm9sZG91dFN0eWxlOiJkcmlsbGRvd24i
fSksaW5pdGlhbGl6ZTpmdW5jdGlvbihqKXtqPQo9M0RqfHx7fTt0aGlzLnByZWZlcmVuY2VzPTNE
bmV3IGUoXy5leHRlbmQoe2lkOmUuc3RvcmFnZUtleSgpfSxfLnBpY2soaixfLms9CmV5cyhlLnBy
b3RvdHlwZS5kZWZhdWx0cykpKSk7Zy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsaik7
dGhpcy5wYW5lbD0KU3RhY2s9M0RbXTt0aGlzLmN1cnJlbnRDb250ZW50SWQ9M0RqLmN1cnJlbnRD
b250ZW50SWR8fG51bGx9LF9zZXRVcExpc3RlbmVyPQpzOmZ1bmN0aW9uKCl7Zy5wcm90b3R5cGUu
X3NldFVwTGlzdGVuZXJzLmNhbGwodGhpcyk7dmFyIGo9M0R0aGlzO3RoaXMuJHNjcm89CmxsQ29u
dGFpbmVyKCkub24oInNjcm9sbCIsZnVuY3Rpb24oayl7aWYoai4kZWwuaXMoIjp2aXNpYmxlIikp
e2oucHJlZmVyZW5jZT0Kcy5zZXQoInNjcm9sbFBvc2l0aW9uIiwkKHRoaXMpLnNjcm9sbFRvcCgp
KX19KTt0aGlzLm9uKCJuZXctbW9kZWwiLGZ1bmN0aW9uPQooKXtqLnByZWZlcmVuY2VzLnNldCgi
c2Nyb2xsUG9zaXRpb24iLDApfSl9LGxvYWRDdXJyZW50SGlzdG9yeTpmdW5jdGlvbihrKXs9CnRo
aXMuZGVidWcodGhpcysiLmxvYWRDdXJyZW50SGlzdG9yeSIpO3ZhciBqPTNEdGhpcztyZXR1cm4g
dGhpcy5sb2FkSGlzdG9yeT0KV2l0aERldGFpbHMoImN1cnJlbnQiLGspLnRoZW4oZnVuY3Rpb24o
bSxsKXtqLnRyaWdnZXIoImN1cnJlbnQtaGlzdG9yeSIsail9PQopfSxzd2l0Y2hUb0hpc3Rvcnk6
ZnVuY3Rpb24obSxsKXt2YXIgaj0zRHRoaXMsaz0zRGZ1bmN0aW9uKCl7cmV0dXJuIGpRdWVyeS49
CmdldEpTT04oZ2FsYXh5X2NvbmZpZy5yb290KyJoaXN0b3J5L3NldF9hc19jdXJyZW50P2lkPTNE
IittKX07cmV0dXJuIHRoaXMubD0Kb2FkSGlzdG9yeVdpdGhEZXRhaWxzKG0sbCxrKS50aGVuKGZ1
bmN0aW9uKG8sbil7ai50cmlnZ2VyKCJzd2l0Y2hlZC1oaXN0b3J5PQoiLGopfSl9LGNyZWF0ZU5l
d0hpc3Rvcnk6ZnVuY3Rpb24obCl7aWYoIUdhbGF4eXx8IUdhbGF4eS5jdXJyVXNlcnx8R2FsYXh5
LmM9CnVyclVzZXIuaXNBbm9ueW1vdXMoKSl7dGhpcy5kaXNwbGF5TWVzc2FnZSgiZXJyb3IiLGIo
IllvdSBtdXN0IGJlIGxvZ2dlZCBpbj0KIHRvIGNyZWF0ZSBoaXN0b3JpZXMiKSk7cmV0dXJuICQu
d2hlbigpfXZhciBqPTNEdGhpcyxrPTNEZnVuY3Rpb24oKXtyZXR1cm4gPQpqUXVlcnkuZ2V0SlNP
TihnYWxheHlfY29uZmlnLnJvb3QrImhpc3RvcnkvY3JlYXRlX25ld19jdXJyZW50Iil9O3JldHVy
biB0aGk9CnMubG9hZEhpc3RvcnkodW5kZWZpbmVkLGwsaykudGhlbihmdW5jdGlvbihuLG0pe2ou
dHJpZ2dlcigibmV3LWhpc3RvcnkiLGopfT0KKX0sc2V0TW9kZWw6ZnVuY3Rpb24oayxqLGwpe2cu
cHJvdG90eXBlLnNldE1vZGVsLmNhbGwodGhpcyxrLGosbCk7aWYodGhpcy5tPQpvZGVsKXt0aGlz
LmxvZygiY2hlY2tpbmcgZm9yIHVwZGF0ZXMiKTt0aGlzLm1vZGVsLmNoZWNrRm9yVXBkYXRlcygp
fXJldHVybiA9CnRoaXN9LF9zZXRVcENvbGxlY3Rpb25MaXN0ZW5lcnM6ZnVuY3Rpb24oKXtnLnBy
b3RvdHlwZS5fc2V0VXBDb2xsZWN0aW9uTGlzdD0KZW5lcnMuY2FsbCh0aGlzKTt0aGlzLmNvbGxl
Y3Rpb24ub24oInN0YXRlOnJlYWR5IixmdW5jdGlvbihrLGwsail7aWYoKCFrLmdlPQp0KCJ2aXNp
YmxlIikpJiYoIXRoaXMuc3RvcmFnZS5nZXQoInNob3dfaGlkZGVuIikpKXt0aGlzLnJlbW92ZUl0
ZW1WaWV3KGspfX09Cix0aGlzKX0sX3NldFVwTW9kZWxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtnLnBy
b3RvdHlwZS5fc2V0VXBNb2RlbExpc3RlbmVycy5jYT0KbGwodGhpcyk7aWYoR2FsYXh5JiZHYWxh
eHkucXVvdGFNZXRlcil7dGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCJjaGFuZ2U6bmljPQplX3Np
emUiLGZ1bmN0aW9uKCl7R2FsYXh5LnF1b3RhTWV0ZXIudXBkYXRlKCl9KX19LF9idWlsZE5ld1Jl
bmRlcjpmdW5jdGlvbig9Cil7aWYoIXRoaXMubW9kZWwpe3JldHVybiAkKCl9dmFyIGo9M0RnLnBy
b3RvdHlwZS5fYnVpbGROZXdSZW5kZXIuY2FsbCh0aGlzKT0KO2ouZmluZCgiLnNlYXJjaCIpLnBy
ZXBlbmRUbyhqLmZpbmQoIi5jb250cm9scyIpKTt0aGlzLl9yZW5kZXJRdW90YU1lc3NhZ2UoPQpq
KTtyZXR1cm4gan0sX3JlbmRlclF1b3RhTWVzc2FnZTpmdW5jdGlvbihqKXtqPTNEanx8dGhpcy4k
ZWw7cmV0dXJuICQodGhpcy49CnRlbXBsYXRlcy5xdW90YU1zZyh7fSx0aGlzKSkucHJlcGVuZFRv
KGouZmluZCgiLm1lc3NhZ2VzIikpfSxfcmVuZGVyRW1wdHlNZT0Kc3NhZ2U6ZnVuY3Rpb24obCl7
dmFyIGs9M0R0aGlzLGo9M0RrLiRlbXB0eU1lc3NhZ2UobCksbT0zRCQoIi50b29sTWVudUNvbnRh
PQppbmVyIik7aWYoKF8uaXNFbXB0eShrLnZpZXdzKSYmIWsuc2VhcmNoRm9yKSYmKEdhbGF4eSYm
R2FsYXh5LnVwbG9hZCYmbS5zaXo9CmUoKSkpe2ouZW1wdHkoKTtqLmh0bWwoW2IoIlRoaXMgaGlz
dG9yeSBpcyBlbXB0eSIpLCIuICIsYigiWW91IGNhbiAiKSwnPGEgYz0KbGFzcz0zRCJ1cGxvYWRl
ci1saW5rIiBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKSI+JyxiKCJsb2FkIHlvdXIgb3duIGRh
dGEiPQopLCI8L2E+IixiKCIgb3IgIiksJzxhIGNsYXNzPTNEImdldC1kYXRhLWxpbmsiIGhyZWY9
M0QiamF2YXNjcmlwdDp2b2lkKDApIj49CicsYigiZ2V0IGRhdGEgZnJvbSBhbiBleHRlcm5hbCBz
b3VyY2UiKSwiPC9hPiJdLmpvaW4oIiIpKTtqLmZpbmQoIi51cGxvYWRlcj0KLWxpbmsiKS5jbGlj
ayhmdW5jdGlvbihuKXtHYWxheHkudXBsb2FkLnNob3cobil9KTtqLmZpbmQoIi5nZXQtZGF0YS1s
aW5rIikuPQpjbGljayhmdW5jdGlvbihuKXttLnBhcmVudCgpLnNjcm9sbFRvcCgwKTttLmZpbmQo
J3NwYW46Y29udGFpbnMoIkdldCBEYXRhIik9CicpLmNsaWNrKCl9KTtyZXR1cm4gai5zaG93KCl9
cmV0dXJuIGcucHJvdG90eXBlLl9yZW5kZXJFbXB0eU1lc3NhZ2UuY2FsbCh0aD0KaXMsbCl9LF9y
ZW5kZXJUYWdzOmZ1bmN0aW9uKGope3ZhciBrPTNEdGhpcztnLnByb3RvdHlwZS5fcmVuZGVyVGFn
cy5jYWxsKHRoPQppcyxqKTtpZih0aGlzLnByZWZlcmVuY2VzLmdldCgidGFnc0VkaXRvclNob3du
Iikpe3RoaXMudGFnc0VkaXRvci50b2dnbGUodHI9CnVlKX10aGlzLnRhZ3NFZGl0b3Iub24oImhp
ZGRlblVudGlsQWN0aXZhdGVkOnNob3duIGhpZGRlblVudGlsQWN0aXZhdGVkOmhpZD0KZGVuIixm
dW5jdGlvbihsKXtrLnByZWZlcmVuY2VzLnNldCgidGFnc0VkaXRvclNob3duIixsLmhpZGRlbil9
KX0sX3JlbmRlckFuPQpub3RhdGlvbjpmdW5jdGlvbihqKXt2YXIgaz0zRHRoaXM7Zy5wcm90b3R5
cGUuX3JlbmRlckFubm90YXRpb24uY2FsbCh0aGlzLGo9Cik7aWYodGhpcy5wcmVmZXJlbmNlcy5n
ZXQoImFubm90YXRpb25FZGl0b3JTaG93biIpKXt0aGlzLmFubm90YXRpb25FZGl0b3IudD0Kb2dn
bGUodHJ1ZSl9dGhpcy5hbm5vdGF0aW9uRWRpdG9yLm9uKCJoaWRkZW5VbnRpbEFjdGl2YXRlZDpz
aG93biBoaWRkZW5VbnRpPQpsQWN0aXZhdGVkOmhpZGRlbiIsZnVuY3Rpb24obCl7ay5wcmVmZXJl
bmNlcy5zZXQoImFubm90YXRpb25FZGl0b3JTaG93biIsbC49CmhpZGRlbil9KX0sX3N3YXBOZXdS
ZW5kZXI6ZnVuY3Rpb24oayl7Zy5wcm90b3R5cGUuX3N3YXBOZXdSZW5kZXIuY2FsbCh0aGlzLD0K
ayk7dmFyIGo9M0R0aGlzO18uZGVsYXkoZnVuY3Rpb24oKXt2YXIgbD0zRGoucHJlZmVyZW5jZXMu
Z2V0KCJzY3JvbGxQb3NpdGlvPQpuIik7aWYobCl7ai5zY3JvbGxUbyhsKX19LDEwKTtyZXR1cm4g
dGhpc30sX2F0dGFjaEl0ZW1zOmZ1bmN0aW9uKGspe2cucHJvdG89CnR5cGUuX2F0dGFjaEl0ZW1z
LmNhbGwodGhpcyxrKTt2YXIgaj0zRHRoaXMsbDtpZihqLmN1cnJlbnRDb250ZW50SWQmJihsPTNE
aj0KLnZpZXdGcm9tTW9kZWxJZChqLmN1cnJlbnRDb250ZW50SWQpKSl7ai5zZXRDdXJyZW50Q29u
dGVudChsKX1yZXR1cm4gdGhpc30sPQphZGRJdGVtVmlldzpmdW5jdGlvbihsLG0sayl7dmFyIGo9
M0RnLnByb3RvdHlwZS5hZGRJdGVtVmlldy5jYWxsKHRoaXMsbCxtLGs9Cik7aWYoIWope3JldHVy
biBqfWlmKHRoaXMucGFuZWxTdGFjay5sZW5ndGgpe3JldHVybiB0aGlzLl9jb2xsYXBzZURyaWxs
ZG93bj0KUGFuZWwoKX1yZXR1cm4gan0sX3NldFVwSXRlbVZpZXdMaXN0ZW5lcnM6ZnVuY3Rpb24o
ayl7dmFyIGo9M0R0aGlzO2cucHJvdG90PQp5cGUuX3NldFVwSXRlbVZpZXdMaXN0ZW5lcnMuY2Fs
bChqLGspO2sub24oImV4cGFuZGVkOmRyaWxsZG93biIsZnVuY3Rpb24obSw9Cmwpe3RoaXMuX2V4
cGFuZERyaWxsZG93blBhbmVsKGwpfSx0aGlzKTtrLm9uKCJjb2xsYXBzZWQ6ZHJpbGxkb3duIixm
dW5jdGlvbj0KKG0sbCl7dGhpcy5fY29sbGFwc2VEcmlsbGRvd25QYW5lbChsKX0sdGhpcyk7ay5v
bigiZGlzcGxheSBlZGl0IHBhcmFtcyByZXJ1PQpuIHJlcG9ydC1lcnIgdmlzdWFsaXplIixmdW5j
dGlvbihsLG0pe3RoaXMuc2V0Q3VycmVudENvbnRlbnQobCl9LHRoaXMpO3JldHU9CnJuIHRoaXN9
LHNldEN1cnJlbnRDb250ZW50OmZ1bmN0aW9uKGope3RoaXMuJCgiLmhpc3RvcnktY29udGVudC5j
dXJyZW50LWNvbj0KdGVudCIpLnJlbW92ZUNsYXNzKCJjdXJyZW50LWNvbnRlbnQiKTtpZihqKXtq
LiRlbC5hZGRDbGFzcygiY3VycmVudC1jb250ZW50PQoiKTt0aGlzLmN1cnJlbnRDb250ZW50SWQ9
M0RqLm1vZGVsLmlkfWVsc2V7dGhpcy5jdXJyZW50Q29udGVudElkPTNEbnVsbH19LF89CmV4cGFu
ZERyaWxsZG93blBhbmVsOmZ1bmN0aW9uKGope3RoaXMucGFuZWxTdGFjay5wdXNoKGopO3RoaXMu
JCgiPiAuY29udHJvbD0KcyIpLmFkZCh0aGlzLiRsaXN0KCkpLmhpZGUoKTtqLnBhcmVudE5hbWU9
M0R0aGlzLm1vZGVsLmdldCgibmFtZSIpO3RoaXMuJGVsPQouYXBwZW5kKGoucmVuZGVyKCkuJGVs
KX0sX2NvbGxhcHNlRHJpbGxkb3duUGFuZWw6ZnVuY3Rpb24oail7dGhpcy5wYW5lbFN0YWM9Cmsu
cG9wKCk7dGhpcy5yZW5kZXIoKX0sY29ubmVjdFRvUXVvdGFNZXRlcjpmdW5jdGlvbihqKXtpZigh
ail7cmV0dXJuIHRoaXN9dD0KaGlzLmxpc3RlblRvKGosInF1b3RhOm92ZXIiLHRoaXMuc2hvd1F1
b3RhTWVzc2FnZSk7dGhpcy5saXN0ZW5UbyhqLCJxdW90YTp1PQpuZGVyIix0aGlzLmhpZGVRdW90
YU1lc3NhZ2UpO3RoaXMub24oInJlbmRlcmVkIHJlbmRlcmVkOmluaXRpYWwiLGZ1bmN0aW9uKCk9
CntpZihqJiZqLmlzT3ZlclF1b3RhKCkpe3RoaXMuc2hvd1F1b3RhTWVzc2FnZSgpfX0pO3JldHVy
biB0aGlzfSxjbGVhck1lc3NhZz0KZXM6ZnVuY3Rpb24oayl7dmFyIGo9M0QhXy5pc1VuZGVmaW5l
ZChrKT8kKGsuY3VycmVudFRhcmdldCk6dGhpcy4kbWVzc2FnZXMoPQopLmNoaWxkcmVuKCdbY2xh
c3MkPTNEIm1lc3NhZ2UiXScpO2o9M0RqLm5vdCgiLnF1b3RhLW1lc3NhZ2UiKTtqLmZhZGVPdXQo
dGg9CmlzLmZ4U3BlZWQsZnVuY3Rpb24oKXskKHRoaXMpLnJlbW92ZSgpfSk7cmV0dXJuIHRoaXN9
LHNob3dRdW90YU1lc3NhZ2U6ZnVuYz0KdGlvbigpe3ZhciBqPTNEdGhpcy4kKCIucXVvdGEtbWVz
c2FnZSIpO2lmKGouaXMoIjpoaWRkZW4iKSl7ai5zbGlkZURvd24odGhpPQpzLmZ4U3BlZWQpfX0s
aGlkZVF1b3RhTWVzc2FnZTpmdW5jdGlvbigpe3ZhciBqPTNEdGhpcy4kKCIucXVvdGEtbWVzc2Fn
ZSIpO2k9CmYoIWouaXMoIjpoaWRkZW4iKSl7ai5zbGlkZVVwKHRoaXMuZnhTcGVlZCl9fSx0b1N0
cmluZzpmdW5jdGlvbigpe3JldHVybiJDdT0KcnJlbnRIaXN0b3J5UGFuZWwoIisoKHRoaXMubW9k
ZWwpPyh0aGlzLm1vZGVsLmdldCgibmFtZSIpKTooIiIpKSsiKSJ9fSk7aS5wPQpyb3RvdHlwZS50
ZW1wbGF0ZXM9M0QoZnVuY3Rpb24oKXt2YXIgaj0zRGgud3JhcFRlbXBsYXRlKFsnPGRpdiBjbGFz
cz0zRCJxdW89CnRhLW1lc3NhZ2UgZXJyb3JtZXNzYWdlIj4nLGIoIllvdSBhcmUgb3ZlciB5b3Vy
IGRpc2sgcXVvdGEiKSwiLiAiLGIoIlRvb2wgZT0KeGVjdXRpb24gaXMgb24gaG9sZCB1bnRpbCB5
b3VyIGRpc2sgdXNhZ2UgZHJvcHMgYmVsb3cgeW91ciBhbGxvY2F0ZWQgcXVvdGEiPQopLCIuIiwi
PC9kaXY+Il0sImhpc3RvcnkiKTtyZXR1cm4gXy5leHRlbmQoXy5jbG9uZShnLnByb3RvdHlwZS50
ZW1wbGF0ZXMpLHs9CnF1b3RhTXNnOmp9KX0oKSk7cmV0dXJue0N1cnJlbnRIaXN0b3J5UGFuZWw6
aX19KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIDkzODAxZDZmYTdiZDMy
YTgxZGUzOTcxMzc5NTMzMTJjY2E3YTQzYTEgLXIgMzNmZDQzZjc1OTBmMTdlZDYxMWNlMDc9CjE3
OGNhZThjMmI3MDUyNWQwIHN0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0b3J5
LXBhbmVsLmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0b3J5
LXBhbmVsLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0b3J5
LXBhbmVsLmpzCkBAIC0xLDEgKzEsMSBAQAotZGVmaW5lKFsibXZjL2xpc3QvbGlzdC1wYW5lbCIs
Im12Yy9oaXN0b3J5L2hpc3RvcnktbW9kZWwiLCJtdmMvaGlzdG9yeS9oaXM9CnRvcnktY29udGVu
dHMiLCJtdmMvaGlzdG9yeS9oZGEtbGkiLCJtdmMvaGlzdG9yeS9oZGNhLWxpIiwibXZjL2NvbGxl
Y3Rpb24vYz0Kb2xsZWN0aW9uLXBhbmVsIiwibXZjL3VzZXIvdXNlci1tb2RlbCIsInVpL2ZhLWlj
b24tYnV0dG9uIiwibXZjL3VpL3BvcHVwLW1lPQpudSIsIm12Yy9iYXNlLW12YyIsInV0aWxzL2xv
Y2FsaXphdGlvbiIsInVpL3NlYXJjaC1pbnB1dCJdLGZ1bmN0aW9uKGYsaCxuLGQ9CixiLG8saSxj
LGEscSxnKXt2YXIgbD0zRHEuU2Vzc2lvblN0b3JhZ2VNb2RlbC5leHRlbmQoe2RlZmF1bHRzOntl
eHBhbmRlZElkcz0KOnt9LHNob3dfZGVsZXRlZDpmYWxzZSxzaG93X2hpZGRlbjpmYWxzZX0sYWRk
RXhwYW5kZWQ6ZnVuY3Rpb24ocil7dmFyIHM9M0QiPQpleHBhbmRlZElkcyI7dGhpcy5zYXZlKHMs
Xy5leHRlbmQodGhpcy5nZXQocyksXy5vYmplY3QoW3IuaWRdLFtyLmdldCgiaWQiKV09CikpKX0s
cmVtb3ZlRXhwYW5kZWQ6ZnVuY3Rpb24ocil7dmFyIHM9M0QiZXhwYW5kZWRJZHMiO3RoaXMuc2F2
ZShzLF8ub21pdCh0aD0KaXMuZ2V0KHMpLHIuaWQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1
cm4iSGlzdG9yeVByZWZzKCIrdGhpcy5pZCsiKSJ9fSk7PQpsLnN0b3JhZ2VLZXlQcmVmaXg9M0Qi
aGlzdG9yeToiO2wuaGlzdG9yeVN0b3JhZ2VLZXk9M0RmdW5jdGlvbiBqKHIpe2lmKCFyKXs9CnRo
cm93IG5ldyBFcnJvcigiSGlzdG9yeVByZWZzLmhpc3RvcnlTdG9yYWdlS2V5IG5lZWRzIHZhbGlk
IGlkOiAiK3IpfXJldHVybj0KKGwuc3RvcmFnZUtleVByZWZpeCtyKX07bC5nZXQ9M0RmdW5jdGlv
biBlKHIpe3JldHVybiBuZXcgbCh7aWQ6bC5oaXN0b3J5U3RvPQpyYWdlS2V5KHIpfSl9O2wuY2xl
YXJBbGw9M0RmdW5jdGlvbiBrKHMpe2Zvcih2YXIgciBpbiBzZXNzaW9uU3RvcmFnZSl7aWYoci49
CmluZGV4T2YobC5zdG9yYWdlS2V5UHJlZml4KT0zRD0zRD0zRDApe3Nlc3Npb25TdG9yYWdlLnJl
bW92ZUl0ZW0ocil9fX07dmFyID0KcD0zRGYuTW9kZWxMaXN0UGFuZWw7dmFyIG09M0RwLmV4dGVu
ZCh7SERBVmlld0NsYXNzOmQuSERBTGlzdEl0ZW1WaWV3LEhEQ0FWPQppZXdDbGFzczpiLkhEQ0FM
aXN0SXRlbVZpZXcsY29sbGVjdGlvbkNsYXNzOm4uSGlzdG9yeUNvbnRlbnRzLG1vZGVsQ29sbGVj
dGk9Cm9uS2V5OiJjb250ZW50cyIsdGFnTmFtZToiZGl2IixjbGFzc05hbWU6cC5wcm90b3R5cGUu
Y2xhc3NOYW1lKyIgaGlzdG9yeS1wYT0KbmVsIixlbXB0eU1zZzpnKCJUaGlzIGhpc3RvcnkgaXMg
ZW1wdHkiKSxub25lRm91bmRNc2c6ZygiTm8gbWF0Y2hpbmcgZGF0YXNlPQp0cyBmb3VuZCIpLHNl
YXJjaFBsYWNlaG9sZGVyOmcoInNlYXJjaCBkYXRhc2V0cyIpLGluaXRpYWxpemU6ZnVuY3Rpb24o
cil7cC49CnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxyKTt0aGlzLmxpbmtUYXJnZXQ9
M0RyLmxpbmtUYXJnZXR8fCJfYmxhbmsifT0KLGZyZWVNb2RlbDpmdW5jdGlvbigpe3AucHJvdG90
eXBlLmZyZWVNb2RlbC5jYWxsKHRoaXMpO2lmKHRoaXMubW9kZWwpe3RoaXMuPQptb2RlbC5jbGVh
clVwZGF0ZVRpbWVvdXQoKX1yZXR1cm4gdGhpc30sX3NldFVwTGlzdGVuZXJzOmZ1bmN0aW9uKCl7
cC5wcm90b3Q9CnlwZS5fc2V0VXBMaXN0ZW5lcnMuY2FsbCh0aGlzKTt0aGlzLm9uKCJlcnJvciIs
ZnVuY3Rpb24ocyx2LHIsdSx0KXt0aGlzLmVycj0Kb3JIYW5kbGVyKHMsdixyLHUsdCl9KTt0aGlz
Lm9uKCJsb2FkaW5nLWRvbmUiLGZ1bmN0aW9uKCl7aWYoIXRoaXMudmlld3MubGVuPQpndGgpe3Ro
aXMudHJpZ2dlcigiZW1wdHktaGlzdG9yeSIsdGhpcyl9fSl9LGxvYWRIaXN0b3J5V2l0aERldGFp
bHM6ZnVuY3Rpb249Cih1LHQscyx2KXt0aGlzLmluZm8oImxvYWRIaXN0b3J5V2l0aERldGFpbHM6
Iix1LHQscyx2KTt2YXIgcj0zRGZ1bmN0aW9uKHcpez0KcmV0dXJuIF8udmFsdWVzKGwuZ2V0KHcu
aWQpLmdldCgiZXhwYW5kZWRJZHMiKSl9O3JldHVybiB0aGlzLmxvYWRIaXN0b3J5KHUsPQp0LHMs
dixyKX0sbG9hZEhpc3Rvcnk6ZnVuY3Rpb24odix1LHQsdyxyKXt0aGlzLmluZm8oImxvYWRIaXN0
b3J5OiIsdix1LHQsdyw9CnIpO3ZhciBzPTNEdGhpczt1PTNEdXx8e307cy50cmlnZ2VyKCJsb2Fk
aW5nIixzKTt2YXIgeD0zRGguSGlzdG9yeS5nZXRIaXN0bz0KcnlEYXRhKHYse2hpc3RvcnlGbjp0
LGNvbnRlbnRzRm46dyxkZXRhaWxJZHNGbjp1LmluaXRpYWxseUV4cGFuZGVkfHxyfSk7cmV0PQp1
cm4gcy5fbG9hZEhpc3RvcnlGcm9tWEhSKHgsdSkuZmFpbChmdW5jdGlvbihBLHkseil7cy50cmln
Z2VyKCJlcnJvciIscyxBLHU9CixnKCJBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgd2hpbGUgIit5
KSx7aGlzdG9yeUlkOnYsaGlzdG9yeTp6fHx7fX0pfSkuYWx3YT0KeXMoZnVuY3Rpb24oKXtzLnRy
aWdnZXIoImxvYWRpbmctZG9uZSIscyl9KX0sX2xvYWRIaXN0b3J5RnJvbVhIUjpmdW5jdGlvbih0
PQoscyl7dmFyIHI9M0R0aGlzO3QudGhlbihmdW5jdGlvbih1LHYpe3IuSlNPTlRvTW9kZWwodSx2
LHMpO3IucmVuZGVyKCl9KTt0LmY9CmFpbChmdW5jdGlvbih2LHUpe3IucmVuZGVyKCl9KTtyZXR1
cm4gdH0scmVmcmVzaENvbnRlbnRzOmZ1bmN0aW9uKHMscil7aWYodD0KaGlzLm1vZGVsKXtyZXR1
cm4gdGhpcy5tb2RlbC5yZWZyZXNoKHMscil9cmV0dXJuICQud2hlbigpfSxKU09OVG9Nb2RlbDpm
dW5jPQp0aW9uKHUscixzKXt0aGlzLmxvZygiSlNPTlRvTW9kZWw6Iix1LHIscyk7cz0zRHN8fHt9
O3ZhciB0PTNEbmV3IGguSGlzdG9yeSg9CnUscixzKTt0aGlzLnNldE1vZGVsKHQpO3JldHVybiB0
fSxzZXRNb2RlbDpmdW5jdGlvbihzLHIpe3I9M0RyfHx7fTtwLnByb3RvdD0KeXBlLnNldE1vZGVs
LmNhbGwodGhpcyxzLHIpO2lmKHRoaXMubW9kZWwpe3RoaXMuX3NldFVwV2ViU3RvcmFnZShyLmlu
aXRpYWxsPQp5RXhwYW5kZWQsci5zaG93X2RlbGV0ZWQsci5zaG93X2hpZGRlbil9fSxfc2V0VXBX
ZWJTdG9yYWdlOmZ1bmN0aW9uKHMscix0KXs9CmlmKHRoaXMuc3RvcmFnZSl7dGhpcy5zdG9wTGlz
dGVuaW5nKHRoaXMuc3RvcmFnZSl9dGhpcy5zdG9yYWdlPTNEbmV3IGwoe2lkOj0KbC5oaXN0b3J5
U3RvcmFnZUtleSh0aGlzLm1vZGVsLmdldCgiaWQiKSl9KTtpZihfLmlzT2JqZWN0KHMpKXt0aGlz
LnN0b3JhZ2UuPQpzZXQoImV4cGFuZGVkSWRzIixzKX1pZihfLmlzQm9vbGVhbihyKSl7dGhpcy5z
dG9yYWdlLnNldCgic2hvd19kZWxldGVkIixyKX09CmlmKF8uaXNCb29sZWFuKHQpKXt0aGlzLnN0
b3JhZ2Uuc2V0KCJzaG93X2hpZGRlbiIsdCl9dGhpcy50cmlnZ2VyKCJuZXctc3Rvcj0KYWdlIix0
aGlzLnN0b3JhZ2UsdGhpcyk7dGhpcy5sb2codGhpcysiIChpbml0J2QpIHN0b3JhZ2U6Iix0aGlz
LnN0b3JhZ2UuZ2V0PQooKSk7dGhpcy5saXN0ZW5Ubyh0aGlzLnN0b3JhZ2UseyJjaGFuZ2U6c2hv
d19kZWxldGVkIjpmdW5jdGlvbih1LHYpe3RoaXMuc2g9Cm93RGVsZXRlZD0zRHZ9LCJjaGFuZ2U6
c2hvd19oaWRkZW4iOmZ1bmN0aW9uKHUsdil7dGhpcy5zaG93SGlkZGVuPTNEdn19LHRoaT0Kcyk7
dGhpcy5zaG93RGVsZXRlZD0zRChyIT0zRD0zRHVuZGVmaW5lZCk/cjp0aGlzLnN0b3JhZ2UuZ2V0
KCJzaG93X2RlbGV0ZWQiPQopO3RoaXMuc2hvd0hpZGRlbj0zRCh0IT0zRD0zRHVuZGVmaW5lZCk/
dDp0aGlzLnN0b3JhZ2UuZ2V0KCJzaG93X2hpZGRlbiIpO3I9CmV0dXJuIHRoaXN9LF9idWlsZE5l
d1JlbmRlcjpmdW5jdGlvbigpe3ZhciByPTNEcC5wcm90b3R5cGUuX2J1aWxkTmV3UmVuZGVyLj0K
Y2FsbCh0aGlzKTtpZih0aGlzLm11bHRpc2VsZWN0QWN0aW9ucygpLmxlbmd0aCl7ci5maW5kKCIu
Y29udHJvbHMgLmFjdGlvbnMiPQopLnByZXBlbmQodGhpcy5fcmVuZGVyU2VsZWN0QnV0dG9uKCkp
fXJldHVybiByfSxfcmVuZGVyU2VsZWN0QnV0dG9uOmZ1bmN0aW89Cm4ocil7cmV0dXJuIGMoe3Rp
dGxlOmcoIk9wZXJhdGlvbnMgb24gbXVsdGlwbGUgZGF0YXNldHMiKSxjbGFzc2VzOiJzaG93LXNl
bD0KZWN0b3JzLWJ0biIsZmFJY29uOiJmYS1jaGVjay1zcXVhcmUtbyJ9KX0sX2dldEl0ZW1WaWV3
Q2xhc3M6ZnVuY3Rpb24ocil7dmFyPQogcz0zRHIuZ2V0KCJoaXN0b3J5X2NvbnRlbnRfdHlwZSIp
O3N3aXRjaChzKXtjYXNlImRhdGFzZXQiOnJldHVybiB0aGlzLkhEQVY9Cmlld0NsYXNzO2Nhc2Ui
ZGF0YXNldF9jb2xsZWN0aW9uIjpyZXR1cm4gdGhpcy5IRENBVmlld0NsYXNzfXRocm93IG5ldyBU
eXBlRT0KcnJvcigiVW5rbm93biBoaXN0b3J5X2NvbnRlbnRfdHlwZTogIitzKX0sX2ZpbHRlckl0
ZW06ZnVuY3Rpb24ocyl7dmFyIHI9M0R0PQpoaXM7cmV0dXJuKHAucHJvdG90eXBlLl9maWx0ZXJJ
dGVtLmNhbGwocixzKSYmKCFzLmhpZGRlbigpfHxyLnNob3dIaWRkZW4pJiY9Cighcy5pc0RlbGV0
ZWRPclB1cmdlZCgpfHxyLnNob3dEZWxldGVkKSl9LF9nZXRJdGVtVmlld09wdGlvbnM6ZnVuY3Rp
b24ocyl7dj0KYXIgcj0zRHAucHJvdG90eXBlLl9nZXRJdGVtVmlld09wdGlvbnMuY2FsbCh0aGlz
LHMpO3JldHVybiBfLmV4dGVuZChyLHtsaW5rPQpUYXJnZXQ6dGhpcy5saW5rVGFyZ2V0LGV4cGFu
ZGVkOiEhdGhpcy5zdG9yYWdlLmdldCgiZXhwYW5kZWRJZHMiKVtzLmlkXSxoYXM9ClVzZXI6dGhp
cy5tb2RlbC5vd25lZEJ5Q3VyclVzZXIoKX0pfSxfc2V0VXBJdGVtVmlld0xpc3RlbmVyczpmdW5j
dGlvbihzKXt2YT0KciByPTNEdGhpcztwLnByb3RvdHlwZS5fc2V0VXBJdGVtVmlld0xpc3RlbmVy
cy5jYWxsKHIscyk7cy5vbigiZXhwYW5kZWQiLGZ1PQpuY3Rpb24odCl7ci5zdG9yYWdlLmFkZEV4
cGFuZGVkKHQubW9kZWwpfSk7cy5vbigiY29sbGFwc2VkIixmdW5jdGlvbih0KXtyLnM9CnRvcmFn
ZS5yZW1vdmVFeHBhbmRlZCh0Lm1vZGVsKX0pO3JldHVybiB0aGlzfSxnZXRTZWxlY3RlZE1vZGVs
czpmdW5jdGlvbigpez0KdmFyIHI9M0RwLnByb3RvdHlwZS5nZXRTZWxlY3RlZE1vZGVscy5jYWxs
KHRoaXMpO3IuaGlzdG9yeUlkPTNEdGhpcy5jb2xsZWN0PQppb24uaGlzdG9yeUlkO3JldHVybiBy
fSxldmVudHM6Xy5leHRlbmQoXy5jbG9uZShwLnByb3RvdHlwZS5ldmVudHMpLHsiY2xpY2s9CiAu
c2hvdy1zZWxlY3RvcnMtYnRuIjoidG9nZ2xlU2VsZWN0b3JzIn0pLHRvZ2dsZVNob3dEZWxldGVk
OmZ1bmN0aW9uKHIscyl7cj0KPTNEKHIhPTNEPTNEdW5kZWZpbmVkKT8ocik6KCF0aGlzLnNob3dE
ZWxldGVkKTtzPTNEKHMhPTNEPTNEdW5kZWZpbmVkKT8ocyk6PQoodHJ1ZSk7dGhpcy5zaG93RGVs
ZXRlZD0zRHI7aWYocyl7dGhpcy5zdG9yYWdlLnNldCgic2hvd19kZWxldGVkIixyKX10aGlzLnQ9
CnJpZ2dlcigic2hvdy1oaWRkZW4iLHIpO3RoaXMucmVuZGVySXRlbXMoKTtyZXR1cm4gdGhpcy5z
aG93RGVsZXRlZH0sdG9nZ2xlUz0KaG93SGlkZGVuOmZ1bmN0aW9uKHIscyl7cj0zRChyIT0zRD0z
RHVuZGVmaW5lZCk/KHIpOighdGhpcy5zaG93SGlkZGVuKTtzPTNEPQoocyE9M0Q9M0R1bmRlZmlu
ZWQpPyhzKToodHJ1ZSk7dGhpcy5zaG93SGlkZGVuPTNEcjtpZihzKXt0aGlzLnN0b3JhZ2Uuc2V0
KCI9CnNob3dfaGlkZGVuIixyKX10aGlzLnRyaWdnZXIoInNob3ctaGlkZGVuIixyKTt0aGlzLnJl
bmRlckl0ZW1zKCk7cmV0dXJuIHRoaT0Kcy5zaG93SGlkZGVufSxfZmlyc3RTZWFyY2g6ZnVuY3Rp
b24ocil7dmFyIHM9M0R0aGlzLHQ9M0QiLmhpc3Rvcnktc2VhcmNoLWluPQpwdXQiO3RoaXMubG9n
KCJvbkZpcnN0U2VhcmNoIixyKTtpZihzLm1vZGVsLmNvbnRlbnRzLmhhdmVEZXRhaWxzKCkpe3Mu
c2VhcmM9CmhJdGVtcyhyKTtyZXR1cm59cy4kZWwuZmluZCh0KS5zZWFyY2hJbnB1dCgidG9nZ2xl
LWxvYWRpbmciKTtzLm1vZGVsLmNvbnRlbj0KdHMuZmV0Y2hBbGxEZXRhaWxzKHtzaWxlbnQ6dHJ1
ZX0pLmFsd2F5cyhmdW5jdGlvbigpe3MuJGVsLmZpbmQodCkuc2VhcmNoSW5wPQp1dCgidG9nZ2xl
LWxvYWRpbmciKX0pLmRvbmUoZnVuY3Rpb24oKXtzLnNlYXJjaEl0ZW1zKHIpfSl9LGVycm9ySGFu
ZGxlcjpmdW49CmN0aW9uKHQsdyxzLHYsdSl7dGhpcy5lcnJvcih0LHcscyx2LHUpO2lmKHcmJncu
c3RhdHVzPTNEPTNEPTNEMCYmdy5yZWFkeVN0YT0KdGU9M0Q9M0Q9M0QwKXt9ZWxzZXtpZih3JiZ3
LnN0YXR1cz0zRD0zRD0zRDUwMil7fWVsc2V7dmFyIHI9M0R0aGlzLl9wYXJzZUVyPQpyb3JNZXNz
YWdlKHQsdyxzLHYsdSk7aWYoIXRoaXMuJG1lc3NhZ2VzKCkuaXMoIjp2aXNpYmxlIikpe3RoaXMu
b25jZSgicmVuZGU9CnJlZCIsZnVuY3Rpb24oKXt0aGlzLmRpc3BsYXlNZXNzYWdlKCJlcnJvciIs
ci5tZXNzYWdlLHIuZGV0YWlscyl9KX1lbHNle3RoaT0Kcy5kaXNwbGF5TWVzc2FnZSgiZXJyb3Ii
LHIubWVzc2FnZSxyLmRldGFpbHMpfX19fSxfcGFyc2VFcnJvck1lc3NhZ2U6ZnVuY3RpPQpvbih2
LHkseix0LHIsdyl7dmFyIHU9M0RHYWxheHkuY3VyclVzZXIseD0zRHttZXNzYWdlOnRoaXMuX2Jl
UG9saXRlKHQpLGRldGE9Cmlsczp7bWVzc2FnZTp0LHJhdmVuOih3aW5kb3cuUmF2ZW4mJl8uaXNG
dW5jdGlvbihSYXZlbi5sYXN0RXZlbnRJZCkpPyhSYXZlbj0KLmxhc3RFdmVudElkKCkpOih1bmRl
ZmluZWQpLGFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsdXJsOih3aW5kb3cuR2FsYXh5KT8oPQpH
YWxheHkubGFzdEFqYXgudXJsKToodW5kZWZpbmVkKSxkYXRhOih3aW5kb3cuR2FsYXh5KT8oR2Fs
YXh5Lmxhc3RBamF4LmRhdGE9Cik6KHVuZGVmaW5lZCksb3B0aW9uczooeSk/KF8ub21pdCh6LCJ4
aHIiKSk6KHopLHhocjp5LHNvdXJjZTooXy5pc0Z1bmN0aW9uKD0Kdi50b0pTT04pKT8odi50b0pT
T04oKSk6KHYrIiIpLHVzZXI6KHUgaW5zdGFuY2VvZiBpLlVzZXIpPyh1LnRvSlNPTigpKToodSsi
PQoiKX19O18uZXh0ZW5kKHguZGV0YWlscyxyfHx7fSk7aWYoeSYmXy5pc0Z1bmN0aW9uKHkuZ2V0
QWxsUmVzcG9uc2VIZWFkZXJzKSk9Cnt2YXIgcz0zRHkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7
cz0zRF8uY29tcGFjdChzLnNwbGl0KCJcbiIpKTtzPTNEXy5tYXAocz0KLGZ1bmN0aW9uKEEpe3Jl
dHVybiBBLnNwbGl0KCI6ICIpfSk7eC5kZXRhaWxzLnhoci5yZXNwb25zZUhlYWRlcnM9M0RfLm9i
amVjPQp0KHMpfXJldHVybiB4fSxfYmVQb2xpdGU6ZnVuY3Rpb24ocil7cj0zRHJ8fGcoIkFuIGVy
cm9yIG9jY3VycmVkIHdoaWxlIGdldHQ9CmluZyB1cGRhdGVzIGZyb20gdGhlIHNlcnZlciIpO3Jl
dHVybiByKyIuICIrZygiUGxlYXNlIGNvbnRhY3QgYSBHYWxheHkgYWRtaT0KbmlzdHJhdG9yIGlm
IHRoZSBwcm9ibGVtIHBlcnNpc3RzIikrIi4ifSxkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbih3LHgs
dil7dmFyPQogdD0zRHRoaXM7dGhpcy5zY3JvbGxUb1RvcCgpO3ZhciB1PTNEdGhpcy4kbWVzc2Fn
ZXMoKSxyPTNEJCgiPGRpdi8+IikuYWRkQ2w9CmFzcyh3KyJtZXNzYWdlIikuaHRtbCh4KTtpZigh
Xy5pc0VtcHR5KHYpKXt2YXIgcz0zRCQoJzxhIGhyZWY9M0QiamF2YXNjcmlwdD0KOnZvaWQoMCki
PkRldGFpbHM8L2E+JykuY2xpY2soZnVuY3Rpb24oKXtHYWxheHkubW9kYWwuc2hvdyh0Ll9tZXNz
YWdlVG9Nb2RhPQpsT3B0aW9ucyh3LHgsdikpO3JldHVybiBmYWxzZX0pO3IuYXBwZW5kKCIgIixz
KX1yZXR1cm4gdS5odG1sKHIpfSxfbWVzc2FnZVQ9Cm9Nb2RhbE9wdGlvbnM6ZnVuY3Rpb24odSx4
LHQpe3ZhciByPTNEdGhpcyxzPTNEe3RpdGxlOiJEZXRhaWxzIn07aWYoXy5pc09iaj0KZWN0KHQp
KXt0PTNEXy5vbWl0KHQsXy5mdW5jdGlvbnModCkpO3ZhciB3PTNESlNPTi5zdHJpbmdpZnkodCxu
dWxsLCIgICIpLHY9Cj0zRCQoIjxwcmUvPiIpLnRleHQodyk7cy5ib2R5PTNEJCgiPGRpdi8+Iiku
YXBwZW5kKHYpfWVsc2V7cy5ib2R5PTNEJCgiPGRpdj0KLz4iKS5odG1sKHQpfXMuYnV0dG9ucz0z
RHtPazpmdW5jdGlvbigpe0dhbGF4eS5tb2RhbC5oaWRlKCk7ci5jbGVhck1lc3NhZ2VzPQooKX19
O3JldHVybiBzfSxjbGVhck1lc3NhZ2VzOmZ1bmN0aW9uKHIpeyQoci5jdXJyZW50VGFyZ2V0KS5m
YWRlT3V0KHRoaXMuZng9ClNwZWVkLGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmUoKX0pO3JldHVy
biB0aGlzfSxzY3JvbGxUb0hpZDpmdW5jdGlvbihyKXtyZT0KdHVybiB0aGlzLnNjcm9sbFRvSXRl
bShfLmZpcnN0KHRoaXMudmlld3NXaGVyZU1vZGVsKHtoaWQ6cn0pKSl9LHRvU3RyaW5nOmZ1PQpu
Y3Rpb24oKXtyZXR1cm4iSGlzdG9yeVBhbmVsKCIrKCh0aGlzLm1vZGVsKT8odGhpcy5tb2RlbC5n
ZXQoIm5hbWUiKSk6KCIiKSk9CisiKSJ9fSk7bS5wcm90b3R5cGUudGVtcGxhdGVzPTNEKGZ1bmN0
aW9uKCl7dmFyIHI9M0RxLndyYXBUZW1wbGF0ZShbJzxkaXYgYz0KbGFzcz0zRCJjb250cm9scyI+
JywnPGRpdiBjbGFzcz0zRCJ0aXRsZSI+JywnPGRpdiBjbGFzcz0zRCJuYW1lIj48JT0zRCBoaXN0
PQpvcnkubmFtZSAlPjwvZGl2PicsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0Qic3VidGl0bGUiPjwv
ZGl2PicsJzxkaXYgY2xhc3M9M0Q9CiJoaXN0b3J5LXNpemUiPjwlPTNEIGhpc3RvcnkubmljZV9z
aXplICU+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJhY3Rpb25zIj48Lz0KZGl2PicsJzxkaXYgY2xh
c3M9M0QibWVzc2FnZXMiPicsIjwlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgJiYgaGlzdG9yeS5wdXJn
ZWQgPQopeyAlPiIsJzxkaXYgY2xhc3M9M0QiZGVsZXRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFs
bCI+JyxnKCJUaGlzIGhpc3RvcnkgaGE9CnMgYmVlbiBwdXJnZWQgYW5kIGRlbGV0ZWQiKSwiPC9k
aXY+IiwiPCUgfSBlbHNlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgKXsgJT4iLD0KJzxkaXYgY2xhc3M9
M0QiZGVsZXRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+JyxnKCJUaGlzIGhpc3RvcnkgaGFz
IGJlZW4gPQpkZWxldGVkIiksIjwvZGl2PiIsIjwlIH0gZWxzZSBpZiggaGlzdG9yeS5wdXJnZWQg
KXsgJT4iLCc8ZGl2IGNsYXNzPTNEImRlbGU9CnRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+
JyxnKCJUaGlzIGhpc3RvcnkgaGFzIGJlZW4gcHVyZ2VkIiksIjwvZGl2PiIsIj0KPCUgfSAlPiIs
IjwlIGlmKCBoaXN0b3J5Lm1lc3NhZ2UgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEIjwlPTNEIGhpc3Rv
cnkubWVzc2FnPQplLmxldmVsIHx8ICJpbmZvIiAlPm1lc3NhZ2VzbWFsbCI+JywiPCU9M0QgaGlz
dG9yeS5tZXNzYWdlLnRleHQgJT4iLCI8L2Rpdj49CiIsIjwlIH0gJT4iLCI8L2Rpdj4iLCc8ZGl2
IGNsYXNzPTNEInRhZ3MtZGlzcGxheSI+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJhbj0Kbm90YXRp
b24tZGlzcGxheSI+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJzZWFyY2giPicsJzxkaXYgY2xhc3M9
M0Qic2VhcmNoLWluPQpwdXQiPjwvZGl2PicsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0QibGlzdC1h
Y3Rpb25zIj4nLCc8ZGl2IGNsYXNzPTNEImJ0bi1ncm89CnVwIj4nLCc8YnV0dG9uIGNsYXNzPTNE
InNlbGVjdC1hbGwgYnRuIGJ0bi1kZWZhdWx0IicsJ2RhdGEtbW9kZT0zRCJzZWxlY3QiPj0KJyxn
KCJBbGwiKSwiPC9idXR0b24+IiwnPGJ1dHRvbiBjbGFzcz0zRCJkZXNlbGVjdC1hbGwgYnRuIGJ0
bi1kZWZhdWx0IicsJ2RhPQp0YS1tb2RlPTNEInNlbGVjdCI+JyxnKCJOb25lIiksIjwvYnV0dG9u
PiIsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0QibGlzdC1hY3Q9Cmlvbi1tZW51IGJ0bi1ncm91cCI+
JywiPC9kaXY+IiwiPC9kaXY+IiwiPC9kaXY+Il0sImhpc3RvcnkiKTtyZXR1cm4gXy5leHRlbj0K
ZChfLmNsb25lKHAucHJvdG90eXBlLnRlbXBsYXRlcykse2NvbnRyb2xzOnJ9KX0oKSk7cmV0dXJu
e0hpc3RvcnlQYW5lbDptfX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RlZmluZShb
Im12Yy9saXN0L2xpc3QtcGFuZWwiLCJtdmMvaGlzdG9yeS9oaXN0b3J5LW1vZGVsIiwibXZjL2hp
c3RvcnkvaGlzPQp0b3J5LWNvbnRlbnRzIiwibXZjL2hpc3RvcnkvaGRhLWxpIiwibXZjL2hpc3Rv
cnkvaGRjYS1saSIsIm12Yy9jb2xsZWN0aW9uL2M9Cm9sbGVjdGlvbi1wYW5lbCIsIm12Yy91c2Vy
L3VzZXItbW9kZWwiLCJ1aS9mYS1pY29uLWJ1dHRvbiIsIm12Yy91aS9wb3B1cC1tZT0KbnUiLCJt
dmMvYmFzZS1tdmMiLCJ1dGlscy9sb2NhbGl6YXRpb24iLCJ1aS9zZWFyY2gtaW5wdXQiXSxmdW5j
dGlvbihmLGgsbixkPQosYixvLGksYyxhLHEsZyl7dmFyIGw9M0RxLlNlc3Npb25TdG9yYWdlTW9k
ZWwuZXh0ZW5kKHtkZWZhdWx0czp7ZXhwYW5kZWRJZHM9Cjp7fSxzaG93X2RlbGV0ZWQ6ZmFsc2Us
c2hvd19oaWRkZW46ZmFsc2V9LGFkZEV4cGFuZGVkOmZ1bmN0aW9uKHIpe3ZhciBzPTNEIj0KZXhw
YW5kZWRJZHMiO3RoaXMuc2F2ZShzLF8uZXh0ZW5kKHRoaXMuZ2V0KHMpLF8ub2JqZWN0KFtyLmlk
XSxbci5nZXQoImlkIildPQopKSl9LHJlbW92ZUV4cGFuZGVkOmZ1bmN0aW9uKHIpe3ZhciBzPTNE
ImV4cGFuZGVkSWRzIjt0aGlzLnNhdmUocyxfLm9taXQodGg9CmlzLmdldChzKSxyLmlkKSl9LHRv
U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkhpc3RvcnlQcmVmcygiK3RoaXMuaWQrIikifX0pOz0K
bC5zdG9yYWdlS2V5UHJlZml4PTNEImhpc3Rvcnk6IjtsLmhpc3RvcnlTdG9yYWdlS2V5PTNEZnVu
Y3Rpb24gaihyKXtpZighcil7PQp0aHJvdyBuZXcgRXJyb3IoIkhpc3RvcnlQcmVmcy5oaXN0b3J5
U3RvcmFnZUtleSBuZWVkcyB2YWxpZCBpZDogIityKX1yZXR1cm49CihsLnN0b3JhZ2VLZXlQcmVm
aXgrcil9O2wuZ2V0PTNEZnVuY3Rpb24gZShyKXtyZXR1cm4gbmV3IGwoe2lkOmwuaGlzdG9yeVN0
bz0KcmFnZUtleShyKX0pfTtsLmNsZWFyQWxsPTNEZnVuY3Rpb24gayhzKXtmb3IodmFyIHIgaW4g
c2Vzc2lvblN0b3JhZ2Upe2lmKHIuPQppbmRleE9mKGwuc3RvcmFnZUtleVByZWZpeCk9M0Q9M0Q9
M0QwKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHIpfX19O3ZhciA9CnA9M0RmLk1vZGVsTGlz
dFBhbmVsO3ZhciBtPTNEcC5leHRlbmQoe0hEQVZpZXdDbGFzczpkLkhEQUxpc3RJdGVtVmlldyxI
RENBVj0KaWV3Q2xhc3M6Yi5IRENBTGlzdEl0ZW1WaWV3LGNvbGxlY3Rpb25DbGFzczpuLkhpc3Rv
cnlDb250ZW50cyxtb2RlbENvbGxlY3RpPQpvbktleToiY29udGVudHMiLHRhZ05hbWU6ImRpdiIs
Y2xhc3NOYW1lOnAucHJvdG90eXBlLmNsYXNzTmFtZSsiIGhpc3RvcnktcGE9Cm5lbCIsZW1wdHlN
c2c6ZygiVGhpcyBoaXN0b3J5IGlzIGVtcHR5Iiksbm9uZUZvdW5kTXNnOmcoIk5vIG1hdGNoaW5n
IGRhdGFzZT0KdHMgZm91bmQiKSxzZWFyY2hQbGFjZWhvbGRlcjpnKCJzZWFyY2ggZGF0YXNldHMi
KSxpbml0aWFsaXplOmZ1bmN0aW9uKHIpe3AuPQpwcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRo
aXMscik7dGhpcy5saW5rVGFyZ2V0PTNEci5saW5rVGFyZ2V0fHwiX2JsYW5rIn09CixmcmVlTW9k
ZWw6ZnVuY3Rpb24oKXtwLnByb3RvdHlwZS5mcmVlTW9kZWwuY2FsbCh0aGlzKTtpZih0aGlzLm1v
ZGVsKXt0aGlzLj0KbW9kZWwuY2xlYXJVcGRhdGVUaW1lb3V0KCl9cmV0dXJuIHRoaXN9LF9zZXRV
cExpc3RlbmVyczpmdW5jdGlvbigpe3AucHJvdG90PQp5cGUuX3NldFVwTGlzdGVuZXJzLmNhbGwo
dGhpcyk7dGhpcy5vbigiZXJyb3IiLGZ1bmN0aW9uKHMsdixyLHUsdCl7dGhpcy5lcnI9Cm9ySGFu
ZGxlcihzLHYscix1LHQpfSk7dGhpcy5vbigibG9hZGluZy1kb25lIixmdW5jdGlvbigpe2lmKCF0
aGlzLnZpZXdzLmxlbj0KZ3RoKXt0aGlzLnRyaWdnZXIoImVtcHR5LWhpc3RvcnkiLHRoaXMpfX0p
fSxsb2FkSGlzdG9yeVdpdGhEZXRhaWxzOmZ1bmN0aW9uPQoodSx0LHMsdil7dGhpcy5pbmZvKCJs
b2FkSGlzdG9yeVdpdGhEZXRhaWxzOiIsdSx0LHMsdik7dmFyIHI9M0RmdW5jdGlvbih3KXs9CnJl
dHVybiBfLnZhbHVlcyhsLmdldCh3LmlkKS5nZXQoImV4cGFuZGVkSWRzIikpfTtyZXR1cm4gdGhp
cy5sb2FkSGlzdG9yeSh1LD0KdCxzLHYscil9LGxvYWRIaXN0b3J5OmZ1bmN0aW9uKHYsdSx0LHcs
cil7dGhpcy5pbmZvKCJsb2FkSGlzdG9yeToiLHYsdSx0LHcsPQpyKTt2YXIgcz0zRHRoaXM7dT0z
RHV8fHt9O3MudHJpZ2dlcigibG9hZGluZyIscyk7dmFyIHg9M0RoLkhpc3RvcnkuZ2V0SGlzdG89
CnJ5RGF0YSh2LHtoaXN0b3J5Rm46dCxjb250ZW50c0ZuOncsZGV0YWlsSWRzRm46dS5pbml0aWFs
bHlFeHBhbmRlZHx8cn0pO3JldD0KdXJuIHMuX2xvYWRIaXN0b3J5RnJvbVhIUih4LHUpLmZhaWwo
ZnVuY3Rpb24oQSx5LHope3MudHJpZ2dlcigiZXJyb3IiLHMsQSx1PQosZygiQW4gZXJyb3Igd2Fz
IGVuY291bnRlcmVkIHdoaWxlICIreSkse2hpc3RvcnlJZDp2LGhpc3Rvcnk6enx8e319KX0pLmFs
d2E9CnlzKGZ1bmN0aW9uKCl7cy50cmlnZ2VyKCJsb2FkaW5nLWRvbmUiLHMpfSl9LF9sb2FkSGlz
dG9yeUZyb21YSFI6ZnVuY3Rpb24odD0KLHMpe3ZhciByPTNEdGhpczt0LnRoZW4oZnVuY3Rpb24o
dSx2KXtyLkpTT05Ub01vZGVsKHUsdixzKTtyLnJlbmRlcigpfSk7dC5mPQphaWwoZnVuY3Rpb24o
dix1KXtyLnJlbmRlcigpfSk7cmV0dXJuIHR9LHJlZnJlc2hDb250ZW50czpmdW5jdGlvbihzLHIp
e2lmKHQ9Cmhpcy5tb2RlbCl7cmV0dXJuIHRoaXMubW9kZWwucmVmcmVzaChzLHIpfXJldHVybiAk
LndoZW4oKX0sSlNPTlRvTW9kZWw6ZnVuYz0KdGlvbih1LHIscyl7dGhpcy5sb2coIkpTT05Ub01v
ZGVsOiIsdSxyLHMpO3M9M0RzfHx7fTt2YXIgdD0zRG5ldyBoLkhpc3RvcnkoPQp1LHIscyk7dGhp
cy5zZXRNb2RlbCh0KTtyZXR1cm4gdH0sc2V0TW9kZWw6ZnVuY3Rpb24ocyxyKXtyPTNEcnx8e307
cC5wcm90b3Q9CnlwZS5zZXRNb2RlbC5jYWxsKHRoaXMscyxyKTtpZih0aGlzLm1vZGVsKXt0aGlz
Ll9zZXRVcFdlYlN0b3JhZ2Uoci5pbml0aWFsbD0KeUV4cGFuZGVkLHIuc2hvd19kZWxldGVkLHIu
c2hvd19oaWRkZW4pfX0sX3NldFVwV2ViU3RvcmFnZTpmdW5jdGlvbihzLHIsdCl7PQppZih0aGlz
LnN0b3JhZ2Upe3RoaXMuc3RvcExpc3RlbmluZyh0aGlzLnN0b3JhZ2UpfXRoaXMuc3RvcmFnZT0z
RG5ldyBsKHtpZDo9CmwuaGlzdG9yeVN0b3JhZ2VLZXkodGhpcy5tb2RlbC5nZXQoImlkIikpfSk7
aWYoXy5pc09iamVjdChzKSl7dGhpcy5zdG9yYWdlLj0Kc2V0KCJleHBhbmRlZElkcyIscyl9aWYo
Xy5pc0Jvb2xlYW4ocikpe3RoaXMuc3RvcmFnZS5zZXQoInNob3dfZGVsZXRlZCIscil9PQppZihf
LmlzQm9vbGVhbih0KSl7dGhpcy5zdG9yYWdlLnNldCgic2hvd19oaWRkZW4iLHQpfXRoaXMudHJp
Z2dlcigibmV3LXN0b3I9CmFnZSIsdGhpcy5zdG9yYWdlLHRoaXMpO3RoaXMubG9nKHRoaXMrIiAo
aW5pdCdkKSBzdG9yYWdlOiIsdGhpcy5zdG9yYWdlLmdldD0KKCkpO3RoaXMubGlzdGVuVG8odGhp
cy5zdG9yYWdlLHsiY2hhbmdlOnNob3dfZGVsZXRlZCI6ZnVuY3Rpb24odSx2KXt0aGlzLnNoPQpv
d0RlbGV0ZWQ9M0R2fSwiY2hhbmdlOnNob3dfaGlkZGVuIjpmdW5jdGlvbih1LHYpe3RoaXMuc2hv
d0hpZGRlbj0zRHZ9fSx0aGk9CnMpO3RoaXMuc2hvd0RlbGV0ZWQ9M0QociE9M0Q9M0R1bmRlZmlu
ZWQpP3I6dGhpcy5zdG9yYWdlLmdldCgic2hvd19kZWxldGVkIj0KKTt0aGlzLnNob3dIaWRkZW49
M0QodCE9M0Q9M0R1bmRlZmluZWQpP3Q6dGhpcy5zdG9yYWdlLmdldCgic2hvd19oaWRkZW4iKTty
PQpldHVybiB0aGlzfSxfYnVpbGROZXdSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgcj0zRHAucHJvdG90
eXBlLl9idWlsZE5ld1JlbmRlci49CmNhbGwodGhpcyk7aWYodGhpcy5tdWx0aXNlbGVjdEFjdGlv
bnMoKS5sZW5ndGgpe3IuZmluZCgiLmNvbnRyb2xzIC5hY3Rpb25zIj0KKS5wcmVwZW5kKHRoaXMu
X3JlbmRlclNlbGVjdEJ1dHRvbigpKX1yZXR1cm4gcn0sX3JlbmRlclNlbGVjdEJ1dHRvbjpmdW5j
dGlvPQpuKHIpe3JldHVybiBjKHt0aXRsZTpnKCJPcGVyYXRpb25zIG9uIG11bHRpcGxlIGRhdGFz
ZXRzIiksY2xhc3Nlczoic2hvdy1zZWw9CmVjdG9ycy1idG4iLGZhSWNvbjoiZmEtY2hlY2stc3F1
YXJlLW8ifSl9LF9nZXRJdGVtVmlld0NsYXNzOmZ1bmN0aW9uKHIpe3Zhcj0KIHM9M0RyLmdldCgi
aGlzdG9yeV9jb250ZW50X3R5cGUiKTtzd2l0Y2gocyl7Y2FzZSJkYXRhc2V0IjpyZXR1cm4gdGhp
cy5IREFWPQppZXdDbGFzcztjYXNlImRhdGFzZXRfY29sbGVjdGlvbiI6cmV0dXJuIHRoaXMuSERD
QVZpZXdDbGFzc310aHJvdyBuZXcgVHlwZUU9CnJyb3IoIlVua25vd24gaGlzdG9yeV9jb250ZW50
X3R5cGU6ICIrcyl9LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKHMpe3ZhciByPTNEdD0KaGlzO3JldHVy
bihwLnByb3RvdHlwZS5fZmlsdGVySXRlbS5jYWxsKHIscykmJighcy5oaWRkZW4oKXx8ci5zaG93
SGlkZGVuKSYmPQooIXMuaXNEZWxldGVkT3JQdXJnZWQoKXx8ci5zaG93RGVsZXRlZCkpfSxfZ2V0
SXRlbVZpZXdPcHRpb25zOmZ1bmN0aW9uKHMpe3Y9CmFyIHI9M0RwLnByb3RvdHlwZS5fZ2V0SXRl
bVZpZXdPcHRpb25zLmNhbGwodGhpcyxzKTtyZXR1cm4gXy5leHRlbmQocix7bGluaz0KVGFyZ2V0
OnRoaXMubGlua1RhcmdldCxleHBhbmRlZDohIXRoaXMuc3RvcmFnZS5nZXQoImV4cGFuZGVkSWRz
Iilbcy5pZF0saGFzPQpVc2VyOnRoaXMubW9kZWwub3duZWRCeUN1cnJVc2VyKCl9KX0sX3NldFVw
SXRlbVZpZXdMaXN0ZW5lcnM6ZnVuY3Rpb24ocyl7dmE9CnIgcj0zRHRoaXM7cC5wcm90b3R5cGUu
X3NldFVwSXRlbVZpZXdMaXN0ZW5lcnMuY2FsbChyLHMpO3Mub24oImV4cGFuZGVkIixmdT0KbmN0
aW9uKHQpe3Iuc3RvcmFnZS5hZGRFeHBhbmRlZCh0Lm1vZGVsKX0pO3Mub24oImNvbGxhcHNlZCIs
ZnVuY3Rpb24odCl7ci5zPQp0b3JhZ2UucmVtb3ZlRXhwYW5kZWQodC5tb2RlbCl9KTtyZXR1cm4g
dGhpc30sZ2V0U2VsZWN0ZWRNb2RlbHM6ZnVuY3Rpb24oKXs9CnZhciByPTNEcC5wcm90b3R5cGUu
Z2V0U2VsZWN0ZWRNb2RlbHMuY2FsbCh0aGlzKTtyLmhpc3RvcnlJZD0zRHRoaXMuY29sbGVjdD0K
aW9uLmhpc3RvcnlJZDtyZXR1cm4gcn0sZXZlbnRzOl8uZXh0ZW5kKF8uY2xvbmUocC5wcm90b3R5
cGUuZXZlbnRzKSx7ImNsaWNrPQogLnNob3ctc2VsZWN0b3JzLWJ0biI6InRvZ2dsZVNlbGVjdG9y
cyIsImNsaWNrIC5tZXNzYWdlcyBbY2xhc3MkPTNEbWVzc2FnZV09CiI6ImNsZWFyTWVzc2FnZXMi
fSksdG9nZ2xlU2hvd0RlbGV0ZWQ6ZnVuY3Rpb24ocixzKXtyPTNEKHIhPTNEPTNEdW5kZWZpbmVk
KT0KPyhyKTooIXRoaXMuc2hvd0RlbGV0ZWQpO3M9M0QocyE9M0Q9M0R1bmRlZmluZWQpPyhzKToo
dHJ1ZSk7dGhpcy5zaG93RGVsZXRlPQpkPTNEcjtpZihzKXt0aGlzLnN0b3JhZ2Uuc2V0KCJzaG93
X2RlbGV0ZWQiLHIpfXRoaXMudHJpZ2dlcigic2hvdy1oaWRkZW4iLHI9Cik7dGhpcy5yZW5kZXJJ
dGVtcygpO3JldHVybiB0aGlzLnNob3dEZWxldGVkfSx0b2dnbGVTaG93SGlkZGVuOmZ1bmN0aW9u
KHIscz0KKXtyPTNEKHIhPTNEPTNEdW5kZWZpbmVkKT8ocik6KCF0aGlzLnNob3dIaWRkZW4pO3M9
M0QocyE9M0Q9M0R1bmRlZmluZWQpPyhzPQopOih0cnVlKTt0aGlzLnNob3dIaWRkZW49M0RyO2lm
KHMpe3RoaXMuc3RvcmFnZS5zZXQoInNob3dfaGlkZGVuIixyKX10aGlzLnQ9CnJpZ2dlcigic2hv
dy1oaWRkZW4iLHIpO3RoaXMucmVuZGVySXRlbXMoKTtyZXR1cm4gdGhpcy5zaG93SGlkZGVufSxf
Zmlyc3RTZT0KYXJjaDpmdW5jdGlvbihyKXt2YXIgcz0zRHRoaXMsdD0zRCIuaGlzdG9yeS1zZWFy
Y2gtaW5wdXQiO3RoaXMubG9nKCJvbkZpcnN0PQpTZWFyY2giLHIpO2lmKHMubW9kZWwuY29udGVu
dHMuaGF2ZURldGFpbHMoKSl7cy5zZWFyY2hJdGVtcyhyKTtyZXR1cm59cy4kZWw9Ci5maW5kKHQp
LnNlYXJjaElucHV0KCJ0b2dnbGUtbG9hZGluZyIpO3MubW9kZWwuY29udGVudHMuZmV0Y2hBbGxE
ZXRhaWxzKHtzaT0KbGVudDp0cnVlfSkuYWx3YXlzKGZ1bmN0aW9uKCl7cy4kZWwuZmluZCh0KS5z
ZWFyY2hJbnB1dCgidG9nZ2xlLWxvYWRpbmciKX0pPQouZG9uZShmdW5jdGlvbigpe3Muc2VhcmNo
SXRlbXMocil9KX0sZXJyb3JIYW5kbGVyOmZ1bmN0aW9uKHQsdyxzLHYsdSl7dGhpcy49CmVycm9y
KHQsdyxzLHYsdSk7aWYodyYmdy5zdGF0dXM9M0Q9M0Q9M0QwJiZ3LnJlYWR5U3RhdGU9M0Q9M0Q9
M0QwKXt9ZWxzZXtpZj0KKHcmJncuc3RhdHVzPTNEPTNEPTNENTAyKXt9ZWxzZXt2YXIgcj0zRHRo
aXMuX3BhcnNlRXJyb3JNZXNzYWdlKHQsdyxzLHYsdSk7PQppZighdGhpcy4kbWVzc2FnZXMoKS5p
cygiOnZpc2libGUiKSl7dGhpcy5vbmNlKCJyZW5kZXJlZCIsZnVuY3Rpb24oKXt0aGlzLmQ9Cmlz
cGxheU1lc3NhZ2UoImVycm9yIixyLm1lc3NhZ2Usci5kZXRhaWxzKX0pfWVsc2V7dGhpcy5kaXNw
bGF5TWVzc2FnZSgiZXJybz0KciIsci5tZXNzYWdlLHIuZGV0YWlscyl9fX19LF9wYXJzZUVycm9y
TWVzc2FnZTpmdW5jdGlvbih2LHkseix0LHIsdyl7dmFyIHU9Cj0zREdhbGF4eS5jdXJyVXNlcix4
PTNEe21lc3NhZ2U6dGhpcy5fYmVQb2xpdGUodCksZGV0YWlsczp7bWVzc2FnZTp0LHJhdmVuOj0K
KHdpbmRvdy5SYXZlbiYmXy5pc0Z1bmN0aW9uKFJhdmVuLmxhc3RFdmVudElkKSk/KFJhdmVuLmxh
c3RFdmVudElkKCkpOih1bmRlPQpmaW5lZCksYWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudCx1cmw6
KHdpbmRvdy5HYWxheHkpPyhHYWxheHkubGFzdEFqYXgudXJsKTo9Cih1bmRlZmluZWQpLGRhdGE6
KHdpbmRvdy5HYWxheHkpPyhHYWxheHkubGFzdEFqYXguZGF0YSk6KHVuZGVmaW5lZCksb3B0aW9u
cz0KOih5KT8oXy5vbWl0KHosInhociIpKTooeikseGhyOnksc291cmNlOihfLmlzRnVuY3Rpb24o
di50b0pTT04pKT8odi50b0pTT04oPQopKToodisiIiksdXNlcjoodSBpbnN0YW5jZW9mIGkuVXNl
cik/KHUudG9KU09OKCkpOih1KyIiKX19O18uZXh0ZW5kKHguZGV0YWk9CmxzLHJ8fHt9KTtpZih5
JiZfLmlzRnVuY3Rpb24oeS5nZXRBbGxSZXNwb25zZUhlYWRlcnMpKXt2YXIgcz0zRHkuZ2V0QWxs
UmVzcD0Kb25zZUhlYWRlcnMoKTtzPTNEXy5jb21wYWN0KHMuc3BsaXQoIlxuIikpO3M9M0RfLm1h
cChzLGZ1bmN0aW9uKEEpe3JldHVybiBBPQouc3BsaXQoIjogIil9KTt4LmRldGFpbHMueGhyLnJl
c3BvbnNlSGVhZGVycz0zRF8ub2JqZWN0KHMpfXJldHVybiB4fSxfYmVQb2w9Cml0ZTpmdW5jdGlv
bihyKXtyPTNEcnx8ZygiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyB1cGRhdGVzIGZy
b20gdGhlID0Kc2VydmVyIik7cmV0dXJuIHIrIi4gIitnKCJQbGVhc2UgY29udGFjdCBhIEdhbGF4
eSBhZG1pbmlzdHJhdG9yIGlmIHRoZSBwcm9iPQpsZW0gcGVyc2lzdHMiKSsiLiJ9LGRpc3BsYXlN
ZXNzYWdlOmZ1bmN0aW9uKHcseCx2KXt2YXIgdD0zRHRoaXM7dGhpcy5zY3JvbGw9ClRvVG9wKCk7
dmFyIHU9M0R0aGlzLiRtZXNzYWdlcygpLHI9M0QkKCI8ZGl2Lz4iKS5hZGRDbGFzcyh3KyJtZXNz
YWdlIikuaHRtbD0KKHgpO2lmKCFfLmlzRW1wdHkodikpe3ZhciBzPTNEJCgnPGEgaHJlZj0zRCJq
YXZhc2NyaXB0OnZvaWQoMCkiPkRldGFpbHM8L2E+PQonKS5jbGljayhmdW5jdGlvbigpe0dhbGF4
eS5tb2RhbC5zaG93KHQuX21lc3NhZ2VUb01vZGFsT3B0aW9ucyh3LHgsdikpO3JldHU9CnJuIGZh
bHNlfSk7ci5hcHBlbmQoIiAiLHMpfXJldHVybiB1LmFwcGVuZChyKX0sX21lc3NhZ2VUb01vZGFs
T3B0aW9uczpmdW5jdD0KaW9uKHUseCx0KXt2YXIgcj0zRHRoaXMscz0zRHt0aXRsZToiRGV0YWls
cyJ9O2lmKF8uaXNPYmplY3QodCkpe3Q9M0RfLm9taXQoPQp0LF8uZnVuY3Rpb25zKHQpKTt2YXIg
dz0zREpTT04uc3RyaW5naWZ5KHQsbnVsbCwiICAiKSx2PTNEJCgiPHByZS8+IikudGV4dCg9Cncp
O3MuYm9keT0zRCQoIjxkaXYvPiIpLmFwcGVuZCh2KX1lbHNle3MuYm9keT0zRCQoIjxkaXYvPiIp
Lmh0bWwodCl9cy5idXR0bz0KbnM9M0R7T2s6ZnVuY3Rpb24oKXtHYWxheHkubW9kYWwuaGlkZSgp
O3IuY2xlYXJNZXNzYWdlcygpfX07cmV0dXJuIHN9LGNsZWFyPQpNZXNzYWdlczpmdW5jdGlvbihz
KXt2YXIgcj0zRCFfLmlzVW5kZWZpbmVkKHMpPyQocy5jdXJyZW50VGFyZ2V0KTp0aGlzLiRtZXM9
CnNhZ2VzKCkuY2hpbGRyZW4oJ1tjbGFzcyQ9M0QibWVzc2FnZSJdJyk7ci5mYWRlT3V0KHRoaXMu
ZnhTcGVlZCxmdW5jdGlvbigpez0KJCh0aGlzKS5yZW1vdmUoKX0pO3JldHVybiB0aGlzfSxzY3Jv
bGxUb0hpZDpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY3JvbGxUPQpvSXRlbShfLmZpcnN0KHRo
aXMudmlld3NXaGVyZU1vZGVsKHtoaWQ6cn0pKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJu
Ikg9CmlzdG9yeVBhbmVsKCIrKCh0aGlzLm1vZGVsKT8odGhpcy5tb2RlbC5nZXQoIm5hbWUiKSk6
KCIiKSkrIikifX0pO20ucHJvdG90eT0KcGUudGVtcGxhdGVzPTNEKGZ1bmN0aW9uKCl7dmFyIHI9
M0RxLndyYXBUZW1wbGF0ZShbJzxkaXYgY2xhc3M9M0QiY29udHJvbHMiPQo+JywnPGRpdiBjbGFz
cz0zRCJ0aXRsZSI+JywnPGRpdiBjbGFzcz0zRCJuYW1lIj48JT0zRCBoaXN0b3J5Lm5hbWUgJT48
L2Rpdj49CicsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0Qic3VidGl0bGUiPjwvZGl2PicsJzxkaXYg
Y2xhc3M9M0QiaGlzdG9yeS1zaXplIj48JT0KPTNEIGhpc3RvcnkubmljZV9zaXplICU+PC9kaXY+
JywnPGRpdiBjbGFzcz0zRCJhY3Rpb25zIj48L2Rpdj4nLCc8ZGl2IGNsYXNzPQo9M0QibWVzc2Fn
ZXMiPicsIjwlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgJiYgaGlzdG9yeS5wdXJnZWQgKXsgJT4iLCc8
ZGl2IGNsYXM9CnM9M0QiZGVsZXRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+JyxnKCJUaGlz
IGhpc3RvcnkgaGFzIGJlZW4gcHVyZ2VkIGFuZD0KIGRlbGV0ZWQiKSwiPC9kaXY+IiwiPCUgfSBl
bHNlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEImRlPQpsZXRlZC1t
c2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+JyxnKCJUaGlzIGhpc3RvcnkgaGFzIGJlZW4gZGVsZXRl
ZCIpLCI8L2Rpdj49CiIsIjwlIH0gZWxzZSBpZiggaGlzdG9yeS5wdXJnZWQgKXsgJT4iLCc8ZGl2
IGNsYXNzPTNEImRlbGV0ZWQtbXNnIHdhcm5pbmdtZT0Kc3NhZ2VzbWFsbCI+JyxnKCJUaGlzIGhp
c3RvcnkgaGFzIGJlZW4gcHVyZ2VkIiksIjwvZGl2PiIsIjwlIH0gJT4iLCI8JSBpZiggPQpoaXN0
b3J5Lm1lc3NhZ2UgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEIjwlPTNEIGhpc3RvcnkubWVzc2FnZS5s
ZXZlbCB8fCAiaW5mbyI9CiAlPm1lc3NhZ2VzbWFsbCI+JywiPCU9M0QgaGlzdG9yeS5tZXNzYWdl
LnRleHQgJT4iLCI8L2Rpdj4iLCI8JSB9ICU+IiwiPC9kaT0Kdj4iLCc8ZGl2IGNsYXNzPTNEInRh
Z3MtZGlzcGxheSI+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJhbm5vdGF0aW9uLWRpc3BsYXkiPQo+
PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJzZWFyY2giPicsJzxkaXYgY2xhc3M9M0Qic2VhcmNoLWlu
cHV0Ij48L2Rpdj4nLCI8L2Q9Cml2PiIsJzxkaXYgY2xhc3M9M0QibGlzdC1hY3Rpb25zIj4nLCc8
ZGl2IGNsYXNzPTNEImJ0bi1ncm91cCI+JywnPGJ1dHRvbiBjbD0KYXNzPTNEInNlbGVjdC1hbGwg
YnRuIGJ0bi1kZWZhdWx0IicsJ2RhdGEtbW9kZT0zRCJzZWxlY3QiPicsZygiQWxsIiksIjwvYnV0
PQp0b24+IiwnPGJ1dHRvbiBjbGFzcz0zRCJkZXNlbGVjdC1hbGwgYnRuIGJ0bi1kZWZhdWx0Iics
J2RhdGEtbW9kZT0zRCJzZWxlY3Q9CiI+JyxnKCJOb25lIiksIjwvYnV0dG9uPiIsIjwvZGl2PiIs
JzxkaXYgY2xhc3M9M0QibGlzdC1hY3Rpb24tbWVudSBidG4tZ3JvdT0KcCI+JywiPC9kaXY+Iiwi
PC9kaXY+IiwiPC9kaXY+Il0sImhpc3RvcnkiKTtyZXR1cm4gXy5leHRlbmQoXy5jbG9uZShwLnBy
b3RvPQp0eXBlLnRlbXBsYXRlcykse2NvbnRyb2xzOnJ9KX0oKSk7cmV0dXJue0hpc3RvcnlQYW5l
bDptfX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClJlcG9zaXRvcnkgVVJMOiBodHRw
czovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsLwoKLS0KClRoaXMgaXMgYSBj
b21taXQgbm90aWZpY2F0aW9uIGZyb20gYml0YnVja2V0Lm9yZy4gWW91IGFyZSByZWNlaXZpbmcK
dGhpcyBiZWNhdXNlIHlvdSBoYXZlIHRoZSBzZXJ2aWNlIGVuYWJsZWQsIGFkZHJlc3NpbmcgdGhl
IHJlY2lwaWVudCBvZgp0aGlzIGVtYWlsLgo
1
0
OCBuZXcgY29tbWl0cyBpbiBnYWxheHktY2VudHJhbDoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9n
YWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy85Zjc5NjZlNDgxNDYvCkNoYW5nZXNldDogICA5
Zjc5NjZlNDgxNDYKVXNlcjogICAgICAgIGRhbm5vbgpEYXRlOiAgICAgICAgMjAxNS0wMi0yMyAx
NzoxNjoxMCswMDowMApTdW1tYXJ5OiAgICAgRUFGUCwgY2xlYW5lciBzaHV0ZG93biB3aGVuIHRo
ZXJlJ3MgYSBjb250cm9sIHdvcmtlciBpbml0aWFsaXo9CmF0aW9uIGVycm9yLgpBZmZlY3RlZCAj
OiAgMSBmaWxlCgpkaWZmIC1yIGNjM2M0ZjUxZDFlYTU3MTYwOGIwMTdjMWQxZmM4MTAwZjZhZDll
MzUgLXIgOWY3OTY2ZTQ4MTQ2NmNmN2EyMjRjMWI9CmI4NzA3OGY2MjgxNjU3YmFkIGxpYi9nYWxh
eHkvYXBwLnB5Ci0tLSBhL2xpYi9nYWxheHkvYXBwLnB5CisrKyBiL2xpYi9nYWxheHkvYXBwLnB5
CkBAIC0xNjIsOCArMTYyLDExIEBACiAgICAgICAgIGlmIHNlbGYuaGVhcnRiZWF0OgogICAgICAg
ICAgICAgc2VsZi5oZWFydGJlYXQuc2h1dGRvd24oKQogICAgICAgICBzZWxmLnVwZGF0ZV9yZXBv
c2l0b3J5X21hbmFnZXIuc2h1dGRvd24oKQotICAgICAgICBpZiBzZWxmLmNvbnRyb2xfd29ya2Vy
OgorICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNvbnRyb2xfd29ya2VyLnNodXRkb3du
KCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBUaGVyZSBp
cyBubyBjb250cm9sX3dvcmtlcgorICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAg
ICAgICAgICAjIElmIHRoZSBkYXRhdHlwZXMgcmVnaXN0cnkgd2FzIHBlcnNpc3RlZCwgYXR0ZW1w
dCB0bwogICAgICAgICAgICAgIyByZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlIGluIHdoaWNoIGl0
IHdhcyB3cml0dGVuLgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRy
YWwvY29tbWl0cy81YjE3NzY4NDYzMzIvCkNoYW5nZXNldDogICA1YjE3NzY4NDYzMzIKVXNlcjog
ICAgICAgIGd1ZXJsZXIKRGF0ZTogICAgICAgIDIwMTUtMDItMjMgMTc6NTA6MjcrMDA6MDAKU3Vt
bWFyeTogICAgIFNlbGVjdDIgZml4CkFmZmVjdGVkICM6ICAyMSBmaWxlcwoKZGlmZiAtciA5Zjc5
NjZlNDgxNDY2Y2Y3YTIyNGMxYmI4NzA3OGY2MjgxNjU3YmFkIC1yIDViMTc3Njg0NjMzMmNiZmM4
MDhmMDQxPQpkMGZmYzZlN2ZmZGRkNjQzNCBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvbGlicy9qcXVl
cnkvc2VsZWN0Mi5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbGlicy9qcXVlcnkvc2Vs
ZWN0Mi5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbGlicy9qcXVlcnkvc2VsZWN0Mi5q
cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiBDb3B5cmlnaHQgMjAxMiBJZ29yIFZheW5iZXJnCj0yMAot
VmVyc2lvbjogMy40LjMgVGltZXN0YW1wOiBUdWUgU2VwIDE3IDA2OjQ3OjE0IFBEVCAyMDEzCitW
ZXJzaW9uOiAzLjUuMSBUaW1lc3RhbXA6IFR1ZSBKdWwgMjIgMTg6NTg6NTYgRURUIDIwMTQKPTIw
CiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSAiQXBhYz0KaGUgTGljZW5zZSIpIG9yIHRoZSBHTlUKIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCBMaWNlbnNlIikuIFlvdSBtYXkgY2hvb3Nl
IGVpdGhlPQpyIGxpY2Vuc2UgdG8gZ292ZXJuIHlvdXIKQEAgLTE0LDcgKzE0LDcgQEAKICAgICBo
dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sCj0yMAogVW5sZXNzIHJlcXVp
cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBk
aXN0cmk9CmJ1dGVkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2Ugb3IgdGhlIEdQTCBMaWNlc25z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVQ9CkhPVVQgV0FSUkFOVElF
UyBPUgorQXBhY2hlIExpY2Vuc2Ugb3IgdGhlIEdQTCBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsIFdJVEg9Ck9VVCBXQVJSQU5USUVTIE9SCiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIEFwYWNoZSBMaWNl
bnNlID0KYW5kIHRoZSBHUEwgTGljZW5zZSBmb3IKIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBBcGFjPQpoZSBMaWNl
bnNlIGFuZCB0aGUgR1BMIExpY2Vuc2UuCiAqLwpAQCAtOTgsMjQgKzk4LDI4IEBACiAgICAgfSwK
ICAgICBNRUFTVVJFX1NDUk9MTEJBUl9URU1QTEFURSA9M0QgIjxkaXYgY2xhc3M9M0Qnc2VsZWN0
Mi1tZWFzdXJlLXNjcm9sbGJhPQpyJz48L2Rpdj4iLAo9MjAKLSAgICBESUFDUklUSUNTID0zRCB7
Ilx1MjRCNiI6IkEiLCJcdUZGMjEiOiJBIiwiXHUwMEMwIjoiQSIsIlx1MDBDMSI6IkEiLCJcPQp1
MDBDMiI6IkEiLCJcdTFFQTYiOiJBIiwiXHUxRUE0IjoiQSIsIlx1MUVBQSI6IkEiLCJcdTFFQTgi
OiJBIiwiXHUwMEMzIjoiQSI9CiwiXHUwMTAwIjoiQSIsIlx1MDEwMiI6IkEiLCJcdTFFQjAiOiJB
IiwiXHUxRUFFIjoiQSIsIlx1MUVCNCI6IkEiLCJcdTFFQjIiOj0KIkEiLCJcdTAyMjYiOiJBIiwi
XHUwMUUwIjoiQSIsIlx1MDBDNCI6IkEiLCJcdTAxREUiOiJBIiwiXHUxRUEyIjoiQSIsIlx1MDBD
PQo1IjoiQSIsIlx1MDFGQSI6IkEiLCJcdTAxQ0QiOiJBIiwiXHUwMjAwIjoiQSIsIlx1MDIwMiI6
IkEiLCJcdTFFQTAiOiJBIiwiXHU9CjFFQUMiOiJBIiwiXHUxRUI2IjoiQSIsIlx1MUUwMCI6IkEi
LCJcdTAxMDQiOiJBIiwiXHUwMjNBIjoiQSIsIlx1MkM2RiI6IkEiLD0KIlx1QTczMiI6IkFBIiwi
XHUwMEM2IjoiQUUiLCJcdTAxRkMiOiJBRSIsIlx1MDFFMiI6IkFFIiwiXHVBNzM0IjoiQU8iLCJc
dUE3PQozNiI6IkFVIiwiXHVBNzM4IjoiQVYiLCJcdUE3M0EiOiJBViIsIlx1QTczQyI6IkFZIiwi
XHUyNEI3IjoiQiIsIlx1RkYyMiI6IkI9CiIsIlx1MUUwMiI6IkIiLCJcdTFFMDQiOiJCIiwiXHUx
RTA2IjoiQiIsIlx1MDI0MyI6IkIiLCJcdTAxODIiOiJCIiwiXHUwMTgxIj0KOiJCIiwiXHUyNEI4
IjoiQyIsIlx1RkYyMyI6IkMiLCJcdTAxMDYiOiJDIiwiXHUwMTA4IjoiQyIsIlx1MDEwQSI6IkMi
LCJcdTAxPQowQyI6IkMiLCJcdTAwQzciOiJDIiwiXHUxRTA4IjoiQyIsIlx1MDE4NyI6IkMiLCJc
dTAyM0IiOiJDIiwiXHVBNzNFIjoiQyIsIlw9CnUyNEI5IjoiRCIsIlx1RkYyNCI6IkQiLCJcdTFF
MEEiOiJEIiwiXHUwMTBFIjoiRCIsIlx1MUUwQyI6IkQiLCJcdTFFMTAiOiJEIj0KLCJcdTFFMTIi
OiJEIiwiXHUxRTBFIjoiRCIsIlx1MDExMCI6IkQiLCJcdTAxOEIiOiJEIiwiXHUwMThBIjoiRCIs
Ilx1MDE4OSI6PQoiRCIsIlx1QTc3OSI6IkQiLCJcdTAxRjEiOiJEWiIsIlx1MDFDNCI6IkRaIiwi
XHUwMUYyIjoiRHoiLCJcdTAxQzUiOiJEeiIsIlw9CnUyNEJBIjoiRSIsIlx1RkYyNSI6IkUiLCJc
dTAwQzgiOiJFIiwiXHUwMEM5IjoiRSIsIlx1MDBDQSI6IkUiLCJcdTFFQzAiOiJFIj0KLCJcdTFF
QkUiOiJFIiwiXHUxRUM0IjoiRSIsIlx1MUVDMiI6IkUiLCJcdTFFQkMiOiJFIiwiXHUwMTEyIjoi
RSIsIlx1MUUxNCI6PQoiRSIsIlx1MUUxNiI6IkUiLCJcdTAxMTQiOiJFIiwiXHUwMTE2IjoiRSIs
Ilx1MDBDQiI6IkUiLCJcdTFFQkEiOiJFIiwiXHUwMTE9CkEiOiJFIiwiXHUwMjA0IjoiRSIsIlx1
MDIwNiI6IkUiLCJcdTFFQjgiOiJFIiwiXHUxRUM2IjoiRSIsIlx1MDIyOCI6IkUiLCJcdT0KMUUx
QyI6IkUiLCJcdTAxMTgiOiJFIiwiXHUxRTE4IjoiRSIsIlx1MUUxQSI6IkUiLCJcdTAxOTAiOiJF
IiwiXHUwMThFIjoiRSIsPQoiXHUyNEJCIjoiRiIsIlx1RkYyNiI6IkYiLCJcdTFFMUUiOiJGIiwi
XHUwMTkxIjoiRiIsIlx1QTc3QiI6IkYiLCJcdTI0QkMiOiI9CkciLCJcdUZGMjciOiJHIiwiXHUw
MUY0IjoiRyIsIlx1MDExQyI6IkciLCJcdTFFMjAiOiJHIiwiXHUwMTFFIjoiRyIsIlx1MDEyMD0K
IjoiRyIsIlx1MDFFNiI6IkciLCJcdTAxMjIiOiJHIiwiXHUwMUU0IjoiRyIsIlx1MDE5MyI6Ikci
LCJcdUE3QTAiOiJHIiwiXHVBPQo3N0QiOiJHIiwiXHVBNzdFIjoiRyIsIlx1MjRCRCI6IkgiLCJc
dUZGMjgiOiJIIiwiXHUwMTI0IjoiSCIsIlx1MUUyMiI6IkgiLCI9Clx1MUUyNiI6IkgiLCJcdTAy
MUUiOiJIIiwiXHUxRTI0IjoiSCIsIlx1MUUyOCI6IkgiLCJcdTFFMkEiOiJIIiwiXHUwMTI2Ijoi
SD0KIiwiXHUyQzY3IjoiSCIsIlx1MkM3NSI6IkgiLCJcdUE3OEQiOiJIIiwiXHUyNEJFIjoiSSIs
Ilx1RkYyOSI6IkkiLCJcdTAwQ0MiPQo6IkkiLCJcdTAwQ0QiOiJJIiwiXHUwMENFIjoiSSIsIlx1
MDEyOCI6IkkiLCJcdTAxMkEiOiJJIiwiXHUwMTJDIjoiSSIsIlx1MDE9CjMwIjoiSSIsIlx1MDBD
RiI6IkkiLCJcdTFFMkUiOiJJIiwiXHUxRUM4IjoiSSIsIlx1MDFDRiI6IkkiLCJcdTAyMDgiOiJJ
IiwiXD0KdTAyMEEiOiJJIiwiXHUxRUNBIjoiSSIsIlx1MDEyRSI6IkkiLCJcdTFFMkMiOiJJIiwi
XHUwMTk3IjoiSSIsIlx1MjRCRiI6IkoiPQosIlx1RkYyQSI6IkoiLCJcdTAxMzQiOiJKIiwiXHUw
MjQ4IjoiSiIsIlx1MjRDMCI6IksiLCJcdUZGMkIiOiJLIiwiXHUxRTMwIjo9CiJLIiwiXHUwMUU4
IjoiSyIsIlx1MUUzMiI6IksiLCJcdTAxMzYiOiJLIiwiXHUxRTM0IjoiSyIsIlx1MDE5OCI6Iksi
LCJcdTJDNj0KOSI6IksiLCJcdUE3NDAiOiJLIiwiXHVBNzQyIjoiSyIsIlx1QTc0NCI6IksiLCJc
dUE3QTIiOiJLIiwiXHUyNEMxIjoiTCIsIlx1PQpGRjJDIjoiTCIsIlx1MDEzRiI6IkwiLCJcdTAx
MzkiOiJMIiwiXHUwMTNEIjoiTCIsIlx1MUUzNiI6IkwiLCJcdTFFMzgiOiJMIiw9CiJcdTAxM0Ii
OiJMIiwiXHUxRTNDIjoiTCIsIlx1MUUzQSI6IkwiLCJcdTAxNDEiOiJMIiwiXHUwMjNEIjoiTCIs
Ilx1MkM2MiI6Ij0KTCIsIlx1MkM2MCI6IkwiLCJcdUE3NDgiOiJMIiwiXHVBNzQ2IjoiTCIsIlx1
QTc4MCI6IkwiLCJcdTAxQzciOiJMSiIsIlx1MDFDPQo4IjoiTGoiLCJcdTI0QzIiOiJNIiwiXHVG
RjJEIjoiTSIsIlx1MUUzRSI6Ik0iLCJcdTFFNDAiOiJNIiwiXHUxRTQyIjoiTSIsIlw9CnUyQzZF
IjoiTSIsIlx1MDE5QyI6Ik0iLCJcdTI0QzMiOiJOIiwiXHVGRjJFIjoiTiIsIlx1MDFGOCI6Ik4i
LCJcdTAxNDMiOiJOIj0KLCJcdTAwRDEiOiJOIiwiXHUxRTQ0IjoiTiIsIlx1MDE0NyI6Ik4iLCJc
dTFFNDYiOiJOIiwiXHUwMTQ1IjoiTiIsIlx1MUU0QSI6PQoiTiIsIlx1MUU0OCI6Ik4iLCJcdTAy
MjAiOiJOIiwiXHUwMTlEIjoiTiIsIlx1QTc5MCI6Ik4iLCJcdUE3QTQiOiJOIiwiXHUwMUM9CkEi
OiJOSiIsIlx1MDFDQiI6Ik5qIiwiXHUyNEM0IjoiTyIsIlx1RkYyRiI6Ik8iLCJcdTAwRDIiOiJP
IiwiXHUwMEQzIjoiTyIsIj0KXHUwMEQ0IjoiTyIsIlx1MUVEMiI6Ik8iLCJcdTFFRDAiOiJPIiwi
XHUxRUQ2IjoiTyIsIlx1MUVENCI6Ik8iLCJcdTAwRDUiOiJPPQoiLCJcdTFFNEMiOiJPIiwiXHUw
MjJDIjoiTyIsIlx1MUU0RSI6Ik8iLCJcdTAxNEMiOiJPIiwiXHUxRTUwIjoiTyIsIlx1MUU1MiI9
CjoiTyIsIlx1MDE0RSI6Ik8iLCJcdTAyMkUiOiJPIiwiXHUwMjMwIjoiTyIsIlx1MDBENiI6Ik8i
LCJcdTAyMkEiOiJPIiwiXHUxRT0KQ0UiOiJPIiwiXHUwMTUwIjoiTyIsIlx1MDFEMSI6Ik8iLCJc
dTAyMEMiOiJPIiwiXHUwMjBFIjoiTyIsIlx1MDFBMCI6Ik8iLCJcPQp1MUVEQyI6Ik8iLCJcdTFF
REEiOiJPIiwiXHUxRUUwIjoiTyIsIlx1MUVERSI6Ik8iLCJcdTFFRTIiOiJPIiwiXHUxRUNDIjoi
TyI9CiwiXHUxRUQ4IjoiTyIsIlx1MDFFQSI6Ik8iLCJcdTAxRUMiOiJPIiwiXHUwMEQ4IjoiTyIs
Ilx1MDFGRSI6Ik8iLCJcdTAxODYiOj0KIk8iLCJcdTAxOUYiOiJPIiwiXHVBNzRBIjoiTyIsIlx1
QTc0QyI6Ik8iLCJcdTAxQTIiOiJPSSIsIlx1QTc0RSI6Ik9PIiwiXHUwPQoyMjIiOiJPVSIsIlx1
MjRDNSI6IlAiLCJcdUZGMzAiOiJQIiwiXHUxRTU0IjoiUCIsIlx1MUU1NiI6IlAiLCJcdTAxQTQi
OiJQIiw9CiJcdTJDNjMiOiJQIiwiXHVBNzUwIjoiUCIsIlx1QTc1MiI6IlAiLCJcdUE3NTQiOiJQ
IiwiXHUyNEM2IjoiUSIsIlx1RkYzMSI6Ij0KUSIsIlx1QTc1NiI6IlEiLCJcdUE3NTgiOiJRIiwi
XHUwMjRBIjoiUSIsIlx1MjRDNyI6IlIiLCJcdUZGMzIiOiJSIiwiXHUwMTU0PQoiOiJSIiwiXHUx
RTU4IjoiUiIsIlx1MDE1OCI6IlIiLCJcdTAyMTAiOiJSIiwiXHUwMjEyIjoiUiIsIlx1MUU1QSI6
IlIiLCJcdTE9CkU1QyI6IlIiLCJcdTAxNTYiOiJSIiwiXHUxRTVFIjoiUiIsIlx1MDI0QyI6IlIi
LCJcdTJDNjQiOiJSIiwiXHVBNzVBIjoiUiIsIj0KXHVBN0E2IjoiUiIsIlx1QTc4MiI6IlIiLCJc
dTI0QzgiOiJTIiwiXHVGRjMzIjoiUyIsIlx1MUU5RSI6IlMiLCJcdTAxNUEiOiJTPQoiLCJcdTFF
NjQiOiJTIiwiXHUwMTVDIjoiUyIsIlx1MUU2MCI6IlMiLCJcdTAxNjAiOiJTIiwiXHUxRTY2Ijoi
UyIsIlx1MUU2MiI9CjoiUyIsIlx1MUU2OCI6IlMiLCJcdTAyMTgiOiJTIiwiXHUwMTVFIjoiUyIs
Ilx1MkM3RSI6IlMiLCJcdUE3QTgiOiJTIiwiXHVBNz0KODQiOiJTIiwiXHUyNEM5IjoiVCIsIlx1
RkYzNCI6IlQiLCJcdTFFNkEiOiJUIiwiXHUwMTY0IjoiVCIsIlx1MUU2QyI6IlQiLCJcPQp1MDIx
QSI6IlQiLCJcdTAxNjIiOiJUIiwiXHUxRTcwIjoiVCIsIlx1MUU2RSI6IlQiLCJcdTAxNjYiOiJU
IiwiXHUwMUFDIjoiVCI9CiwiXHUwMUFFIjoiVCIsIlx1MDIzRSI6IlQiLCJcdUE3ODYiOiJUIiwi
XHVBNzI4IjoiVFoiLCJcdTI0Q0EiOiJVIiwiXHVGRjM1Ij0KOiJVIiwiXHUwMEQ5IjoiVSIsIlx1
MDBEQSI6IlUiLCJcdTAwREIiOiJVIiwiXHUwMTY4IjoiVSIsIlx1MUU3OCI6IlUiLCJcdTAxPQo2
QSI6IlUiLCJcdTFFN0EiOiJVIiwiXHUwMTZDIjoiVSIsIlx1MDBEQyI6IlUiLCJcdTAxREIiOiJV
IiwiXHUwMUQ3IjoiVSIsIlw9CnUwMUQ1IjoiVSIsIlx1MDFEOSI6IlUiLCJcdTFFRTYiOiJVIiwi
XHUwMTZFIjoiVSIsIlx1MDE3MCI6IlUiLCJcdTAxRDMiOiJVIj0KLCJcdTAyMTQiOiJVIiwiXHUw
MjE2IjoiVSIsIlx1MDFBRiI6IlUiLCJcdTFFRUEiOiJVIiwiXHUxRUU4IjoiVSIsIlx1MUVFRSI6
PQoiVSIsIlx1MUVFQyI6IlUiLCJcdTFFRjAiOiJVIiwiXHUxRUU0IjoiVSIsIlx1MUU3MiI6IlUi
LCJcdTAxNzIiOiJVIiwiXHUxRTc9CjYiOiJVIiwiXHUxRTc0IjoiVSIsIlx1MDI0NCI6IlUiLCJc
dTI0Q0IiOiJWIiwiXHVGRjM2IjoiViIsIlx1MUU3QyI6IlYiLCJcdT0KMUU3RSI6IlYiLCJcdTAx
QjIiOiJWIiwiXHVBNzVFIjoiViIsIlx1MDI0NSI6IlYiLCJcdUE3NjAiOiJWWSIsIlx1MjRDQyI6
IlciPQosIlx1RkYzNyI6IlciLCJcdTFFODAiOiJXIiwiXHUxRTgyIjoiVyIsIlx1MDE3NCI6Ilci
LCJcdTFFODYiOiJXIiwiXHUxRTg0Ijo9CiJXIiwiXHUxRTg4IjoiVyIsIlx1MkM3MiI6IlciLCJc
dTI0Q0QiOiJYIiwiXHVGRjM4IjoiWCIsIlx1MUU4QSI6IlgiLCJcdTFFOD0KQyI6IlgiLCJcdTI0
Q0UiOiJZIiwiXHVGRjM5IjoiWSIsIlx1MUVGMiI6IlkiLCJcdTAwREQiOiJZIiwiXHUwMTc2Ijoi
WSIsIlx1PQoxRUY4IjoiWSIsIlx1MDIzMiI6IlkiLCJcdTFFOEUiOiJZIiwiXHUwMTc4IjoiWSIs
Ilx1MUVGNiI6IlkiLCJcdTFFRjQiOiJZIiw9CiJcdTAxQjMiOiJZIiwiXHUwMjRFIjoiWSIsIlx1
MUVGRSI6IlkiLCJcdTI0Q0YiOiJaIiwiXHVGRjNBIjoiWiIsIlx1MDE3OSI6Ij0KWiIsIlx1MUU5
MCI6IloiLCJcdTAxN0IiOiJaIiwiXHUwMTdEIjoiWiIsIlx1MUU5MiI6IloiLCJcdTFFOTQiOiJa
IiwiXHUwMUI1PQoiOiJaIiwiXHUwMjI0IjoiWiIsIlx1MkM3RiI6IloiLCJcdTJDNkIiOiJaIiwi
XHVBNzYyIjoiWiIsIlx1MjREMCI6ImEiLCJcdUY9CkY0MSI6ImEiLCJcdTFFOUEiOiJhIiwiXHUw
MEUwIjoiYSIsIlx1MDBFMSI6ImEiLCJcdTAwRTIiOiJhIiwiXHUxRUE3IjoiYSIsIj0KXHUxRUE1
IjoiYSIsIlx1MUVBQiI6ImEiLCJcdTFFQTkiOiJhIiwiXHUwMEUzIjoiYSIsIlx1MDEwMSI6ImEi
LCJcdTAxMDMiOiJhPQoiLCJcdTFFQjEiOiJhIiwiXHUxRUFGIjoiYSIsIlx1MUVCNSI6ImEiLCJc
dTFFQjMiOiJhIiwiXHUwMjI3IjoiYSIsIlx1MDFFMSI9CjoiYSIsIlx1MDBFNCI6ImEiLCJcdTAx
REYiOiJhIiwiXHUxRUEzIjoiYSIsIlx1MDBFNSI6ImEiLCJcdTAxRkIiOiJhIiwiXHUwMT0KQ0Ui
OiJhIiwiXHUwMjAxIjoiYSIsIlx1MDIwMyI6ImEiLCJcdTFFQTEiOiJhIiwiXHUxRUFEIjoiYSIs
Ilx1MUVCNyI6ImEiLCJcPQp1MUUwMSI6ImEiLCJcdTAxMDUiOiJhIiwiXHUyQzY1IjoiYSIsIlx1
MDI1MCI6ImEiLCJcdUE3MzMiOiJhYSIsIlx1MDBFNiI6ImE9CmUiLCJcdTAxRkQiOiJhZSIsIlx1
MDFFMyI6ImFlIiwiXHVBNzM1IjoiYW8iLCJcdUE3MzciOiJhdSIsIlx1QTczOSI6ImF2IiwiXD0K
dUE3M0IiOiJhdiIsIlx1QTczRCI6ImF5IiwiXHUyNEQxIjoiYiIsIlx1RkY0MiI6ImIiLCJcdTFF
MDMiOiJiIiwiXHUxRTA1IjoiPQpiIiwiXHUxRTA3IjoiYiIsIlx1MDE4MCI6ImIiLCJcdTAxODMi
OiJiIiwiXHUwMjUzIjoiYiIsIlx1MjREMiI6ImMiLCJcdUZGNDM9CiI6ImMiLCJcdTAxMDciOiJj
IiwiXHUwMTA5IjoiYyIsIlx1MDEwQiI6ImMiLCJcdTAxMEQiOiJjIiwiXHUwMEU3IjoiYyIsIlx1
MT0KRTA5IjoiYyIsIlx1MDE4OCI6ImMiLCJcdTAyM0MiOiJjIiwiXHVBNzNGIjoiYyIsIlx1MjE4
NCI6ImMiLCJcdTI0RDMiOiJkIiwiPQpcdUZGNDQiOiJkIiwiXHUxRTBCIjoiZCIsIlx1MDEwRiI6
ImQiLCJcdTFFMEQiOiJkIiwiXHUxRTExIjoiZCIsIlx1MUUxMyI6ImQ9CiIsIlx1MUUwRiI6ImQi
LCJcdTAxMTEiOiJkIiwiXHUwMThDIjoiZCIsIlx1MDI1NiI6ImQiLCJcdTAyNTciOiJkIiwiXHVB
NzdBIj0KOiJkIiwiXHUwMUYzIjoiZHoiLCJcdTAxQzYiOiJkeiIsIlx1MjRENCI6ImUiLCJcdUZG
NDUiOiJlIiwiXHUwMEU4IjoiZSIsIlx1PQowMEU5IjoiZSIsIlx1MDBFQSI6ImUiLCJcdTFFQzEi
OiJlIiwiXHUxRUJGIjoiZSIsIlx1MUVDNSI6ImUiLCJcdTFFQzMiOiJlIiw9CiJcdTFFQkQiOiJl
IiwiXHUwMTEzIjoiZSIsIlx1MUUxNSI6ImUiLCJcdTFFMTciOiJlIiwiXHUwMTE1IjoiZSIsIlx1
MDExNyI6Ij0KZSIsIlx1MDBFQiI6ImUiLCJcdTFFQkIiOiJlIiwiXHUwMTFCIjoiZSIsIlx1MDIw
NSI6ImUiLCJcdTAyMDciOiJlIiwiXHUxRUI5PQoiOiJlIiwiXHUxRUM3IjoiZSIsIlx1MDIyOSI6
ImUiLCJcdTFFMUQiOiJlIiwiXHUwMTE5IjoiZSIsIlx1MUUxOSI6ImUiLCJcdTE9CkUxQiI6ImUi
LCJcdTAyNDciOiJlIiwiXHUwMjVCIjoiZSIsIlx1MDFERCI6ImUiLCJcdTI0RDUiOiJmIiwiXHVG
RjQ2IjoiZiIsIj0KXHUxRTFGIjoiZiIsIlx1MDE5MiI6ImYiLCJcdUE3N0MiOiJmIiwiXHUyNEQ2
IjoiZyIsIlx1RkY0NyI6ImciLCJcdTAxRjUiOiJnPQoiLCJcdTAxMUQiOiJnIiwiXHUxRTIxIjoi
ZyIsIlx1MDExRiI6ImciLCJcdTAxMjEiOiJnIiwiXHUwMUU3IjoiZyIsIlx1MDEyMyI9CjoiZyIs
Ilx1MDFFNSI6ImciLCJcdTAyNjAiOiJnIiwiXHVBN0ExIjoiZyIsIlx1MUQ3OSI6ImciLCJcdUE3
N0YiOiJnIiwiXHUyND0KRDciOiJoIiwiXHVGRjQ4IjoiaCIsIlx1MDEyNSI6ImgiLCJcdTFFMjMi
OiJoIiwiXHUxRTI3IjoiaCIsIlx1MDIxRiI6ImgiLCJcPQp1MUUyNSI6ImgiLCJcdTFFMjkiOiJo
IiwiXHUxRTJCIjoiaCIsIlx1MUU5NiI6ImgiLCJcdTAxMjciOiJoIiwiXHUyQzY4IjoiaCI9Ciwi
XHUyQzc2IjoiaCIsIlx1MDI2NSI6ImgiLCJcdTAxOTUiOiJodiIsIlx1MjREOCI6ImkiLCJcdUZG
NDkiOiJpIiwiXHUwMEVDIj0KOiJpIiwiXHUwMEVEIjoiaSIsIlx1MDBFRSI6ImkiLCJcdTAxMjki
OiJpIiwiXHUwMTJCIjoiaSIsIlx1MDEyRCI6ImkiLCJcdTAwPQpFRiI6ImkiLCJcdTFFMkYiOiJp
IiwiXHUxRUM5IjoiaSIsIlx1MDFEMCI6ImkiLCJcdTAyMDkiOiJpIiwiXHUwMjBCIjoiaSIsIlw9
CnUxRUNCIjoiaSIsIlx1MDEyRiI6ImkiLCJcdTFFMkQiOiJpIiwiXHUwMjY4IjoiaSIsIlx1MDEz
MSI6ImkiLCJcdTI0RDkiOiJqIj0KLCJcdUZGNEEiOiJqIiwiXHUwMTM1IjoiaiIsIlx1MDFGMCI6
ImoiLCJcdTAyNDkiOiJqIiwiXHUyNERBIjoiayIsIlx1RkY0QiI6PQoiayIsIlx1MUUzMSI6Imsi
LCJcdTAxRTkiOiJrIiwiXHUxRTMzIjoiayIsIlx1MDEzNyI6ImsiLCJcdTFFMzUiOiJrIiwiXHUw
MTk9CjkiOiJrIiwiXHUyQzZBIjoiayIsIlx1QTc0MSI6ImsiLCJcdUE3NDMiOiJrIiwiXHVBNzQ1
IjoiayIsIlx1QTdBMyI6ImsiLCJcdT0KMjREQiI6ImwiLCJcdUZGNEMiOiJsIiwiXHUwMTQwIjoi
bCIsIlx1MDEzQSI6ImwiLCJcdTAxM0UiOiJsIiwiXHUxRTM3IjoibCIsPQoiXHUxRTM5IjoibCIs
Ilx1MDEzQyI6ImwiLCJcdTFFM0QiOiJsIiwiXHUxRTNCIjoibCIsIlx1MDE3RiI6ImwiLCJcdTAx
NDIiOiI9CmwiLCJcdTAxOUEiOiJsIiwiXHUwMjZCIjoibCIsIlx1MkM2MSI6ImwiLCJcdUE3NDki
OiJsIiwiXHVBNzgxIjoibCIsIlx1QTc0Nz0KIjoibCIsIlx1MDFDOSI6ImxqIiwiXHUyNERDIjoi
bSIsIlx1RkY0RCI6Im0iLCJcdTFFM0YiOiJtIiwiXHUxRTQxIjoibSIsIlx1PQoxRTQzIjoibSIs
Ilx1MDI3MSI6Im0iLCJcdTAyNkYiOiJtIiwiXHUyNEREIjoibiIsIlx1RkY0RSI6Im4iLCJcdTAx
RjkiOiJuIiw9CiJcdTAxNDQiOiJuIiwiXHUwMEYxIjoibiIsIlx1MUU0NSI6Im4iLCJcdTAxNDgi
OiJuIiwiXHUxRTQ3IjoibiIsIlx1MDE0NiI6Ij0KbiIsIlx1MUU0QiI6Im4iLCJcdTFFNDkiOiJu
IiwiXHUwMTlFIjoibiIsIlx1MDI3MiI6Im4iLCJcdTAxNDkiOiJuIiwiXHVBNzkxPQoiOiJuIiwi
XHVBN0E1IjoibiIsIlx1MDFDQyI6Im5qIiwiXHUyNERFIjoibyIsIlx1RkY0RiI6Im8iLCJcdTAw
RjIiOiJvIiwiXHU9CjAwRjMiOiJvIiwiXHUwMEY0IjoibyIsIlx1MUVEMyI6Im8iLCJcdTFFRDEi
OiJvIiwiXHUxRUQ3IjoibyIsIlx1MUVENSI6Im8iLD0KIlx1MDBGNSI6Im8iLCJcdTFFNEQiOiJv
IiwiXHUwMjJEIjoibyIsIlx1MUU0RiI6Im8iLCJcdTAxNEQiOiJvIiwiXHUxRTUxIjoiPQpvIiwi
XHUxRTUzIjoibyIsIlx1MDE0RiI6Im8iLCJcdTAyMkYiOiJvIiwiXHUwMjMxIjoibyIsIlx1MDBG
NiI6Im8iLCJcdTAyMkI9CiI6Im8iLCJcdTFFQ0YiOiJvIiwiXHUwMTUxIjoibyIsIlx1MDFEMiI6
Im8iLCJcdTAyMEQiOiJvIiwiXHUwMjBGIjoibyIsIlx1MD0KMUExIjoibyIsIlx1MUVERCI6Im8i
LCJcdTFFREIiOiJvIiwiXHUxRUUxIjoibyIsIlx1MUVERiI6Im8iLCJcdTFFRTMiOiJvIiwiPQpc
dTFFQ0QiOiJvIiwiXHUxRUQ5IjoibyIsIlx1MDFFQiI6Im8iLCJcdTAxRUQiOiJvIiwiXHUwMEY4
IjoibyIsIlx1MDFGRiI6Im89CiIsIlx1MDI1NCI6Im8iLCJcdUE3NEIiOiJvIiwiXHVBNzREIjoi
byIsIlx1MDI3NSI6Im8iLCJcdTAxQTMiOiJvaSIsIlx1MDIyMz0KIjoib3UiLCJcdUE3NEYiOiJv
byIsIlx1MjRERiI6InAiLCJcdUZGNTAiOiJwIiwiXHUxRTU1IjoicCIsIlx1MUU1NyI6InAiLCJc
PQp1MDFBNSI6InAiLCJcdTFEN0QiOiJwIiwiXHVBNzUxIjoicCIsIlx1QTc1MyI6InAiLCJcdUE3
NTUiOiJwIiwiXHUyNEUwIjoicSI9CiwiXHVGRjUxIjoicSIsIlx1MDI0QiI6InEiLCJcdUE3NTci
OiJxIiwiXHVBNzU5IjoicSIsIlx1MjRFMSI6InIiLCJcdUZGNTIiOj0KInIiLCJcdTAxNTUiOiJy
IiwiXHUxRTU5IjoiciIsIlx1MDE1OSI6InIiLCJcdTAyMTEiOiJyIiwiXHUwMjEzIjoiciIsIlx1
MUU1PQpCIjoiciIsIlx1MUU1RCI6InIiLCJcdTAxNTciOiJyIiwiXHUxRTVGIjoiciIsIlx1MDI0
RCI6InIiLCJcdTAyN0QiOiJyIiwiXHU9CkE3NUIiOiJyIiwiXHVBN0E3IjoiciIsIlx1QTc4MyI6
InIiLCJcdTI0RTIiOiJzIiwiXHVGRjUzIjoicyIsIlx1MDBERiI6InMiLD0KIlx1MDE1QiI6InMi
LCJcdTFFNjUiOiJzIiwiXHUwMTVEIjoicyIsIlx1MUU2MSI6InMiLCJcdTAxNjEiOiJzIiwiXHUx
RTY3IjoiPQpzIiwiXHUxRTYzIjoicyIsIlx1MUU2OSI6InMiLCJcdTAyMTkiOiJzIiwiXHUwMTVG
IjoicyIsIlx1MDIzRiI6InMiLCJcdUE3QTk9CiI6InMiLCJcdUE3ODUiOiJzIiwiXHUxRTlCIjoi
cyIsIlx1MjRFMyI6InQiLCJcdUZGNTQiOiJ0IiwiXHUxRTZCIjoidCIsIlx1MT0KRTk3IjoidCIs
Ilx1MDE2NSI6InQiLCJcdTFFNkQiOiJ0IiwiXHUwMjFCIjoidCIsIlx1MDE2MyI6InQiLCJcdTFF
NzEiOiJ0IiwiPQpcdTFFNkYiOiJ0IiwiXHUwMTY3IjoidCIsIlx1MDFBRCI6InQiLCJcdTAyODgi
OiJ0IiwiXHUyQzY2IjoidCIsIlx1QTc4NyI6InQ9CiIsIlx1QTcyOSI6InR6IiwiXHUyNEU0Ijoi
dSIsIlx1RkY1NSI6InUiLCJcdTAwRjkiOiJ1IiwiXHUwMEZBIjoidSIsIlx1MDBGQj0KIjoidSIs
Ilx1MDE2OSI6InUiLCJcdTFFNzkiOiJ1IiwiXHUwMTZCIjoidSIsIlx1MUU3QiI6InUiLCJcdTAx
NkQiOiJ1IiwiXHUwPQowRkMiOiJ1IiwiXHUwMURDIjoidSIsIlx1MDFEOCI6InUiLCJcdTAxRDYi
OiJ1IiwiXHUwMURBIjoidSIsIlx1MUVFNyI6InUiLCI9Clx1MDE2RiI6InUiLCJcdTAxNzEiOiJ1
IiwiXHUwMUQ0IjoidSIsIlx1MDIxNSI6InUiLCJcdTAyMTciOiJ1IiwiXHUwMUIwIjoidT0KIiwi
XHUxRUVCIjoidSIsIlx1MUVFOSI6InUiLCJcdTFFRUYiOiJ1IiwiXHUxRUVEIjoidSIsIlx1MUVG
MSI6InUiLCJcdTFFRTUiPQo6InUiLCJcdTFFNzMiOiJ1IiwiXHUwMTczIjoidSIsIlx1MUU3NyI6
InUiLCJcdTFFNzUiOiJ1IiwiXHUwMjg5IjoidSIsIlx1MjQ9CkU1IjoidiIsIlx1RkY1NiI6InYi
LCJcdTFFN0QiOiJ2IiwiXHUxRTdGIjoidiIsIlx1MDI4QiI6InYiLCJcdUE3NUYiOiJ2IiwiXD0K
dTAyOEMiOiJ2IiwiXHVBNzYxIjoidnkiLCJcdTI0RTYiOiJ3IiwiXHVGRjU3IjoidyIsIlx1MUU4
MSI6InciLCJcdTFFODMiOiJ3PQoiLCJcdTAxNzUiOiJ3IiwiXHUxRTg3IjoidyIsIlx1MUU4NSI6
InciLCJcdTFFOTgiOiJ3IiwiXHUxRTg5IjoidyIsIlx1MkM3MyI9CjoidyIsIlx1MjRFNyI6Ingi
LCJcdUZGNTgiOiJ4IiwiXHUxRThCIjoieCIsIlx1MUU4RCI6IngiLCJcdTI0RTgiOiJ5IiwiXHVG
Rj0KNTkiOiJ5IiwiXHUxRUYzIjoieSIsIlx1MDBGRCI6InkiLCJcdTAxNzciOiJ5IiwiXHUxRUY5
IjoieSIsIlx1MDIzMyI6InkiLCJcPQp1MUU4RiI6InkiLCJcdTAwRkYiOiJ5IiwiXHUxRUY3Ijoi
eSIsIlx1MUU5OSI6InkiLCJcdTFFRjUiOiJ5IiwiXHUwMUI0IjoieSI9CiwiXHUwMjRGIjoieSIs
Ilx1MUVGRiI6InkiLCJcdTI0RTkiOiJ6IiwiXHVGRjVBIjoieiIsIlx1MDE3QSI6InoiLCJcdTFF
OTEiOj0KInoiLCJcdTAxN0MiOiJ6IiwiXHUwMTdFIjoieiIsIlx1MUU5MyI6InoiLCJcdTFFOTUi
OiJ6IiwiXHUwMUI2IjoieiIsIlx1MDIyPQo1IjoieiIsIlx1MDI0MCI6InoiLCJcdTJDNkMiOiJ6
IiwiXHVBNzYzIjoieiJ9OworICAgIERJQUNSSVRJQ1MgPTNEIHsiXHUyNEI2IjoiQSIsIlx1RkYy
MSI6IkEiLCJcdTAwQzAiOiJBIiwiXHUwMEMxIjoiQSIsIlw9CnUwMEMyIjoiQSIsIlx1MUVBNiI6
IkEiLCJcdTFFQTQiOiJBIiwiXHUxRUFBIjoiQSIsIlx1MUVBOCI6IkEiLCJcdTAwQzMiOiJBIj0K
LCJcdTAxMDAiOiJBIiwiXHUwMTAyIjoiQSIsIlx1MUVCMCI6IkEiLCJcdTFFQUUiOiJBIiwiXHUx
RUI0IjoiQSIsIlx1MUVCMiI6PQoiQSIsIlx1MDIyNiI6IkEiLCJcdTAxRTAiOiJBIiwiXHUwMEM0
IjoiQSIsIlx1MDFERSI6IkEiLCJcdTFFQTIiOiJBIiwiXHUwMEM9CjUiOiJBIiwiXHUwMUZBIjoi
QSIsIlx1MDFDRCI6IkEiLCJcdTAyMDAiOiJBIiwiXHUwMjAyIjoiQSIsIlx1MUVBMCI6IkEiLCJc
dT0KMUVBQyI6IkEiLCJcdTFFQjYiOiJBIiwiXHUxRTAwIjoiQSIsIlx1MDEwNCI6IkEiLCJcdTAy
M0EiOiJBIiwiXHUyQzZGIjoiQSIsPQoiXHVBNzMyIjoiQUEiLCJcdTAwQzYiOiJBRSIsIlx1MDFG
QyI6IkFFIiwiXHUwMUUyIjoiQUUiLCJcdUE3MzQiOiJBTyIsIlx1QTc9CjM2IjoiQVUiLCJcdUE3
MzgiOiJBViIsIlx1QTczQSI6IkFWIiwiXHVBNzNDIjoiQVkiLCJcdTI0QjciOiJCIiwiXHVGRjIy
IjoiQj0KIiwiXHUxRTAyIjoiQiIsIlx1MUUwNCI6IkIiLCJcdTFFMDYiOiJCIiwiXHUwMjQzIjoi
QiIsIlx1MDE4MiI6IkIiLCJcdTAxODEiPQo6IkIiLCJcdTI0QjgiOiJDIiwiXHVGRjIzIjoiQyIs
Ilx1MDEwNiI6IkMiLCJcdTAxMDgiOiJDIiwiXHUwMTBBIjoiQyIsIlx1MDE9CjBDIjoiQyIsIlx1
MDBDNyI6IkMiLCJcdTFFMDgiOiJDIiwiXHUwMTg3IjoiQyIsIlx1MDIzQiI6IkMiLCJcdUE3M0Ui
OiJDIiwiXD0KdTI0QjkiOiJEIiwiXHVGRjI0IjoiRCIsIlx1MUUwQSI6IkQiLCJcdTAxMEUiOiJE
IiwiXHUxRTBDIjoiRCIsIlx1MUUxMCI6IkQiPQosIlx1MUUxMiI6IkQiLCJcdTFFMEUiOiJEIiwi
XHUwMTEwIjoiRCIsIlx1MDE4QiI6IkQiLCJcdTAxOEEiOiJEIiwiXHUwMTg5Ijo9CiJEIiwiXHVB
Nzc5IjoiRCIsIlx1MDFGMSI6IkRaIiwiXHUwMUM0IjoiRFoiLCJcdTAxRjIiOiJEeiIsIlx1MDFD
NSI6IkR6IiwiXD0KdTI0QkEiOiJFIiwiXHVGRjI1IjoiRSIsIlx1MDBDOCI6IkUiLCJcdTAwQzki
OiJFIiwiXHUwMENBIjoiRSIsIlx1MUVDMCI6IkUiPQosIlx1MUVCRSI6IkUiLCJcdTFFQzQiOiJF
IiwiXHUxRUMyIjoiRSIsIlx1MUVCQyI6IkUiLCJcdTAxMTIiOiJFIiwiXHUxRTE0Ijo9CiJFIiwi
XHUxRTE2IjoiRSIsIlx1MDExNCI6IkUiLCJcdTAxMTYiOiJFIiwiXHUwMENCIjoiRSIsIlx1MUVC
QSI6IkUiLCJcdTAxMT0KQSI6IkUiLCJcdTAyMDQiOiJFIiwiXHUwMjA2IjoiRSIsIlx1MUVCOCI6
IkUiLCJcdTFFQzYiOiJFIiwiXHUwMjI4IjoiRSIsIlx1PQoxRTFDIjoiRSIsIlx1MDExOCI6IkUi
LCJcdTFFMTgiOiJFIiwiXHUxRTFBIjoiRSIsIlx1MDE5MCI6IkUiLCJcdTAxOEUiOiJFIiw9CiJc
dTI0QkIiOiJGIiwiXHVGRjI2IjoiRiIsIlx1MUUxRSI6IkYiLCJcdTAxOTEiOiJGIiwiXHVBNzdC
IjoiRiIsIlx1MjRCQyI6Ij0KRyIsIlx1RkYyNyI6IkciLCJcdTAxRjQiOiJHIiwiXHUwMTFDIjoi
RyIsIlx1MUUyMCI6IkciLCJcdTAxMUUiOiJHIiwiXHUwMTIwPQoiOiJHIiwiXHUwMUU2IjoiRyIs
Ilx1MDEyMiI6IkciLCJcdTAxRTQiOiJHIiwiXHUwMTkzIjoiRyIsIlx1QTdBMCI6IkciLCJcdUE9
Cjc3RCI6IkciLCJcdUE3N0UiOiJHIiwiXHUyNEJEIjoiSCIsIlx1RkYyOCI6IkgiLCJcdTAxMjQi
OiJIIiwiXHUxRTIyIjoiSCIsIj0KXHUxRTI2IjoiSCIsIlx1MDIxRSI6IkgiLCJcdTFFMjQiOiJI
IiwiXHUxRTI4IjoiSCIsIlx1MUUyQSI6IkgiLCJcdTAxMjYiOiJIPQoiLCJcdTJDNjciOiJIIiwi
XHUyQzc1IjoiSCIsIlx1QTc4RCI6IkgiLCJcdTI0QkUiOiJJIiwiXHVGRjI5IjoiSSIsIlx1MDBD
QyI9CjoiSSIsIlx1MDBDRCI6IkkiLCJcdTAwQ0UiOiJJIiwiXHUwMTI4IjoiSSIsIlx1MDEyQSI6
IkkiLCJcdTAxMkMiOiJJIiwiXHUwMT0KMzAiOiJJIiwiXHUwMENGIjoiSSIsIlx1MUUyRSI6Ikki
LCJcdTFFQzgiOiJJIiwiXHUwMUNGIjoiSSIsIlx1MDIwOCI6IkkiLCJcPQp1MDIwQSI6IkkiLCJc
dTFFQ0EiOiJJIiwiXHUwMTJFIjoiSSIsIlx1MUUyQyI6IkkiLCJcdTAxOTciOiJJIiwiXHUyNEJG
IjoiSiI9CiwiXHVGRjJBIjoiSiIsIlx1MDEzNCI6IkoiLCJcdTAyNDgiOiJKIiwiXHUyNEMwIjoi
SyIsIlx1RkYyQiI6IksiLCJcdTFFMzAiOj0KIksiLCJcdTAxRTgiOiJLIiwiXHUxRTMyIjoiSyIs
Ilx1MDEzNiI6IksiLCJcdTFFMzQiOiJLIiwiXHUwMTk4IjoiSyIsIlx1MkM2PQo5IjoiSyIsIlx1
QTc0MCI6IksiLCJcdUE3NDIiOiJLIiwiXHVBNzQ0IjoiSyIsIlx1QTdBMiI6IksiLCJcdTI0QzEi
OiJMIiwiXHU9CkZGMkMiOiJMIiwiXHUwMTNGIjoiTCIsIlx1MDEzOSI6IkwiLCJcdTAxM0QiOiJM
IiwiXHUxRTM2IjoiTCIsIlx1MUUzOCI6IkwiLD0KIlx1MDEzQiI6IkwiLCJcdTFFM0MiOiJMIiwi
XHUxRTNBIjoiTCIsIlx1MDE0MSI6IkwiLCJcdTAyM0QiOiJMIiwiXHUyQzYyIjoiPQpMIiwiXHUy
QzYwIjoiTCIsIlx1QTc0OCI6IkwiLCJcdUE3NDYiOiJMIiwiXHVBNzgwIjoiTCIsIlx1MDFDNyI6
IkxKIiwiXHUwMUM9CjgiOiJMaiIsIlx1MjRDMiI6Ik0iLCJcdUZGMkQiOiJNIiwiXHUxRTNFIjoi
TSIsIlx1MUU0MCI6Ik0iLCJcdTFFNDIiOiJNIiwiXD0KdTJDNkUiOiJNIiwiXHUwMTlDIjoiTSIs
Ilx1MjRDMyI6Ik4iLCJcdUZGMkUiOiJOIiwiXHUwMUY4IjoiTiIsIlx1MDE0MyI6Ik4iPQosIlx1
MDBEMSI6Ik4iLCJcdTFFNDQiOiJOIiwiXHUwMTQ3IjoiTiIsIlx1MUU0NiI6Ik4iLCJcdTAxNDUi
OiJOIiwiXHUxRTRBIjo9CiJOIiwiXHUxRTQ4IjoiTiIsIlx1MDIyMCI6Ik4iLCJcdTAxOUQiOiJO
IiwiXHVBNzkwIjoiTiIsIlx1QTdBNCI6Ik4iLCJcdTAxQz0KQSI6Ik5KIiwiXHUwMUNCIjoiTmoi
LCJcdTI0QzQiOiJPIiwiXHVGRjJGIjoiTyIsIlx1MDBEMiI6Ik8iLCJcdTAwRDMiOiJPIiwiPQpc
dTAwRDQiOiJPIiwiXHUxRUQyIjoiTyIsIlx1MUVEMCI6Ik8iLCJcdTFFRDYiOiJPIiwiXHUxRUQ0
IjoiTyIsIlx1MDBENSI6Ik89CiIsIlx1MUU0QyI6Ik8iLCJcdTAyMkMiOiJPIiwiXHUxRTRFIjoi
TyIsIlx1MDE0QyI6Ik8iLCJcdTFFNTAiOiJPIiwiXHUxRTUyIj0KOiJPIiwiXHUwMTRFIjoiTyIs
Ilx1MDIyRSI6Ik8iLCJcdTAyMzAiOiJPIiwiXHUwMEQ2IjoiTyIsIlx1MDIyQSI6Ik8iLCJcdTFF
PQpDRSI6Ik8iLCJcdTAxNTAiOiJPIiwiXHUwMUQxIjoiTyIsIlx1MDIwQyI6Ik8iLCJcdTAyMEUi
OiJPIiwiXHUwMUEwIjoiTyIsIlw9CnUxRURDIjoiTyIsIlx1MUVEQSI6Ik8iLCJcdTFFRTAiOiJP
IiwiXHUxRURFIjoiTyIsIlx1MUVFMiI6Ik8iLCJcdTFFQ0MiOiJPIj0KLCJcdTFFRDgiOiJPIiwi
XHUwMUVBIjoiTyIsIlx1MDFFQyI6Ik8iLCJcdTAwRDgiOiJPIiwiXHUwMUZFIjoiTyIsIlx1MDE4
NiI6PQoiTyIsIlx1MDE5RiI6Ik8iLCJcdUE3NEEiOiJPIiwiXHVBNzRDIjoiTyIsIlx1MDFBMiI6
Ik9JIiwiXHVBNzRFIjoiT08iLCJcdTA9CjIyMiI6Ik9VIiwiXHUyNEM1IjoiUCIsIlx1RkYzMCI6
IlAiLCJcdTFFNTQiOiJQIiwiXHUxRTU2IjoiUCIsIlx1MDFBNCI6IlAiLD0KIlx1MkM2MyI6IlAi
LCJcdUE3NTAiOiJQIiwiXHVBNzUyIjoiUCIsIlx1QTc1NCI6IlAiLCJcdTI0QzYiOiJRIiwiXHVG
RjMxIjoiPQpRIiwiXHVBNzU2IjoiUSIsIlx1QTc1OCI6IlEiLCJcdTAyNEEiOiJRIiwiXHUyNEM3
IjoiUiIsIlx1RkYzMiI6IlIiLCJcdTAxNTQ9CiI6IlIiLCJcdTFFNTgiOiJSIiwiXHUwMTU4Ijoi
UiIsIlx1MDIxMCI6IlIiLCJcdTAyMTIiOiJSIiwiXHUxRTVBIjoiUiIsIlx1MT0KRTVDIjoiUiIs
Ilx1MDE1NiI6IlIiLCJcdTFFNUUiOiJSIiwiXHUwMjRDIjoiUiIsIlx1MkM2NCI6IlIiLCJcdUE3
NUEiOiJSIiwiPQpcdUE3QTYiOiJSIiwiXHVBNzgyIjoiUiIsIlx1MjRDOCI6IlMiLCJcdUZGMzMi
OiJTIiwiXHUxRTlFIjoiUyIsIlx1MDE1QSI6IlM9CiIsIlx1MUU2NCI6IlMiLCJcdTAxNUMiOiJT
IiwiXHUxRTYwIjoiUyIsIlx1MDE2MCI6IlMiLCJcdTFFNjYiOiJTIiwiXHUxRTYyIj0KOiJTIiwi
XHUxRTY4IjoiUyIsIlx1MDIxOCI6IlMiLCJcdTAxNUUiOiJTIiwiXHUyQzdFIjoiUyIsIlx1QTdB
OCI6IlMiLCJcdUE3PQo4NCI6IlMiLCJcdTI0QzkiOiJUIiwiXHVGRjM0IjoiVCIsIlx1MUU2QSI6
IlQiLCJcdTAxNjQiOiJUIiwiXHUxRTZDIjoiVCIsIlw9CnUwMjFBIjoiVCIsIlx1MDE2MiI6IlQi
LCJcdTFFNzAiOiJUIiwiXHUxRTZFIjoiVCIsIlx1MDE2NiI6IlQiLCJcdTAxQUMiOiJUIj0KLCJc
dTAxQUUiOiJUIiwiXHUwMjNFIjoiVCIsIlx1QTc4NiI6IlQiLCJcdUE3MjgiOiJUWiIsIlx1MjRD
QSI6IlUiLCJcdUZGMzUiPQo6IlUiLCJcdTAwRDkiOiJVIiwiXHUwMERBIjoiVSIsIlx1MDBEQiI6
IlUiLCJcdTAxNjgiOiJVIiwiXHUxRTc4IjoiVSIsIlx1MDE9CjZBIjoiVSIsIlx1MUU3QSI6IlUi
LCJcdTAxNkMiOiJVIiwiXHUwMERDIjoiVSIsIlx1MDFEQiI6IlUiLCJcdTAxRDciOiJVIiwiXD0K
dTAxRDUiOiJVIiwiXHUwMUQ5IjoiVSIsIlx1MUVFNiI6IlUiLCJcdTAxNkUiOiJVIiwiXHUwMTcw
IjoiVSIsIlx1MDFEMyI6IlUiPQosIlx1MDIxNCI6IlUiLCJcdTAyMTYiOiJVIiwiXHUwMUFGIjoi
VSIsIlx1MUVFQSI6IlUiLCJcdTFFRTgiOiJVIiwiXHUxRUVFIjo9CiJVIiwiXHUxRUVDIjoiVSIs
Ilx1MUVGMCI6IlUiLCJcdTFFRTQiOiJVIiwiXHUxRTcyIjoiVSIsIlx1MDE3MiI6IlUiLCJcdTFF
Nz0KNiI6IlUiLCJcdTFFNzQiOiJVIiwiXHUwMjQ0IjoiVSIsIlx1MjRDQiI6IlYiLCJcdUZGMzYi
OiJWIiwiXHUxRTdDIjoiViIsIlx1PQoxRTdFIjoiViIsIlx1MDFCMiI6IlYiLCJcdUE3NUUiOiJW
IiwiXHUwMjQ1IjoiViIsIlx1QTc2MCI6IlZZIiwiXHUyNENDIjoiVyI9CiwiXHVGRjM3IjoiVyIs
Ilx1MUU4MCI6IlciLCJcdTFFODIiOiJXIiwiXHUwMTc0IjoiVyIsIlx1MUU4NiI6IlciLCJcdTFF
ODQiOj0KIlciLCJcdTFFODgiOiJXIiwiXHUyQzcyIjoiVyIsIlx1MjRDRCI6IlgiLCJcdUZGMzgi
OiJYIiwiXHUxRThBIjoiWCIsIlx1MUU4PQpDIjoiWCIsIlx1MjRDRSI6IlkiLCJcdUZGMzkiOiJZ
IiwiXHUxRUYyIjoiWSIsIlx1MDBERCI6IlkiLCJcdTAxNzYiOiJZIiwiXHU9CjFFRjgiOiJZIiwi
XHUwMjMyIjoiWSIsIlx1MUU4RSI6IlkiLCJcdTAxNzgiOiJZIiwiXHUxRUY2IjoiWSIsIlx1MUVG
NCI6IlkiLD0KIlx1MDFCMyI6IlkiLCJcdTAyNEUiOiJZIiwiXHUxRUZFIjoiWSIsIlx1MjRDRiI6
IloiLCJcdUZGM0EiOiJaIiwiXHUwMTc5IjoiPQpaIiwiXHUxRTkwIjoiWiIsIlx1MDE3QiI6Iloi
LCJcdTAxN0QiOiJaIiwiXHUxRTkyIjoiWiIsIlx1MUU5NCI6IloiLCJcdTAxQjU9CiI6IloiLCJc
dTAyMjQiOiJaIiwiXHUyQzdGIjoiWiIsIlx1MkM2QiI6IloiLCJcdUE3NjIiOiJaIiwiXHUyNEQw
IjoiYSIsIlx1Rj0KRjQxIjoiYSIsIlx1MUU5QSI6ImEiLCJcdTAwRTAiOiJhIiwiXHUwMEUxIjoi
YSIsIlx1MDBFMiI6ImEiLCJcdTFFQTciOiJhIiwiPQpcdTFFQTUiOiJhIiwiXHUxRUFCIjoiYSIs
Ilx1MUVBOSI6ImEiLCJcdTAwRTMiOiJhIiwiXHUwMTAxIjoiYSIsIlx1MDEwMyI6ImE9CiIsIlx1
MUVCMSI6ImEiLCJcdTFFQUYiOiJhIiwiXHUxRUI1IjoiYSIsIlx1MUVCMyI6ImEiLCJcdTAyMjci
OiJhIiwiXHUwMUUxIj0KOiJhIiwiXHUwMEU0IjoiYSIsIlx1MDFERiI6ImEiLCJcdTFFQTMiOiJh
IiwiXHUwMEU1IjoiYSIsIlx1MDFGQiI6ImEiLCJcdTAxPQpDRSI6ImEiLCJcdTAyMDEiOiJhIiwi
XHUwMjAzIjoiYSIsIlx1MUVBMSI6ImEiLCJcdTFFQUQiOiJhIiwiXHUxRUI3IjoiYSIsIlw9CnUx
RTAxIjoiYSIsIlx1MDEwNSI6ImEiLCJcdTJDNjUiOiJhIiwiXHUwMjUwIjoiYSIsIlx1QTczMyI6
ImFhIiwiXHUwMEU2IjoiYT0KZSIsIlx1MDFGRCI6ImFlIiwiXHUwMUUzIjoiYWUiLCJcdUE3MzUi
OiJhbyIsIlx1QTczNyI6ImF1IiwiXHVBNzM5IjoiYXYiLCJcPQp1QTczQiI6ImF2IiwiXHVBNzNE
IjoiYXkiLCJcdTI0RDEiOiJiIiwiXHVGRjQyIjoiYiIsIlx1MUUwMyI6ImIiLCJcdTFFMDUiOiI9
CmIiLCJcdTFFMDciOiJiIiwiXHUwMTgwIjoiYiIsIlx1MDE4MyI6ImIiLCJcdTAyNTMiOiJiIiwi
XHUyNEQyIjoiYyIsIlx1RkY0Mz0KIjoiYyIsIlx1MDEwNyI6ImMiLCJcdTAxMDkiOiJjIiwiXHUw
MTBCIjoiYyIsIlx1MDEwRCI6ImMiLCJcdTAwRTciOiJjIiwiXHUxPQpFMDkiOiJjIiwiXHUwMTg4
IjoiYyIsIlx1MDIzQyI6ImMiLCJcdUE3M0YiOiJjIiwiXHUyMTg0IjoiYyIsIlx1MjREMyI6ImQi
LCI9Clx1RkY0NCI6ImQiLCJcdTFFMEIiOiJkIiwiXHUwMTBGIjoiZCIsIlx1MUUwRCI6ImQiLCJc
dTFFMTEiOiJkIiwiXHUxRTEzIjoiZD0KIiwiXHUxRTBGIjoiZCIsIlx1MDExMSI6ImQiLCJcdTAx
OEMiOiJkIiwiXHUwMjU2IjoiZCIsIlx1MDI1NyI6ImQiLCJcdUE3N0EiPQo6ImQiLCJcdTAxRjMi
OiJkeiIsIlx1MDFDNiI6ImR6IiwiXHUyNEQ0IjoiZSIsIlx1RkY0NSI6ImUiLCJcdTAwRTgiOiJl
IiwiXHU9CjAwRTkiOiJlIiwiXHUwMEVBIjoiZSIsIlx1MUVDMSI6ImUiLCJcdTFFQkYiOiJlIiwi
XHUxRUM1IjoiZSIsIlx1MUVDMyI6ImUiLD0KIlx1MUVCRCI6ImUiLCJcdTAxMTMiOiJlIiwiXHUx
RTE1IjoiZSIsIlx1MUUxNyI6ImUiLCJcdTAxMTUiOiJlIiwiXHUwMTE3IjoiPQplIiwiXHUwMEVC
IjoiZSIsIlx1MUVCQiI6ImUiLCJcdTAxMUIiOiJlIiwiXHUwMjA1IjoiZSIsIlx1MDIwNyI6ImUi
LCJcdTFFQjk9CiI6ImUiLCJcdTFFQzciOiJlIiwiXHUwMjI5IjoiZSIsIlx1MUUxRCI6ImUiLCJc
dTAxMTkiOiJlIiwiXHUxRTE5IjoiZSIsIlx1MT0KRTFCIjoiZSIsIlx1MDI0NyI6ImUiLCJcdTAy
NUIiOiJlIiwiXHUwMUREIjoiZSIsIlx1MjRENSI6ImYiLCJcdUZGNDYiOiJmIiwiPQpcdTFFMUYi
OiJmIiwiXHUwMTkyIjoiZiIsIlx1QTc3QyI6ImYiLCJcdTI0RDYiOiJnIiwiXHVGRjQ3IjoiZyIs
Ilx1MDFGNSI6Imc9CiIsIlx1MDExRCI6ImciLCJcdTFFMjEiOiJnIiwiXHUwMTFGIjoiZyIsIlx1
MDEyMSI6ImciLCJcdTAxRTciOiJnIiwiXHUwMTIzIj0KOiJnIiwiXHUwMUU1IjoiZyIsIlx1MDI2
MCI6ImciLCJcdUE3QTEiOiJnIiwiXHUxRDc5IjoiZyIsIlx1QTc3RiI6ImciLCJcdTI0PQpENyI6
ImgiLCJcdUZGNDgiOiJoIiwiXHUwMTI1IjoiaCIsIlx1MUUyMyI6ImgiLCJcdTFFMjciOiJoIiwi
XHUwMjFGIjoiaCIsIlw9CnUxRTI1IjoiaCIsIlx1MUUyOSI6ImgiLCJcdTFFMkIiOiJoIiwiXHUx
RTk2IjoiaCIsIlx1MDEyNyI6ImgiLCJcdTJDNjgiOiJoIj0KLCJcdTJDNzYiOiJoIiwiXHUwMjY1
IjoiaCIsIlx1MDE5NSI6Imh2IiwiXHUyNEQ4IjoiaSIsIlx1RkY0OSI6ImkiLCJcdTAwRUMiPQo6
ImkiLCJcdTAwRUQiOiJpIiwiXHUwMEVFIjoiaSIsIlx1MDEyOSI6ImkiLCJcdTAxMkIiOiJpIiwi
XHUwMTJEIjoiaSIsIlx1MDA9CkVGIjoiaSIsIlx1MUUyRiI6ImkiLCJcdTFFQzkiOiJpIiwiXHUw
MUQwIjoiaSIsIlx1MDIwOSI6ImkiLCJcdTAyMEIiOiJpIiwiXD0KdTFFQ0IiOiJpIiwiXHUwMTJG
IjoiaSIsIlx1MUUyRCI6ImkiLCJcdTAyNjgiOiJpIiwiXHUwMTMxIjoiaSIsIlx1MjREOSI6Imoi
PQosIlx1RkY0QSI6ImoiLCJcdTAxMzUiOiJqIiwiXHUwMUYwIjoiaiIsIlx1MDI0OSI6ImoiLCJc
dTI0REEiOiJrIiwiXHVGRjRCIjo9CiJrIiwiXHUxRTMxIjoiayIsIlx1MDFFOSI6ImsiLCJcdTFF
MzMiOiJrIiwiXHUwMTM3IjoiayIsIlx1MUUzNSI6ImsiLCJcdTAxOT0KOSI6ImsiLCJcdTJDNkEi
OiJrIiwiXHVBNzQxIjoiayIsIlx1QTc0MyI6ImsiLCJcdUE3NDUiOiJrIiwiXHVBN0EzIjoiayIs
Ilx1PQoyNERCIjoibCIsIlx1RkY0QyI6ImwiLCJcdTAxNDAiOiJsIiwiXHUwMTNBIjoibCIsIlx1
MDEzRSI6ImwiLCJcdTFFMzciOiJsIiw9CiJcdTFFMzkiOiJsIiwiXHUwMTNDIjoibCIsIlx1MUUz
RCI6ImwiLCJcdTFFM0IiOiJsIiwiXHUwMTdGIjoibCIsIlx1MDE0MiI6Ij0KbCIsIlx1MDE5QSI6
ImwiLCJcdTAyNkIiOiJsIiwiXHUyQzYxIjoibCIsIlx1QTc0OSI6ImwiLCJcdUE3ODEiOiJsIiwi
XHVBNzQ3PQoiOiJsIiwiXHUwMUM5IjoibGoiLCJcdTI0REMiOiJtIiwiXHVGRjREIjoibSIsIlx1
MUUzRiI6Im0iLCJcdTFFNDEiOiJtIiwiXHU9CjFFNDMiOiJtIiwiXHUwMjcxIjoibSIsIlx1MDI2
RiI6Im0iLCJcdTI0REQiOiJuIiwiXHVGRjRFIjoibiIsIlx1MDFGOSI6Im4iLD0KIlx1MDE0NCI6
Im4iLCJcdTAwRjEiOiJuIiwiXHUxRTQ1IjoibiIsIlx1MDE0OCI6Im4iLCJcdTFFNDciOiJuIiwi
XHUwMTQ2IjoiPQpuIiwiXHUxRTRCIjoibiIsIlx1MUU0OSI6Im4iLCJcdTAxOUUiOiJuIiwiXHUw
MjcyIjoibiIsIlx1MDE0OSI6Im4iLCJcdUE3OTE9CiI6Im4iLCJcdUE3QTUiOiJuIiwiXHUwMUND
IjoibmoiLCJcdTI0REUiOiJvIiwiXHVGRjRGIjoibyIsIlx1MDBGMiI6Im8iLCJcdT0KMDBGMyI6
Im8iLCJcdTAwRjQiOiJvIiwiXHUxRUQzIjoibyIsIlx1MUVEMSI6Im8iLCJcdTFFRDciOiJvIiwi
XHUxRUQ1IjoibyIsPQoiXHUwMEY1IjoibyIsIlx1MUU0RCI6Im8iLCJcdTAyMkQiOiJvIiwiXHUx
RTRGIjoibyIsIlx1MDE0RCI6Im8iLCJcdTFFNTEiOiI9Cm8iLCJcdTFFNTMiOiJvIiwiXHUwMTRG
IjoibyIsIlx1MDIyRiI6Im8iLCJcdTAyMzEiOiJvIiwiXHUwMEY2IjoibyIsIlx1MDIyQj0KIjoi
byIsIlx1MUVDRiI6Im8iLCJcdTAxNTEiOiJvIiwiXHUwMUQyIjoibyIsIlx1MDIwRCI6Im8iLCJc
dTAyMEYiOiJvIiwiXHUwPQoxQTEiOiJvIiwiXHUxRUREIjoibyIsIlx1MUVEQiI6Im8iLCJcdTFF
RTEiOiJvIiwiXHUxRURGIjoibyIsIlx1MUVFMyI6Im8iLCI9Clx1MUVDRCI6Im8iLCJcdTFFRDki
OiJvIiwiXHUwMUVCIjoibyIsIlx1MDFFRCI6Im8iLCJcdTAwRjgiOiJvIiwiXHUwMUZGIjoibz0K
IiwiXHUwMjU0IjoibyIsIlx1QTc0QiI6Im8iLCJcdUE3NEQiOiJvIiwiXHUwMjc1IjoibyIsIlx1
MDFBMyI6Im9pIiwiXHUwMjIzPQoiOiJvdSIsIlx1QTc0RiI6Im9vIiwiXHUyNERGIjoicCIsIlx1
RkY1MCI6InAiLCJcdTFFNTUiOiJwIiwiXHUxRTU3IjoicCIsIlw9CnUwMUE1IjoicCIsIlx1MUQ3
RCI6InAiLCJcdUE3NTEiOiJwIiwiXHVBNzUzIjoicCIsIlx1QTc1NSI6InAiLCJcdTI0RTAiOiJx
Ij0KLCJcdUZGNTEiOiJxIiwiXHUwMjRCIjoicSIsIlx1QTc1NyI6InEiLCJcdUE3NTkiOiJxIiwi
XHUyNEUxIjoiciIsIlx1RkY1MiI6PQoiciIsIlx1MDE1NSI6InIiLCJcdTFFNTkiOiJyIiwiXHUw
MTU5IjoiciIsIlx1MDIxMSI6InIiLCJcdTAyMTMiOiJyIiwiXHUxRTU9CkIiOiJyIiwiXHUxRTVE
IjoiciIsIlx1MDE1NyI6InIiLCJcdTFFNUYiOiJyIiwiXHUwMjREIjoiciIsIlx1MDI3RCI6InIi
LCJcdT0KQTc1QiI6InIiLCJcdUE3QTciOiJyIiwiXHVBNzgzIjoiciIsIlx1MjRFMiI6InMiLCJc
dUZGNTMiOiJzIiwiXHUwMERGIjoicyIsPQoiXHUwMTVCIjoicyIsIlx1MUU2NSI6InMiLCJcdTAx
NUQiOiJzIiwiXHUxRTYxIjoicyIsIlx1MDE2MSI6InMiLCJcdTFFNjciOiI9CnMiLCJcdTFFNjMi
OiJzIiwiXHUxRTY5IjoicyIsIlx1MDIxOSI6InMiLCJcdTAxNUYiOiJzIiwiXHUwMjNGIjoicyIs
Ilx1QTdBOT0KIjoicyIsIlx1QTc4NSI6InMiLCJcdTFFOUIiOiJzIiwiXHUyNEUzIjoidCIsIlx1
RkY1NCI6InQiLCJcdTFFNkIiOiJ0IiwiXHUxPQpFOTciOiJ0IiwiXHUwMTY1IjoidCIsIlx1MUU2
RCI6InQiLCJcdTAyMUIiOiJ0IiwiXHUwMTYzIjoidCIsIlx1MUU3MSI6InQiLCI9Clx1MUU2RiI6
InQiLCJcdTAxNjciOiJ0IiwiXHUwMUFEIjoidCIsIlx1MDI4OCI6InQiLCJcdTJDNjYiOiJ0Iiwi
XHVBNzg3IjoidD0KIiwiXHVBNzI5IjoidHoiLCJcdTI0RTQiOiJ1IiwiXHVGRjU1IjoidSIsIlx1
MDBGOSI6InUiLCJcdTAwRkEiOiJ1IiwiXHUwMEZCPQoiOiJ1IiwiXHUwMTY5IjoidSIsIlx1MUU3
OSI6InUiLCJcdTAxNkIiOiJ1IiwiXHUxRTdCIjoidSIsIlx1MDE2RCI6InUiLCJcdTA9CjBGQyI6
InUiLCJcdTAxREMiOiJ1IiwiXHUwMUQ4IjoidSIsIlx1MDFENiI6InUiLCJcdTAxREEiOiJ1Iiwi
XHUxRUU3IjoidSIsIj0KXHUwMTZGIjoidSIsIlx1MDE3MSI6InUiLCJcdTAxRDQiOiJ1IiwiXHUw
MjE1IjoidSIsIlx1MDIxNyI6InUiLCJcdTAxQjAiOiJ1PQoiLCJcdTFFRUIiOiJ1IiwiXHUxRUU5
IjoidSIsIlx1MUVFRiI6InUiLCJcdTFFRUQiOiJ1IiwiXHUxRUYxIjoidSIsIlx1MUVFNSI9Cjoi
dSIsIlx1MUU3MyI6InUiLCJcdTAxNzMiOiJ1IiwiXHUxRTc3IjoidSIsIlx1MUU3NSI6InUiLCJc
dTAyODkiOiJ1IiwiXHUyND0KRTUiOiJ2IiwiXHVGRjU2IjoidiIsIlx1MUU3RCI6InYiLCJcdTFF
N0YiOiJ2IiwiXHUwMjhCIjoidiIsIlx1QTc1RiI6InYiLCJcPQp1MDI4QyI6InYiLCJcdUE3NjEi
OiJ2eSIsIlx1MjRFNiI6InciLCJcdUZGNTciOiJ3IiwiXHUxRTgxIjoidyIsIlx1MUU4MyI6Inc9
CiIsIlx1MDE3NSI6InciLCJcdTFFODciOiJ3IiwiXHUxRTg1IjoidyIsIlx1MUU5OCI6InciLCJc
dTFFODkiOiJ3IiwiXHUyQzczIj0KOiJ3IiwiXHUyNEU3IjoieCIsIlx1RkY1OCI6IngiLCJcdTFF
OEIiOiJ4IiwiXHUxRThEIjoieCIsIlx1MjRFOCI6InkiLCJcdUZGPQo1OSI6InkiLCJcdTFFRjMi
OiJ5IiwiXHUwMEZEIjoieSIsIlx1MDE3NyI6InkiLCJcdTFFRjkiOiJ5IiwiXHUwMjMzIjoieSIs
Ilw9CnUxRThGIjoieSIsIlx1MDBGRiI6InkiLCJcdTFFRjciOiJ5IiwiXHUxRTk5IjoieSIsIlx1
MUVGNSI6InkiLCJcdTAxQjQiOiJ5Ij0KLCJcdTAyNEYiOiJ5IiwiXHUxRUZGIjoieSIsIlx1MjRF
OSI6InoiLCJcdUZGNUEiOiJ6IiwiXHUwMTdBIjoieiIsIlx1MUU5MSI6PQoieiIsIlx1MDE3QyI6
InoiLCJcdTAxN0UiOiJ6IiwiXHUxRTkzIjoieiIsIlx1MUU5NSI6InoiLCJcdTAxQjYiOiJ6Iiwi
XHUwMjI9CjUiOiJ6IiwiXHUwMjQwIjoieiIsIlx1MkM2QyI6InoiLCJcdUE3NjMiOiJ6IiwiXHUw
Mzg2IjoiXHUwMzkxIiwiXHUwMzg4IjoiXD0KdTAzOTUiLCJcdTAzODkiOiJcdTAzOTciLCJcdTAz
OEEiOiJcdTAzOTkiLCJcdTAzQUEiOiJcdTAzOTkiLCJcdTAzOEMiOiJcdTAzPQo5RiIsIlx1MDM4
RSI6Ilx1MDNBNSIsIlx1MDNBQiI6Ilx1MDNBNSIsIlx1MDM4RiI6Ilx1MDNBOSIsIlx1MDNBQyI6
Ilx1MDNCMSI9CiwiXHUwM0FEIjoiXHUwM0I1IiwiXHUwM0FFIjoiXHUwM0I3IiwiXHUwM0FGIjoi
XHUwM0I5IiwiXHUwM0NBIjoiXHUwM0I5IiwiXD0KdTAzOTAiOiJcdTAzQjkiLCJcdTAzQ0MiOiJc
dTAzQkYiLCJcdTAzQ0QiOiJcdTAzQzUiLCJcdTAzQ0IiOiJcdTAzQzUiLCJcdTAzPQpCMCI6Ilx1
MDNDNSIsIlx1MDNDOSI6Ilx1MDNDOSIsIlx1MDNDMiI6Ilx1MDNDMyJ9Owo9MjAKICAgICAkZG9j
dW1lbnQgPTNEICQoZG9jdW1lbnQpOwo9MjAKICAgICBuZXh0VWlkPTNEKGZ1bmN0aW9uKCkgeyB2
YXIgY291bnRlcj0zRDE7IHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvPQp1bnRlcisrOyB9
OyB9KCkpOwo9MjAKPTIwCisgICAgZnVuY3Rpb24gcmVpbnNlcnRFbGVtZW50KGVsZW1lbnQpIHsK
KyAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0zRCAkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcn
KSk7CisKKyAgICAgICAgZWxlbWVudC5iZWZvcmUocGxhY2Vob2xkZXIpOworICAgICAgICBwbGFj
ZWhvbGRlci5iZWZvcmUoZWxlbWVudCk7CisgICAgICAgIHBsYWNlaG9sZGVyLnJlbW92ZSgpOwor
ICAgIH0KKwogICAgIGZ1bmN0aW9uIHN0cmlwRGlhY3JpdGljcyhzdHIpIHsKLSAgICAgICAgdmFy
IHJldCwgaSwgbCwgYzsKLQotICAgICAgICBpZiAoIXN0ciB8fCBzdHIubGVuZ3RoIDwgMSkgcmV0
dXJuIHN0cjsKLQotICAgICAgICByZXQgPTNEICIiOwotICAgICAgICBmb3IgKGkgPTNEIDAsIGwg
PTNEIHN0ci5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgIGMgPTNEIHN0ci5jaGFy
QXQoaSk7Ci0gICAgICAgICAgICByZXQgKz0zRCBESUFDUklUSUNTW2NdIHx8IGM7CisgICAgICAg
IC8vIFVzZWQgJ3VuaSByYW5nZSArIG5hbWVkIGZ1bmN0aW9uJyBmcm9tIGh0dHA6Ly9qc3BlcmYu
Y29tL2RpYWNyaT0KdGljcy8xOAorICAgICAgICBmdW5jdGlvbiBtYXRjaChhKSB7CisgICAgICAg
ICAgICByZXR1cm4gRElBQ1JJVElDU1thXSB8fCBhOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biByZXQ7CisKKyAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXlx1MDAwMC1cdTAwN0VdL2cs
IG1hdGNoKTsKICAgICB9Cj0yMAogICAgIGZ1bmN0aW9uIGluZGV4T2YodmFsdWUsIGFycmF5KSB7
CkBAIC0xODksMTAgKzE5Myw2IEBACiAgICAgICAgIH0pOwogICAgIH0KPTIwCi0gICAgJGRvY3Vt
ZW50Lm9uKCJtb3VzZW1vdmUiLCBmdW5jdGlvbiAoZSkgewotICAgICAgICBsYXN0TW91c2VQb3Np
dGlvbi54ID0zRCBlLnBhZ2VYOwotICAgICAgICBsYXN0TW91c2VQb3NpdGlvbi55ID0zRCBlLnBh
Z2VZOwotICAgIH0pOwo9MjAKICAgICAvKioKICAgICAgKiBmaWx0ZXJzIG1vdXNlIGV2ZW50cyBz
byBhbiBldmVudCBpcyBmaXJlZCBvbmx5IGlmIHRoZSBtb3VzZSBtb3ZlZC4KQEAgLTIzMCwyMCAr
MjMwLDYgQEAKICAgICAgICAgfTsKICAgICB9Cj0yMAotICAgIC8qKgotICAgICAqIEEgc2ltcGxl
IGltcGxlbWVudGF0aW9uIG9mIGEgdGh1bmsKLSAgICAgKiBAcGFyYW0gZm9ybXVsYSBmdW5jdGlv
biB1c2VkIHRvIGxhemlseSBpbml0aWFsaXplIHRoZSB0aHVuawotICAgICAqIEByZXR1cm4ge0Z1
bmN0aW9ufQotICAgICAqLwotICAgIGZ1bmN0aW9uIHRodW5rKGZvcm11bGEpIHsKLSAgICAgICAg
dmFyIGV2YWx1YXRlZCA9M0QgZmFsc2UsCi0gICAgICAgICAgICB2YWx1ZTsKLSAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKGV2YWx1YXRlZCA9M0Q9M0Q9M0QgZmFs
c2UpIHsgdmFsdWUgPTNEIGZvcm11bGEoKTsgZXZhbHVhdGU9CmQgPTNEIHRydWU7IH0KLSAgICAg
ICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfTsKLSAgICB9OwotCiAgICAgZnVuY3Rpb24g
aW5zdGFsbERlYm91bmNlZFNjcm9sbCh0aHJlc2hvbGQsIGVsZW1lbnQpIHsKICAgICAgICAgdmFy
IG5vdGlmeSA9M0QgZGVib3VuY2UodGhyZXNob2xkLCBmdW5jdGlvbiAoZSkgeyBlbGVtZW50LnRy
aWdnZXIoPQoic2Nyb2xsLWRlYm91bmNlZCIsIGUpO30pOwogICAgICAgICBlbGVtZW50Lm9uKCJz
Y3JvbGwiLCBmdW5jdGlvbiAoZSkgewpAQCAtMjYzLDggKzI0OSw5IEBACiAgICAgICAgICAgICAk
ZWwuZm9jdXMoKTsKPTIwCiAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgZWwgcmVjZWl2ZWQgZm9j
dXMgc28gd2UgZG8gbm90IGVycm9yIG91dCB3aGVuIHRyeT0KaW5nIHRvIG1hbmlwdWxhdGUgdGhl
IGNhcmV0LgotICAgICAgICAgICAgICAgIHNvbWV0aW1lcyBtb2RhbHMgb3Igb3RoZXJzIGxpc3Rl
bmVycyBtYXkgc3RlYWwgaXQgYWZ0ZXIgaXQ9CidzIHNldCAqLwotICAgICAgICAgICAgaWYgKCRl
bC5pcygiOnZpc2libGUiKSAmJiBlbCA9M0Q9M0Q9M0QgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk9
CiB7CisgICAgICAgICAgICAgICAgc29tZXRpbWVzIG1vZGFscyBvciBvdGhlcnMgbGlzdGVuZXJz
IG1heSBzdGVhbCBpdCBhZnRlciBpdD0KcyBzZXQgKi8KKyAgICAgICAgICAgIHZhciBpc1Zpc2li
bGUgPTNEIChlbC5vZmZzZXRXaWR0aCA+IDAgfHwgZWwub2Zmc2V0SGVpZ2h0ID4gMCk7CisgICAg
ICAgICAgICBpZiAoaXNWaXNpYmxlICYmIGVsID0zRD0zRD0zRCBkb2N1bWVudC5hY3RpdmVFbGVt
ZW50KSB7Cj0yMAogICAgICAgICAgICAgICAgIC8qIGFmdGVyIHRoZSBmb2N1cyBpcyBzZXQgbW92
ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCwgbmVjZXM9CnNhcnkgd2hlbiB3ZSB2YWwoKQogICAgICAg
ICAgICAgICAgICAgICBqdXN0IGJlZm9yZSBzZXR0aW5nIGZvY3VzICovCkBAIC0zMzMsMjcgKzMy
MCwzNCBAQAogICAgIGZ1bmN0aW9uIHN5bmNDc3NDbGFzc2VzKGRlc3QsIHNyYywgYWRhcHRlcikg
ewogICAgICAgICB2YXIgY2xhc3NlcywgcmVwbGFjZW1lbnRzID0zRCBbXSwgYWRhcHRlZDsKPTIw
Ci0gICAgICAgIGNsYXNzZXMgPTNEIGRlc3QuYXR0cigiY2xhc3MiKTsKKyAgICAgICAgY2xhc3Nl
cyA9M0QgJC50cmltKGRlc3QuYXR0cigiY2xhc3MiKSk7CisKICAgICAgICAgaWYgKGNsYXNzZXMp
IHsKICAgICAgICAgICAgIGNsYXNzZXMgPTNEICcnICsgY2xhc3NlczsgLy8gZm9yIElFIHdoaWNo
IHJldHVybnMgb2JqZWN0Ci0gICAgICAgICAgICAkKGNsYXNzZXMuc3BsaXQoIiAiKSkuZWFjaDIo
ZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICQoY2xhc3Nlcy5zcGxpdCgvXHMrLykpLmVhY2gy
KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGV4T2YoInNlbGVjdDIt
IikgPTNEPTNEPTNEIDApIHsKICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2go
dGhpcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAg
ICAgICAgY2xhc3NlcyA9M0Qgc3JjLmF0dHIoImNsYXNzIik7CisKKyAgICAgICAgY2xhc3NlcyA9
M0QgJC50cmltKHNyYy5hdHRyKCJjbGFzcyIpKTsKKwogICAgICAgICBpZiAoY2xhc3Nlcykgewog
ICAgICAgICAgICAgY2xhc3NlcyA9M0QgJycgKyBjbGFzc2VzOyAvLyBmb3IgSUUgd2hpY2ggcmV0
dXJucyBvYmplY3QKLSAgICAgICAgICAgICQoY2xhc3Nlcy5zcGxpdCgiICIpKS5lYWNoMihmdW5j
dGlvbigpIHsKKworICAgICAgICAgICAgJChjbGFzc2VzLnNwbGl0KC9ccysvKSkuZWFjaDIoZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXhPZigic2VsZWN0Mi0iKSAh
PTNEPTNEIDApIHsKICAgICAgICAgICAgICAgICAgICAgYWRhcHRlZCA9M0QgYWRhcHRlcih0aGlz
KTsKKwogICAgICAgICAgICAgICAgICAgICBpZiAoYWRhcHRlZCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2godGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlbWVudHMucHVzaChhZGFwdGVkKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisKICAgICAgICAgZGVz
dC5hdHRyKCJjbGFzcyIsIHJlcGxhY2VtZW50cy5qb2luKCIgIikpOwogICAgIH0KPTIwCkBAIC0z
OTMsMTQgKzM4NywxNCBAQAogICAgIC8qKgogICAgICAqIFByb2R1Y2VzIGFuIGFqYXgtYmFzZWQg
cXVlcnkgZnVuY3Rpb24KICAgICAgKgotICAgICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250
YWluaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW10ZXJzCisgICAgICogQHBhcmFtIG9wdGlvbnMgb2Jq
ZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiAgICAgICogQHBhcmFtIG9w
dGlvbnMucGFyYW1zIHBhcmFtZXRlciBtYXAgZm9yIHRoZSB0cmFuc3BvcnQgYWpheCBjYWxsLCBj
YT0KbiBjb250YWluIHN1Y2ggb3B0aW9ucyBhcyBjYWNoZSwganNvbnBDYWxsYmFjaywgZXRjLiBz
ZWUgJC5hamF4CiAgICAgICogQHBhcmFtIG9wdGlvbnMudHJhbnNwb3J0IGZ1bmN0aW9uIHRoYXQg
d2lsbCBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlID0KYWpheCByZXF1ZXN0LiBtdXN0IGJlIGNvbXBh
dGlibGUgd2l0aCBwYXJhbWV0ZXJzIHN1cHBvcnRlZCBieSAkLmFqYXgKICAgICAgKiBAcGFyYW0g
b3B0aW9ucy51cmwgdXJsIGZvciB0aGUgZGF0YQogICAgICAqIEBwYXJhbSBvcHRpb25zLmRhdGEg
YSBmdW5jdGlvbihzZWFyY2hUZXJtLCBwYWdlTnVtYmVyLCBjb250ZXh0KSB0aGE9CnQgc2hvdWxk
IHJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBmb3Ig
dGhlIGFib3ZlID0KdXJsLgotICAgICAqIEBwYXJhbSBvcHRpb25zLmRhdGFUeXBlIHJlcXVlc3Qg
ZGF0YSB0eXBlOiBhamF4LCBqc29ucCwgb3RoZXIgZGF0YXQ9CmF0eXBlcyBzdXBwb3J0ZWQgYnkg
alF1ZXJ5J3MgJC5hamF4IGZ1bmN0aW9uIG9yIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24gaWYgcz0K
cGVjaWZpZWQKKyAgICAgKiBAcGFyYW0gb3B0aW9ucy5kYXRhVHlwZSByZXF1ZXN0IGRhdGEgdHlw
ZTogYWpheCwganNvbnAsIG90aGVyIGRhdGF0PQp5cGVzIHN1cHBvcnRlZCBieSBqUXVlcnkncyAk
LmFqYXggZnVuY3Rpb24gb3IgdGhlIHRyYW5zcG9ydCBmdW5jdGlvbiBpZiBzcGU9CmNpZmllZAog
ICAgICAqIEBwYXJhbSBvcHRpb25zLnF1aWV0TWlsbGlzIChvcHRpb25hbCkgbWlsbGlzZWNvbmRz
IHRvIHdhaXQgYmVmb3JlIG09CmFraW5nIHRoZSBhamF4UmVxdWVzdCwgaGVscHMgZGVib3VuY2Ug
dGhlIGFqYXggZnVuY3Rpb24gaWYgaW52b2tlZCB0b28gb2Z0ZW4KLSAgICAgKiBAcGFyYW0gb3B0
aW9ucy5yZXN1bHRzIGEgZnVuY3Rpb24ocmVtb3RlRGF0YSwgcGFnZU51bWJlcikgdGhhdCBjb252
PQplcnRzIGRhdGEgcmV0dXJuZWQgZm9ybSB0aGUgcmVtb3RlIHJlcXVlc3QgdG8gdGhlIGZvcm1h
dCBleHBlY3RlZCBieSBTZWxlY3Q9CjIuCisgICAgICogQHBhcmFtIG9wdGlvbnMucmVzdWx0cyBh
IGZ1bmN0aW9uKHJlbW90ZURhdGEsIHBhZ2VOdW1iZXIsIHF1ZXJ5KSB0aD0KYXQgY29udmVydHMg
ZGF0YSByZXR1cm5lZCBmb3JtIHRoZSByZW1vdGUgcmVxdWVzdCB0byB0aGUgZm9ybWF0IGV4cGVj
dGVkIGJ5PQogU2VsZWN0Mi4KICAgICAgKiAgICAgIFRoZSBleHBlY3RlZCBmb3JtYXQgaXMgYW4g
b2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBrZXlzOgogICAgICAqICAgICAgcmVzdWx0
cyBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGNob2ljZXMKICAgICAgKiAg
ICAgIG1vcmUgKG9wdGlvbmFsKSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGVyZSBhcmUg
bW9yZSByZXN1PQpsdHMgYXZhaWxhYmxlCkBAIC00MzEsNyArNDI1LDcgQEAKICAgICAgICAgICAg
ICAgICBkYXRhID0zRCBkYXRhID8gZGF0YS5jYWxsKHNlbGYsIHF1ZXJ5LnRlcm0sIHF1ZXJ5LnBh
Z2UsIHF1PQplcnkuY29udGV4dCkgOiBudWxsOwogICAgICAgICAgICAgICAgIHVybCA9M0QgKHR5
cGVvZiB1cmwgPTNEPTNEPTNEICdmdW5jdGlvbicpID8gdXJsLmNhbGwoc2VsZiw9CiBxdWVyeS50
ZXJtLCBxdWVyeS5wYWdlLCBxdWVyeS5jb250ZXh0KSA6IHVybDsKPTIwCi0gICAgICAgICAgICAg
ICAgaWYgKGhhbmRsZXIpIHsgaGFuZGxlci5hYm9ydCgpOyB9CisgICAgICAgICAgICAgICAgaWYg
KGhhbmRsZXIgJiYgdHlwZW9mIGhhbmRsZXIuYWJvcnQgPTNEPTNEPTNEICJmdW5jdGlvbiIpID0K
eyBoYW5kbGVyLmFib3J0KCk7IH0KPTIwCiAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFy
YW1zKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24ob3B0aW9ucy5wYXJh
bXMpKSB7CkBAIC00NDcsNyArNDQxLDE4IEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRh
dGEsCiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIC0gcmVwbGFjZSBxdWVyeS5wYWdlIHdpdGggcXVl
cnkgc28gdXNlcnMgaD0KYXZlIGFjY2VzcyB0byB0ZXJtLCBwYWdlLCBldGMuCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9M0Qgb3B0aW9ucy5yZXN1bHRzKGRhdGEsIHF1ZXJ5
LnBhZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkZWQgcXVlcnkgYXMgdGhpcmQg
cGFyYW10ZXIgdG8ga2VlcCBiYWNrd2FyZHM9CiBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcmVzdWx0cyA9M0Qgb3B0aW9ucy5yZXN1bHRzKGRhdGEsIHF1ZXJ5LnBh
Z2UsID0KcXVlcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuY2FsbGJhY2socmVz
dWx0cyk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGVycm9y
OiBmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24peworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPTNEIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoYXNFcnJvcjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUjoganFY
SFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1czogdGV4dFN0YXR1cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclRocm93bjogZXJyb3JUaHJvd24sCisg
ICAgICAgICAgICAgICAgICAgICAgICB9OworCiAgICAgICAgICAgICAgICAgICAgICAgICBxdWVy
eS5jYWxsYmFjayhyZXN1bHRzKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0pOwpAQCAtNDY0LDcgKzQ2OSw3IEBACiAgICAgICoKICAgICAgKiBJZiB0aGUgYXJyYXkg
Zm9ybSBpcyB1c2VkIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCBjb250YWlucyBvYmplY3RzIHdpPQp0
aCAnaWQnIGFuZCAndGV4dCcga2V5cy4KICAgICAgKgotICAgICAqIElmIHRoZSBvYmplY3QgZm9y
bSBpcyB1c2VkIHRpIGlzIGFzc3VtZWQgdGhhdCBpdCBjb250YWlucyAnZGF0YScgYW49CmQgJ3Rl
eHQnIGtleXMuIFRoZSAnZGF0YScga2V5IHNob3VsZCBjb250YWluCisgICAgICogSWYgdGhlIG9i
amVjdCBmb3JtIGlzIHVzZWQgaXQgaXMgYXNzdW1lZCB0aGF0IGl0IGNvbnRhaW5zICdkYXRhJyBh
bj0KZCAndGV4dCcga2V5cy4gVGhlICdkYXRhJyBrZXkgc2hvdWxkIGNvbnRhaW4KICAgICAgKiBh
biBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGNob2ljZXMuIFRoZXNlIG9i
amVjdHMgbXVzPQp0IGNvbnRhaW4gYXQgbGVhc3QgYW4gJ2lkJyBrZXkuIFRoZSAndGV4dCcKICAg
ICAgKiBrZXkgY2FuIGVpdGhlciBiZSBhIFN0cmluZyBpbiB3aGljaCBjYXNlIGl0IGlzIGV4cGVj
dGVkIHRoYXQgZWFjaCBlPQpsZW1lbnQgaW4gdGhlICdkYXRhJyBhcnJheSBoYXMgYSBrZXkgd2l0
aCB0aGUKICAgICAgKiB2YWx1ZSBvZiAndGV4dCcgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1hdGNo
IGNob2ljZXMuIEFsdGVybmF0aXZlbHksPQogdGV4dCBjYW4gYmUgYSBmdW5jdGlvbihpdGVtKSB0
aGF0IGNhbiBleHRyYWN0CkBAIC01MzMsMTQgKzUzOCwxNyBAQAogICAgICAgICB2YXIgaXNGdW5j
ID0zRCAkLmlzRnVuY3Rpb24oZGF0YSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbiAocXVlcnkp
IHsKICAgICAgICAgICAgIHZhciB0ID0zRCBxdWVyeS50ZXJtLCBmaWx0ZXJlZCA9M0Qge3Jlc3Vs
dHM6IFtdfTsKLSAgICAgICAgICAgICQoaXNGdW5jID8gZGF0YSgpIDogZGF0YSkuZWFjaChmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0zRCB0aGlzLnRleHQgIT0z
RD0zRCB1bmRlZmluZWQsCi0gICAgICAgICAgICAgICAgICAgIHRleHQgPTNEIGlzT2JqZWN0ID8g
dGhpcy50ZXh0IDogdGhpczsKLSAgICAgICAgICAgICAgICBpZiAodCA9M0Q9M0Q9M0QgIiIgfHwg
cXVlcnkubWF0Y2hlcih0LCB0ZXh0KSkgewotICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5y
ZXN1bHRzLnB1c2goaXNPYmplY3QgPyB0aGlzIDoge2lkOiB0aGlzLCB0ZXg9CnQ6IHRoaXN9KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHF1ZXJ5LmNh
bGxiYWNrKGZpbHRlcmVkKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPTNEIGlzRnVuYyA/IGRh
dGEocXVlcnkpIDogZGF0YTsKKyAgICAgICAgICAgIGlmICgkLmlzQXJyYXkocmVzdWx0KSkgewor
ICAgICAgICAgICAgICAgICQocmVzdWx0KS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGlzT2JqZWN0ID0zRCB0aGlzLnRleHQgIT0zRD0zRCB1bmRlZmluZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0zRCBpc09iamVjdCA/IHRoaXMudGV4dCA6IHRo
aXM7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ID0zRD0zRD0zRCAiIiB8fCBxdWVyeS5tYXRj
aGVyKHQsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5yZXN1bHRz
LnB1c2goaXNPYmplY3QgPyB0aGlzIDoge2lkOiB0aGlzLD0KIHRleHQ6IHRoaXN9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHF1
ZXJ5LmNhbGxiYWNrKGZpbHRlcmVkKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICB9
Cj0yMApAQCAtNTU1LDExICs1NjMsMjQgQEAKICAgICBmdW5jdGlvbiBjaGVja0Zvcm1hdHRlcihm
b3JtYXR0ZXIsIGZvcm1hdHRlck5hbWUpIHsKICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihmb3Jt
YXR0ZXIpKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKCFmb3JtYXR0ZXIpIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdHRlck5hbWUgKyIgbXVzdCBiZSBhIGZ1
bmN0aW9uIG9yIGEgZmFsc3kgdmFsPQp1ZSIpOworICAgICAgICBpZiAodHlwZW9mKGZvcm1hdHRl
cikgPTNEPTNEPTNEICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKGZvcm1hdHRlck5hbWUgKyIgbXVzdCBiZSBhIHN0cmluZywgZnVuY3Rpb24sIG9yIGZhPQps
c3kgdmFsdWUiKTsKICAgICB9Cj0yMAotICAgIGZ1bmN0aW9uIGV2YWx1YXRlKHZhbCkgewotICAg
ICAgICByZXR1cm4gJC5pc0Z1bmN0aW9uKHZhbCkgPyB2YWwoKSA6IHZhbDsKKyAgLyoqCisgICAq
IFJldHVybnMgYSBnaXZlbiB2YWx1ZQorICAgKiBJZiBnaXZlbiBhIGZ1bmN0aW9uLCByZXR1cm5z
IGl0cyBvdXRwdXQKKyAgICoKKyAgICogQHBhcmFtIHZhbCBzdHJpbmd8ZnVuY3Rpb24KKyAgICog
QHBhcmFtIGNvbnRleHQgdmFsdWUgb2YgInRoaXMiIHRvIGJlIHBhc3NlZCB0byBmdW5jdGlvbgor
ICAgKiBAcmV0dXJucyB7Kn0KKyAgICovCisgICAgZnVuY3Rpb24gZXZhbHVhdGUodmFsLCBjb250
ZXh0KSB7CisgICAgICAgIGlmICgkLmlzRnVuY3Rpb24odmFsKSkgeworICAgICAgICAgICAgdmFy
IGFyZ3MgPTNEIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CisgICAg
ICAgICAgICByZXR1cm4gdmFsLmFwcGx5KGNvbnRleHQsIGFyZ3MpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB2YWw7CiAgICAgfQo9MjAKICAgICBmdW5jdGlvbiBjb3VudFJlc3VsdHMocmVz
dWx0cykgewpAQCAtNjI3LDYgKzY0OCwxNSBAQAogICAgICAgICBpZiAob3JpZ2luYWwhPTNEPTNE
aW5wdXQpIHJldHVybiBpbnB1dDsKICAgICB9Cj0yMAorICAgIGZ1bmN0aW9uIGNsZWFudXBKUXVl
cnlFbGVtZW50cygpIHsKKyAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CisKKyAgICAgICAgJC5l
YWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKGksIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHNlbGZb
ZWxlbWVudF0ucmVtb3ZlKCk7CisgICAgICAgICAgICBzZWxmW2VsZW1lbnRdID0zRCBudWxsOwor
ICAgICAgICB9KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IGNsYXNz
CiAgICAgICoKQEAgLTY1NCw3ICs2ODQsNyBAQAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QKICAg
ICAgICAgaW5pdDogZnVuY3Rpb24gKG9wdHMpIHsKLSAgICAgICAgICAgIHZhciByZXN1bHRzLCBz
ZWFyY2gsIHJlc3VsdHNTZWxlY3RvciA9M0QgIi5zZWxlY3QyLXJlc3VsdHMiLCBkPQppc2FibGVk
LCByZWFkb25seTsKKyAgICAgICAgICAgIHZhciByZXN1bHRzLCBzZWFyY2gsIHJlc3VsdHNTZWxl
Y3RvciA9M0QgIi5zZWxlY3QyLXJlc3VsdHMiOwo9MjAKICAgICAgICAgICAgIC8vIHByZXBhcmUg
b3B0aW9ucwogICAgICAgICAgICAgdGhpcy5vcHRzID0zRCBvcHRzID0zRCB0aGlzLnByZXBhcmVP
cHRzKG9wdHMpOwpAQCAtNjY5LDE4ICs2OTksMjggQEAKPTIwCiAgICAgICAgICAgICB0aGlzLmNv
bnRhaW5lciA9M0QgdGhpcy5jcmVhdGVDb250YWluZXIoKTsKPTIwCisgICAgICAgICAgICB0aGlz
LmxpdmVSZWdpb24gPTNEICQoIjxzcGFuPiIsIHsKKyAgICAgICAgICAgICAgICAgICAgcm9sZTog
InN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICJhcmlhLWxpdmUiOiAicG9saXRlIgorICAg
ICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLmFkZENsYXNzKCJzZWxlY3QyLWhpZGRl
bi1hY2Nlc3NpYmxlIikKKyAgICAgICAgICAgICAgICAuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7
CisKICAgICAgICAgICAgIHRoaXMuY29udGFpbmVySWQ9M0QiczJpZF8iKyhvcHRzLmVsZW1lbnQu
YXR0cigiaWQiKSB8fCAiYXV0b2dlPQpuIituZXh0VWlkKCkpOwotICAgICAgICAgICAgdGhpcy5j
b250YWluZXJTZWxlY3Rvcj0zRCIjIit0aGlzLmNvbnRhaW5lcklkLnJlcGxhY2UoLyhbOyYsXC49
ClwrXCpcfic6IlwhXF4jJCVAXFtcXVwoXCk9M0Q+XHxdKS9nLCAnXFwkMScpOworICAgICAgICAg
ICAgdGhpcy5jb250YWluZXJFdmVudE5hbWU9M0QgdGhpcy5jb250YWluZXJJZAorICAgICAgICAg
ICAgICAgIC5yZXBsYWNlKC8oWy5dKS9nLCAnXycpCisgICAgICAgICAgICAgICAgLnJlcGxhY2Uo
LyhbOyYsXC1cLlwrXCpcfic6IlwhXF4jJCVAXFtcXVwoXCk9M0Q+XHxdKS9nLCAnXD0KXCQxJyk7
CiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hdHRyKCJpZCIsIHRoaXMuY29udGFpbmVySWQp
Owo9MjAKLSAgICAgICAgICAgIC8vIGNhY2hlIHRoZSBib2R5IHNvIGZ1dHVyZSBsb29rdXBzIGFy
ZSBjaGVhcAotICAgICAgICAgICAgdGhpcy5ib2R5ID0zRCB0aHVuayhmdW5jdGlvbigpIHsgcmV0
dXJuIG9wdHMuZWxlbWVudC5jbG9zZXN0KCI9CmJvZHkiKTsgfSk7CisgICAgICAgICAgICB0aGlz
LmNvbnRhaW5lci5hdHRyKCJ0aXRsZSIsIG9wdHMuZWxlbWVudC5hdHRyKCJ0aXRsZSIpKTsKKwor
ICAgICAgICAgICAgdGhpcy5ib2R5ID0zRCAkKCJib2R5Iik7Cj0yMAogICAgICAgICAgICAgc3lu
Y0Nzc0NsYXNzZXModGhpcy5jb250YWluZXIsIHRoaXMub3B0cy5lbGVtZW50LCB0aGlzLm9wdHMu
YWQ9CmFwdENvbnRhaW5lckNzc0NsYXNzKTsKPTIwCiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5l
ci5hdHRyKCJzdHlsZSIsIG9wdHMuZWxlbWVudC5hdHRyKCJzdHlsZSIpKTsKLSAgICAgICAgICAg
IHRoaXMuY29udGFpbmVyLmNzcyhldmFsdWF0ZShvcHRzLmNvbnRhaW5lckNzcykpOwotICAgICAg
ICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoZXZhbHVhdGUob3B0cy5jb250YWluZXJDc3ND
bGFzcykpOworICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKGV2YWx1YXRlKG9wdHMuY29u
dGFpbmVyQ3NzLCB0aGlzLm9wdHMuZWxlbWU9Cm50KSk7CisgICAgICAgICAgICB0aGlzLmNvbnRh
aW5lci5hZGRDbGFzcyhldmFsdWF0ZShvcHRzLmNvbnRhaW5lckNzc0NsYXNzLCB0aGlzLj0Kb3B0
cy5lbGVtZW50KSk7Cj0yMAogICAgICAgICAgICAgdGhpcy5lbGVtZW50VGFiSW5kZXggPTNEIHRo
aXMub3B0cy5lbGVtZW50LmF0dHIoInRhYmluZGV4Iik7Cj0yMApAQCAtNjk3LDcgKzczNyw3IEBA
Cj0yMAogICAgICAgICAgICAgc3luY0Nzc0NsYXNzZXModGhpcy5kcm9wZG93biwgdGhpcy5vcHRz
LmVsZW1lbnQsIHRoaXMub3B0cy5hZGE9CnB0RHJvcGRvd25Dc3NDbGFzcyk7Cj0yMAotICAgICAg
ICAgICAgdGhpcy5kcm9wZG93bi5hZGRDbGFzcyhldmFsdWF0ZShvcHRzLmRyb3Bkb3duQ3NzQ2xh
c3MpKTsKKyAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uYWRkQ2xhc3MoZXZhbHVhdGUob3B0cy5k
cm9wZG93bkNzc0NsYXNzLCB0aGlzLm9wPQp0cy5lbGVtZW50KSk7CiAgICAgICAgICAgICB0aGlz
LmRyb3Bkb3duLmRhdGEoInNlbGVjdDIiLCB0aGlzKTsKICAgICAgICAgICAgIHRoaXMuZHJvcGRv
d24ub24oImNsaWNrIiwga2lsbEV2ZW50KTsKPTIwCkBAIC03MTQsNyArNzU0LDIzIEBACiAgICAg
ICAgICAgICB0aGlzLmNvbnRhaW5lci5vbigiY2xpY2siLCBraWxsRXZlbnQpOwo9MjAKICAgICAg
ICAgICAgIGluc3RhbGxGaWx0ZXJlZE1vdXNlTW92ZSh0aGlzLnJlc3VsdHMpOwotICAgICAgICAg
ICAgdGhpcy5kcm9wZG93bi5vbigibW91c2Vtb3ZlLWZpbHRlcmVkIHRvdWNoc3RhcnQgdG91Y2ht
b3ZlIHRvdWM9CmhlbmQiLCByZXN1bHRzU2VsZWN0b3IsIHRoaXMuYmluZCh0aGlzLmhpZ2hsaWdo
dFVuZGVyRXZlbnQpKTsKKworICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5vbigibW91c2Vtb3Zl
LWZpbHRlcmVkIiwgcmVzdWx0c1NlbGVjdG9yLCB0aGlzLmI9CmluZCh0aGlzLmhpZ2hsaWdodFVu
ZGVyRXZlbnQpKTsKKyAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ub24oInRvdWNoc3RhcnQgdG91
Y2htb3ZlIHRvdWNoZW5kIiwgcmVzdWx0c1NlbGVjPQp0b3IsIHRoaXMuYmluZChmdW5jdGlvbiAo
ZXZlbnQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90b3VjaEV2ZW50ID0zRCB0cnVlOworICAg
ICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0VW5kZXJFdmVudChldmVudCk7CisgICAgICAgICAg
ICB9KSk7CisgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9uKCJ0b3VjaG1vdmUiLCByZXN1bHRz
U2VsZWN0b3IsIHRoaXMuYmluZCh0aGlzLj0KdG91Y2hNb3ZlZCkpOworICAgICAgICAgICAgdGhp
cy5kcm9wZG93bi5vbigidG91Y2hzdGFydCB0b3VjaGVuZCIsIHJlc3VsdHNTZWxlY3RvciwgdGhp
cy49CmJpbmQodGhpcy5jbGVhclRvdWNoTW92ZWQpKTsKKworICAgICAgICAgICAgLy8gV2FpdGlu
ZyBmb3IgYSBjbGljayBldmVudCBvbiB0b3VjaCBkZXZpY2VzIHRvIHNlbGVjdCBvcHRpb249CiBh
bmQgaGlkZSBkcm9wZG93bgorICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGNsaWNrIHdpbGwgYmUg
dHJpZ2dlcmVkIG9uIGFuIHVuZGVybHlpbmcgZWxlbWVudAorICAgICAgICAgICAgdGhpcy5kcm9w
ZG93bi5vbignY2xpY2snLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX3RvdWNoRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
dG91Y2hFdmVudCA9M0QgZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SGln
aGxpZ2h0ZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KSk7Cj0yMAogICAg
ICAgICAgICAgaW5zdGFsbERlYm91bmNlZFNjcm9sbCg4MCwgdGhpcy5yZXN1bHRzKTsKICAgICAg
ICAgICAgIHRoaXMuZHJvcGRvd24ub24oInNjcm9sbC1kZWJvdW5jZWQiLCByZXN1bHRzU2VsZWN0
b3IsIHRoaXMuYmluPQpkKHRoaXMubG9hZE1vcmVJZk5lZWRlZCkpOwpAQCAtNzI2LDcgKzc4Miw3
IEBACiAgICAgICAgICAgICAvLyBpZiBqcXVlcnkubW91c2V3aGVlbCBwbHVnaW4gaXMgaW5zdGFs
bGVkIHdlIGNhbiBwcmV2ZW50IG91dD0KLW9mLWJvdW5kcyBzY3JvbGxpbmcgb2YgcmVzdWx0cyB2
aWEgbW91c2V3aGVlbAogICAgICAgICAgICAgaWYgKCQuZm4ubW91c2V3aGVlbCkgewogICAgICAg
ICAgICAgICAgIHJlc3VsdHMubW91c2V3aGVlbChmdW5jdGlvbiAoZSwgZGVsdGEsIGRlbHRhWCwg
ZGVsdGFZKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0b3AgPTNEIHJlc3VsdHMuc2Nyb2xs
VG9wKCksIGhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRvcCA9M0QgcmVzdWx0cy5z
Y3JvbGxUb3AoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhWSA+IDAgJiYgdG9wIC0g
ZGVsdGFZIDw9M0QgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zY3JvbGxU
b3AoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBraWxsRXZlbnQoZSk7CkBAIC03NTIsNyAr
ODA4LDEwIEBACiAgICAgICAgICAgICAvLyB0cmFwIGFsbCBtb3VzZSBldmVudHMgZnJvbSBsZWF2
aW5nIHRoZSBkcm9wZG93bi4gc29tZXRpbWVzID0KdGhlcmUgbWF5IGJlIGEgbW9kYWwgdGhhdCBp
cyBsaXN0ZW5pbmcKICAgICAgICAgICAgIC8vIGZvciBtb3VzZSBldmVudHMgb3V0c2lkZSBvZiBp
dHNlbGYgc28gaXQgY2FuIGNsb3NlIGl0c2VsZi4gPQpzaW5jZSB0aGUgZHJvcGRvd24gaXMgbm93
IG91dHNpZGUgdGhlIHNlbGVjdDIncwogICAgICAgICAgICAgLy8gZG9tIGl0IHdpbGwgdHJpZ2dl
ciB0aGUgcG9wdXAgY2xvc2UsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHc9CmFudAotICAgICAgICAg
ICAgdGhpcy5kcm9wZG93bi5vbigiY2xpY2sgbW91c2V1cCBtb3VzZWRvd24iLCBmdW5jdGlvbiAo
ZSkgeyBlLnM9CnRvcFByb3BhZ2F0aW9uKCk7IH0pOworICAgICAgICAgICAgLy8gZm9jdXNpbiBj
YW4gY2F1c2UgZm9jdXMgd2FycyBiZXR3ZWVuIG1vZGFscyBhbmQgc2VsZWN0MiBzaW49CmNlIHRo
ZSBkcm9wZG93biBpcyBvdXRzaWRlIHRoZSBtb2RhbC4KKyAgICAgICAgICAgIHRoaXMuZHJvcGRv
d24ub24oImNsaWNrIG1vdXNldXAgbW91c2Vkb3duIHRvdWNoc3RhcnQgdG91Y2hlbmQgPQpmb2N1
c2luIiwgZnVuY3Rpb24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSk7CisKKyAgICAgICAg
ICAgIHRoaXMubmV4dFNlYXJjaFRlcm0gPTNEIHVuZGVmaW5lZDsKPTIwCiAgICAgICAgICAgICBp
ZiAoJC5pc0Z1bmN0aW9uKHRoaXMub3B0cy5pbml0U2VsZWN0aW9uKSkgewogICAgICAgICAgICAg
ICAgIC8vIGluaXRpYWxpemUgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9m
IHRoZSA9CnNvdXJjZSBlbGVtZW50CkBAIC03ODIsMTkgKzg0MSwyOSBAQAogICAgICAgICAgICAg
b3B0cy5lbGVtZW50LnByb3AoImF1dG9mb2N1cyIsIGZhbHNlKTsKICAgICAgICAgICAgIGlmICh0
aGlzLmF1dG9mb2N1cykgdGhpcy5mb2N1cygpOwo9MjAKLSAgICAgICAgICAgIHRoaXMubmV4dFNl
YXJjaFRlcm0gPTNEIHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHRoaXMuc2VhcmNoLmF0dHIoInBs
YWNlaG9sZGVyIiwgb3B0cy5zZWFyY2hJbnB1dFBsYWNlaG9sZGVyKTsKICAgICAgICAgfSwKPTIw
CiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBlbGVtZW50PTNEdGhpcy5vcHRzLmVsZW1lbnQsIHNlbGVjdDIgPTNEIGVs
ZW1lbnQuZGF0YSgic2VsPQplY3QyIik7CisgICAgICAgICAgICB2YXIgZWxlbWVudD0zRHRoaXMu
b3B0cy5lbGVtZW50LCBzZWxlY3QyID0zRCBlbGVtZW50LmRhdGEoInNlbD0KZWN0MiIpLCBzZWxm
ID0zRCB0aGlzOwo9MjAKICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKPTIwCi0gICAgICAgICAg
ICBpZiAodGhpcy5wcm9wZXJ0eU9ic2VydmVyKSB7IGRlbGV0ZSB0aGlzLnByb3BlcnR5T2JzZXJ2
ZXI7IHRoaT0Kcy5wcm9wZXJ0eU9ic2VydmVyID0zRCBudWxsOyB9CisgICAgICAgICAgICBpZiAo
ZWxlbWVudC5sZW5ndGggJiYgZWxlbWVudFswXS5kZXRhY2hFdmVudCkgeworICAgICAgICAgICAg
ICAgIGVsZW1lbnQuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLCBzZWxmLl9zeW5jKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5T2Jz
ZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5T2JzZXJ2ZXIuZGlzY29ubmVj
dCgpOworICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydHlPYnNlcnZlciA9M0QgbnVsbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3N5bmMgPTNEIG51bGw7Cj0yMAogICAgICAg
ICAgICAgaWYgKHNlbGVjdDIgIT0zRD0zRCB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICBz
ZWxlY3QyLmNvbnRhaW5lci5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICBzZWxlY3QyLmxpdmVS
ZWdpb24ucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgc2VsZWN0Mi5kcm9wZG93bi5yZW1vdmUo
KTsKICAgICAgICAgICAgICAgICBlbGVtZW50CiAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVD
bGFzcygic2VsZWN0Mi1vZmZzY3JlZW4iKQpAQCAtODA4LDYgKzg3NywxNCBAQAogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBlbGVtZW50LnNob3coKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgY2xlYW51cEpRdWVyeUVsZW1lbnRzLmNhbGwodGhpcywKKyAgICAgICAg
ICAgICAgICAiY29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAibGl2ZVJlZ2lvbiIsCisgICAg
ICAgICAgICAgICAgImRyb3Bkb3duIiwKKyAgICAgICAgICAgICAgICAicmVzdWx0cyIsCisgICAg
ICAgICAgICAgICAgInNlYXJjaCIKKyAgICAgICAgICAgICk7CiAgICAgICAgIH0sCj0yMAogICAg
ICAgICAvLyBhYnN0cmFjdApAQCAtODUyLDcgKzkyOSw3IEBACj0yMAogICAgICAgICAgICAgb3B0
cyA9M0QgJC5leHRlbmQoe30sIHsKICAgICAgICAgICAgICAgICBwb3B1bGF0ZVJlc3VsdHM6IGZ1
bmN0aW9uKGNvbnRhaW5lciwgcmVzdWx0cywgcXVlcnkpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHBvcHVsYXRlLCAgZGF0YSwgcmVzdWx0LCBjaGlsZHJlbiwgaWQ9M0R0aGlzLm9wdHMuPQpp
ZDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBvcHVsYXRlLCBpZD0zRHRoaXMub3B0cy5pZCwg
bGl2ZVJlZ2lvbj0zRHRoaXMubGl2PQplUmVnaW9uOwo9MjAKICAgICAgICAgICAgICAgICAgICAg
cG9wdWxhdGU9M0RmdW5jdGlvbihyZXN1bHRzLCBjb250YWluZXIsIGRlcHRoKSB7Cj0yMApAQCAt
ODYwLDYgKzkzNyw4IEBACj0yMAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9M0Qg
b3B0cy5zb3J0UmVzdWx0cyhyZXN1bHRzLCBjb250YWluZXIsIHE9CnVlcnkpOwo9MjAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgdGhlIGNyZWF0ZWQgbm9kZXMgZm9yIGJ1bGsg
YXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXMgPTNEIFtdOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpID0zRCAwLCBsID0zRCByZXN1bHRzLmxlbmd0aDsgaSA8
IGw7IGkgPTNEIGk9CiArIDEpIHsKPTIwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0PTNEcmVzdWx0c1tpXTsKQEAgLTg3NiwxNiArOTU1LDE5IEBACiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7IG5vZGUuYWRkQ2xhc3MoInNlbGVjdDItZGlzYWJs
ZT0KZCIpOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvdW5kKSB7IG5v
ZGUuYWRkQ2xhc3MoInNlbGVjdDItcmVzdWx0LT0Kd2l0aC1jaGlsZHJlbiIpOyB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRDbGFzcyhzZWxmLm9wdHMuZm9ybWF0UmVzdWx0
Q3NzQ2xhc3Mocj0KZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0
dHIoInJvbGUiLCAicHJlc2VudGF0aW9uIik7Cj0yMAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxhYmVsPTNEJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGFiZWwuYWRkQ2xhc3MoInNlbGVjdDItcmVzdWx0LWxhYmVsIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwuYXR0cigiaWQiLCAic2VsZWN0Mi1y
ZXN1bHQtbGFiZWwtIiArIG5leD0KdFVpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYWJlbC5hdHRyKCJyb2xlIiwgIm9wdGlvbiIpOwo9MjAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JtYXR0ZWQ9M0RvcHRzLmZvcm1hdFJlc3VsdChyZXN1bHQsIGxhYmVsLCBxPQp1
ZXJ5LCBzZWxmLm9wdHMuZXNjYXBlTWFya3VwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZm9ybWF0dGVkIT0zRD0zRHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsYWJlbC5odG1sKGZvcm1hdHRlZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUuYXBwZW5kKGxhYmVsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Cj0yMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kKGxhYmVsKTsK
PTIwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvdW5kKSB7Cj0yMApAQCAt
ODk2LDggKzk3OCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPTIwCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kYXRhKCJzZWxlY3QyLWRhdGEiLCByZXN1bHQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQobm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlWzBdKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnVsayBhcHBl
bmQgdGhlIGNyZWF0ZWQgbm9kZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5h
cHBlbmQobm9kZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvbi50ZXh0KG9w
dHMuZm9ybWF0TWF0Y2hlcyhyZXN1bHRzLmxlbmd0aCk9Cik7CiAgICAgICAgICAgICAgICAgICAg
IH07Cj0yMAogICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZShyZXN1bHRzLCBjb250YWluZXIs
IDApOwpAQCAtOTUxLDkgKzEwMzcsOCBAQAo9MjAKICAgICAgICAgICAgICAgICAgICAgcXVlcnku
Y2FsbGJhY2soZGF0YSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgLy8g
dGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBpbnNpZGUgdmFsKCkgd2UgY29uc3RydWN0IGNob2ljZT0K
cyBmcm9tIG9wdGlvbnMgYW5kIHRoZXJlIGlkIGlzIGhhcmRjb2RlZAorICAgICAgICAgICAgICAg
IC8vIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgaW5zaWRlIHZhbCgpIHdlIGNvbnN0cnVjdCBjaG9p
Y2U9CnMgZnJvbSBvcHRpb25zIGFuZCB0aGVpciBpZCBpcyBoYXJkY29kZWQKICAgICAgICAgICAg
ICAgICBvcHRzLmlkPTNEZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZDsgfTsKLSAgICAgICAgICAg
ICAgICBvcHRzLmZvcm1hdFJlc3VsdENzc0NsYXNzID0zRCBmdW5jdGlvbihkYXRhKSB7IHJldHVy
biBkYXRhPQouY3NzOyB9OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBp
ZiAoISgicXVlcnkiIGluIG9wdHMpKSB7Cj0yMApAQCAtOTkxLDYgKzEwNzYsMTYgQEAKICAgICAg
ICAgICAgICAgICB0aHJvdyAicXVlcnkgZnVuY3Rpb24gbm90IGRlZmluZWQgZm9yIFNlbGVjdDIg
IiArIG9wdHMuZWxlPQptZW50LmF0dHIoImlkIik7CiAgICAgICAgICAgICB9Cj0yMAorICAgICAg
ICAgICAgaWYgKG9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlUG9zaXRpb24gPTNEPTNEPTNEICd0b3An
KSB7CisgICAgICAgICAgICAgICAgb3B0cy5jcmVhdGVTZWFyY2hDaG9pY2VQb3NpdGlvbiA9M0Qg
ZnVuY3Rpb24obGlzdCwgaXRlbSkgez0KIGxpc3QudW5zaGlmdChpdGVtKTsgfTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlUG9zaXRp
b24gPTNEPTNEPTNEICdib3R0b20nKSB7CisgICAgICAgICAgICAgICAgb3B0cy5jcmVhdGVTZWFy
Y2hDaG9pY2VQb3NpdGlvbiA9M0QgZnVuY3Rpb24obGlzdCwgaXRlbSkgez0KIGxpc3QucHVzaChp
dGVtKTsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZihvcHRz
LmNyZWF0ZVNlYXJjaENob2ljZVBvc2l0aW9uKSAhPTNEPTNEICJmdW5jPQp0aW9uIikgIHsKKyAg
ICAgICAgICAgICAgICB0aHJvdyAiaW52YWxpZCBjcmVhdGVTZWFyY2hDaG9pY2VQb3NpdGlvbiBv
cHRpb24gbXVzdCBiZSAnPQp0b3AnLCAnYm90dG9tJyBvciBhIGN1c3RvbSBmdW5jdGlvbiI7Cisg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiBvcHRzOwogICAgICAgICB9LAo9MjAK
QEAgLTk5OSw3ICsxMDk0LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIC8vIGFic3RyYWN0CiAg
ICAgICAgIG1vbml0b3JTb3VyY2U6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBlbCA9
M0QgdGhpcy5vcHRzLmVsZW1lbnQsIHN5bmM7CisgICAgICAgICAgICB2YXIgZWwgPTNEIHRoaXMu
b3B0cy5lbGVtZW50LCBvYnNlcnZlciwgc2VsZiA9M0QgdGhpczsKPTIwCiAgICAgICAgICAgICBl
bC5vbigiY2hhbmdlLnNlbGVjdDIiLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGUpIHsKICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5vcHRzLmVsZW1lbnQuZGF0YSgic2VsZWN0Mi1jaGFuZ2UtdHJpZ2dl
cmVkIikgIT0KPTNEPTNEIHRydWUpIHsKQEAgLTEwMDcsOSArMTEwMiw3IEBACiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfSkpOwo9MjAKLSAgICAgICAgICAgIHN5bmMgPTNEIHRoaXMu
YmluZChmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZW5hYmxlZCwgcmVhZG9u
bHksIHNlbGYgPTNEIHRoaXM7CisgICAgICAgICAgICB0aGlzLl9zeW5jID0zRCB0aGlzLmJpbmQo
ZnVuY3Rpb24gKCkgewo9MjAKICAgICAgICAgICAgICAgICAvLyBzeW5jIGVuYWJsZWQgc3RhdGUK
ICAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPTNEIGVsLnByb3AoImRpc2FibGVkIik7CkBA
IC0xMDIxLDM1ICsxMTE0LDM0IEBACiAgICAgICAgICAgICAgICAgdGhpcy5yZWFkb25seShyZWFk
b25seSk7Cj0yMAogICAgICAgICAgICAgICAgIHN5bmNDc3NDbGFzc2VzKHRoaXMuY29udGFpbmVy
LCB0aGlzLm9wdHMuZWxlbWVudCwgdGhpcy5vcHQ9CnMuYWRhcHRDb250YWluZXJDc3NDbGFzcyk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoZXZhbHVhdGUodGhpcy5v
cHRzLmNvbnRhaW5lckNzc0NsYT0Kc3MpKTsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5l
ci5hZGRDbGFzcyhldmFsdWF0ZSh0aGlzLm9wdHMuY29udGFpbmVyQ3NzQ2xhPQpzcywgdGhpcy5v
cHRzLmVsZW1lbnQpKTsKPTIwCiAgICAgICAgICAgICAgICAgc3luY0Nzc0NsYXNzZXModGhpcy5k
cm9wZG93biwgdGhpcy5vcHRzLmVsZW1lbnQsIHRoaXMub3B0cz0KLmFkYXB0RHJvcGRvd25Dc3ND
bGFzcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5hZGRDbGFzcyhldmFsdWF0ZSh0
aGlzLm9wdHMuZHJvcGRvd25Dc3NDbGFzcz0KKSk7CisgICAgICAgICAgICAgICAgdGhpcy5kcm9w
ZG93bi5hZGRDbGFzcyhldmFsdWF0ZSh0aGlzLm9wdHMuZHJvcGRvd25Dc3NDbGFzcz0KLCB0aGlz
Lm9wdHMuZWxlbWVudCkpOwo9MjAKICAgICAgICAgICAgIH0pOwo9MjAKLSAgICAgICAgICAgIC8v
IG1vemlsbGEgYW5kIElFCi0gICAgICAgICAgICBlbC5vbigicHJvcGVydHljaGFuZ2Uuc2VsZWN0
MiBET01BdHRyTW9kaWZpZWQuc2VsZWN0MiIsIHN5bmMpOwotCi0KLSAgICAgICAgICAgIC8vIGhv
bGQgb250byBhIHJlZmVyZW5jZSBvZiB0aGUgY2FsbGJhY2sgdG8gd29yayBhcm91bmQgYSBjaHJv
PQptaXVtIGJ1ZwotICAgICAgICAgICAgaWYgKHRoaXMubXV0YXRpb25DYWxsYmFjayA9M0Q9M0Q9
M0QgdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5tdXRhdGlvbkNhbGxiYWNrID0z
RCBmdW5jdGlvbiAobXV0YXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgIG11dGF0aW9ucy5m
b3JFYWNoKHN5bmMpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElFOC0xMCAo
SUU5LzEwIHdvbid0IGZpcmUgcHJvcGVydHlDaGFuZ2UgdmlhIGF0dGFjaEV2ZW50TGlzPQp0ZW5l
cikKKyAgICAgICAgICAgIGlmIChlbC5sZW5ndGggJiYgZWxbMF0uYXR0YWNoRXZlbnQpIHsKKyAg
ICAgICAgICAgICAgICBlbC5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIiwgc2VsZi5fc3luYyk7CisgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9Cj0yMAotICAgICAgICAgICAgLy8gc2FmYXJpIGFu
ZCBjaHJvbWUKLSAgICAgICAgICAgIGlmICh0eXBlb2YgV2ViS2l0TXV0YXRpb25PYnNlcnZlciAh
PTNEPTNEICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBzYWZhcmksIGNocm9tZSwgZmly
ZWZveCwgSUUxMQorICAgICAgICAgICAgb2JzZXJ2ZXIgPTNEIHdpbmRvdy5NdXRhdGlvbk9ic2Vy
dmVyIHx8IHdpbmRvdy5XZWJLaXRNdXRhdGlvbk89CmJzZXJ2ZXJ8fCB3aW5kb3cuTW96TXV0YXRp
b25PYnNlcnZlcjsKKyAgICAgICAgICAgIGlmIChvYnNlcnZlciAhPTNEPTNEIHVuZGVmaW5lZCkg
ewogICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5T2JzZXJ2ZXIpIHsgZGVsZXRlIHRo
aXMucHJvcGVydHlPYnNlcnZlcjs9CiB0aGlzLnByb3BlcnR5T2JzZXJ2ZXIgPTNEIG51bGw7IH0K
LSAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5T2JzZXJ2ZXIgPTNEIG5ldyBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyKHRoaXMuPQptdXRhdGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICB0
aGlzLnByb3BlcnR5T2JzZXJ2ZXIgPTNEIG5ldyBvYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25z
PQopIHsKKyAgICAgICAgICAgICAgICAgICAgJC5lYWNoKG11dGF0aW9ucywgc2VsZi5fc3luYyk7
CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eU9ic2Vy
dmVyLm9ic2VydmUoZWwuZ2V0KDApLCB7IGF0dHJpYnV0ZXM6dHJ1ZT0KLCBzdWJ0cmVlOmZhbHNl
IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QK
ICAgICAgICAgdHJpZ2dlclNlbGVjdDogZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgICAgdmFy
IGV2dCA9M0QgJC5FdmVudCgic2VsZWN0Mi1zZWxlY3RpbmciLCB7IHZhbDogdGhpcy5pZChkYXRh
KSw9CiBvYmplY3Q6IGRhdGEgfSk7CisgICAgICAgICAgICB2YXIgZXZ0ID0zRCAkLkV2ZW50KCJz
ZWxlY3QyLXNlbGVjdGluZyIsIHsgdmFsOiB0aGlzLmlkKGRhdGEpLD0KIG9iamVjdDogZGF0YSwg
Y2hvaWNlOiBkYXRhIH0pOwogICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcihl
dnQpOwogICAgICAgICAgICAgcmV0dXJuICFldnQuaXNEZWZhdWx0UHJldmVudGVkKCk7CiAgICAg
ICAgIH0sCkBAIC0xMDcxLDcgKzExNjMsNyBAQAogICAgICAgICAgICAgLy8gc28gaGVyZSB3ZSB0
cmlnZ2VyIHRoZSBjbGljayBldmVudCBtYW51YWxseQogICAgICAgICAgICAgdGhpcy5vcHRzLmVs
ZW1lbnQuY2xpY2soKTsKPTIwCi0gICAgICAgICAgICAvLyBWYWxpZGF0aW9uRW5naW5lIGlnbm9y
ZWEgdGhlIGNoYW5nZSBldmVudCBhbmQgbGlzdGVucyBpbnN0ZT0KYWQgdG8gYmx1cgorICAgICAg
ICAgICAgLy8gVmFsaWRhdGlvbkVuZ2luZSBpZ25vcmVzIHRoZSBjaGFuZ2UgZXZlbnQgYW5kIGxp
c3RlbnMgaW5zdGU9CmFkIHRvIGJsdXIKICAgICAgICAgICAgIC8vIHNvIGhlcmUgd2UgdHJpZ2dl
ciB0aGUgYmx1ciBldmVudCBtYW51YWxseSBpZiBzbyBkZXNpcmVkCiAgICAgICAgICAgICBpZiAo
dGhpcy5vcHRzLmJsdXJPbkNoYW5nZSkKICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVu
dC5ibHVyKCk7CkBAIC0xMTE1LDE3ICsxMjA3LDE2IEBACiAgICAgICAgIC8vIGFic3RyYWN0CiAg
ICAgICAgIHJlYWRvbmx5OiBmdW5jdGlvbihlbmFibGVkKSB7CiAgICAgICAgICAgICBpZiAoZW5h
YmxlZCA9M0Q9M0Q9M0QgdW5kZWZpbmVkKSBlbmFibGVkID0zRCBmYWxzZTsKLSAgICAgICAgICAg
IGlmICh0aGlzLl9yZWFkb25seSA9M0Q9M0Q9M0QgZW5hYmxlZCkgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaWYgKHRoaXMuX3JlYWRvbmx5ID0zRD0zRD0zRCBlbmFibGVkKSByZXR1cm47CiAg
ICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9M0QgZW5hYmxlZDsKPTIwCiAgICAgICAgICAgICB0
aGlzLm9wdHMuZWxlbWVudC5wcm9wKCJyZWFkb25seSIsIGVuYWJsZWQpOwogICAgICAgICAgICAg
dGhpcy5lbmFibGVJbnRlcmZhY2UoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICAgb3BlbmVkOiBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuaGFzQ2xhc3MoInNlbGVjdDIt
ZHJvcGRvd24tb3BlbiIpOworICAgICAgICAgICAgcmV0dXJuICh0aGlzLmNvbnRhaW5lcikgPyB0
aGlzLmNvbnRhaW5lci5oYXNDbGFzcygic2VsZWN0Mi1kcm89CnBkb3duLW9wZW4iKSA6IGZhbHNl
OwogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QKQEAgLTExMzUsMjAgKzEyMjYs
NTggQEAKICAgICAgICAgICAgICAgICBoZWlnaHQgPTNEIHRoaXMuY29udGFpbmVyLm91dGVySGVp
Z2h0KGZhbHNlKSwKICAgICAgICAgICAgICAgICB3aWR0aCA9M0QgdGhpcy5jb250YWluZXIub3V0
ZXJXaWR0aChmYWxzZSksCiAgICAgICAgICAgICAgICAgZHJvcEhlaWdodCA9M0QgJGRyb3Bkb3du
Lm91dGVySGVpZ2h0KGZhbHNlKSwKLSAgICAgICAgICAgICAgICB2aWV3UG9ydFJpZ2h0ID0zRCAk
KHdpbmRvdykuc2Nyb2xsTGVmdCgpICsgJCh3aW5kb3cpLndpZHRoPQooKSwKLSAgICAgICAgICAg
ICAgICB2aWV3cG9ydEJvdHRvbSA9M0QgJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgJCh3aW5kb3cp
LmhlaWdoPQp0KCksCisgICAgICAgICAgICAgICAgJHdpbmRvdyA9M0QgJCh3aW5kb3cpLAorICAg
ICAgICAgICAgICAgIHdpbmRvd1dpZHRoID0zRCAkd2luZG93LndpZHRoKCksCisgICAgICAgICAg
ICAgICAgd2luZG93SGVpZ2h0ID0zRCAkd2luZG93LmhlaWdodCgpLAorICAgICAgICAgICAgICAg
IHZpZXdQb3J0UmlnaHQgPTNEICR3aW5kb3cuc2Nyb2xsTGVmdCgpICsgd2luZG93V2lkdGgsCisg
ICAgICAgICAgICAgICAgdmlld3BvcnRCb3R0b20gPTNEICR3aW5kb3cuc2Nyb2xsVG9wKCkgKyB3
aW5kb3dIZWlnaHQsCiAgICAgICAgICAgICAgICAgZHJvcFRvcCA9M0Qgb2Zmc2V0LnRvcCArIGhl
aWdodCwKICAgICAgICAgICAgICAgICBkcm9wTGVmdCA9M0Qgb2Zmc2V0LmxlZnQsCiAgICAgICAg
ICAgICAgICAgZW5vdWdoUm9vbUJlbG93ID0zRCBkcm9wVG9wICsgZHJvcEhlaWdodCA8PTNEIHZp
ZXdwb3J0Qm90dD0Kb20sCi0gICAgICAgICAgICAgICAgZW5vdWdoUm9vbUFib3ZlID0zRCAob2Zm
c2V0LnRvcCAtIGRyb3BIZWlnaHQpID49M0QgdGhpcy5ibz0KZHkoKS5zY3JvbGxUb3AoKSwKKyAg
ICAgICAgICAgICAgICBlbm91Z2hSb29tQWJvdmUgPTNEIChvZmZzZXQudG9wIC0gZHJvcEhlaWdo
dCkgPj0zRCAkd2luZG93PQouc2Nyb2xsVG9wKCksCiAgICAgICAgICAgICAgICAgZHJvcFdpZHRo
ID0zRCAkZHJvcGRvd24ub3V0ZXJXaWR0aChmYWxzZSksCiAgICAgICAgICAgICAgICAgZW5vdWdo
Um9vbU9uUmlnaHQgPTNEIGRyb3BMZWZ0ICsgZHJvcFdpZHRoIDw9M0Qgdmlld1BvcnRSaT0KZ2h0
LAogICAgICAgICAgICAgICAgIGFib3ZlTm93ID0zRCAkZHJvcGRvd24uaGFzQ2xhc3MoInNlbGVj
dDItZHJvcC1hYm92ZSIpLAogICAgICAgICAgICAgICAgIGJvZHlPZmZzZXQsCiAgICAgICAgICAg
ICAgICAgYWJvdmUsCisgICAgICAgICAgICAgICAgY2hhbmdlRGlyZWN0aW9uLAogICAgICAgICAg
ICAgICAgIGNzcywKICAgICAgICAgICAgICAgICByZXN1bHRzTGlzdE5vZGU7Cj0yMAorICAgICAg
ICAgICAgLy8gYWx3YXlzIHByZWZlciB0aGUgY3VycmVudCBhYm92ZS9iZWxvdyBhbGlnbm1lbnQs
IHVubGVzcyB0aGU9CnJlIGlzIG5vdCBlbm91Z2ggcm9vbQorICAgICAgICAgICAgaWYgKGFib3Zl
Tm93KSB7CisgICAgICAgICAgICAgICAgYWJvdmUgPTNEIHRydWU7CisgICAgICAgICAgICAgICAg
aWYgKCFlbm91Z2hSb29tQWJvdmUgJiYgZW5vdWdoUm9vbUJlbG93KSB7CisgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZURpcmVjdGlvbiA9M0QgdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWJv
dmUgPTNEIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgYWJvdmUgPTNEIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghZW5v
dWdoUm9vbUJlbG93ICYmIGVub3VnaFJvb21BYm92ZSkgeworICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VEaXJlY3Rpb24gPTNEIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGFib3ZlID0zRCB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9p
ZiB3ZSBhcmUgY2hhbmdpbmcgZGlyZWN0aW9uIHdlIG5lZWQgdG8gZ2V0IHBvc2l0aW9ucyB3aGVu
IGQ9CnJvcGRvd24gaXMgaGlkZGVuOworICAgICAgICAgICAgaWYgKGNoYW5nZURpcmVjdGlvbikg
eworICAgICAgICAgICAgICAgICRkcm9wZG93bi5oaWRlKCk7CisgICAgICAgICAgICAgICAgb2Zm
c2V0ID0zRCB0aGlzLmNvbnRhaW5lci5vZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQg
PTNEIHRoaXMuY29udGFpbmVyLm91dGVySGVpZ2h0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB3
aWR0aCA9M0QgdGhpcy5jb250YWluZXIub3V0ZXJXaWR0aChmYWxzZSk7CisgICAgICAgICAgICAg
ICAgZHJvcEhlaWdodCA9M0QgJGRyb3Bkb3duLm91dGVySGVpZ2h0KGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICB2aWV3UG9ydFJpZ2h0ID0zRCAkd2luZG93LnNjcm9sbExlZnQoKSArIHdpbmRvd1dp
ZHRoOworICAgICAgICAgICAgICAgIHZpZXdwb3J0Qm90dG9tID0zRCAkd2luZG93LnNjcm9sbFRv
cCgpICsgd2luZG93SGVpZ2h0OworICAgICAgICAgICAgICAgIGRyb3BUb3AgPTNEIG9mZnNldC50
b3AgKyBoZWlnaHQ7CisgICAgICAgICAgICAgICAgZHJvcExlZnQgPTNEIG9mZnNldC5sZWZ0Owor
ICAgICAgICAgICAgICAgIGRyb3BXaWR0aCA9M0QgJGRyb3Bkb3duLm91dGVyV2lkdGgoZmFsc2Up
OworICAgICAgICAgICAgICAgIGVub3VnaFJvb21PblJpZ2h0ID0zRCBkcm9wTGVmdCArIGRyb3BX
aWR0aCA8PTNEIHZpZXdQb3J0Umk9CmdodDsKKyAgICAgICAgICAgICAgICAkZHJvcGRvd24uc2hv
dygpOworCisgICAgICAgICAgICAgICAgLy8gZml4IHNvIHRoZSBjdXJzb3IgZG9lcyBub3QgbW92
ZSB0byB0aGUgbGVmdCB3aXRoaW4gdGhlID0Kc2VhcmNoLXRleHRib3ggaW4gSUUKKyAgICAgICAg
ICAgICAgICB0aGlzLmZvY3VzU2VhcmNoKCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGlmICh0aGlzLm9wdHMuZHJvcGRvd25BdXRvV2lkdGgpIHsKICAgICAgICAgICAgICAgICByZXN1
bHRzTGlzdE5vZGUgPTNEICQoJy5zZWxlY3QyLXJlc3VsdHMnLCAkZHJvcGRvd24pWzBdOwogICAg
ICAgICAgICAgICAgICRkcm9wZG93bi5hZGRDbGFzcygnc2VsZWN0Mi1kcm9wLWF1dG8td2lkdGgn
KTsKQEAgLTExNTYsNiArMTI4NSw3IEBACiAgICAgICAgICAgICAgICAgLy8gQWRkIHNjcm9sbGJh
ciB3aWR0aCB0byBkcm9wZG93biBpZiB2ZXJ0aWNhbCBzY3JvbGxiYXIgaT0KcyBwcmVzZW50CiAg
ICAgICAgICAgICAgICAgZHJvcFdpZHRoID0zRCAkZHJvcGRvd24ub3V0ZXJXaWR0aChmYWxzZSkg
KyAocmVzdWx0c0xpc3RObz0KZGUuc2Nyb2xsSGVpZ2h0ID0zRD0zRD0zRCByZXN1bHRzTGlzdE5v
ZGUuY2xpZW50SGVpZ2h0ID8gMCA6IHNjcm9sbEJhckRpbWVuPQpzaW9ucy53aWR0aCk7CiAgICAg
ICAgICAgICAgICAgZHJvcFdpZHRoID4gd2lkdGggPyB3aWR0aCA9M0QgZHJvcFdpZHRoIDogZHJv
cFdpZHRoID0zRCB3aT0KZHRoOworICAgICAgICAgICAgICAgIGRyb3BIZWlnaHQgPTNEICRkcm9w
ZG93bi5vdXRlckhlaWdodChmYWxzZSk7CiAgICAgICAgICAgICAgICAgZW5vdWdoUm9vbU9uUmln
aHQgPTNEIGRyb3BMZWZ0ICsgZHJvcFdpZHRoIDw9M0Qgdmlld1BvcnRSaT0KZ2h0OwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CkBAIC0xMTYzLDQzICsxMjkzLDM3IEBACiAgICAg
ICAgICAgICB9Cj0yMAogICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiYmVsb3cvIGRyb3B0b3A6
IiwgZHJvcFRvcCwgImRyb3BIZWlnaHQiLCBkcm9wSGU9CmlnaHQsICJzdW0iLCAoZHJvcFRvcCtk
cm9wSGVpZ2h0KSsiIHZpZXdwb3J0IGJvdHRvbSIsIHZpZXdwb3J0Qm90dG9tLCAiZW5vdT0KZ2g/
IiwgZW5vdWdoUm9vbUJlbG93KTsKLSAgICAgICAgICAgIC8vY29uc29sZS5sb2coImFib3ZlLyBv
ZmZzZXQudG9wIiwgb2Zmc2V0LnRvcCwgImRyb3BIZWlnaHQiLCBkPQpyb3BIZWlnaHQsICJ0b3Ai
LCAob2Zmc2V0LnRvcC1kcm9wSGVpZ2h0KSwgInNjcm9sbFRvcCIsIHRoaXMuYm9keSgpLnNjcm9s
bFQ9Cm9wKCksICJlbm91Z2g/IiwgZW5vdWdoUm9vbUFib3ZlKTsKKyAgICAgICAgICAgIC8vY29u
c29sZS5sb2coImFib3ZlLyBvZmZzZXQudG9wIiwgb2Zmc2V0LnRvcCwgImRyb3BIZWlnaHQiLCBk
PQpyb3BIZWlnaHQsICJ0b3AiLCAob2Zmc2V0LnRvcC1kcm9wSGVpZ2h0KSwgInNjcm9sbFRvcCIs
IHRoaXMuYm9keS5zY3JvbGxUb3A9CigpLCAiZW5vdWdoPyIsIGVub3VnaFJvb21BYm92ZSk7Cj0y
MAogICAgICAgICAgICAgLy8gZml4IHBvc2l0aW9uaW5nIHdoZW4gYm9keSBoYXMgYW4gb2Zmc2V0
IGFuZCBpcyBub3QgcG9zaXRpb249Cjogc3RhdGljCi0gICAgICAgICAgICBpZiAodGhpcy5ib2R5
KCkuY3NzKCdwb3NpdGlvbicpICE9M0Q9M0QgJ3N0YXRpYycpIHsKLSAgICAgICAgICAgICAgICBi
b2R5T2Zmc2V0ID0zRCB0aGlzLmJvZHkoKS5vZmZzZXQoKTsKKyAgICAgICAgICAgIGlmICh0aGlz
LmJvZHkuY3NzKCdwb3NpdGlvbicpICE9M0Q9M0QgJ3N0YXRpYycpIHsKKyAgICAgICAgICAgICAg
ICBib2R5T2Zmc2V0ID0zRCB0aGlzLmJvZHkub2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgZHJv
cFRvcCAtPTNEIGJvZHlPZmZzZXQudG9wOwogICAgICAgICAgICAgICAgIGRyb3BMZWZ0IC09M0Qg
Ym9keU9mZnNldC5sZWZ0OwogICAgICAgICAgICAgfQo9MjAKLSAgICAgICAgICAgIC8vIGFsd2F5
cyBwcmVmZXIgdGhlIGN1cnJlbnQgYWJvdmUvYmVsb3cgYWxpZ25tZW50LCB1bmxlc3MgdGhlPQpy
ZSBpcyBub3QgZW5vdWdoIHJvb20KLSAgICAgICAgICAgIGlmIChhYm92ZU5vdykgewotICAgICAg
ICAgICAgICAgIGFib3ZlID0zRCB0cnVlOwotICAgICAgICAgICAgICAgIGlmICghZW5vdWdoUm9v
bUFib3ZlICYmIGVub3VnaFJvb21CZWxvdykgYWJvdmUgPTNEIGZhbHNlOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhYm92ZSA9M0QgZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFlbm91Z2hSb29tQmVsb3cgJiYgZW5vdWdoUm9vbUFib3ZlKSBhYm92ZSA9M0QgdHJ1
ZTsKKyAgICAgICAgICAgIGlmICghZW5vdWdoUm9vbU9uUmlnaHQpIHsKKyAgICAgICAgICAgICAg
ICBkcm9wTGVmdCA9M0Qgb2Zmc2V0LmxlZnQgKyB0aGlzLmNvbnRhaW5lci5vdXRlcldpZHRoKGZh
bHNlPQopIC0gZHJvcFdpZHRoOwogICAgICAgICAgICAgfQo9MjAKLSAgICAgICAgICAgIGlmICgh
ZW5vdWdoUm9vbU9uUmlnaHQpIHsKLSAgICAgICAgICAgICAgIGRyb3BMZWZ0ID0zRCBvZmZzZXQu
bGVmdCArIHdpZHRoIC0gZHJvcFdpZHRoOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY3Nz
ID0zRCAgeworICAgICAgICAgICAgICAgIGxlZnQ6IGRyb3BMZWZ0LAorICAgICAgICAgICAgICAg
IHdpZHRoOiB3aWR0aAorICAgICAgICAgICAgfTsKPTIwCiAgICAgICAgICAgICBpZiAoYWJvdmUp
IHsKLSAgICAgICAgICAgICAgICBkcm9wVG9wID0zRCBvZmZzZXQudG9wIC0gZHJvcEhlaWdodDsK
KyAgICAgICAgICAgICAgICBjc3MudG9wID0zRCBvZmZzZXQudG9wIC0gZHJvcEhlaWdodDsKKyAg
ICAgICAgICAgICAgICBjc3MuYm90dG9tID0zRCAnYXV0byc7CiAgICAgICAgICAgICAgICAgdGhp
cy5jb250YWluZXIuYWRkQ2xhc3MoInNlbGVjdDItZHJvcC1hYm92ZSIpOwogICAgICAgICAgICAg
ICAgICRkcm9wZG93bi5hZGRDbGFzcygic2VsZWN0Mi1kcm9wLWFib3ZlIik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjc3MudG9wID0zRCBkcm9w
VG9wOworICAgICAgICAgICAgICAgIGNzcy5ib3R0b20gPTNEICdhdXRvJzsKICAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDbGFzcygic2VsZWN0Mi1kcm9wLWFib3ZlIik7CiAg
ICAgICAgICAgICAgICAgJGRyb3Bkb3duLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWRyb3AtYWJvdmUi
KTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3NzID0zRCAkLmV4dGVuZCh7Ci0gICAg
ICAgICAgICAgICAgdG9wOiBkcm9wVG9wLAotICAgICAgICAgICAgICAgIGxlZnQ6IGRyb3BMZWZ0
LAotICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aAotICAgICAgICAgICAgfSwgZXZhbHVhdGUo
dGhpcy5vcHRzLmRyb3Bkb3duQ3NzKSk7CisgICAgICAgICAgICBjc3MgPTNEICQuZXh0ZW5kKGNz
cywgZXZhbHVhdGUodGhpcy5vcHRzLmRyb3Bkb3duQ3NzLCB0aGlzLm9wdD0Kcy5lbGVtZW50KSk7
Cj0yMAogICAgICAgICAgICAgJGRyb3Bkb3duLmNzcyhjc3MpOwogICAgICAgICB9LApAQCAtMTIz
Nyw2ICsxMzYxLDEyIEBACj0yMAogICAgICAgICAgICAgdGhpcy5vcGVuaW5nKCk7Cj0yMAorICAg
ICAgICAgICAgLy8gT25seSBiaW5kIHRoZSBkb2N1bWVudCBtb3VzZW1vdmUgd2hlbiB0aGUgZHJv
cGRvd24gaXMgdmlzaWI9CmxlCisgICAgICAgICAgICAkZG9jdW1lbnQub24oIm1vdXNlbW92ZS5z
ZWxlY3QyRXZlbnQiLCBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgIGxhc3RNb3VzZVBv
c2l0aW9uLnggPTNEIGUucGFnZVg7CisgICAgICAgICAgICAgICAgbGFzdE1vdXNlUG9zaXRpb24u
eSA9M0QgZS5wYWdlWTsKKyAgICAgICAgICAgIH0pOworCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfSwKPTIwCkBAIC0xMjQ1LDM1ICsxMzc1LDM4IEBACiAgICAgICAgICAqLwog
ICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgICBvcGVuaW5nOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIHZhciBjaWQgPTNEIHRoaXMuY29udGFpbmVySWQsCisgICAgICAgICAgICB2YXIgY2lk
ID0zRCB0aGlzLmNvbnRhaW5lckV2ZW50TmFtZSwKICAgICAgICAgICAgICAgICBzY3JvbGwgPTNE
ICJzY3JvbGwuIiArIGNpZCwKICAgICAgICAgICAgICAgICByZXNpemUgPTNEICJyZXNpemUuIitj
aWQsCiAgICAgICAgICAgICAgICAgb3JpZW50ID0zRCAib3JpZW50YXRpb25jaGFuZ2UuIitjaWQs
Ci0gICAgICAgICAgICAgICAgbWFzaywgbWFza0NzczsKKyAgICAgICAgICAgICAgICBtYXNrOwo9
MjAKICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCJzZWxlY3QyLWRyb3Bkb3du
LW9wZW4iKS5hZGRDbGFzcygic2VsPQplY3QyLWNvbnRhaW5lci1hY3RpdmUiKTsKPTIwCiAgICAg
ICAgICAgICB0aGlzLmNsZWFyRHJvcGRvd25BbGlnbm1lbnRQcmVmZXJlbmNlKCk7Cj0yMAotICAg
ICAgICAgICAgaWYodGhpcy5kcm9wZG93blswXSAhPTNEPTNEIHRoaXMuYm9keSgpLmNoaWxkcmVu
KCkubGFzdCgpWzBdKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5kZXRhY2goKS5h
cHBlbmRUbyh0aGlzLmJvZHkoKSk7CisgICAgICAgICAgICBpZih0aGlzLmRyb3Bkb3duWzBdICE9
M0Q9M0QgdGhpcy5ib2R5LmNoaWxkcmVuKCkubGFzdCgpWzBdKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5kcm9wZG93bi5kZXRhY2goKS5hcHBlbmRUbyh0aGlzLmJvZHkpOwogICAgICAgICAgICAg
fQo9MjAKLSAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgZHJvcGRvd24gbWFzayBpZiBkb2VzbnQg
YWxyZWFkeSBleGlzdAorICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBkcm9wZG93biBtYXNrIGlm
IGRvZXNuJ3QgYWxyZWFkeSBleGlzdAogICAgICAgICAgICAgbWFzayA9M0QgJCgiI3NlbGVjdDIt
ZHJvcC1tYXNrIik7CiAgICAgICAgICAgICBpZiAobWFzay5sZW5ndGggPTNEPTNEIDApIHsKICAg
ICAgICAgICAgICAgICBtYXNrID0zRCAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsK
ICAgICAgICAgICAgICAgICBtYXNrLmF0dHIoImlkIiwic2VsZWN0Mi1kcm9wLW1hc2siKS5hdHRy
KCJjbGFzcyIsInNlbGVjdDItPQpkcm9wLW1hc2siKTsKICAgICAgICAgICAgICAgICBtYXNrLmhp
ZGUoKTsKLSAgICAgICAgICAgICAgICBtYXNrLmFwcGVuZFRvKHRoaXMuYm9keSgpKTsKKyAgICAg
ICAgICAgICAgICBtYXNrLmFwcGVuZFRvKHRoaXMuYm9keSk7CiAgICAgICAgICAgICAgICAgbWFz
ay5vbigibW91c2Vkb3duIHRvdWNoc3RhcnQgY2xpY2siLCBmdW5jdGlvbiAoZSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBQcmV2ZW50IElFIGZyb20gZ2VuZXJhdGluZyBhIGNsaWNrIGV2ZW50
IG9uIHRoZSBib2R5CisgICAgICAgICAgICAgICAgICAgIHJlaW5zZXJ0RWxlbWVudChtYXNrKTsK
KwogICAgICAgICAgICAgICAgICAgICB2YXIgZHJvcGRvd24gPTNEICQoIiNzZWxlY3QyLWRyb3Ai
KSwgc2VsZjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRyb3Bkb3duLmxlbmd0aCA+IDApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY9M0Rkcm9wZG93bi5kYXRhKCJzZWxlY3QyIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRzLnNlbGVjdE9uQmx1cikgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0SGlnaGxpZ2h0ZWQoe25vRm9j
dXM6IHRydWV9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuY2xvc2Uoe2ZvY3VzOmZhbHNlfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAg
ICAgICAgICAgICAgICB9CkBAIC0xMzAzLDcgKzE0MzYsNyBAQAogICAgICAgICAgICAgdmFyIHRo
YXQgPTNEIHRoaXM7CiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5wYXJlbnRzKCkuYWRkKHdp
bmRvdykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgJCh0aGlzKS5vbihyZXNp
emUrIiAiK3Njcm9sbCsiICIrb3JpZW50LCBmdW5jdGlvbiAoZSkgewotICAgICAgICAgICAgICAg
ICAgICB0aGF0LnBvc2l0aW9uRHJvcGRvd24oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRo
YXQub3BlbmVkKCkpIHRoYXQucG9zaXRpb25Ecm9wZG93bigpOwogICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgfSk7Cj0yMApAQCAtMTMxNCw3ICsxNDQ3LDcgQEAKICAgICAgICAgY2xv
c2U6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgIGlmICghdGhpcy5vcGVuZWQoKSkgcmV0dXJu
Owo9MjAKLSAgICAgICAgICAgIHZhciBjaWQgPTNEIHRoaXMuY29udGFpbmVySWQsCisgICAgICAg
ICAgICB2YXIgY2lkID0zRCB0aGlzLmNvbnRhaW5lckV2ZW50TmFtZSwKICAgICAgICAgICAgICAg
ICBzY3JvbGwgPTNEICJzY3JvbGwuIiArIGNpZCwKICAgICAgICAgICAgICAgICByZXNpemUgPTNE
ICJyZXNpemUuIitjaWQsCiAgICAgICAgICAgICAgICAgb3JpZW50ID0zRCAib3JpZW50YXRpb25j
aGFuZ2UuIitjaWQ7CkBAIC0xMzMwLDYgKzE0NjMsOCBAQAogICAgICAgICAgICAgdGhpcy5jb250
YWluZXIucmVtb3ZlQ2xhc3MoInNlbGVjdDItZHJvcGRvd24tb3BlbiIpLnJlbW92ZUNsYXM9CnMo
InNlbGVjdDItY29udGFpbmVyLWFjdGl2ZSIpOwogICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmVt
cHR5KCk7Cj0yMAorICAgICAgICAgICAgLy8gTm93IHRoYXQgdGhlIGRyb3Bkb3duIGlzIGNsb3Nl
ZCwgdW5iaW5kIHRoZSBnbG9iYWwgZG9jdW1lbnQ9CiBtb3VzZW1vdmUgZXZlbnQKKyAgICAgICAg
ICAgICRkb2N1bWVudC5vZmYoIm1vdXNlbW92ZS5zZWxlY3QyRXZlbnQiKTsKPTIwCiAgICAgICAg
ICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7CiAgICAgICAgICAgICB0aGlzLnNlYXJjaC5yZW1vdmVD
bGFzcygic2VsZWN0Mi1hY3RpdmUiKTsKQEAgLTEzNTMsMTIgKzE0ODgsMTIgQEAKPTIwCiAgICAg
ICAgIC8vYWJzdHJhY3QKICAgICAgICAgZ2V0TWF4aW11bVNlbGVjdGlvblNpemU6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlKHRoaXMub3B0cy5tYXhpbXVtU2VsZWN0
aW9uU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGUodGhpcy5vcHRzLm1heGltdW1T
ZWxlY3Rpb25TaXplLCB0aGlzLm9wdHMuZWxlbT0KZW50KTsKICAgICAgICAgfSwKPTIwCiAgICAg
ICAgIC8vIGFic3RyYWN0CiAgICAgICAgIGVuc3VyZUhpZ2hsaWdodFZpc2libGU6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHZhciByZXN1bHRzID0zRCB0aGlzLnJlc3VsdHMsIGNoaWxkcmVu
LCBpbmRleCwgY2hpbGQsIGhiLCByYiwgPQp5LCBtb3JlOworICAgICAgICAgICAgdmFyIHJlc3Vs
dHMgPTNEIHRoaXMucmVzdWx0cywgY2hpbGRyZW4sIGluZGV4LCBjaGlsZCwgaGIsIHJiLCA9Cnks
IG1vcmUsIHRvcE9mZnNldDsKPTIwCiAgICAgICAgICAgICBpbmRleCA9M0QgdGhpcy5oaWdobGln
aHQoKTsKPTIwCkBAIC0xMzc4LDcgKzE1MTMsOSBAQAo9MjAKICAgICAgICAgICAgIGNoaWxkID0z
RCAkKGNoaWxkcmVuW2luZGV4XSk7Cj0yMAotICAgICAgICAgICAgaGIgPTNEIGNoaWxkLm9mZnNl
dCgpLnRvcCArIGNoaWxkLm91dGVySGVpZ2h0KHRydWUpOworICAgICAgICAgICAgdG9wT2Zmc2V0
ID0zRCAoY2hpbGQub2Zmc2V0KCkgfHwge30pLnRvcCB8fCAwOworCisgICAgICAgICAgICBoYiA9
M0QgdG9wT2Zmc2V0ICsgY2hpbGQub3V0ZXJIZWlnaHQodHJ1ZSk7Cj0yMAogICAgICAgICAgICAg
Ly8gaWYgdGhpcyBpcyB0aGUgbGFzdCBjaGlsZCBsZXRzIGFsc28gbWFrZSBzdXJlIHNlbGVjdDIt
bW9yZS09CnJlc3VsdHMgaXMgdmlzaWJsZQogICAgICAgICAgICAgaWYgKGluZGV4ID0zRD0zRD0z
RCBjaGlsZHJlbi5sZW5ndGggLSAxKSB7CkBAIC0xMzkyLDcgKzE1MjksNyBAQAogICAgICAgICAg
ICAgaWYgKGhiID4gcmIpIHsKICAgICAgICAgICAgICAgICByZXN1bHRzLnNjcm9sbFRvcChyZXN1
bHRzLnNjcm9sbFRvcCgpICsgKGhiIC0gcmIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHkgPTNEIGNoaWxkLm9mZnNldCgpLnRvcCAtIHJlc3VsdHMub2Zmc2V0KCkudG9wOworICAgICAg
ICAgICAgeSA9M0QgdG9wT2Zmc2V0IC0gcmVzdWx0cy5vZmZzZXQoKS50b3A7Cj0yMAogICAgICAg
ICAgICAgLy8gbWFrZSBzdXJlIHRoZSB0b3Agb2YgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZQogICAg
ICAgICAgICAgaWYgKHkgPCAwICYmIGNoaWxkLmNzcygnZGlzcGxheScpICE9M0QgJ25vbmUnICkg
ewpAQCAtMTQwMiw3ICsxNTM5LDcgQEAKPTIwCiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAg
IGZpbmRIaWdobGlnaHRhYmxlQ2hvaWNlczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1
cm4gdGhpcy5yZXN1bHRzLmZpbmQoIi5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlOm5vdCguc2Vs
ZT0KY3QyLWRpc2FibGVkKSIpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cy5maW5k
KCIuc2VsZWN0Mi1yZXN1bHQtc2VsZWN0YWJsZTpub3QoLnNlbGU9CmN0Mi1kaXNhYmxlZCk6bm90
KC5zZWxlY3QyLXNlbGVjdGVkKSIpOwogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJh
Y3QKQEAgLTE0MzgsOCArMTU3NSwxMyBAQAogICAgICAgICAgICAgY2hvaWNlID0zRCAkKGNob2lj
ZXNbaW5kZXhdKTsKICAgICAgICAgICAgIGNob2ljZS5hZGRDbGFzcygic2VsZWN0Mi1oaWdobGln
aHRlZCIpOwo9MjAKKyAgICAgICAgICAgIC8vIGVuc3VyZSBhc3Npc3RpdmUgdGVjaG5vbG9neSBj
YW4gZGV0ZXJtaW5lIHRoZSBhY3RpdmUgY2hvaWNlCisgICAgICAgICAgICB0aGlzLnNlYXJjaC5h
dHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLCBjaG9pY2UuZmluZCgiLnNlbGVjdD0KMi1yZXN1
bHQtbGFiZWwiKS5hdHRyKCJpZCIpKTsKKwogICAgICAgICAgICAgdGhpcy5lbnN1cmVIaWdobGln
aHRWaXNpYmxlKCk7Cj0yMAorICAgICAgICAgICAgdGhpcy5saXZlUmVnaW9uLnRleHQoY2hvaWNl
LnRleHQoKSk7CisKICAgICAgICAgICAgIGRhdGEgPTNEIGNob2ljZS5kYXRhKCJzZWxlY3QyLWRh
dGEiKTsKICAgICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5vcHRz
LmVsZW1lbnQudHJpZ2dlcih7IHR5cGU6ICJzZWxlY3QyLWhpZ2hsaWdodCIsIHZhbD0KOiB0aGlz
LmlkKGRhdGEpLCBjaG9pY2U6IGRhdGEgfSk7CkBAIC0xNDUwLDYgKzE1OTIsMTQgQEAKICAgICAg
ICAgICAgIHRoaXMucmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1oaWdobGlnaHRlZCIpLnJlbW92ZUNs
YXNzKCJzZWxlY3QyPQotaGlnaGxpZ2h0ZWQiKTsKICAgICAgICAgfSwKPTIwCisgICAgICAgIHRv
dWNoTW92ZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5fdG91Y2hNb3ZlZCA9M0Qg
dHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAgICBjbGVhclRvdWNoTW92ZWQ6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgIHRoaXMuX3RvdWNoTW92ZWQgPTNEIGZhbHNlOworICAgICAgICB9LAorCiAg
ICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIGNvdW50U2VsZWN0YWJsZVJlc3VsdHM6IGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEhpZ2hsaWdodGFibGVDaG9pY2Vz
KCkubGVuZ3RoOwpAQCAtMTQ3Miw3ICsxNjIyLDYgQEAKICAgICAgICAgICAgIHZhciByZXN1bHRz
ID0zRCB0aGlzLnJlc3VsdHMsCiAgICAgICAgICAgICAgICAgbW9yZSA9M0QgcmVzdWx0cy5maW5k
KCJsaS5zZWxlY3QyLW1vcmUtcmVzdWx0cyIpLAogICAgICAgICAgICAgICAgIGJlbG93LCAvLyBw
aXhlbHMgdGhlIGVsZW1lbnQgaXMgYmVsb3cgdGhlIHNjcm9sbCBmb2xkLCBiZWw9Cm93PTNEPTNE
MCBpcyB3aGVuIHRoZSBlbGVtZW50IGlzIHN0YXJ0aW5nIHRvIGJlIHZpc2libGUKLSAgICAgICAg
ICAgICAgICBvZmZzZXQgPTNEIC0xLCAvLyBpbmRleCBvZiBmaXJzdCBlbGVtZW50IHdpdGhvdXQg
ZGF0YQogICAgICAgICAgICAgICAgIHBhZ2UgPTNEIHRoaXMucmVzdWx0c1BhZ2UgKyAxLAogICAg
ICAgICAgICAgICAgIHNlbGY9M0R0aGlzLAogICAgICAgICAgICAgICAgIHRlcm09M0R0aGlzLnNl
YXJjaC52YWwoKSwKQEAgLTE0OTksNyArMTY0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNl
bGYucG9zdHByb2Nlc3NSZXN1bHRzKGRhdGEsIGZhbHNlLCBmYWxzZSk7Cj0yMAogICAgICAgICAg
ICAgICAgICAgICBpZiAoZGF0YS5tb3JlPTNEPTNEPTNEdHJ1ZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbW9yZS5kZXRhY2goKS5hcHBlbmRUbyhyZXN1bHRzKS50ZXh0KHNlbGYub3B0cy5m
b3I9Cm1hdExvYWRNb3JlKHBhZ2UrMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbW9yZS5k
ZXRhY2goKS5hcHBlbmRUbyhyZXN1bHRzKS50ZXh0KGV2YWx1YXRlKHNlbGY9Ci5vcHRzLmZvcm1h
dExvYWRNb3JlLCBzZWxmLm9wdHMuZWxlbWVudCwgcGFnZSsxKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZi5sb2FkTW9yZUlmTmVl
ZD0KZWQoKTsgfSwgMTApOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgbW9yZS5yZW1vdmUoKTsKQEAgLTE1NDgsNiArMTY5NywxMiBAQAogICAg
ICAgICAgICAgZnVuY3Rpb24gcG9zdFJlbmRlcigpIHsKICAgICAgICAgICAgICAgICBzZWFyY2gu
cmVtb3ZlQ2xhc3MoInNlbGVjdDItYWN0aXZlIik7CiAgICAgICAgICAgICAgICAgc2VsZi5wb3Np
dGlvbkRyb3Bkb3duKCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHMuZmluZCgnLnNlbGVj
dDItbm8tcmVzdWx0cywuc2VsZWN0Mi1zZWxlY3Rpb24tbD0KaW1pdCwuc2VsZWN0Mi1zZWFyY2hp
bmcnKS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5saXZlUmVnaW9uLnRleHQo
cmVzdWx0cy50ZXh0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5saXZlUmVnaW9uLnRleHQoc2VsZi5vcHRzLmZv
cm1hdE1hdGNoZXMocmVzdWx0cy5mPQppbmQoJy5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlJyku
bGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQo9MjAKICAgICAgICAg
ICAgIGZ1bmN0aW9uIHJlbmRlcihodG1sKSB7CkBAIC0xNTYxLDE0ICsxNzE2LDE0IEBACiAgICAg
ICAgICAgICBpZiAobWF4U2VsU2l6ZSA+PTNEMSkgewogICAgICAgICAgICAgICAgIGRhdGEgPTNE
IHRoaXMuZGF0YSgpOwogICAgICAgICAgICAgICAgIGlmICgkLmlzQXJyYXkoZGF0YSkgJiYgZGF0
YS5sZW5ndGggPj0zRCBtYXhTZWxTaXplICYmIGNoZWM9CmtGb3JtYXR0ZXIob3B0cy5mb3JtYXRT
ZWxlY3Rpb25Ub29CaWcsICJmb3JtYXRTZWxlY3Rpb25Ub29CaWciKSkgewotICAgICAgICAgICAg
ICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLXNlbGVjdGlvbi1saW1pdCc+IiAr
IG9wdHM9Ci5mb3JtYXRTZWxlY3Rpb25Ub29CaWcobWF4U2VsU2l6ZSkgKyAiPC9saT4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyKCI8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1zZWxlY3Rpb24t
bGltaXQnPiIgKyBldmFsPQp1YXRlKG9wdHMuZm9ybWF0U2VsZWN0aW9uVG9vQmlnLCBvcHRzLmVs
ZW1lbnQsIG1heFNlbFNpemUpICsgIjwvbGk+Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Cj0yMAogICAgICAgICAgICAgaWYg
KHNlYXJjaC52YWwoKS5sZW5ndGggPCBvcHRzLm1pbmltdW1JbnB1dExlbmd0aCkgewogICAgICAg
ICAgICAgICAgIGlmIChjaGVja0Zvcm1hdHRlcihvcHRzLmZvcm1hdElucHV0VG9vU2hvcnQsICJm
b3JtYXRJbnB1dFQ9Cm9vU2hvcnQiKSkgewotICAgICAgICAgICAgICAgICAgICByZW5kZXIoIjxs
aSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3VsdHMnPiIgKyBvcHRzLmZvcm09CmF0SW5wdXRUb29T
aG9ydChzZWFyY2gudmFsKCksIG9wdHMubWluaW11bUlucHV0TGVuZ3RoKSArICI8L2xpPiIpOwor
ICAgICAgICAgICAgICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3Vs
dHMnPiIgKyBldmFsdWF0ZSg9Cm9wdHMuZm9ybWF0SW5wdXRUb29TaG9ydCwgb3B0cy5lbGVtZW50
LCBzZWFyY2gudmFsKCksIG9wdHMubWluaW11bUlucHV0TGVuZz0KdGgpICsgIjwvbGk+Iik7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKCIiKTsK
ICAgICAgICAgICAgICAgICB9CkBAIC0xNTc4LDcgKzE3MzMsNyBAQAo9MjAKICAgICAgICAgICAg
IGlmIChvcHRzLm1heGltdW1JbnB1dExlbmd0aCAmJiBzZWFyY2gudmFsKCkubGVuZ3RoID4gb3B0
cy5tYXhpPQptdW1JbnB1dExlbmd0aCkgewogICAgICAgICAgICAgICAgIGlmIChjaGVja0Zvcm1h
dHRlcihvcHRzLmZvcm1hdElucHV0VG9vTG9uZywgImZvcm1hdElucHV0VG89Cm9Mb25nIikpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVuZGVyKCI8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1uby1yZXN1
bHRzJz4iICsgb3B0cy5mb3JtPQphdElucHV0VG9vTG9uZyhzZWFyY2gudmFsKCksIG9wdHMubWF4
aW11bUlucHV0TGVuZ3RoKSArICI8L2xpPiIpOworICAgICAgICAgICAgICAgICAgICByZW5kZXIo
IjxsaSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3VsdHMnPiIgKyBldmFsdWF0ZSg9Cm9wdHMuZm9y
bWF0SW5wdXRUb29Mb25nLCBvcHRzLmVsZW1lbnQsIHNlYXJjaC52YWwoKSwgb3B0cy5tYXhpbXVt
SW5wdXRMZW5ndD0KaCkgKyAiPC9saT4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICByZW5kZXIoIiIpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE1ODYs
NyArMTc0MSw3IEBACiAgICAgICAgICAgICB9Cj0yMAogICAgICAgICAgICAgaWYgKG9wdHMuZm9y
bWF0U2VhcmNoaW5nICYmIHRoaXMuZmluZEhpZ2hsaWdodGFibGVDaG9pY2VzKCkubGU9Cm5ndGgg
PTNEPTNEPTNEIDApIHsKLSAgICAgICAgICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0zRCdzZWxl
Y3QyLXNlYXJjaGluZyc+IiArIG9wdHMuZm9ybWF0U2VhPQpyY2hpbmcoKSArICI8L2xpPiIpOwor
ICAgICAgICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPTNEJ3NlbGVjdDItc2VhcmNoaW5nJz4i
ICsgZXZhbHVhdGUob3B0cy49CmZvcm1hdFNlYXJjaGluZywgb3B0cy5lbGVtZW50KSArICI8L2xp
PiIpOwogICAgICAgICAgICAgfQo9MjAKICAgICAgICAgICAgIHNlYXJjaC5hZGRDbGFzcygic2Vs
ZWN0Mi1hY3RpdmUiKTsKQEAgLTE2MjEsNiArMTc3NiwxMiBAQAogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQo9MjAKKyAgICAgICAgICAgICAgICAvLyBoYW5k
bGUgYWpheCBlcnJvcgorICAgICAgICAgICAgICAgIGlmKGRhdGEuaGFzRXJyb3IgIT0zRD0zRCB1
bmRlZmluZWQgJiYgY2hlY2tGb3JtYXR0ZXIob3B0cy49CmZvcm1hdEFqYXhFcnJvciwgImZvcm1h
dEFqYXhFcnJvciIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPTNE
J3NlbGVjdDItYWpheC1lcnJvcic+IiArIGV2YWx1YXRlKD0Kb3B0cy5mb3JtYXRBamF4RXJyb3Is
IG9wdHMuZWxlbWVudCwgZGF0YS5qcVhIUiwgZGF0YS50ZXh0U3RhdHVzLCBkYXRhLmVycm9yPQpU
aHJvd24pICsgIjwvbGk+Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvLyBzYXZlIGNvbnRleHQsIGlmIGFueQogICAg
ICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9M0QgKGRhdGEuY29udGV4dD0zRD0zRD0zRHVuZGVm
aW5lZCkgPyBudWxsIDo9CiBkYXRhLmNvbnRleHQ7CiAgICAgICAgICAgICAgICAgLy8gY3JlYXRl
IGEgZGVmYXVsdCBjaG9pY2UgYW5kIHByZXBlbmQgaXQgdG8gdGhlIGxpc3QKQEAgLTE2MzEsMTMg
KzE3OTIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbChzZWxmLmlkKHRoaXMp
LCBzZWxmLmlkKGRlZikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9
M0Q9M0Q9M0QgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0cy51
bnNoaWZ0KGRlZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLmNyZWF0
ZVNlYXJjaENob2ljZVBvc2l0aW9uKGRhdGEucmVzdT0KbHRzLCBkZWYpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQo9
MjAKICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHRzLmxlbmd0aCA9M0Q9M0Q9M0QgMCAm
JiBjaGVja0Zvcm1hdHRlcihvcHRzPQouZm9ybWF0Tm9NYXRjaGVzLCAiZm9ybWF0Tm9NYXRjaGVz
IikpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyKCI8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1u
by1yZXN1bHRzJz4iICsgb3B0cy5mb3JtPQphdE5vTWF0Y2hlcyhzZWFyY2gudmFsKCkpICsgIjwv
bGk+Iik7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPTNEJ3NlbGVjdDIt
bm8tcmVzdWx0cyc+IiArIGV2YWx1YXRlKD0Kb3B0cy5mb3JtYXROb01hdGNoZXMsIG9wdHMuZWxl
bWVudCwgc2VhcmNoLnZhbCgpKSArICI8L2xpPiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQo9MjAKQEAgLTE2NDUsNyArMTgwNiw3IEBACiAgICAgICAg
ICAgICAgICAgc2VsZi5vcHRzLnBvcHVsYXRlUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdHMsIGRh
dGEucmVzdWx0cz0KLCB7dGVybTogc2VhcmNoLnZhbCgpLCBwYWdlOiB0aGlzLnJlc3VsdHNQYWdl
LCBjb250ZXh0Om51bGx9KTsKPTIwCiAgICAgICAgICAgICAgICAgaWYgKGRhdGEubW9yZSA9M0Q9
M0Q9M0QgdHJ1ZSAmJiBjaGVja0Zvcm1hdHRlcihvcHRzLmZvcm1hdD0KTG9hZE1vcmUsICJmb3Jt
YXRMb2FkTW9yZSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCI8bGkg
Y2xhc3M9M0Qnc2VsZWN0Mi1tb3JlLXJlc3VsdHMnPiIgKz0KIHNlbGYub3B0cy5lc2NhcGVNYXJr
dXAob3B0cy5mb3JtYXRMb2FkTW9yZSh0aGlzLnJlc3VsdHNQYWdlKSkgKyAiPC9saT4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLW1v
cmUtcmVzdWx0cyc+IiArPQogb3B0cy5lc2NhcGVNYXJrdXAoZXZhbHVhdGUob3B0cy5mb3JtYXRM
b2FkTW9yZSwgb3B0cy5lbGVtZW50LCB0aGlzLnJlc3VsdHM9ClBhZ2UpKSArICI8L2xpPiIpOwog
ICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZi5s
b2FkTW9yZUlmTmVlZGVkKCk9CjsgfSwgMTApOwogICAgICAgICAgICAgICAgIH0KPTIwCkBAIC0x
NjgzLDYgKzE4NDQsMTAgQEAKPTIwCiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIHNlbGVj
dEhpZ2hsaWdodGVkOiBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICAgICAgaWYgKHRoaXMu
X3RvdWNoTW92ZWQpIHsKKyAgICAgICAgICAgICAgdGhpcy5jbGVhclRvdWNoTW92ZWQoKTsKKyAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyIGluZGV4
PTNEdGhpcy5oaWdobGlnaHQoKSwKICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZD0zRHRoaXMu
cmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1oaWdobGlnaHRlZCIpLAogICAgICAgICAgICAgICAgIGRh
dGEgPTNEIGhpZ2hsaWdodGVkLmNsb3Nlc3QoJy5zZWxlY3QyLXJlc3VsdCcpLmRhdGEoInNlbGU9
CmN0Mi1kYXRhIik7CkBAIC0xNzA4LDEyICsxODczLDEyIEBACiAgICAgICAgIC8vIGFic3RyYWN0
CiAgICAgICAgIGdldFBsYWNlaG9sZGVyT3B0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
IGlmICh0aGlzLnNlbGVjdCkgewotICAgICAgICAgICAgICAgIHZhciBmaXJzdE9wdGlvbiA9M0Qg
dGhpcy5zZWxlY3QuY2hpbGRyZW4oKS5maXJzdCgpOworICAgICAgICAgICAgICAgIHZhciBmaXJz
dE9wdGlvbiA9M0QgdGhpcy5zZWxlY3QuY2hpbGRyZW4oJ29wdGlvbicpLmZpcnN0KCk7CiAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5wbGFjZWhvbGRlck9wdGlvbiAhPTNEPTNEIHVuZGVm
aW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgLy9EZXRlcm1pbmUgdGhlIHBsYWNlaG9sZGVy
IG9wdGlvbiBiYXNlZCBvbiB0aGUgc3BlY2lmPQppZWQgcGxhY2Vob2xkZXJPcHRpb24gc2V0dGlu
ZwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5wbGFjZWhvbGRlck9wdGlv
biA9M0Q9M0Q9M0QgImZpcnN0IiA9CiYmIGZpcnN0T3B0aW9uKSB8fAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHR5cGVvZiB0aGlzLm9wdHMucGxhY2Vob2xkZXJPcHRpb24gPTNEPTNEPTNE
ICI9CmZ1bmN0aW9uIiAmJiB0aGlzLm9wdHMucGxhY2Vob2xkZXJPcHRpb24odGhpcy5zZWxlY3Qp
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0T3B0aW9uLnRleHQoKSA9M0Q9M0Q9
M0QgIiIgJiYgZmlyc3RPcHRpb24uPQp2YWwoKSA9M0Q9M0Q9M0QgIiIpIHsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCQudHJpbShmaXJzdE9wdGlvbi50ZXh0KCkpID0zRD0zRD0zRCAiIiAm
JiBmaXJzPQp0T3B0aW9uLnZhbCgpID0zRD0zRD0zRCAiIikgewogICAgICAgICAgICAgICAgICAg
ICAvL05vIGV4cGxpY2l0IHBsYWNlaG9sZGVyIG9wdGlvbiBzcGVjaWZpZWQsIHVzZSB0aGUgZmk9
CnJzdCBpZiBpdCdzIGJsYW5rCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE9wdGlv
bjsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzI5LDcgKzE4OTQsNyBAQAogICAgICAgICAvLyBh
YnN0cmFjdAogICAgICAgICBpbml0Q29udGFpbmVyV2lkdGg6IGZ1bmN0aW9uICgpIHsKICAgICAg
ICAgICAgIGZ1bmN0aW9uIHJlc29sdmVDb250YWluZXJXaWR0aCgpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgc3R5bGUsIGF0dHJzLCBtYXRjaGVzLCBpLCBsOworICAgICAgICAgICAgICAgIHZhciBz
dHlsZSwgYXR0cnMsIG1hdGNoZXMsIGksIGwsIGF0dHI7Cj0yMAogICAgICAgICAgICAgICAgIGlm
ICh0aGlzLm9wdHMud2lkdGggPTNEPTNEPTNEICJvZmYiKSB7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOwpAQCAtMTc0MSw4ICsxOTA2LDggQEAKICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0eWxlICE9M0Q9M0QgdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBh
dHRycyA9M0Qgc3R5bGUuc3BsaXQoJzsnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
aSA9M0QgMCwgbCA9M0QgYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSA9M0QgaSArPQogMSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPTNEIGF0dHJzW2ldLnJlcGxhY2UoL1xz
L2csICcnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWF0Y2goL1teLV13aWR0
aDooKFstK10/KFswLTldKlwuKT9bMC05XSs9CikocHh8ZW18ZXh8JXxpbnxjbXxtbXxwdHxwYykp
L2kpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgPTNEIGF0dHJzW2ldLnJlcGxh
Y2UoL1xzL2csICcnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0zRCBh
dHRyLm1hdGNoKC9ed2lkdGg6KChbLStdPyhbMC05XSpcPQouKT9bMC05XSspKHB4fGVtfGV4fCV8
aW58Y218bW18cHR8cGMpKS9pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0
Y2hlcyAhPTNEPTNEIG51bGwgJiYgbWF0Y2hlcy5sZW5ndGggPj0KPTNEIDEpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzWzFdOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMTc4MSwxNiArMTk0NiwxOSBAQAogICAgICAgICAgICAgdmFyIGNvbnRh
aW5lciA9M0QgJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuYXR0cih7CiAgICAgICAg
ICAgICAgICAgImNsYXNzIjogInNlbGVjdDItY29udGFpbmVyIgogICAgICAgICAgICAgfSkuaHRt
bChbCi0gICAgICAgICAgICAgICAgIjxhIGhyZWY9M0QnamF2YXNjcmlwdDp2b2lkKDApJyBvbmNs
aWNrPTNEJ3JldHVybiBmYWxzZTsnID0KY2xhc3M9M0Qnc2VsZWN0Mi1jaG9pY2UnIHRhYmluZGV4
PTNEJy0xJz4iLAotICAgICAgICAgICAgICAgICIgICA8c3BhbiBjbGFzcz0zRCdzZWxlY3QyLWNo
b3Nlbic+Jm5ic3A7PC9zcGFuPjxhYmJyIGNsYXM9CnM9M0Qnc2VsZWN0Mi1zZWFyY2gtY2hvaWNl
LWNsb3NlJz48L2FiYnI+IiwKLSAgICAgICAgICAgICAgICAiICAgPHNwYW4gY2xhc3M9M0Qnc2Vs
ZWN0Mi1hcnJvdyc+PGI+PC9iPjwvc3Bhbj4iLAorICAgICAgICAgICAgICAgICI8YSBocmVmPTNE
J2phdmFzY3JpcHQ6dm9pZCgwKScgY2xhc3M9M0Qnc2VsZWN0Mi1jaG9pY2UnIHQ9CmFiaW5kZXg9
M0QnLTEnPiIsCisgICAgICAgICAgICAgICAgIiAgIDxzcGFuIGNsYXNzPTNEJ3NlbGVjdDItY2hv
c2VuJz4mIzE2MDs8L3NwYW4+PGFiYnIgY2xhcz0Kcz0zRCdzZWxlY3QyLXNlYXJjaC1jaG9pY2Ut
Y2xvc2UnPjwvYWJicj4iLAorICAgICAgICAgICAgICAgICIgICA8c3BhbiBjbGFzcz0zRCdzZWxl
Y3QyLWFycm93JyByb2xlPTNEJ3ByZXNlbnRhdGlvbic+PGI9CiByb2xlPTNEJ3ByZXNlbnRhdGlv
bic+PC9iPjwvc3Bhbj4iLAogICAgICAgICAgICAgICAgICI8L2E+IiwKLSAgICAgICAgICAgICAg
ICAiPGlucHV0IGNsYXNzPTNEJ3NlbGVjdDItZm9jdXNzZXIgc2VsZWN0Mi1vZmZzY3JlZW4nIHR5
cGU9Cj0zRCd0ZXh0Jy8+IiwKKyAgICAgICAgICAgICAgICAiPGxhYmVsIGZvcj0zRCcnIGNsYXNz
PTNEJ3NlbGVjdDItb2Zmc2NyZWVuJz48L2xhYmVsPiIsCisgICAgICAgICAgICAgICAgIjxpbnB1
dCBjbGFzcz0zRCdzZWxlY3QyLWZvY3Vzc2VyIHNlbGVjdDItb2Zmc2NyZWVuJyB0eXBlPQo9M0Qn
dGV4dCcgYXJpYS1oYXNwb3B1cD0zRCd0cnVlJyByb2xlPTNEJ2J1dHRvbicgLz4iLAogICAgICAg
ICAgICAgICAgICI8ZGl2IGNsYXNzPTNEJ3NlbGVjdDItZHJvcCBzZWxlY3QyLWRpc3BsYXktbm9u
ZSc+IiwKICAgICAgICAgICAgICAgICAiICAgPGRpdiBjbGFzcz0zRCdzZWxlY3QyLXNlYXJjaCc+
IiwKLSAgICAgICAgICAgICAgICAiICAgICAgIDxpbnB1dCB0eXBlPTNEJ3RleHQnIGF1dG9jb21w
bGV0ZT0zRCdvZmYnIGF1dG9jb3JyPQplY3Q9M0Qnb2ZmJyBhdXRvY2FwaXRhbGl6ZT0zRCdvZmYn
IHNwZWxsY2hlY2s9M0QnZmFsc2UnIGNsYXNzPTNEJ3NlbGVjdDItaW49CnB1dCcvPiIsCisgICAg
ICAgICAgICAgICAgIiAgICAgICA8bGFiZWwgZm9yPTNEJycgY2xhc3M9M0Qnc2VsZWN0Mi1vZmZz
Y3JlZW4nPjwvbGFiZT0KbD4iLAorICAgICAgICAgICAgICAgICIgICAgICAgPGlucHV0IHR5cGU9
M0QndGV4dCcgYXV0b2NvbXBsZXRlPTNEJ29mZicgYXV0b2NvcnI9CmVjdD0zRCdvZmYnIGF1dG9j
YXBpdGFsaXplPTNEJ29mZicgc3BlbGxjaGVjaz0zRCdmYWxzZScgY2xhc3M9M0Qnc2VsZWN0Mi1p
bj0KcHV0JyByb2xlPTNEJ2NvbWJvYm94JyBhcmlhLWV4cGFuZGVkPTNEJ3RydWUnIiwKKyAgICAg
ICAgICAgICAgICAiICAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPTNEJ2xpc3QnIC8+IiwKICAgICAg
ICAgICAgICAgICAiICAgPC9kaXY+IiwKLSAgICAgICAgICAgICAgICAiICAgPHVsIGNsYXNzPTNE
J3NlbGVjdDItcmVzdWx0cyc+IiwKKyAgICAgICAgICAgICAgICAiICAgPHVsIGNsYXNzPTNEJ3Nl
bGVjdDItcmVzdWx0cycgcm9sZT0zRCdsaXN0Ym94Jz4iLAogICAgICAgICAgICAgICAgICIgICA8
L3VsPiIsCiAgICAgICAgICAgICAgICAgIjwvZGl2PiJdLmpvaW4oIiIpKTsKICAgICAgICAgICAg
IHJldHVybiBjb250YWluZXI7CkBAIC0xODE5LDE3ICsxOTg3LDE5IEBACj0yMAogICAgICAgICAg
ICAgICAgIHRoaXMuc2VhcmNoLnZhbCh0aGlzLmZvY3Vzc2VyLnZhbCgpKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHRoaXMuc2VhcmNoLmZvY3VzKCk7Ci0gICAgICAgICAgICAvLyBtb3Zl
IHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBhZnRlciBmb2N1c3NpbmcsIG90aGVyd2lzZSBpdCB3aT0K
bGwgYmUgYXQgdGhlIGJlZ2lubmluZyBhbmQKLSAgICAgICAgICAgIC8vIG5ldyB0ZXh0IHdpbGwg
YXBwZWFyICpiZWZvcmUqIGZvY3Vzc2VyLnZhbCgpCi0gICAgICAgICAgICBlbCA9M0QgdGhpcy5z
ZWFyY2guZ2V0KDApOwotICAgICAgICAgICAgaWYgKGVsLmNyZWF0ZVRleHRSYW5nZSkgewotICAg
ICAgICAgICAgICAgIHJhbmdlID0zRCBlbC5jcmVhdGVUZXh0UmFuZ2UoKTsKLSAgICAgICAgICAg
ICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0
KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnNldFNlbGVjdGlvblJhbmdlKSB7Ci0gICAg
ICAgICAgICAgICAgbGVuID0zRCB0aGlzLnNlYXJjaC52YWwoKS5sZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UobGVuLCBsZW4pOworICAgICAgICAgICAgaWYgKHRo
aXMub3B0cy5zaG91bGRGb2N1c0lucHV0KHRoaXMpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5z
ZWFyY2guZm9jdXMoKTsKKyAgICAgICAgICAgICAgICAvLyBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhl
IGVuZCBhZnRlciBmb2N1c3NpbmcsIG90aGVyd2lzZSBpPQp0IHdpbGwgYmUgYXQgdGhlIGJlZ2lu
bmluZyBhbmQKKyAgICAgICAgICAgICAgICAvLyBuZXcgdGV4dCB3aWxsIGFwcGVhciAqYmVmb3Jl
KiBmb2N1c3Nlci52YWwoKQorICAgICAgICAgICAgICAgIGVsID0zRCB0aGlzLnNlYXJjaC5nZXQo
MCk7CisgICAgICAgICAgICAgICAgaWYgKGVsLmNyZWF0ZVRleHRSYW5nZSkgeworICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9M0QgZWwuY3JlYXRlVGV4dFJhbmdlKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uu
c2VsZWN0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC5zZXRTZWxlY3Rpb25SYW5n
ZSkgeworICAgICAgICAgICAgICAgICAgICBsZW4gPTNEIHRoaXMuc2VhcmNoLnZhbCgpLmxlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UobGVuLCBsZW4pOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KPTIwCiAgICAgICAgICAgICAvLyBpbml0
aWFsaXplcyBzZWFyY2gncyB2YWx1ZSB3aXRoIG5leHRTZWFyY2hUZXJtIChpZiBkZWZpbmVkID0K
YnkgdXNlcikKQEAgLTE4NDcsMTQgKzIwMTcsMTMgQEAKICAgICAgICAgfSwKPTIwCiAgICAgICAg
IC8vIHNpbmdsZQotICAgICAgICBjbG9zZTogZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgICBj
bG9zZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCgpKSByZXR1
cm47CiAgICAgICAgICAgICB0aGlzLnBhcmVudC5jbG9zZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp
Owo9MjAKLSAgICAgICAgICAgIHBhcmFtcyA9M0QgcGFyYW1zIHx8IHtmb2N1czogdHJ1ZX07Ci0g
ICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnJlbW92ZUF0dHIoImRpc2FibGVkIik7Ci0KLSAgICAg
ICAgICAgIGlmIChwYXJhbXMuZm9jdXMpIHsKKyAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIucHJv
cCgiZGlzYWJsZWQiLCBmYWxzZSk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuc2hvdWxk
Rm9jdXNJbnB1dCh0aGlzKSkgewogICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIuZm9jdXMo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwKQEAgLTE4NjQsOCArMjAzMywxMCBAQAogICAg
ICAgICAgICAgaWYgKHRoaXMub3BlbmVkKCkpIHsKICAgICAgICAgICAgICAgICB0aGlzLmNsb3Nl
KCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIu
cmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmZv
Y3VzKCk7CisgICAgICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5wcm9wKCJkaXNhYmxlZCIsIGZh
bHNlKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRzLnNob3VsZEZvY3VzSW5wdXQodGhp
cykpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5mb2N1cygpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSwKPTIwCkBAIC0xODc3LDggKzIw
NDgsMTEgQEAKICAgICAgICAgLy8gc2luZ2xlCiAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2FuY2VsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
Ci0gICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnJlbW92ZUF0dHIoImRpc2FibGVkIik7Ci0gICAg
ICAgICAgICB0aGlzLmZvY3Vzc2VyLmZvY3VzKCk7CisgICAgICAgICAgICB0aGlzLmZvY3Vzc2Vy
LnByb3AoImRpc2FibGVkIiwgZmFsc2UpOworCisgICAgICAgICAgICBpZiAodGhpcy5vcHRzLnNo
b3VsZEZvY3VzSW5wdXQodGhpcykpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmZv
Y3VzKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0sCj0yMAogICAgICAgICAvLyBzaW5nbGUK
QEAgLTE4ODYsNiArMjA2MCwxMSBAQAogICAgICAgICAgICAgJCgibGFiZWxbZm9yPTNEJyIgKyB0
aGlzLmZvY3Vzc2VyLmF0dHIoJ2lkJykgKyAiJ10iKQogICAgICAgICAgICAgICAgIC5hdHRyKCdm
b3InLCB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJpZCIpKTsKICAgICAgICAgICAgIHRoaXMucGFy
ZW50LmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICAgICAgY2xlYW51
cEpRdWVyeUVsZW1lbnRzLmNhbGwodGhpcywKKyAgICAgICAgICAgICAgICAic2VsZWN0aW9uIiwK
KyAgICAgICAgICAgICAgICAiZm9jdXNzZXIiCisgICAgICAgICAgICApOwogICAgICAgICB9LAo9
MjAKICAgICAgICAgLy8gc2luZ2xlCkBAIC0xODkzLDcgKzIwNzIsOSBAQAo9MjAKICAgICAgICAg
ICAgIHZhciBzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgY29udGFpbmVyID0zRCB0aGlzLmNv
bnRhaW5lciwKLSAgICAgICAgICAgICAgICBkcm9wZG93biA9M0QgdGhpcy5kcm9wZG93bjsKKyAg
ICAgICAgICAgICAgICBkcm9wZG93biA9M0QgdGhpcy5kcm9wZG93biwKKyAgICAgICAgICAgICAg
ICBpZFN1ZmZpeCA9M0QgbmV4dFVpZCgpLAorICAgICAgICAgICAgICAgIGVsZW1lbnRMYWJlbDsK
PTIwCiAgICAgICAgICAgICBpZiAodGhpcy5vcHRzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoIDwg
MCkgewogICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaChmYWxzZSk7CkBAIC0xOTA1LDE3
ICsyMDg2LDQwIEBACj0yMAogICAgICAgICAgICAgdGhpcy5mb2N1c3NlciA9M0QgY29udGFpbmVy
LmZpbmQoIi5zZWxlY3QyLWZvY3Vzc2VyIik7Cj0yMAorICAgICAgICAgICAgLy8gYWRkIGFyaWEg
YXNzb2NpYXRpb25zCisgICAgICAgICAgICBzZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItY2hvc2Vu
IikuYXR0cigiaWQiLCAic2VsZWN0Mi1jaG9zZW4tIj0KK2lkU3VmZml4KTsKKyAgICAgICAgICAg
IHRoaXMuZm9jdXNzZXIuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IiwgInNlbGVjdDItY2hvc2VuLSIr
aWRTdWZmPQppeCk7CisgICAgICAgICAgICB0aGlzLnJlc3VsdHMuYXR0cigiaWQiLCAic2VsZWN0
Mi1yZXN1bHRzLSIraWRTdWZmaXgpOworICAgICAgICAgICAgdGhpcy5zZWFyY2guYXR0cigiYXJp
YS1vd25zIiwgInNlbGVjdDItcmVzdWx0cy0iK2lkU3VmZml4KTsKKwogICAgICAgICAgICAgLy8g
cmV3cml0ZSBsYWJlbHMgZnJvbSBvcmlnaW5hbCBlbGVtZW50IHRvIGZvY3Vzc2VyCi0gICAgICAg
ICAgICB0aGlzLmZvY3Vzc2VyLmF0dHIoImlkIiwgInMyaWRfYXV0b2dlbiIrbmV4dFVpZCgpKTsK
LQotICAgICAgICAgICAgJCgibGFiZWxbZm9yPTNEJyIgKyB0aGlzLm9wdHMuZWxlbWVudC5hdHRy
KCJpZCIpICsgIiddIikKKyAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIuYXR0cigiaWQiLCAiczJp
ZF9hdXRvZ2VuIitpZFN1ZmZpeCk7CisKKyAgICAgICAgICAgIGVsZW1lbnRMYWJlbCA9M0QgJCgi
bGFiZWxbZm9yPTNEJyIgKyB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJpPQpkIikgKyAiJ10iKTsK
KworICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5wcmV2KCkKKyAgICAgICAgICAgICAgICAudGV4
dChlbGVtZW50TGFiZWwudGV4dCgpKQogICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlz
LmZvY3Vzc2VyLmF0dHIoJ2lkJykpOwo9MjAKKyAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgb3Jp
Z2luYWwgZWxlbWVudCByZXRhaW5zIGFuIGFjY2Vzc2libGUgbmFtZQorICAgICAgICAgICAgdmFy
IG9yaWdpbmFsVGl0bGUgPTNEIHRoaXMub3B0cy5lbGVtZW50LmF0dHIoInRpdGxlIik7CisgICAg
ICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJ0aXRsZSIsIChvcmlnaW5hbFRpdGxlIHx8
IGVsZW1lbnRMYWJlbD0KLnRleHQoKSkpOworCiAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmF0
dHIoInRhYmluZGV4IiwgdGhpcy5lbGVtZW50VGFiSW5kZXgpOwo9MjAKKyAgICAgICAgICAgIC8v
IHdyaXRlIGxhYmVsIGZvciBzZWFyY2ggZmllbGQgdXNpbmcgdGhlIGxhYmVsIGZyb20gdGhlIGZv
Y3VzPQpzZXIgZWxlbWVudAorICAgICAgICAgICAgdGhpcy5zZWFyY2guYXR0cigiaWQiLCB0aGlz
LmZvY3Vzc2VyLmF0dHIoJ2lkJykgKyAnX3NlYXJjaCcpOworCisgICAgICAgICAgICB0aGlzLnNl
YXJjaC5wcmV2KCkKKyAgICAgICAgICAgICAgICAudGV4dCgkKCJsYWJlbFtmb3I9M0QnIiArIHRo
aXMuZm9jdXNzZXIuYXR0cignaWQnKSArICInXSIpPQoudGV4dCgpKQorICAgICAgICAgICAgICAg
IC5hdHRyKCdmb3InLCB0aGlzLnNlYXJjaC5hdHRyKCdpZCcpKTsKKwogICAgICAgICAgICAgdGhp
cy5zZWFyY2gub24oImtleWRvd24iLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGUpIHsKICAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpIHJldHVybjsKPTIwCisgICAg
ICAgICAgICAgICAgLy8gZmlsdGVyIDIyOSBrZXlDb2RlcyAoaW5wdXQgbWV0aG9kIGVkaXRvciBp
cyBwcm9jZXNzaW5nID0Ka2V5IGlucHV0KQorICAgICAgICAgICAgICAgIGlmICgyMjkgPTNEPTNE
IGUua2V5Q29kZSkgcmV0dXJuOworCiAgICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPTNEPTNE
PTNEIEtFWS5QQUdFX1VQIHx8IGUud2hpY2ggPTNEPTNEPTNEIEtFWT0KLlBBR0VfRE9XTikgewog
ICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IHRoZSBwYWdlIGZyb20gc2Nyb2xsaW5nCiAg
ICAgICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKQEAgLTE5NDUsOSArMjE0OSwxMSBAQAog
ICAgICAgICAgICAgdGhpcy5zZWFyY2gub24oImJsdXIiLCB0aGlzLmJpbmQoZnVuY3Rpb24oZSkg
ewogICAgICAgICAgICAgICAgIC8vIGEgd29ya2Fyb3VuZCBmb3IgY2hyb21lIHRvIGtlZXAgdGhl
IHNlYXJjaCBmaWVsZCBmb2N1c3M9CmVkIHdoZW4gdGhlIHNjcm9sbCBiYXIgaXMgdXNlZCB0byBz
Y3JvbGwgdGhlIGRyb3Bkb3duLgogICAgICAgICAgICAgICAgIC8vIHdpdGhvdXQgdGhpcyB0aGUg
c2VhcmNoIGZpZWxkIGxvc2VzIGZvY3VzIHdoaWNoIGlzIGFubm89CnlpbmcKLSAgICAgICAgICAg
ICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9M0Q9M0Q9M0QgdGhpcy5ib2R5KCkuZ2V0
KDApKSB7CisgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPTNEPTNE
PTNEIHRoaXMuYm9keS5nZXQoMCkpIHsKICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRp
bWVvdXQodGhpcy5iaW5kKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5zZWFyY2guZm9jdXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5l
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSksIDApOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pKTsKQEAgLTE5OTMsNyArMjE5OSw3IEBA
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSkpOwo9MjAKLSAgICAgICAgICAgIHNl
bGVjdGlvbi5vbigibW91c2Vkb3duIiwgImFiYnIiLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGUpIHsK
KyAgICAgICAgICAgIHNlbGVjdGlvbi5vbigibW91c2Vkb3duIHRvdWNoc3RhcnQiLCAiYWJiciIs
IHRoaXMuYmluZChmdW5jdGlvPQpuIChlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlz
SW50ZXJmYWNlRW5hYmxlZCgpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgdGhpcy5jbGVhcigp
OwogICAgICAgICAgICAgICAgIGtpbGxFdmVudEltbWVkaWF0ZWx5KGUpOwpAQCAtMjAwMSw3ICsy
MjA3LDkgQEAKICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5mb2N1cygpOwogICAgICAg
ICAgICAgfSkpOwo9MjAKLSAgICAgICAgICAgIHNlbGVjdGlvbi5vbigibW91c2Vkb3duIiwgdGhp
cy5iaW5kKGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBzZWxlY3Rpb24ub24oIm1vdXNlZG93
biB0b3VjaHN0YXJ0IiwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAg
Ly8gUHJldmVudCBJRSBmcm9tIGdlbmVyYXRpbmcgYSBjbGljayBldmVudCBvbiB0aGUgYm9keQor
ICAgICAgICAgICAgICAgIHJlaW5zZXJ0RWxlbWVudChzZWxlY3Rpb24pOwo9MjAKICAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMuY29udGFpbmVyLmhhc0NsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci1h
Y3RpdmUiKSkgewogICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2Vy
KCQuRXZlbnQoInNlbGVjdDItZm9jdXMiKSk7CkBAIC0yMDE2LDcgKzIyMjQsMTEgQEAKICAgICAg
ICAgICAgICAgICBraWxsRXZlbnQoZSk7CiAgICAgICAgICAgICB9KSk7Cj0yMAotICAgICAgICAg
ICAgZHJvcGRvd24ub24oIm1vdXNlZG93biIsIHRoaXMuYmluZChmdW5jdGlvbigpIHsgdGhpcy5z
ZWFyY2guZm89CmN1cygpOyB9KSk7CisgICAgICAgICAgICBkcm9wZG93bi5vbigibW91c2Vkb3du
IHRvdWNoc3RhcnQiLCB0aGlzLmJpbmQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXMub3B0cy5zaG91bGRGb2N1c0lucHV0KHRoaXMpKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuc2VhcmNoLmZvY3VzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkp
Owo9MjAKICAgICAgICAgICAgIHNlbGVjdGlvbi5vbigiZm9jdXMiLCB0aGlzLmJpbmQoZnVuY3Rp
b24oZSkgewogICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKQEAgLTIwODUsNiArMjI5Nyw3
IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZVNlbGVjdGlvbihzZWxlY3Rl
ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLnNldFBsYWNlaG9sZGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLm5leHRTZWFyY2hUZXJtID0zRCBzZWxmLm9wdHMubmV4dFNlYXJjaFRlcm0ocz0KZWxl
Y3RlZCwgc2VsZi5zZWFyY2gudmFsKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CkBAIC0yMDkyLDggKzIzMDUsOCBAQAo9MjAKICAg
ICAgICAgaXNQbGFjZWhvbGRlck9wdGlvblNlbGVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgIHZhciBwbGFjZWhvbGRlck9wdGlvbjsKLSAgICAgICAgICAgIGlmICghdGhpcy5nZXRQbGFj
ZWhvbGRlcigpKSByZXR1cm4gZmFsc2U7IC8vIG5vIHBsYWNlaG9sZGVyIHNwPQplY2lmaWVkIHNv
IG5vIG9wdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZAotICAgICAgICAgICAgcmV0dXJuICgocGxh
Y2Vob2xkZXJPcHRpb24gPTNEIHRoaXMuZ2V0UGxhY2Vob2xkZXJPcHRpb24oKSkgIT0KPTNEPTNE
IHVuZGVmaW5lZCAmJiBwbGFjZWhvbGRlck9wdGlvbi5pcygnOnNlbGVjdGVkJykpCisgICAgICAg
ICAgICBpZiAodGhpcy5nZXRQbGFjZWhvbGRlcigpID0zRD0zRD0zRCB1bmRlZmluZWQpIHJldHVy
biBmYWxzZTsgLz0KLyBubyBwbGFjZWhvbGRlciBzcGVjaWZpZWQgc28gbm8gb3B0aW9uIHNob3Vs
ZCBiZSBjb25zaWRlcmVkCisgICAgICAgICAgICByZXR1cm4gKChwbGFjZWhvbGRlck9wdGlvbiA9
M0QgdGhpcy5nZXRQbGFjZWhvbGRlck9wdGlvbigpKSAhPQo9M0Q9M0QgdW5kZWZpbmVkICYmIHBs
YWNlaG9sZGVyT3B0aW9uLnByb3AoInNlbGVjdGVkIikpCiAgICAgICAgICAgICAgICAgfHwgKHRo
aXMub3B0cy5lbGVtZW50LnZhbCgpID0zRD0zRD0zRCAiIikKICAgICAgICAgICAgICAgICB8fCAo
dGhpcy5vcHRzLmVsZW1lbnQudmFsKCkgPTNEPTNEPTNEIHVuZGVmaW5lZCkKICAgICAgICAgICAg
ICAgICB8fCAodGhpcy5vcHRzLmVsZW1lbnQudmFsKCkgPTNEPTNEPTNEIG51bGwpOwpAQCAtMjEw
Nyw3ICsyMzIwLDcgQEAKICAgICAgICAgICAgIGlmIChvcHRzLmVsZW1lbnQuZ2V0KDApLnRhZ05h
bWUudG9Mb3dlckNhc2UoKSA9M0Q9M0Q9M0QgInNlbGVjPQp0IikgewogICAgICAgICAgICAgICAg
IC8vIGluc3RhbGwgdGhlIHNlbGVjdGlvbiBpbml0aWFsaXplcgogICAgICAgICAgICAgICAgIG9w
dHMuaW5pdFNlbGVjdGlvbiA9M0QgZnVuY3Rpb24gKGVsZW1lbnQsIGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9M0QgZWxlbWVudC5maW5kKCI6c2VsZWN0ZWQi
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0zRCBlbGVtZW50LmZpbmQoIm9w
dGlvbiIpLmZpbHRlcihmdW5jdGlvPQpuKCkgeyByZXR1cm4gdGhpcy5zZWxlY3RlZCAmJiAhdGhp
cy5kaXNhYmxlZCB9KTsKICAgICAgICAgICAgICAgICAgICAgLy8gYSBzaW5nbGUgc2VsZWN0IGJv
eCBhbHdheXMgaGFzIGEgdmFsdWUsIG5vIG5lZWQgdG8gPQpudWxsIGNoZWNrICdzZWxlY3RlZCcK
ICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soc2VsZi5vcHRpb25Ub0RhdGEoc2VsZWN0ZWQp
KTsKICAgICAgICAgICAgICAgICB9OwpAQCAtMjIyNCwxMCArMjQzNywxMyBAQAogICAgICAgICAg
ICAgdGhpcy5uZXh0U2VhcmNoVGVybSA9M0QgdGhpcy5vcHRzLm5leHRTZWFyY2hUZXJtKGRhdGEs
IHRoaXMuc2U9CmFyY2gudmFsKCkpOwogICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwo9MjAKLSAg
ICAgICAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0ZvY3VzKQorICAgICAgICAgICAg
aWYgKCghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0ZvY3VzKSAmJiB0aGlzLm9wdHMuc2hvdWxkRm9j
dXNJbnA9CnV0KHRoaXMpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5mb2N1cygp
OwotCi0gICAgICAgICAgICBpZiAoIWVxdWFsKG9sZCwgdGhpcy5pZChkYXRhKSkpIHsgdGhpcy50
cmlnZ2VyQ2hhbmdlKHthZGRlZDpkYT0KdGEscmVtb3ZlZDpvbGREYXRhfSk7IH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFlcXVhbChvbGQsIHRoaXMuaWQoZGF0YSkpKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyQ2hhbmdlKHsgYWRkZWQ6IGRhdGEsIHJlbW92ZWQ6
IG9sZERhdGEgfSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0sCj0yMAogICAgICAgICAvLyBz
aW5nbGUKQEAgLTIyNzcsNyArMjQ5Myw3IEBACiAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Qp
IHsKICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdAogICAgICAgICAgICAgICAgICAgICAudmFs
KHZhbCkKLSAgICAgICAgICAgICAgICAgICAgLmZpbmQoIjpzZWxlY3RlZCIpLmVhY2gyKGZ1bmN0
aW9uIChpLCBlbG0pIHsKKyAgICAgICAgICAgICAgICAgICAgLmZpbmQoIm9wdGlvbiIpLmZpbHRl
cihmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuc2VsZWN0PQplZCB9KS5lYWNoMihmdW5jdGlvbiAo
aSwgZWxtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0zRCBzZWxmLm9wdGlvblRv
RGF0YShlbG0pOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgICAgICAgICB9KTsKQEAgLTIzNDksNiArMjU2NSw3IEBACiAgICAgICAgICAgICB9KS5o
dG1sKFsKICAgICAgICAgICAgICAgICAiPHVsIGNsYXNzPTNEJ3NlbGVjdDItY2hvaWNlcyc+IiwK
ICAgICAgICAgICAgICAgICAiICA8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1zZWFyY2gtZmllbGQnPiIs
CisgICAgICAgICAgICAgICAgIiAgICA8bGFiZWwgZm9yPTNEJycgY2xhc3M9M0Qnc2VsZWN0Mi1v
ZmZzY3JlZW4nPjwvbGFiZWw+IiwKICAgICAgICAgICAgICAgICAiICAgIDxpbnB1dCB0eXBlPTNE
J3RleHQnIGF1dG9jb21wbGV0ZT0zRCdvZmYnIGF1dG9jb3JyZWN0PQo9M0Qnb2ZmJyBhdXRvY2Fw
aXRhbGl6ZT0zRCdvZmYnIHNwZWxsY2hlY2s9M0QnZmFsc2UnIGNsYXNzPTNEJ3NlbGVjdDItaW5w
dXQ9Cic+IiwKICAgICAgICAgICAgICAgICAiICA8L2xpPiIsCiAgICAgICAgICAgICAgICAgIjwv
dWw+IiwKQEAgLTIzNjcsMTIgKzI1ODQsMTIgQEAKICAgICAgICAgICAgIC8vIFRPRE8gdmFsaWRh
dGUgcGxhY2Vob2xkZXIgaXMgYSBzdHJpbmcgaWYgc3BlY2lmaWVkCj0yMAogICAgICAgICAgICAg
aWYgKG9wdHMuZWxlbWVudC5nZXQoMCkudGFnTmFtZS50b0xvd2VyQ2FzZSgpID0zRD0zRD0zRCAi
c2VsZWM9CnQiKSB7Ci0gICAgICAgICAgICAgICAgLy8gaW5zdGFsbCBzdGhlIHNlbGVjdGlvbiBp
bml0aWFsaXplcgorICAgICAgICAgICAgICAgIC8vIGluc3RhbGwgdGhlIHNlbGVjdGlvbiBpbml0
aWFsaXplcgogICAgICAgICAgICAgICAgIG9wdHMuaW5pdFNlbGVjdGlvbiA9M0QgZnVuY3Rpb24g
KGVsZW1lbnQsIGNhbGxiYWNrKSB7Cj0yMAogICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9
M0QgW107Cj0yMAotICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoIjpzZWxlY3RlZCIp
LmVhY2gyKGZ1bmN0aW9uIChpLCBlbG0pIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5m
aW5kKCJvcHRpb24iKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzPQouc2VsZWN0ZWQg
JiYgIXRoaXMuZGlzYWJsZWQgfSkuZWFjaDIoZnVuY3Rpb24gKGksIGVsbSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YS5wdXNoKHNlbGYub3B0aW9uVG9EYXRhKGVsbSkpOwogICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7CkBA
IC0yNDE3LDYgKzI2MzQsNyBAQAogICAgICAgICAgICAgcmV0dXJuIG9wdHM7CiAgICAgICAgIH0s
Cj0yMAorICAgICAgICAvLyBtdWx0aQogICAgICAgICBzZWxlY3RDaG9pY2U6IGZ1bmN0aW9uIChj
aG9pY2UpIHsKPTIwCiAgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPTNEIHRoaXMuY29udGFpbmVy
LmZpbmQoIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2UtZj0Kb2N1cyIpOwpAQCAtMjQ0MCw2ICsyNjU4
LDExIEBACiAgICAgICAgICAgICAkKCJsYWJlbFtmb3I9M0QnIiArIHRoaXMuc2VhcmNoLmF0dHIo
J2lkJykgKyAiJ10iKQogICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlzLm9wdHMuZWxl
bWVudC5hdHRyKCJpZCIpKTsKICAgICAgICAgICAgIHRoaXMucGFyZW50LmRlc3Ryb3kuYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICAgICAgY2xlYW51cEpRdWVyeUVsZW1lbnRzLmNh
bGwodGhpcywKKyAgICAgICAgICAgICAgICAic2VhcmNoQ29udGFpbmVyIiwKKyAgICAgICAgICAg
ICAgICAic2VsZWN0aW9uIgorICAgICAgICAgICAgKTsKICAgICAgICAgfSwKPTIwCiAgICAgICAg
IC8vIG11bHRpCkBAIC0yNDU5LDEwICsyNjgyLDEzIEBACj0yMAogICAgICAgICAgICAgLy8gcmV3
cml0ZSBsYWJlbHMgZnJvbSBvcmlnaW5hbCBlbGVtZW50IHRvIGZvY3Vzc2VyCiAgICAgICAgICAg
ICB0aGlzLnNlYXJjaC5hdHRyKCJpZCIsICJzMmlkX2F1dG9nZW4iK25leHRVaWQoKSk7Ci0gICAg
ICAgICAgICAkKCJsYWJlbFtmb3I9M0QnIiArIHRoaXMub3B0cy5lbGVtZW50LmF0dHIoImlkIikg
KyAiJ10iKQorCisgICAgICAgICAgICB0aGlzLnNlYXJjaC5wcmV2KCkKKyAgICAgICAgICAgICAg
ICAudGV4dCgkKCJsYWJlbFtmb3I9M0QnIiArIHRoaXMub3B0cy5lbGVtZW50LmF0dHIoImlkIikg
KyAiPQonXSIpLnRleHQoKSkKICAgICAgICAgICAgICAgICAuYXR0cignZm9yJywgdGhpcy5zZWFy
Y2guYXR0cignaWQnKSk7Cj0yMAogICAgICAgICAgICAgdGhpcy5zZWFyY2gub24oImlucHV0IHBh
c3RlIiwgdGhpcy5iaW5kKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLnNl
YXJjaC5hdHRyKCdwbGFjZWhvbGRlcicpICYmIHRoaXMuc2VhcmNoLnZhbCgpLmw9CmVuZ3RoID0z
RD0zRCAwKSByZXR1cm47CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW50ZXJmYWNlRW5h
YmxlZCgpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpOwpAQCAtMjQ5MSwxMyArMjcxNywxNSBAQAog
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaG9pY2UgPTNEIG5leHQubGVuZ3RoID8g
bmV4dCA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoZS53aGljaCA9M0Q9M0Q9M0QgS0VZLkJBQ0tTUEFDRSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy51bnNlbGVjdChzZWxlY3RlZC5maXJzdCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2VhcmNoLndpZHRoKDEwKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGVkQ2hvaWNlID0zRCBwcmV2Lmxlbmd0aCA/IHByZXYgOiBuZXh0OworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3Qoc2VsZWN0ZWQuZmlyc3QoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC53aWR0aCgxMCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaG9pY2UgPTNEIHByZXYubGVuZ3RoID8g
cHJldiA6IG5leHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZS53aGljaCA9M0Q9M0QgS0VZLkRFTEVURSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy51bnNlbGVjdChzZWxlY3RlZC5maXJzdCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2VhcmNoLndpZHRoKDEwKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGVkQ2hvaWNlID0zRCBuZXh0Lmxlbmd0aCA/IG5leHQgOiBudWxsOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3Qoc2VsZWN0ZWQuZmlyc3QoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC53aWR0aCgxMCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaG9pY2UgPTNEIG5leHQubGVuZ3RoID8g
bmV4dCA6IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZS53aGljaCA9M0Q9M0QgS0VZLkVOVEVSKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RlZENob2ljZSA9M0QgbnVsbDsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMjY3NSw4ICsyOTAzLDE5IEBACj0yMAogICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJj
aCgpOwo9MjAKKyAgICAgICAgICAgIC8vIGluaXRpYWxpemVzIHNlYXJjaCdzIHZhbHVlIHdpdGgg
bmV4dFNlYXJjaFRlcm0gKGlmIGRlZmluZWQgPQpieSB1c2VyKQorICAgICAgICAgICAgLy8gaWdu
b3JlIG5leHRTZWFyY2hUZXJtIGlmIHRoZSBkcm9wZG93biBpcyBvcGVuZWQgYnkgdGhlIHVzZXI9
CiBwcmVzc2luZyBhIGxldHRlcgorICAgICAgICAgICAgaWYodGhpcy5zZWFyY2gudmFsKCkgPTNE
PTNEPTNEICIiKSB7CisgICAgICAgICAgICAgICAgaWYodGhpcy5uZXh0U2VhcmNoVGVybSAhPTNE
IHVuZGVmaW5lZCl7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLnZhbCh0aGlzLm5l
eHRTZWFyY2hUZXJtKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2guc2VsZWN0KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB0aGlzLnVw
ZGF0ZVJlc3VsdHModHJ1ZSk7Ci0gICAgICAgICAgICB0aGlzLnNlYXJjaC5mb2N1cygpOworICAg
ICAgICAgICAgaWYgKHRoaXMub3B0cy5zaG91bGRGb2N1c0lucHV0KHRoaXMpKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoJC5FdmVudCgic2VsZWN0Mi1vcGVuIikpOwogICAg
ICAgICB9LAo9MjAKQEAgLTI3MzMsMTIgKzI5NzIsMTggQEAKICAgICAgICAgLy8gbXVsdGkKICAg
ICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRhLCBvcHRpb25zKSB7Cj0yMAotICAgICAgICAg
ICAgaWYgKCF0aGlzLnRyaWdnZXJTZWxlY3QoZGF0YSkpIHsgcmV0dXJuOyB9CisgICAgICAgICAg
ICBpZiAoIXRoaXMudHJpZ2dlclNlbGVjdChkYXRhKSB8fCBkYXRhLnRleHQgPTNEPTNEPTNEICIi
KSB7IHJldD0KdXJuOyB9Cj0yMAogICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3RlZENob2ljZShk
YXRhKTsKPTIwCiAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKHsgdHlwZTog
InNlbGVjdGVkIiwgdmFsOiB0aGlzLmlkKGRhdD0KYSksIGNob2ljZTogZGF0YSB9KTsKPTIwCisg
ICAgICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBzZWFyY2gncyB2YWx1ZSBiZWZvcmUgaXQg
Z2V0cyBjbGVhcmVkCisgICAgICAgICAgICB0aGlzLm5leHRTZWFyY2hUZXJtID0zRCB0aGlzLm9w
dHMubmV4dFNlYXJjaFRlcm0oZGF0YSwgdGhpcy5zZT0KYXJjaC52YWwoKSk7CisKKyAgICAgICAg
ICAgIHRoaXMuY2xlYXJTZWFyY2goKTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlUmVzdWx0cygp
OworCiAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3QgfHwgIXRoaXMub3B0cy5jbG9zZU9uU2Vs
ZWN0KSB0aGlzLnBvc3Rwcm9jZXNzUj0KZXN1bHRzKGRhdGEsIGZhbHNlLCB0aGlzLm9wdHMuY2xv
c2VPblNlbGVjdD0zRD0zRD0zRHRydWUpOwo9MjAKICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMu
Y2xvc2VPblNlbGVjdCkgewpAQCAtMjc1Miw2ICsyOTk3LDEzIEBACiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpZiB3ZSByZWFjaGVkIG1heCBzZWxlY3Rpb24gc2l6ZSByZXBhaW50IHRoZSBy
ZT0Kc3VsdHMgc28gY2hvaWNlcwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHJlcGxh
Y2VkIHdpdGggdGhlIG1heCBzZWxlY3Rpb24gcmVhY2hlZCBtZXM9CnNhZ2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudXBkYXRlUmVzdWx0cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVzIHNlYXJj
aCdzIHZhbHVlIHdpdGggbmV4dFNlYXJjaFRlcm0gPQphbmQgdXBkYXRlIHNlYXJjaCByZXN1bHQK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubmV4dFNlYXJjaFRlcm0gIT0zRCB1bmRl
ZmluZWQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLnZhbCh0aGlz
Lm5leHRTZWFyY2hUZXJtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0
ZVJlc3VsdHMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5zZWxl
Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uRHJvcGRvd24oKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewpAQCAtMjc2MSw3ICszMDEzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Cj0yMAotICAgICAgICAgICAgLy8gc2luY2UgaXQncyBub3QgcG9zc2libGUg
dG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBoYXMgYWxyZWE9CmR5IGJlZW4KKyAgICAgICAgICAg
IC8vIHNpbmNlIGl0cyBub3QgcG9zc2libGUgdG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBoYXMg
YWxyZWFkPQp5IGJlZW4KICAgICAgICAgICAgIC8vIGFkZGVkIHdlIGRvIG5vdCBuZWVkIHRvIGNo
ZWNrIGlmIHRoaXMgaXMgYSBuZXcgZWxlbWVudCBiZWZvPQpyZSBmaXJpbmcgY2hhbmdlCiAgICAg
ICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoeyBhZGRlZDogZGF0YSB9KTsKPTIwCkBAIC0yNzgw
LDcgKzMwMzIsNyBAQAogICAgICAgICAgICAgICAgIGVuYWJsZWRJdGVtID0zRCAkKAogICAgICAg
ICAgICAgICAgICAgICAiPGxpIGNsYXNzPTNEJ3NlbGVjdDItc2VhcmNoLWNob2ljZSc+IiArCiAg
ICAgICAgICAgICAgICAgICAgICIgICAgPGRpdj48L2Rpdj4iICsKLSAgICAgICAgICAgICAgICAg
ICAgIiAgICA8YSBocmVmPTNEJyMnIG9uY2xpY2s9M0QncmV0dXJuIGZhbHNlOycgY2xhc3M9M0Qn
PQpzZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xvc2UnIHRhYmluZGV4PTNEJy0xJz48L2E+IiArCisg
ICAgICAgICAgICAgICAgICAgICIgICAgPGEgaHJlZj0zRCcjJyBjbGFzcz0zRCdzZWxlY3QyLXNl
YXJjaC1jaG9pY2UtY2xvcz0KZScgdGFiaW5kZXg9M0QnLTEnPjwvYT4iICsKICAgICAgICAgICAg
ICAgICAgICAgIjwvbGk+IiksCiAgICAgICAgICAgICAgICAgZGlzYWJsZWRJdGVtID0zRCAkKAog
ICAgICAgICAgICAgICAgICAgICAiPGxpIGNsYXNzPTNEJ3NlbGVjdDItc2VhcmNoLWNob2ljZSBz
ZWxlY3QyLWxvY2tlZCc+IiArCkBAIC0yODA3LDEzICszMDU5LDExIEBACiAgICAgICAgICAgICAg
ICAgICAub24oImNsaWNrIGRibGNsaWNrIiwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CiAgICAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpIHJldHVybjsKPTIw
Ci0gICAgICAgICAgICAgICAgICAkKGUudGFyZ2V0KS5jbG9zZXN0KCIuc2VsZWN0Mi1zZWFyY2gt
Y2hvaWNlIikuZmFkZU91dCgnZj0KYXN0JywgdGhpcy5iaW5kKGZ1bmN0aW9uKCl7Ci0gICAgICAg
ICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdCgkKGUudGFyZ2V0KSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1
cyIpLj0KcmVtb3ZlQ2xhc3MoInNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1cyIpOwotICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmZvY3VzU2VhcmNoKCk7Ci0gICAgICAgICAgICAgICAgICB9KSkuZGVxdWV1ZSgpOworICAgICAg
ICAgICAgICAgICAgdGhpcy51bnNlbGVjdCgkKGUudGFyZ2V0KSk7CisgICAgICAgICAgICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWZvY3VzIikucmVt
bz0KdmVDbGFzcygic2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWZvY3VzIik7CiAgICAgICAgICAgICAg
ICAgICBraWxsRXZlbnQoZSk7CisgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7CisgICAg
ICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoKCk7CiAgICAgICAgICAgICAgIH0pKS5vbigi
Zm9jdXMiLCB0aGlzLmJpbmQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLmlzSW50ZXJmYWNlRW5hYmxlZCgpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgICB0aGlz
LmNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIik7CkBAIC0yODMz
LDcgKzMwODMsNiBAQAogICAgICAgICAgICAgdmFyIHZhbCA9M0QgdGhpcy5nZXRWYWwoKSwKICAg
ICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgIGluZGV4OwotCiAgICAgICAgICAg
ICBzZWxlY3RlZCA9M0Qgc2VsZWN0ZWQuY2xvc2VzdCgiLnNlbGVjdDItc2VhcmNoLWNob2ljZSIp
Owo9MjAKICAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPTNEPTNEPTNEIDApIHsKQEAg
LTI4NDgsMTUgKzMwOTcsMjcgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Cj0yMAorICAgICAgICAgICAgdmFyIGV2dCA9M0QgJC5FdmVudCgic2VsZWN0Mi1yZW1vdmlu
ZyIpOworICAgICAgICAgICAgZXZ0LnZhbCA9M0QgdGhpcy5pZChkYXRhKTsKKyAgICAgICAgICAg
IGV2dC5jaG9pY2UgPTNEIGRhdGE7CisgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmln
Z2VyKGV2dCk7CisKKyAgICAgICAgICAgIGlmIChldnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIHdoaWxlKChpbmRleCA9M0QgaW5kZXhPZih0aGlzLmlkKGRhdGEpLCB2YWwpKSA+PTNEIDAp
IHsKICAgICAgICAgICAgICAgICB2YWwuc3BsaWNlKGluZGV4LCAxKTsKICAgICAgICAgICAgICAg
ICB0aGlzLnNldFZhbCh2YWwpOwogICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhp
cy5wb3N0cHJvY2Vzc1Jlc3VsdHMoKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc2Vs
ZWN0ZWQucmVtb3ZlKCk7Cj0yMAotICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dl
cih7IHR5cGU6ICJyZW1vdmVkIiwgdmFsOiB0aGlzLmlkKGRhdGE9CiksIGNob2ljZTogZGF0YSB9
KTsKKyAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoeyB0eXBlOiAic2VsZWN0
Mi1yZW1vdmVkIiwgdmFsOiB0aGlzPQouaWQoZGF0YSksIGNob2ljZTogZGF0YSB9KTsKICAgICAg
ICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSh7IHJlbW92ZWQ6IGRhdGEgfSk7CisKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gbXVsdGkKQEAgLTI4
NzYsNyArMzEzNyw3IEBACiAgICAgICAgICAgICB9KTsKPTIwCiAgICAgICAgICAgICBjb21wb3Vu
ZC5lYWNoMihmdW5jdGlvbihpLCBjaG9pY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBoaWRlIGFu
IG9wdGdyb3VwIGlmIGl0IGRvZXNudCBoYXZlIGFueSBzZWxlY3RhYmxlIGNoaWxkPQpyZW4KKyAg
ICAgICAgICAgICAgICAvLyBoaWRlIGFuIG9wdGdyb3VwIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbnkg
c2VsZWN0YWJsZSBjaGlsPQpkcmVuCiAgICAgICAgICAgICAgICAgaWYgKCFjaG9pY2UuaXMoJy5z
ZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlJykKICAgICAgICAgICAgICAgICAgICAgJiYgY2hvaWNl
LmZpbmQoIi5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlOm5vdCguc2VsZWN0PQoyLXNlbGVjdGVk
KSIpLmxlbmd0aCA9M0Q9M0Q9M0QgMCkgewogICAgICAgICAgICAgICAgICAgICBjaG9pY2UuYWRk
Q2xhc3MoInNlbGVjdDItc2VsZWN0ZWQiKTsKQEAgLTI4ODcsMTEgKzMxNDgsMTEgQEAKICAgICAg
ICAgICAgICAgICBzZWxmLmhpZ2hsaWdodCgwKTsKICAgICAgICAgICAgIH0KPTIwCi0gICAgICAg
ICAgICAvL0lmIGFsbCByZXN1bHRzIGFyZSBjaG9zZW4gcmVuZGVyIGZvcm1hdE5vTUF0Y2hlcwor
ICAgICAgICAgICAgLy9JZiBhbGwgcmVzdWx0cyBhcmUgY2hvc2VuIHJlbmRlciBmb3JtYXROb01h
dGNoZXMKICAgICAgICAgICAgIGlmKCF0aGlzLm9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlICYmICFj
aG9pY2VzLmZpbHRlcignLnNlbGVjdDItPQpyZXN1bHQ6bm90KC5zZWxlY3QyLXNlbGVjdGVkKScp
Lmxlbmd0aCA+IDApewogICAgICAgICAgICAgICAgIGlmKCFkYXRhIHx8IGRhdGEgJiYgIWRhdGEu
bW9yZSAmJiB0aGlzLnJlc3VsdHMuZmluZCgiLnNlbGU9CmN0Mi1uby1yZXN1bHRzIikubGVuZ3Ro
ID0zRD0zRD0zRCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0Zvcm1hdHRlcihz
ZWxmLm9wdHMuZm9ybWF0Tm9NYXRjaGVzLCAiZm9ybWF0Tj0Kb01hdGNoZXMiKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmFwcGVuZCgiPGxpIGNsYXNzPTNEJ3NlbGVj
dDItbm8tcmVzdWw9CnRzJz4iICsgc2VsZi5vcHRzLmZvcm1hdE5vTWF0Y2hlcyhzZWxmLnNlYXJj
aC52YWwoKSkgKyAiPC9saT4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0
cy5hcHBlbmQoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3VsPQp0cyc+IiArIGV2YWx1YXRl
KHNlbGYub3B0cy5mb3JtYXROb01hdGNoZXMsIHNlbGYub3B0cy5lbGVtZW50LCBzZWxmLnNlYXJj
aC49CnZhbCgpKSArICI8L2xpPiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjk2OSw3ICszMjMwLDkgQEAKICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBqID0zRCAwOyBqIDwgb2xkLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChlcXVhbCh0aGlzLm9wdHMuaWQoY3VycmVudFtpXSksIHRoaXMub3B0cy5p
ZChvbGRbaj0KXSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnNwbGljZShp
LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmKGk+MCl7CisgICAgICAgICAgICAgICAgICAgICAgICAJaS0tOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgb2xkLnNwbGljZShqLCAxKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGotLTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
Mjk4Miw3ICszMjQ1LDcgQEAKPTIwCiAgICAgICAgIC8vIG11bHRpCiAgICAgICAgIHZhbDogZnVu
Y3Rpb24gKHZhbCwgdHJpZ2dlckNoYW5nZSkgewotICAgICAgICAgICAgdmFyIG9sZERhdGEsIHNl
bGY9M0R0aGlzLCBjaGFuZ2VEZXRhaWxzOworICAgICAgICAgICAgdmFyIG9sZERhdGEsIHNlbGY9
M0R0aGlzOwo9MjAKICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID0zRD0zRD0zRCAw
KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsKCk7CkBAIC0zMDIxLDcgKzMy
ODQsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZVNlbGVjdGlvbihkYXRhKTsK
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhclNlYXJjaCgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAodHJpZ2dlckNoYW5nZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50
cmlnZ2VyQ2hhbmdlKHNlbGYuYnVpbGRDaGFuZ2VEZXRhaWxzKG9sZERhdGE9CiwgdGhpcy5kYXRh
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlckNoYW5nZShzZWxmLmJ1
aWxkQ2hhbmdlRGV0YWlscyhvbGREYXRhPQosIHNlbGYuZGF0YSgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KQEAgLTMwNjUsNyAr
MzMyOCw3IEBACiAgICAgICAgICAgICB2YXIgc2VsZj0zRHRoaXMsIGlkcywgb2xkOwogICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPTNEPTNEPTNEIDApIHsKICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAuZmluZCgiLnNl
bGVjdDItc2VhcmNoLWNob2ljZSIpCisgICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oIi5z
ZWxlY3QyLXNlYXJjaC1jaG9pY2UiKQogICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlv
bigpIHsgcmV0dXJuICQodGhpcykuZGF0YSgic2VsZWN0Mi1kYXRhIik9CjsgfSkKICAgICAgICAg
ICAgICAgICAgICAgIC5nZXQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMTA1LDcgKzMz
NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoInRhZ3MiIGluIG9wdHMpIHtvcHRzLm11
bHRpcGxlID0zRCBtdWx0aXBsZSA9M0QgdHI9CnVlO30KICAgICAgICAgICAgICAgICB9Cj0yMAot
ICAgICAgICAgICAgICAgIHNlbGVjdDIgPTNEIG11bHRpcGxlID8gbmV3IE11bHRpU2VsZWN0Migp
IDogbmV3IFNpbmdsZVNlbGU9CmN0MigpOworICAgICAgICAgICAgICAgIHNlbGVjdDIgPTNEIG11
bHRpcGxlID8gbmV3IHdpbmRvdy5TZWxlY3QyWyJjbGFzcyJdLm11bHRpKCk9CiA6IG5ldyB3aW5k
b3cuU2VsZWN0MlsiY2xhc3MiXS5zaW5nbGUoKTsKICAgICAgICAgICAgICAgICBzZWxlY3QyLmlu
aXQob3B0cyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZihhcmdzWzBdKSA9M0Q9M0Q9
M0QgInN0cmluZyIpIHsKPTIwCkBAIC0zMTI5LDcgKzMzOTIsNyBAQAogICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9M0Qgc2VsZWN0MlttZXRob2RdLmFwcGx5KHNlbGVjdDIsIGFyZ3Muc2xpY2Uo
MSk9Cik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChpbmRleE9mKGFy
Z3NbMF0sIHZhbHVlTWV0aG9kcykgPj0zRCAwCi0gICAgICAgICAgICAgICAgICAgIHx8IChpbmRl
eE9mKGFyZ3NbMF0sIHByb3BlcnR5TWV0aG9kcykgJiYgYXJncy5sZW5ndGggPQo9M0Q9M0QgMSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgfHwgKGluZGV4T2YoYXJnc1swXSwgcHJvcGVydHlNZXRo
b2RzKSA+PTNEIDAgJiYgYXJncy5sPQplbmd0aCA9M0Q9M0QgMSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhYm9ydCB0aGUgaXRlcmF0aW9uLCByZWFkeSB0byByZXR1
cm4gPQpmaXJzdCBtYXRjaGVkIHZhbHVlCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIHsKQEAgLTMxNjAsMTkgKzM0MjMsMTMgQEAKICAgICAgICAgc29ydFJlc3VsdHM6IGZ1
bmN0aW9uIChyZXN1bHRzLCBjb250YWluZXIsIHF1ZXJ5KSB7CiAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0czsKICAgICAgICAgfSwKLSAgICAgICAgZm9ybWF0UmVzdWx0Q3NzQ2xhc3M6IGZ1bmN0
aW9uKGRhdGEpIHtyZXR1cm4gdW5kZWZpbmVkO30sCisgICAgICAgIGZvcm1hdFJlc3VsdENzc0Ns
YXNzOiBmdW5jdGlvbihkYXRhKSB7cmV0dXJuIGRhdGEuY3NzO30sCiAgICAgICAgIGZvcm1hdFNl
bGVjdGlvbkNzc0NsYXNzOiBmdW5jdGlvbihkYXRhLCBjb250YWluZXIpIHtyZXR1cm4gdW5kZWZp
bj0KZWQ7fSwKLSAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi
Tm8gbWF0Y2hlcyBmb3VuZCI7IH0sCi0gICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0
aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0zRCBtaW4gLSBpbnB1dD0KLmxlbmd0aDsgcmV0dXJu
ICJQbGVhc2UgZW50ZXIgIiArIG4gKyAiIG1vcmUgY2hhcmFjdGVyIiArIChuID0zRD0zRCAxPyAi
IiA6PQogInMiKTsgfSwKLSAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5w
dXQsIG1heCkgeyB2YXIgbiA9M0QgaW5wdXQubGVuZ3RoPQogLSBtYXg7IHJldHVybiAiUGxlYXNl
IGRlbGV0ZSAiICsgbiArICIgY2hhcmFjdGVyIiArIChuID0zRD0zRCAxPyAiIiA6ICJzIik9Cjsg
fSwKLSAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0
dXJuICJZb3UgY2FuIG9ubHkgc2VsPQplY3QgIiArIGxpbWl0ICsgIiBpdGVtIiArIChsaW1pdCA9
M0Q9M0QgMSA/ICIiIDogInMiKTsgfSwKLSAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9u
IChwYWdlTnVtYmVyKSB7IHJldHVybiAiTG9hZGluZyBtb3JlIHJlc3VsPQp0cy4uLiI7IH0sCi0g
ICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlNlYXJjaGluZy4u
LiI7IH0sCiAgICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiAwLAogICAgICAgICBtaW5p
bXVtSW5wdXRMZW5ndGg6IDAsCiAgICAgICAgIG1heGltdW1JbnB1dExlbmd0aDogbnVsbCwKICAg
ICAgICAgbWF4aW11bVNlbGVjdGlvblNpemU6IDAsCi0gICAgICAgIGlkOiBmdW5jdGlvbiAoZSkg
eyByZXR1cm4gZS5pZDsgfSwKKyAgICAgICAgaWQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID0z
RD0zRCB1bmRlZmluZWQgPyBudWxsIDogZS5pZDsgfSwKICAgICAgICAgbWF0Y2hlcjogZnVuY3Rp
b24odGVybSwgdGV4dCkgewogICAgICAgICAgICAgcmV0dXJuIHN0cmlwRGlhY3JpdGljcygnJyt0
ZXh0KS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3RyaXBEaWE9CmNyaXRpY3MoJycrdGVybSkudG9V
cHBlckNhc2UoKSkgPj0zRCAwOwogICAgICAgICB9LApAQCAtMzE4NCw5ICszNDQxLDQzIEBACiAg
ICAgICAgIHNlbGVjdE9uQmx1cjogZmFsc2UsCiAgICAgICAgIGFkYXB0Q29udGFpbmVyQ3NzQ2xh
c3M6IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIGM7IH0sCiAgICAgICAgIGFkYXB0RHJvcGRvd25Dc3ND
bGFzczogZnVuY3Rpb24oYykgeyByZXR1cm4gbnVsbDsgfSwKLSAgICAgICAgbmV4dFNlYXJjaFRl
cm06IGZ1bmN0aW9uKHNlbGVjdGVkT2JqZWN0LCBjdXJyZW50U2VhcmNoVGVybSkgeyByZXR1PQpy
biB1bmRlZmluZWQ7IH0KKyAgICAgICAgbmV4dFNlYXJjaFRlcm06IGZ1bmN0aW9uKHNlbGVjdGVk
T2JqZWN0LCBjdXJyZW50U2VhcmNoVGVybSkgeyByZXR1PQpybiB1bmRlZmluZWQ7IH0sCisgICAg
ICAgIHNlYXJjaElucHV0UGxhY2Vob2xkZXI6ICcnLAorICAgICAgICBjcmVhdGVTZWFyY2hDaG9p
Y2VQb3NpdGlvbjogJ3RvcCcsCisgICAgICAgIHNob3VsZEZvY3VzSW5wdXQ6IGZ1bmN0aW9uIChp
bnN0YW5jZSkgeworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBkZXRlY3QgdG91Y2ggZGV2aWNl
cworICAgICAgICAgICAgdmFyIHN1cHBvcnRzVG91Y2hFdmVudHMgPTNEICgoJ29udG91Y2hzdGFy
dCcgaW4gd2luZG93KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KG5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzID4gMCkpOworCisgICAgICAgICAgICAvLyBPbmx5
IGRldmljZXMgd2hpY2ggc3VwcG9ydCB0b3VjaCBldmVudHMgc2hvdWxkIGJlIHNwZWNpYWwgYz0K
YXNlZAorICAgICAgICAgICAgaWYgKCFzdXBwb3J0c1RvdWNoRXZlbnRzKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5ldmVy
IGZvY3VzIHRoZSBpbnB1dCBpZiBzZWFyY2ggaXMgZGlzYWJsZWQKKyAgICAgICAgICAgIGlmIChp
bnN0YW5jZS5vcHRzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoIDwgMCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KICAgICB9Owo9MjAKKyAgICAkLmZuLnNlbGVjdDIubG9jYWxlcyA9M0Qg
W107CisKKyAgICAkLmZuLnNlbGVjdDIubG9jYWxlc1snZW4nXSA9M0QgeworICAgICAgICAgZm9y
bWF0TWF0Y2hlczogZnVuY3Rpb24gKG1hdGNoZXMpIHsgaWYgKG1hdGNoZXMgPTNEPTNEPTNEIDEp
IHsgcmU9CnR1cm4gIk9uZSByZXN1bHQgaXMgYXZhaWxhYmxlLCBwcmVzcyBlbnRlciB0byBzZWxl
Y3QgaXQuIjsgfSByZXR1cm4gbWF0Y2hlcz0KICsgIiByZXN1bHRzIGFyZSBhdmFpbGFibGUsIHVz
ZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlLiI7IH0sCisgICAgICAgICBmb3Jt
YXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJObyBtYXRjaGVzIGZvdW5kIjsgfSwK
KyAgICAgICAgIGZvcm1hdEFqYXhFcnJvcjogZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBl
cnJvclRocm93bikgeyByZXR1PQpybiAiTG9hZGluZyBmYWlsZWQiOyB9LAorICAgICAgICAgZm9y
bWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPTNEIG1pbiAt
IGlucHU9CnQubGVuZ3RoOyByZXR1cm4gIlBsZWFzZSBlbnRlciAiICsgbiArICIgb3IgbW9yZSBj
aGFyYWN0ZXIiICsgKG4gPTNEPTNEIDEgPz0KICIiIDogInMiKTsgfSwKKyAgICAgICAgIGZvcm1h
dElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPTNEIGlucHV0Lmxl
bmd0PQpoIC0gbWF4OyByZXR1cm4gIlBsZWFzZSBkZWxldGUgIiArIG4gKyAiIGNoYXJhY3RlciIg
KyAobiA9M0Q9M0QgMSA/ICIiIDogInM9CiIpOyB9LAorICAgICAgICAgZm9ybWF0U2VsZWN0aW9u
VG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICJZb3UgY2FuIG9ubHkgc2U9CmxlY3Qg
IiArIGxpbWl0ICsgIiBpdGVtIiArIChsaW1pdCA9M0Q9M0QgMSA/ICIiIDogInMiKTsgfSwKKyAg
ICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIkxv
YWRpbmcgbW9yZSByZXN1PQpsdHM9RTI9ODA9QTYiOyB9LAorICAgICAgICAgZm9ybWF0U2VhcmNo
aW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiU2VhcmNoaW5nPUUyPTgwPUE2IjsgfSwKKyAgICB9
OworCisgICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCAkLmZuLnNlbGVjdDIubG9j
YWxlc1snZW4nXSk7CisKICAgICAkLmZuLnNlbGVjdDIuYWpheERlZmF1bHRzID0zRCB7CiAgICAg
ICAgIHRyYW5zcG9ydDogJC5hamF4LAogICAgICAgICBwYXJhbXM6IHsKCmRpZmYgLXIgOWY3OTY2
ZTQ4MTQ2NmNmN2EyMjRjMWJiODcwNzhmNjI4MTY1N2JhZCAtciA1YjE3NzY4NDYzMzJjYmZjODA4
ZjA0MT0KZDBmZmM2ZTdmZmRkZDY0MzQgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90
b29scy1mb3JtLWJhc2UuanMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90
b29scy1mb3JtLWJhc2UuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90
b29scy1mb3JtLWJhc2UuanMKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICAgICA9MjAKICAg
ICAgICAgICAgICAgICAvLyBzY3JvbGwgdG8gZmlyc3QgaW5wdXQgZWxlbWVudAogICAgICAgICAg
ICAgICAgIGlmICghc2lsZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICQodGhpcy5jb250YWlu
ZXIpLmFuaW1hdGUoeworICAgICAgICAgICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0
ZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IGlucHV0X2VsZW1lbnQuJGVs
Lm9mZnNldCgpLnRvcCAtIDIwCiAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAg
ICAgICAgICAgfQoKZGlmZiAtciA5Zjc5NjZlNDgxNDY2Y2Y3YTIyNGMxYmI4NzA3OGY2MjgxNjU3
YmFkIC1yIDViMTc3Njg0NjMzMmNiZmM4MDhmMDQxPQpkMGZmYzZlN2ZmZGRkNjQzNCBjbGllbnQv
Z2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0td29ya2Zsb3cuanMKLS0tIGEvY2xp
ZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93LmpzCisrKyBi
L2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS13b3JrZmxvdy5qcwpA
QCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGV4dGVuc2lv
bnMudW5zaGlmdCh7CiAgICAgICAgICAgICAgICAgMCA6ICdMZWF2ZSB1bmNoYW5nZWQnLAotICAg
ICAgICAgICAgICAgIDEgOiAnJworICAgICAgICAgICAgICAgIDEgOiAnX19lbXB0eV9fJwogICAg
ICAgICAgICAgfSk7Cj0yMAogICAgICAgICAgICAgLy8gY3JlYXRlIGN1c3RvbSBzdWIgc2VjdGlv
bgpAQCAtMTUzLDcgKzE1Myw4IEBACiAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ICAgIDog
J25ld3R5cGUnLAogICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdDaGFuZ2UgZGF0
YXR5cGUnLAogICAgICAgICAgICAgICAgICAgICB0eXBlICAgICAgICA6ICdzZWxlY3QnLAotICAg
ICAgICAgICAgICAgICAgICBpZ25vcmUgICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICBp
Z25vcmUgICAgICA6ICdfX2VtcHR5X18nLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAg
ICA6ICdfX2VtcHR5X18nLAogICAgICAgICAgICAgICAgICAgICBvcHRpb25zICAgICA6IGV4dGVu
c2lvbnMsCiAgICAgICAgICAgICAgICAgICAgIGhlbHAgICAgICAgIDogJ1RoaXMgYWN0aW9uIHdp
bGwgY2hhbmdlIHRoZSBkYXRhdHlwZSBvZj0KIHRoZSBvdXRwdXQgdG8gdGhlIGluZGljYXRlZCB2
YWx1ZS4nCiAgICAgICAgICAgICAgICAgfSx7CgpkaWZmIC1yIDlmNzk2NmU0ODE0NjZjZjdhMjI0
YzFiYjg3MDc4ZjYyODE2NTdiYWQgLXIgNWIxNzc2ODQ2MzMyY2JmYzgwOGYwNDE9CmQwZmZjNmU3
ZmZkZGQ2NDM0IGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VsZWN0LWNv
bnRlbnQuanMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1zZWxl
Y3QtY29udGVudC5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xz
LXNlbGVjdC1jb250ZW50LmpzCkBAIC03NSw2ICs3NSw3IEBACiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIHRoaXMuc2VsZWN0X211bHRpcGxlID0zRCBuZXcgVWkuU2VsZWN0LlZpZXcoewog
ICAgICAgICAgICAgICAgIG11bHRpcGxlICAgIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICBzZWFy
Y2hhYmxlICA6IGZhbHNlLAogICAgICAgICAgICAgICAgIGVycm9yX3RleHQgIDogaGRhX2Vycm9y
LAogICAgICAgICAgICAgICAgIG9uY2hhbmdlICAgIDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHNlbGYudHJpZ2dlcignY2hhbmdlJyk7CgpUaGlzIGRpZmYgaXMgc28gYmlnIHRo
YXQgd2UgbmVlZGVkIHRvIHRydW5jYXRlIHRoZSByZW1haW5kZXIuCgpodHRwczovL2JpdGJ1Y2tl
dC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvYzgyYjAxOGZjYWMxLwpDaGFuZ2Vz
ZXQ6ICAgYzgyYjAxOGZjYWMxClVzZXI6ICAgICAgICBtYXJ0ZW5zb24KRGF0ZTogICAgICAgIDIw
MTUtMDItMjMgMTg6MTA6MzQrMDA6MDAKU3VtbWFyeTogICAgIGZpeCBUUyBzZWFyY2ggQVBJIHRv
IGJlIHNlc3Npb25sZXNzCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgNWIxNzc2ODQ2MzMy
Y2JmYzgwOGYwNDFkMGZmYzZlN2ZmZGRkNjQzNCAtciBjODJiMDE4ZmNhYzEyMDkzYzdlM2MwZD0K
YjY1NTg0ZWY5ZmNiMWQ0ZmYgbGliL2dhbGF4eS93ZWJhcHBzL3Rvb2xfc2hlZC9hcGkvc2VhcmNo
LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy90b29sX3NoZWQvYXBpL3NlYXJjaC5weQorKysg
Yi9saWIvZ2FsYXh5L3dlYmFwcHMvdG9vbF9zaGVkL2FwaS9zZWFyY2gucHkKQEAgLTIsOCArMiw3
IEBACiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwogZnJvbSBnYWxheHkgaW1wb3J0IGVn
Z3MKIGZyb20gZ2FsYXh5IGltcG9ydCB1dGlsCi1mcm9tIGdhbGF4eS53ZWIgaW1wb3J0IF9mdXR1
cmVfZXhwb3NlX2FwaSBhcyBleHBvc2VfYXBpCi1mcm9tIGdhbGF4eS53ZWIgaW1wb3J0IF9mdXR1
cmVfZXhwb3NlX2FwaV9yYXdfYW5vbnltb3VzIGFzIGV4cG9zZV9hcGlfcmF3Xz0KYW5vbnltb3Vz
Citmcm9tIGdhbGF4eS53ZWIgaW1wb3J0IF9mdXR1cmVfZXhwb3NlX2FwaV9yYXdfYW5vbnltb3Vz
X2FuZF9zZXNzaW9ubGVzcyBhcz0KIGV4cG9zZV9hcGlfcmF3X2Fub255bW91c19hbmRfc2Vzc2lv
bmxlc3MKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElDb250
cm9sbGVyCiBmcm9tIGdhbGF4eS53ZWJhcHBzLnRvb2xfc2hlZC5zZWFyY2gucmVwb19zZWFyY2gg
aW1wb3J0IFJlcG9TZWFyY2gKIGZyb20gZ2FsYXh5LndlYiBpbXBvcnQgdXJsX2ZvcgpAQCAtMTUs
NyArMTQsNyBAQAo9MjAKIGNsYXNzIFNlYXJjaENvbnRyb2xsZXIgKCBCYXNlQVBJQ29udHJvbGxl
ciApOgo9MjAKLSAgICBAZXhwb3NlX2FwaV9yYXdfYW5vbnltb3VzCisgICAgQGV4cG9zZV9hcGlf
cmF3X2Fub255bW91c19hbmRfc2Vzc2lvbmxlc3MKICAgICBkZWYgc2VhcmNoKCBzZWxmLCB0cmFu
cywgc2VhcmNoX3Rlcm0sICoqa3dkICk6CiAgICAgICAgICIiIj0yMAogICAgICAgICBQZXJmb3Jt
IGEgc2VhcmNoIG92ZXIgdGhlIFdob29zaCBpbmRleC49MjAKQEAgLTQ2LDcgKzQ1LDcgQEAKICAg
ICAgICAgcmVzdWx0cyA9M0QgcmVwb19zZWFyY2guc2VhcmNoKCB0cmFucywgc2VhcmNoX3Rlcm0s
IHBhZ2UgKQogICAgICAgICByZXN1bHRzWyAnaG9zdG5hbWUnIF0gPTNEIHVybF9mb3IoICcvJywg
cXVhbGlmaWVkID0zRCBUcnVlICkKPTIwCi0gICAgICAgIGlmIGpzb25wOgorICAgICAgICBpZiBy
ZXR1cm5fanNvbnA6CiAgICAgICAgICAgICByZXNwb25zZSA9M0QgJyVzKCVzKTsnICUgKCBjYWxs
YmFjaywganNvbi5kdW1wcyggcmVzdWx0cyApICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAg
IHJlc3BvbnNlID0zRCBqc29uLmR1bXBzKCByZXN1bHRzICkKCgpodHRwczovL2JpdGJ1Y2tldC5v
cmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvOGQyNjIwZDE3MmIyLwpDaGFuZ2VzZXQ6
ICAgOGQyNjIwZDE3MmIyClVzZXI6ICAgICAgICBtYXJ0ZW5zb24KRGF0ZTogICAgICAgIDIwMTUt
MDItMjMgMTg6MjU6NDcrMDA6MDAKU3VtbWFyeTogICAgIHJlZmFjdG9yIFRTIGNhdGVnb3JpZXMg
QVBJCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgYzgyYjAxOGZjYWMxMjA5M2M3ZTNjMGRi
NjU1ODRlZjlmY2IxZDRmZiAtciA4ZDI2MjBkMTcyYjIzNzBlOTA1YjhiZD0KYzBjNGYwNGQwMzAw
NDQ2NjkgbGliL2dhbGF4eS93ZWJhcHBzL3Rvb2xfc2hlZC9hcGkvY2F0ZWdvcmllcy5weQotLS0g
YS9saWIvZ2FsYXh5L3dlYmFwcHMvdG9vbF9zaGVkL2FwaS9jYXRlZ29yaWVzLnB5CisrKyBiL2xp
Yi9nYWxheHkvd2ViYXBwcy90b29sX3NoZWQvYXBpL2NhdGVnb3JpZXMucHkKQEAgLTMsNiArMywx
MSBAQAo9MjAKIGZyb20gZ2FsYXh5IGltcG9ydCB1dGlsCiBmcm9tIGdhbGF4eSBpbXBvcnQgd2Vi
Citmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucworZnJvbSBnYWxheHkud2ViIGltcG9ydCBy
ZXF1aXJlX2FkbWluIGFzIHJlcXVpcmVfYWRtaW4KK2Zyb20gZ2FsYXh5LndlYiBpbXBvcnQgX2Z1
dHVyZV9leHBvc2VfYXBpIGFzIGV4cG9zZV9hcGkKK2Zyb20gZ2FsYXh5LndlYiBpbXBvcnQgX2Z1
dHVyZV9leHBvc2VfYXBpX2Fub255bW91cyBhcyBleHBvc2VfYXBpX2Fub255bW91cworZnJvbSBn
YWxheHkud2ViIGltcG9ydCBfZnV0dXJlX2V4cG9zZV9hcGlfYW5vbnltb3VzX2FuZF9zZXNzaW9u
bGVzcyBhcyBleHA9Cm9zZV9hcGlfYW5vbnltb3VzX2FuZF9zZXNzaW9ubGVzcwogZnJvbSBnYWxh
eHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgQmFzZUFQSUNvbnRyb2xsZXIKIGltcG9ydCB0
b29sX3NoZWQudXRpbC5zaGVkX3V0aWxfY29tbW9uIGFzIHN1Ywo9MjAKQEAgLTE2LDYwICsyMSw1
OSBAQAogICAgICAgICB2YWx1ZV9tYXBwZXIgPTNEIHsgJ2lkJyA6IHRyYW5zLnNlY3VyaXR5LmVu
Y29kZV9pZCB9CiAgICAgICAgIHJldHVybiB2YWx1ZV9tYXBwZXIKPTIwCi0gICAgQHdlYi5leHBv
c2VfYXBpCisgICAgQGV4cG9zZV9hcGkKKyAgICBAcmVxdWlyZV9hZG1pbgogICAgIGRlZiBjcmVh
dGUoIHNlbGYsIHRyYW5zLCBwYXlsb2FkLCAqKmt3ZCApOgogICAgICAgICAiIiIKICAgICAgICAg
UE9TVCAvYXBpL2NhdGVnb3JpZXMKLSAgICAgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGNyZWF0ZWQgY2F0ZWdvcnkuCisgICAgICAgIFJldHVybiBhIGRp
Y3Rpb25hcnkgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNyZWF0ZWQgY2F0ZWdvcnkuCisgICAg
ICAgIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgaW5jbHVkZWQgaW4gdGhlIHBheWxvYWQ6
Cj0yMAotOiAgICAgICBwYXJhbSBrZXk6IHRoZSBjdXJyZW50IEdhbGF4eSBhZG1pbiB1c2VyJ3Mg
QVBJIGtleQotCi0gICAgICAgIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgaW5jbHVkZWQg
aW4gdGhlIHBheWxvYWQuCiAgICAgICAgIDpwYXJhbSBuYW1lIChyZXF1aXJlZCk6IHRoZSBuYW1l
IG9mIHRoZSBjYXRlZ29yeQogICAgICAgICA6cGFyYW0gZGVzY3JpcHRpb24gKG9wdGlvbmFsKTog
dGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeSAoaWY9CiBub3QgcHJvdmlkZWQsIHRoZSBu
YW1lIHdpbGwgYmUgdXNlZCkKKworICAgICAgICBFeGFtcGxlOiBQT1NUIC9hcGkvY2F0ZWdvcmll
cy8/a2V5PTNEWFhYWVlZWFhYWVlZCisgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0t
ZGF0YTsgbmFtZT0zRCJuYW1lIiBDYXRlZ29yeV9OYW1lCisgICAgICAgIENvbnRlbnQtRGlzcG9z
aXRpb246IGZvcm0tZGF0YTsgbmFtZT0zRCJkZXNjcmlwdGlvbiIgQ2F0ZWdvcnlfRGVzYz0Kcmlw
dGlvbgogICAgICAgICAiIiIKLSAgICAgICAgY2F0ZWdvcnlfZGljdCA9M0QgZGljdCggbWVzc2Fn
ZSA9M0QgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPTNEICdvaycg
KQotICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgY3VycmVudCB1c2VyJ3MgQVBJIGtleSBwcm92ZXMg
aGUgaXMgYW4gYWRtaW4gdXNlciA9CmluIHRoaXMgVG9vbCBTaGVkLgotICAgICAgICBpZiB0cmFu
cy51c2VyX2lzX2FkbWluKCk6Ci0gICAgICAgICAgICAjIEdldCB0aGUgaW5mb3JtYXRpb24gYWJv
dXQgdGhlIGNhdGVnb3J5IHRvIGJlIGNyZWF0ZWQgZnJvbSB0aD0KZSBwYXlsb2FkLgotICAgICAg
ICAgICAgbmFtZSA9M0QgcGF5bG9hZC5nZXQoICduYW1lJywgJycgKQotICAgICAgICAgICAgaWYg
bmFtZToKLSAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9M0QgcGF5bG9hZC5nZXQoICdkZXNj
cmlwdGlvbicsICcnICkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGVzY3JpcHRpb246Ci0gICAg
ICAgICAgICAgICAgICAgICMgRGVmYXVsdCB0aGUgZGVzY3JpcHRpb24gdG8gdGhlIG5hbWUuCi0g
ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0zRCBuYW1lCi0gICAgICAgICAgICAgICAg
aWYgc3VjLmdldF9jYXRlZ29yeV9ieV9uYW1lKCB0cmFucy5hcHAsIG5hbWUgKToKLSAgICAgICAg
ICAgICAgICAgICAgY2F0ZWdvcnlfZGljdFsgJ21lc3NhZ2UnIF0gPTNEICdBIGNhdGVnb3J5IHdp
dGggdGhhdCBuPQphbWUgYWxyZWFkeSBleGlzdHMnCi0gICAgICAgICAgICAgICAgICAgIGNhdGVn
b3J5X2RpY3RbICdzdGF0dXMnIF0gPTNEICdlcnJvcicKLSAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSB0aGUgY2F0ZWdvcnkKLSAgICAgICAgICAgICAg
ICAgICAgY2F0ZWdvcnkgPTNEIHRyYW5zLmFwcC5tb2RlbC5DYXRlZ29yeSggbmFtZT0zRG5hbWUs
IGRlPQpzY3JpcHRpb249M0RkZXNjcmlwdGlvbiApCi0gICAgICAgICAgICAgICAgICAgIHRyYW5z
LnNhX3Nlc3Npb24uYWRkKCBjYXRlZ29yeSApCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zLnNh
X3Nlc3Npb24uZmx1c2goKQotICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeV9kaWN0ID0zRCBj
YXRlZ29yeS50b19kaWN0KCB2aWV3PTNEJ2VsZW1lbnQnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfbWFwcGVyPTNEc2VsZi49Cl9f
Z2V0X3ZhbHVlX21hcHBlciggdHJhbnMgKSApCi0gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5
X2RpY3RbICdtZXNzYWdlJyBdID0zRCAiQ2F0ZWdvcnkgJyVzJyBoYXMgYmVlbj0KIGNyZWF0ZWQi
ICUgc3RyKCBjYXRlZ29yeS5uYW1lICkKLSAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlfZGlj
dFsgJ3VybCcgXSA9M0Qgd2ViLnVybF9mb3IoIGNvbnRyb2xsZXI9M0QnPQpjYXRlZ29yaWVzJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhY3Rpb249M0Qnc2hvdycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWQ9M0R0cmFucy5zZWN1cj0KaXR5LmVuY29kZV9pZCggY2F0
ZWdvcnkuaWQgKSApCisgICAgICAgIGNhdGVnb3J5X2RpY3QgPTNEIGRpY3QoIG1lc3NhZ2UgPTNE
ICcnLCBzdGF0dXMgPTNEICdvaycgKQorICAgICAgICBuYW1lID0zRCBwYXlsb2FkLmdldCggJ25h
bWUnLCAnJyApCisgICAgICAgIGlmIG5hbWU6CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9M0Qg
cGF5bG9hZC5nZXQoICdkZXNjcmlwdGlvbicsICcnICkKKyAgICAgICAgICAgIGlmIG5vdCBkZXNj
cmlwdGlvbjoKKyAgICAgICAgICAgICAgICAjIERlZmF1bHQgdGhlIGRlc2NyaXB0aW9uIHRvIHRo
ZSBuYW1lLgorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0zRCBuYW1lCisgICAgICAgICAg
ICBpZiBzdWMuZ2V0X2NhdGVnb3J5X2J5X25hbWUoIHRyYW5zLmFwcCwgbmFtZSApOgorICAgICAg
ICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29uZmxpY3QoICdBIGNhdGVnb3J5IHdpdGggdGhh
dCBuYW1lIGFscmU9CmFkeSBleGlzdHMuJyApCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgIGNhdGVnb3J5X2RpY3RbICdtZXNzYWdlJyBdID0zRCAiTWlzc2luZyByZXF1aXJlZCBw
YXJhbWV0ZXI9CiAnbmFtZScuIgotICAgICAgICAgICAgICAgIGNhdGVnb3J5X2RpY3RbICdzdGF0
dXMnIF0gPTNEICdlcnJvcicKKyAgICAgICAgICAgICAgICAjIENyZWF0ZSB0aGUgY2F0ZWdvcnkK
KyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9M0QgdHJhbnMuYXBwLm1vZGVsLkNhdGVnb3J5KCBu
YW1lPTNEbmFtZSwgZGVzY3JpPQpwdGlvbj0zRGRlc2NyaXB0aW9uICkKKyAgICAgICAgICAgICAg
ICB0cmFucy5zYV9zZXNzaW9uLmFkZCggY2F0ZWdvcnkgKQorICAgICAgICAgICAgICAgIHRyYW5z
LnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICAgICAgICAgIGNhdGVnb3J5X2RpY3QgPTNEIGNh
dGVnb3J5LnRvX2RpY3QoIHZpZXc9M0QnZWxlbWVudCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX21hcHBlcj0zRHNlbGYuX19nZT0KdF92
YWx1ZV9tYXBwZXIoIHRyYW5zICkgKQorICAgICAgICAgICAgICAgIGNhdGVnb3J5X2RpY3RbICdt
ZXNzYWdlJyBdID0zRCAiQ2F0ZWdvcnkgJyVzJyBoYXMgYmVlbiBjcmU9CmF0ZWQiICUgc3RyKCBj
YXRlZ29yeS5uYW1lICkKKyAgICAgICAgICAgICAgICBjYXRlZ29yeV9kaWN0WyAndXJsJyBdID0z
RCB3ZWIudXJsX2ZvciggY29udHJvbGxlcj0zRCdjYXRlPQpnb3JpZXMnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPTNEJ3Nob3cn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWQ9M0R0cmFucy5zZWN1cml0eS49CmVuY29kZV9pZCggY2F0ZWdvcnkuaWQgKSApCiAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBjYXRlZ29yeV9kaWN0WyAnbWVzc2FnZScgXSA9M0QgJ1lvdSBh
cmUgbm90IGF1dGhvcml6ZWQgdG8gY3JlYT0KdGUgYSBjYXRlZ29yeSBpbiB0aGlzIFRvb2wgU2hl
ZC4nCi0gICAgICAgICAgICBjYXRlZ29yeV9kaWN0WyAnc3RhdHVzJyBdID0zRCAnZXJyb3InCisg
ICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLlJlcXVlc3RQYXJhbWV0ZXJNaXNzaW5nRXhjZXB0
aW9uKCAnTWlzc2luZyByZT0KcXVpcmVkIHBhcmFtZXRlciAibmFtZSIuJyApCiAgICAgICAgIHJl
dHVybiBjYXRlZ29yeV9kaWN0Cj0yMAotICAgIEB3ZWIuZXhwb3NlX2FwaV9hbm9ueW1vdXMKKyAg
ICBAZXhwb3NlX2FwaV9hbm9ueW1vdXNfYW5kX3Nlc3Npb25sZXNzCiAgICAgZGVmIGluZGV4KCBz
ZWxmLCB0cmFucywgZGVsZXRlZD0zREZhbHNlLCAqKmt3ZCApOgogICAgICAgICAiIiIKICAgICAg
ICAgR0VUIC9hcGkvY2F0ZWdvcmllcwotICAgICAgICBSZXR1cm5zIGEgbGlzdCBvZiBkaWN0aW9u
YXJpZXMgdGhhdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGVhY2g9CiBjYXRlZ29yeS4KKyAg
ICAgICAgUmV0dXJuIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgdGhhdCBjb250YWluIGluZm9ybWF0
aW9uIGFib3V0IGVhY2ggPQpDYXRlZ29yeS4KKyAgICAgICA9MjAKKyAgICAgICAgOnBhcmFtIGRl
bGV0ZWQ6IGZsYWcgdXNlZCB0byBpbmNsdWRlIGRlbGV0ZWQgY2F0ZWdvcmllcworCisgICAgICAg
IEV4YW1wbGU6IEdFVCBsb2NhbGhvc3Q6OTAwOS9hcGkvY2F0ZWdvcmllcwogICAgICAgICAiIiIK
LSAgICAgICAgIyBFeGFtcGxlIFVSTDogaHR0cDovL2xvY2FsaG9zdDo5MDA5L2FwaS9jYXRlZ29y
aWVzCiAgICAgICAgIGNhdGVnb3J5X2RpY3RzID0zRCBbXQogICAgICAgICBkZWxldGVkID0zRCB1
dGlsLmFzYm9vbCggZGVsZXRlZCApCisgICAgICAgIGlmIGRlbGV0ZWQgYW5kIG5vdCB0cmFucy51
c2VyX2lzX2FkbWluKCk6CisgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkFkbWluUmVxdWly
ZWRFeGNlcHRpb24oICdPbmx5IGFkbWluaXN0cmF0b3JzID0KY2FuIHF1ZXJ5IGRlbGV0ZWQgY2F0
ZWdvcmllcy4nICkKICAgICAgICAgZm9yIGNhdGVnb3J5IGluIHRyYW5zLnNhX3Nlc3Npb24ucXVl
cnkoIHRyYW5zLmFwcC5tb2RlbC5DYXRlZ29yeSApPQogXAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoIHRyYW5zLmFwcC5tb2RlbC5DYXRlZ29yeS49CnRh
YmxlLmMuZGVsZXRlZCA9M0Q9M0QgZGVsZXRlZCApIFwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAub3JkZXJfYnkoIHRyYW5zLmFwcC5tb2RlbC5DYXRlZ29yPQp5LnRh
YmxlLmMubmFtZSApOgpAQCAtODEsMTUgKzg1LDE2IEBACiAgICAgICAgICAgICBjYXRlZ29yeV9k
aWN0cy5hcHBlbmQoIGNhdGVnb3J5X2RpY3QgKQogICAgICAgICByZXR1cm4gY2F0ZWdvcnlfZGlj
dHMKPTIwCi0gICAgQHdlYi5leHBvc2VfYXBpX2Fub255bW91cworICAgIEBleHBvc2VfYXBpX2Fu
b255bW91c19hbmRfc2Vzc2lvbmxlc3MKICAgICBkZWYgc2hvdyggc2VsZiwgdHJhbnMsIGlkLCAq
Kmt3ZCApOgogICAgICAgICAiIiIKICAgICAgICAgR0VUIC9hcGkvY2F0ZWdvcmllcy97ZW5jb2Rl
ZF9jYXRlZ29yeV9pZH0KLSAgICAgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgaW5mb3JtYXRp
b24gYWJvdXQgYSBjYXRlZ29yeS4KKyAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFyeSBvZiBpbmZv
cm1hdGlvbiBhYm91dCBhIGNhdGVnb3J5Lgo9MjAKLSAgICAgICAgOnBhcmFtIGlkOiB0aGUgZW5j
b2RlZCBpZCBvZiB0aGUgUmVwb3NpdG9yeSBvYmplY3QKKyAgICAgICAgOnBhcmFtIGlkOiB0aGUg
ZW5jb2RlZCBpZCBvZiB0aGUgQ2F0ZWdvcnkgb2JqZWN0CisgICAgICAgPTIwCisgICAgICAgIEV4
YW1wbGU6IEdFVCBsb2NhbGhvc3Q6OTAwOS9hcGkvY2F0ZWdvcmllcy9mOWNhZDdiMDFhNDcyMTM1
CiAgICAgICAgICIiIgotICAgICAgICAjIEV4YW1wbGUgVVJMOiBodHRwOi8vbG9jYWxob3N0Ojkw
MDkvYXBpL2NhdGVnb3JpZXMvZjljYWQ3YjAxYTQ3MjE9CjM1CiAgICAgICAgIGNhdGVnb3J5ID0z
RCBzdWMuZ2V0X2NhdGVnb3J5KCB0cmFucy5hcHAsIGlkICkKICAgICAgICAgaWYgY2F0ZWdvcnkg
aXMgTm9uZToKICAgICAgICAgICAgIGNhdGVnb3J5X2RpY3QgPTNEIGRpY3QoIG1lc3NhZ2UgPTNE
ICdVbmFibGUgdG8gbG9jYXRlIGNhdGVnb3J5PQogcmVjb3JkIGZvciBpZCAlcy4nICUgKCBzdHIo
IGlkICkgKSwKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2Nv
bW1pdHMvOTM1YTYxOGQ3NzRlLwpDaGFuZ2VzZXQ6ICAgOTM1YTYxOGQ3NzRlClVzZXI6ICAgICAg
ICBtYXJ0ZW5zb24KRGF0ZTogICAgICAgIDIwMTUtMDItMjMgMTg6NTM6MTMrMDA6MDAKU3VtbWFy
eTogICAgIGZpeCBlcnJvciBwcmV2ZW50aW5nIGNoYW5nZSBvZiB1c2VybmFtZSBpbiBUUwpBZmZl
Y3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDhkMjYyMGQxNzJiMjM3MGU5MDViOGJkYzBjNGYwNGQw
MzAwNDQ2NjkgLXIgOTM1YTYxOGQ3NzRlN2I3YzQzOTU2NzI9CjIyNTA3ZjBkMTgwNGJhNTFjIHRl
bXBsYXRlcy91c2VyL2luZm8ubWFrbwotLS0gYS90ZW1wbGF0ZXMvdXNlci9pbmZvLm1ha28KKysr
IGIvdGVtcGxhdGVzL3VzZXIvaW5mby5tYWtvCkBAIC05OSwxMyArOTksMTMgQEAKICAgICAgICAg
ICAgICAgICA8bGFiZWw+UHVibGljIG5hbWU6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAlaWYg
dC53ZWJhcHAubmFtZSA9M0Q9M0QgJ3Rvb2xfc2hlZCc6CiAgICAgICAgICAgICAgICAgICAgICVp
ZiB1c2VyLmFjdGl2ZV9yZXBvc2l0b3JpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5w
dXQgdHlwZT0zRCJoaWRkZW4iIG5hbWU9M0QidXNlcm5hbWUiIHZhbHVlPTNEIj0KJHt1c2VybmFt
ZSB8IGh9Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0zRCJoaWRkZW4i
IGlkPTNEIm5hbWVfaW5wdXQiIG5hbWU9M0QidT0Kc2VybmFtZSIgdmFsdWU9M0QiJHt1c2VybmFt
ZSB8IGh9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAke3VzZXJuYW1lIHwgaH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9M0QidG9vbFBhcmFtSGVscCIgc3R5bGU9M0Qi
Y2xlYXI6IGJvdGg7PQoiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3Qg
Y2hhbmdlIHlvdXIgcHVibGljIG5hbWUgYWZ0ZXIgeW91IGg9CmF2ZSBjcmVhdGVkIGEgcmVwb3Np
dG9yeSBpbiB0aGlzIHRvb2wgc2hlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog
ICAgICAgICAgICAgICAgICAgICAlZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1
dCB0eXBlPTNEInRleHQiIG5hbWU9M0QidXNlcm5hbWUiIHNpemU9M0QiNDAiPQogdmFsdWU9M0Qi
JHt1c2VybmFtZSB8IGh9Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0z
RCJ0ZXh0IiBpZD0zRCJuYW1lX2lucHV0IiBuYW1lPTNEInVzZT0Kcm5hbWUiIHNpemU9M0QiNDAi
IHZhbHVlPTNEIiR7dXNlcm5hbWUgfCBofSIvPjxkaXYgY2xhc3M9M0QidG9vbFBhcmFtSGVscCIg
PQpzdHlsZT0zRCJjbGVhcjogYm90aDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlv
dXIgcHVibGljIG5hbWUgcHJvdmlkZXMgYSBtZWFucyBvZiBpZGVudGlmeWk9Cm5nIHlvdSBwdWJs
aWNseSB3aXRoaW4gdGhpcyB0b29sIHNoZWQuIFB1YmxpYwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWVzIG11c3QgYmUgYXQgbGVhc3QgZm91ciBjaGFyYWN0ZXJzIGluIGxlbmc9CnRo
IGFuZCBjb250YWluIG9ubHkgbG93ZXItY2FzZSBsZXR0ZXJzLCBudW1iZXJzLAoKCmh0dHBzOi8v
Yml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9jODFiZWU0Yjc3NWYv
CkNoYW5nZXNldDogICBjODFiZWU0Yjc3NWYKVXNlcjogICAgICAgIGRhbm5vbgpEYXRlOiAgICAg
ICAgMjAxNS0wMi0yMyAyMDowNzo1OCswMDowMApTdW1tYXJ5OiAgICAgQnVnZml4IGZvciBjbGlj
a2luZyBjYW5jZWwgaW4gYSBtZW51IGFuZCBoYXZpbmcgdGhlIGFjdGlvbiBoYXA9CnBlbiBhbnl3
YXkuCkFmZmVjdGVkICM6ICAzIGZpbGVzCgpkaWZmIC1yIDkzNWE2MThkNzc0ZTdiN2M0Mzk1Njcy
MjI1MDdmMGQxODA0YmE1MWMgLXIgYzgxYmVlNGI3NzVmNTc4ZTQ1YWZiYTU9CmZhM2JmNjliYWY3
YTAxNzU4IGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdWkvcG9wdXAtbWVudS5qcwotLS0gYS9j
bGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3VpL3BvcHVwLW1lbnUuanMKKysrIGIvY2xpZW50L2dh
bGF4eS9zY3JpcHRzL212Yy91aS9wb3B1cC1tZW51LmpzCkBAIC01NSw4ICs1NSwxMSBAQAogICAg
ICAgICAgICAgICAgIGlmKCBvcHRpb24uZnVuYyApewogICAgICAgICAgICAgICAgICAgICAkKCB0
aGlzICkuY2hpbGRyZW4oICdhLnBvcHVwbWVudS1vcHRpb24nICkuY2xpY2soIGZ1bmM9CnRpb24o
IGV2ZW50ICl7CiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uZnVuYy5jYWxsKCBtZW51
LCBldmVudCwgb3B0aW9uICk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IHBy
ZXZlbnREZWZhdWx0IG90aGVyd2lzZSBjbGlja2luZyAiY2FuYz0KZWwiCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvbiBhIHB1cmdlIG9yIHNvbWV0aGluZyBzdGlsbCBuYXZpZ2F0ZXMgYW5k
IGNhdT0Kc2VzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0aW9uLgorICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGJ1YmJsZSB1cCBzbyB0aGF0IGFuIG9wdGlvbiBjbGljayB3aWxsIGNhbGwg
dGhlPQogY2xvc2UgYmVoYXZpb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9KTsKCmRpZmYgLXIgOTM1YTYxOGQ3NzRlN2I3YzQzOTU2NzIyMjUwN2YwZDE4MDRiYTUx
YyAtciBjODFiZWU0Yjc3NWY1NzhlNDVhZmJhNT0KZmEzYmY2OWJhZjdhMDE3NTggc3RhdGljL3Nj
cmlwdHMvbXZjL3VpL3BvcHVwLW1lbnUuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvbXZjL3VpL3Bv
cHVwLW1lbnUuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZjL3VpL3BvcHVwLW1lbnUuanMKQEAg
LTU1LDggKzU1LDExIEBACiAgICAgICAgICAgICAgICAgaWYoIG9wdGlvbi5mdW5jICl7CiAgICAg
ICAgICAgICAgICAgICAgICQoIHRoaXMgKS5jaGlsZHJlbiggJ2EucG9wdXBtZW51LW9wdGlvbicg
KS5jbGljayggZnVuYz0KdGlvbiggZXZlbnQgKXsKICAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbi5mdW5jLmNhbGwoIG1lbnUsIGV2ZW50LCBvcHRpb24gKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIG11c3QgcHJldmVudERlZmF1bHQgb3RoZXJ3aXNlIGNsaWNraW5nICJjYW5j
PQplbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIGEgcHVyZ2Ugb3Igc29tZXRoaW5n
IHN0aWxsIG5hdmlnYXRlcyBhbmQgY2F1PQpzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBhY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnViYmxlIHVwIHNvIHRoYXQgYW4gb3B0
aW9uIGNsaWNrIHdpbGwgY2FsbCB0aGU9CiBjbG9zZSBiZWhhdmlvcgotICAgICAgICAgICAgICAg
ICAgICAgICAgLy9yZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwoKZGlmZiAtciA5MzVhNjE4ZDc3NGU3YjdjNDM5
NTY3MjIyNTA3ZjBkMTgwNGJhNTFjIC1yIGM4MWJlZTRiNzc1ZjU3OGU0NWFmYmE1PQpmYTNiZjY5
YmFmN2EwMTc1OCBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3VpL3BvcHVwLW1lbnUuanMKLS0t
IGEvc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy91aS9wb3B1cC1tZW51LmpzCisrKyBiL3N0YXRp
Yy9zY3JpcHRzL3BhY2tlZC9tdmMvdWkvcG9wdXAtbWVudS5qcwpAQCAtMSwxICsxLDEgQEAKLWRl
ZmluZShbXSxmdW5jdGlvbigpe3ZhciBhPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxp
emU6ZnVuY3Rpb24oZCxjPQope3RoaXMuJGJ1dHRvbj0zRGQ7aWYoIXRoaXMuJGJ1dHRvbi5zaXpl
KCkpe3RoaXMuJGJ1dHRvbj0zRCQoIjxkaXYvPiIpfXRoaXM9Ci5vcHRpb25zPTNEY3x8W107dmFy
IGU9M0R0aGlzO3RoaXMuJGJ1dHRvbi5jbGljayhmdW5jdGlvbihmKXskKCIucG9wbWVudS13cj0K
YXBwZXIiKS5yZW1vdmUoKTtlLl9yZW5kZXJBbmRTaG93KGYpO3JldHVybiBmYWxzZX0pfSxfcmVu
ZGVyQW5kU2hvdzpmdW5jdGlvPQpuKGMpe3RoaXMucmVuZGVyKCk7dGhpcy4kZWwuYXBwZW5kVG8o
ImJvZHkiKS5jc3ModGhpcy5fZ2V0U2hvd25Qb3NpdGlvbihjKSk9Ci5zaG93KCk7dGhpcy5fc2V0
VXBDbG9zZUJlaGF2aW9yKCl9LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMuJGVsLmFkZENsYXNzKCJw
bz0KcG1lbnUtd3JhcHBlciIpLmhpZGUoKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KS5odG1s
KHRoaXMudGVtcGxhdGUodGhpcy4kPQpidXR0b24uYXR0cigiaWQiKSx0aGlzLm9wdGlvbnMpKTtp
Zih0aGlzLm9wdGlvbnMubGVuZ3RoKXt2YXIgYz0zRHRoaXM7dGhpcy49CiRlbC5maW5kKCJsaSIp
LmVhY2goZnVuY3Rpb24oZSxkKXt2YXIgZj0zRGMub3B0aW9uc1tlXTtpZihmLmZ1bmMpeyQodGhp
cykuYz0KaGlsZHJlbigiYS5wb3B1cG1lbnUtb3B0aW9uIikuY2xpY2soZnVuY3Rpb24oZyl7Zi5m
dW5jLmNhbGwoYyxnLGYpfSl9fSl9cmV0PQp1cm4gdGhpc30sdGVtcGxhdGU6ZnVuY3Rpb24oZCxj
KXtyZXR1cm5bJzx1bCBpZD0zRCInLGQsJy1tZW51IiBjbGFzcz0zRCJkcm89CnBkb3duLW1lbnUi
PicsdGhpcy5fdGVtcGxhdGVPcHRpb25zKGMpLCI8L3VsPiJdLmpvaW4oIiIpfSxfdGVtcGxhdGVP
cHRpb25zOj0KZnVuY3Rpb24oYyl7aWYoIWMubGVuZ3RoKXtyZXR1cm4iPGxpPihubyBvcHRpb25z
KTwvbGk+In1yZXR1cm4gXy5tYXAoYyxmdW5jPQp0aW9uKGYpe2lmKGYuZGl2aWRlcil7cmV0dXJu
JzxsaSBjbGFzcz0zRCJkaXZpZGVyIj48L2xpPid9ZWxzZXtpZihmLmhlYWRlcik9CntyZXR1cm5b
JzxsaSBjbGFzcz0zRCJoZWFkIj48YSBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKTsiPicsZi5o
dG1sLCI8L2E+PD0KL2xpPiJdLmpvaW4oIiIpfX12YXIgZT0zRGYuaHJlZnx8ImphdmFzY3JpcHQ6
dm9pZCgwKTsiLGc9M0QoZi50YXJnZXQpPygnIHRhPQpyZ2V0PTNEIicrZi50YXJnZXQrJyInKToo
IiIpLGQ9M0QoZi5jaGVja2VkKT8oJzxzcGFuIGNsYXNzPTNEImZhIGZhLWNoZWNrIj49Cjwvc3Bh
bj4nKTooIiIpO3JldHVyblsnPGxpPjxhIGNsYXNzPTNEInBvcHVwbWVudS1vcHRpb24iIGhyZWY9
M0QiJyxlLCciJyxnLD0KIj4iLGQsZi5odG1sLCI8L2E+PC9saT4iXS5qb2luKCIiKX0pLmpvaW4o
IiIpfSxfZ2V0U2hvd25Qb3NpdGlvbjpmdW5jdGlvbihkPQope3ZhciBlPTNEdGhpcy4kZWwud2lk
dGgoKTt2YXIgYz0zRGQucGFnZVgtZS8yO2M9M0RNYXRoLm1pbihjLCQoZG9jdW1lbnQpLnM9CmNy
b2xsTGVmdCgpKyQod2luZG93KS53aWR0aCgpLWUtNSk7Yz0zRE1hdGgubWF4KGMsJChkb2N1bWVu
dCkuc2Nyb2xsTGVmdCgpKz0KNSk7cmV0dXJue3RvcDpkLnBhZ2VZLGxlZnQ6Y319LF9zZXRVcENs
b3NlQmVoYXZpb3I6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXM7PQpmdW5jdGlvbiBjKGcpeyQoZG9j
dW1lbnQpLm9mZigiY2xpY2suY2xvc2VfcG9wdXAiKTtpZih3aW5kb3cucGFyZW50IT0zRD0zRHc9
CmluZG93KXt0cnl7JCh3aW5kb3cucGFyZW50LmRvY3VtZW50KS5vZmYoImNsaWNrLmNsb3NlX3Bv
cHVwIil9Y2F0Y2goZil7fX1lbD0Kc2V7dHJ5eyQoImlmcmFtZSNnYWxheHlfbWFpbiIpLmNvbnRl
bnRzKCkub2ZmKCJjbGljay5jbG9zZV9wb3B1cCIpfWNhdGNoKGYpPQp7fX1lLnJlbW92ZSgpfSQo
Imh0bWwiKS5vbmUoImNsaWNrLmNsb3NlX3BvcHVwIixjKTtpZih3aW5kb3cucGFyZW50IT0zRD0z
RHc9CmluZG93KXt0cnl7JCh3aW5kb3cucGFyZW50LmRvY3VtZW50KS5maW5kKCJodG1sIikub25l
KCJjbGljay5jbG9zZV9wb3B1cCIsYz0KKX1jYXRjaChkKXt9fWVsc2V7dHJ5eyQoImlmcmFtZSNn
YWxheHlfbWFpbiIpLmNvbnRlbnRzKCkub25lKCJjbGljay5jbG9zZV9wPQpvcHVwIixjKX1jYXRj
aChkKXt9fX0sYWRkSXRlbTpmdW5jdGlvbihkLGMpe2M9M0QoYz49M0QwKT9jOnRoaXMub3B0aW9u
cy5sZW49Cmd0aDt0aGlzLm9wdGlvbnMuc3BsaWNlKGMsMCxkKTtyZXR1cm4gdGhpc30scmVtb3Zl
SXRlbTpmdW5jdGlvbihjKXtpZihjPj0zRD0KMCl7dGhpcy5vcHRpb25zLnNwbGljZShjLDEpfXJl
dHVybiB0aGlzfSxmaW5kSW5kZXhCeUh0bWw6ZnVuY3Rpb24oZCl7Zm9yKHZhPQpyIGM9M0QwO2M8
dGhpcy5vcHRpb25zLmxlbmd0aDtjKyspe2lmKF8uaGFzKHRoaXMub3B0aW9uc1tjXSwiaHRtbCIp
JiYodGhpcy49Cm9wdGlvbnNbY10uaHRtbD0zRD0zRD0zRGQpKXtyZXR1cm4gY319cmV0dXJuIG51
bGx9LGZpbmRJdGVtQnlIdG1sOmZ1bmN0aW9uKD0KYyl7cmV0dXJuIHRoaXMub3B0aW9uc1sodGhp
cy5maW5kSW5kZXhCeUh0bWwoYykpXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1PQpybiJQb3B1
cE1lbnUifX0pO2EuY3JlYXRlPTNEZnVuY3Rpb24gYihkLGMpe3JldHVybiBuZXcgYShkLGMpfTth
Lm1ha2VfcG9wdXA9Cm1lbnU9M0RmdW5jdGlvbihkLGUpe3ZhciBjPTNEW107Xy5lYWNoKGUsZnVu
Y3Rpb24oaCxmKXt2YXIgZz0zRHtodG1sOmZ9O2lmKD0KaD0zRD0zRD0zRG51bGwpe2cuaGVhZGVy
PTNEdHJ1ZX1lbHNle2lmKGpRdWVyeS50eXBlKGgpPTNEPTNEPTNEImZ1bmN0aW9uIil7PQpnLmZ1
bmM9M0RofX1jLnB1c2goZyl9KTtyZXR1cm4gbmV3IGEoJChkKSxjKX07YS5jb252ZXJ0TGlua3NU
b09wdGlvbnM9M0RmdW49CmN0aW9uKGUsYyl7ZT0zRCQoZSk7Yz0zRGN8fCJhIjt2YXIgZD0zRFtd
O2UuZmluZChjKS5lYWNoKGZ1bmN0aW9uKGosZyl7dmFyID0KaD0zRHt9LGY9M0QkKGopO2guaHRt
bD0zRGYudGV4dCgpO2lmKGYuYXR0cigiaHJlZiIpKXt2YXIgbD0zRGYuYXR0cigiaHJlZiIpPQos
bT0zRGYuYXR0cigidGFyZ2V0Iiksaz0zRGYuYXR0cigiY29uZmlybSIpO2guZnVuYz0zRGZ1bmN0
aW9uKCl7aWYoKGspJiYoIWM9Cm9uZmlybShrKSkpe3JldHVybn1zd2l0Y2gobSl7Y2FzZSJfcGFy
ZW50Ijp3aW5kb3cucGFyZW50LmxvY2F0aW9uPTNEbDticmVhaz0KO2Nhc2UiX3RvcCI6d2luZG93
LnRvcC5sb2NhdGlvbj0zRGw7YnJlYWs7ZGVmYXVsdDp3aW5kb3cubG9jYXRpb249M0RsfX19ZC5w
PQp1c2goaCl9KTtyZXR1cm4gZH07YS5mcm9tRXhpc3RpbmdEb209M0RmdW5jdGlvbihmLGUsYyl7
Zj0zRCQoZik7ZT0zRCQoZSk7dmE9CnIgZD0zRGEuY29udmVydExpbmtzVG9PcHRpb25zKGUsYyk7
ZS5yZW1vdmUoKTtyZXR1cm4gbmV3IGEoZixkKX07YS5tYWtlX3BvcD0KdXBfbWVudXM9M0RmdW5j
dGlvbihlLGQsZil7ZT0zRGV8fGRvY3VtZW50O2Q9M0RkfHwiZGl2W3BvcHVwbWVudV0iO2Y9M0Rm
fHxmPQp1bmN0aW9uKGcsaCl7cmV0dXJuIiMiK2cuYXR0cigicG9wdXBtZW51Iil9O3ZhciBjPTNE
W107JChlKS5maW5kKGQpLmVhY2goZnU9Cm5jdGlvbigpe3ZhciBnPTNEJCh0aGlzKSxoPTNEJChl
KS5maW5kKGYoZyxlKSk7Yy5wdXNoKGEuZnJvbURvbShoLGcpKTtoLmFkZD0KQ2xhc3MoInBvcHVw
Iil9KTtyZXR1cm4gY307cmV0dXJuIGF9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk
ZWZpbmUoW10sZnVuY3Rpb24oKXt2YXIgYT0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFs
aXplOmZ1bmN0aW9uKGQsYz0KKXt0aGlzLiRidXR0b249M0RkO2lmKCF0aGlzLiRidXR0b24uc2l6
ZSgpKXt0aGlzLiRidXR0b249M0QkKCI8ZGl2Lz4iKX10aGlzPQoub3B0aW9ucz0zRGN8fFtdO3Zh
ciBlPTNEdGhpczt0aGlzLiRidXR0b24uY2xpY2soZnVuY3Rpb24oZil7JCgiLnBvcG1lbnUtd3I9
CmFwcGVyIikucmVtb3ZlKCk7ZS5fcmVuZGVyQW5kU2hvdyhmKTtyZXR1cm4gZmFsc2V9KX0sX3Jl
bmRlckFuZFNob3c6ZnVuY3Rpbz0KbihjKXt0aGlzLnJlbmRlcigpO3RoaXMuJGVsLmFwcGVuZFRv
KCJib2R5IikuY3NzKHRoaXMuX2dldFNob3duUG9zaXRpb24oYykpPQouc2hvdygpO3RoaXMuX3Nl
dFVwQ2xvc2VCZWhhdmlvcigpfSxyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLiRlbC5hZGRDbGFzcygi
cG89CnBtZW51LXdyYXBwZXIiKS5oaWRlKCkuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUifSkuaHRt
bCh0aGlzLnRlbXBsYXRlKHRoaXMuJD0KYnV0dG9uLmF0dHIoImlkIiksdGhpcy5vcHRpb25zKSk7
aWYodGhpcy5vcHRpb25zLmxlbmd0aCl7dmFyIGM9M0R0aGlzO3RoaXMuPQokZWwuZmluZCgibGki
KS5lYWNoKGZ1bmN0aW9uKGUsZCl7dmFyIGY9M0RjLm9wdGlvbnNbZV07aWYoZi5mdW5jKXskKHRo
aXMpLmM9CmhpbGRyZW4oImEucG9wdXBtZW51LW9wdGlvbiIpLmNsaWNrKGZ1bmN0aW9uKGcpe2Yu
ZnVuYy5jYWxsKGMsZyxmKTtnLnByZXZlbj0KdERlZmF1bHQoKX0pfX0pfXJldHVybiB0aGlzfSx0
ZW1wbGF0ZTpmdW5jdGlvbihkLGMpe3JldHVyblsnPHVsIGlkPTNEIicsZCwnPQotbWVudSIgY2xh
c3M9M0QiZHJvcGRvd24tbWVudSI+Jyx0aGlzLl90ZW1wbGF0ZU9wdGlvbnMoYyksIjwvdWw+Il0u
am9pbigiIik9Cn0sX3RlbXBsYXRlT3B0aW9uczpmdW5jdGlvbihjKXtpZighYy5sZW5ndGgpe3Jl
dHVybiI8bGk+KG5vIG9wdGlvbnMpPC9saT4ifT0KcmV0dXJuIF8ubWFwKGMsZnVuY3Rpb24oZil7
aWYoZi5kaXZpZGVyKXtyZXR1cm4nPGxpIGNsYXNzPTNEImRpdmlkZXIiPjwvbGk+PQonfWVsc2V7
aWYoZi5oZWFkZXIpe3JldHVyblsnPGxpIGNsYXNzPTNEImhlYWQiPjxhIGhyZWY9M0QiamF2YXNj
cmlwdDp2b2lkKDA9Cik7Ij4nLGYuaHRtbCwiPC9hPjwvbGk+Il0uam9pbigiIil9fXZhciBlPTNE
Zi5ocmVmfHwiamF2YXNjcmlwdDp2b2lkKDApOyIsZz0KPTNEKGYudGFyZ2V0KT8oJyB0YXJnZXQ9
M0QiJytmLnRhcmdldCsnIicpOigiIiksZD0zRChmLmNoZWNrZWQpPygnPHNwYW4gY2xhPQpzcz0z
RCJmYSBmYS1jaGVjayI+PC9zcGFuPicpOigiIik7cmV0dXJuWyc8bGk+PGEgY2xhc3M9M0QicG9w
dXBtZW51LW9wdGlvbiI9CiBocmVmPTNEIicsZSwnIicsZywiPiIsZCxmLmh0bWwsIjwvYT48L2xp
PiJdLmpvaW4oIiIpfSkuam9pbigiIil9LF9nZXRTaG93bj0KUG9zaXRpb246ZnVuY3Rpb24oZCl7
dmFyIGU9M0R0aGlzLiRlbC53aWR0aCgpO3ZhciBjPTNEZC5wYWdlWC1lLzI7Yz0zRE1hdGguPQpt
aW4oYywkKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrJCh3aW5kb3cpLndpZHRoKCktZS01KTtjPTNE
TWF0aC5tYXgoYywkKGRvY3U9Cm1lbnQpLnNjcm9sbExlZnQoKSs1KTtyZXR1cm57dG9wOmQucGFn
ZVksbGVmdDpjfX0sX3NldFVwQ2xvc2VCZWhhdmlvcjpmdW5jdD0KaW9uKCl7dmFyIGU9M0R0aGlz
O2Z1bmN0aW9uIGMoZyl7JChkb2N1bWVudCkub2ZmKCJjbGljay5jbG9zZV9wb3B1cCIpO2lmKHdp
PQpuZG93LnBhcmVudCE9M0Q9M0R3aW5kb3cpe3RyeXskKHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQp
Lm9mZigiY2xpY2suY2xvc2VfcG89CnB1cCIpfWNhdGNoKGYpe319ZWxzZXt0cnl7JCgiaWZyYW1l
I2dhbGF4eV9tYWluIikuY29udGVudHMoKS5vZmYoImNsaWNrLmNsbz0Kc2VfcG9wdXAiKX1jYXRj
aChmKXt9fWUucmVtb3ZlKCl9JCgiaHRtbCIpLm9uZSgiY2xpY2suY2xvc2VfcG9wdXAiLGMpO2lm
KHdpPQpuZG93LnBhcmVudCE9M0Q9M0R3aW5kb3cpe3RyeXskKHdpbmRvdy5wYXJlbnQuZG9jdW1l
bnQpLmZpbmQoImh0bWwiKS5vbmUoImM9CmxpY2suY2xvc2VfcG9wdXAiLGMpfWNhdGNoKGQpe319
ZWxzZXt0cnl7JCgiaWZyYW1lI2dhbGF4eV9tYWluIikuY29udGVudHMoKT0KLm9uZSgiY2xpY2su
Y2xvc2VfcG9wdXAiLGMpfWNhdGNoKGQpe319fSxhZGRJdGVtOmZ1bmN0aW9uKGQsYyl7Yz0zRChj
Pj0zRDApPQo/Yzp0aGlzLm9wdGlvbnMubGVuZ3RoO3RoaXMub3B0aW9ucy5zcGxpY2UoYywwLGQp
O3JldHVybiB0aGlzfSxyZW1vdmVJdGVtOmY9CnVuY3Rpb24oYyl7aWYoYz49M0QwKXt0aGlzLm9w
dGlvbnMuc3BsaWNlKGMsMSl9cmV0dXJuIHRoaXN9LGZpbmRJbmRleEJ5SHRtbD0KOmZ1bmN0aW9u
KGQpe2Zvcih2YXIgYz0zRDA7Yzx0aGlzLm9wdGlvbnMubGVuZ3RoO2MrKyl7aWYoXy5oYXModGhp
cy5vcHRpb25zPQpbY10sImh0bWwiKSYmKHRoaXMub3B0aW9uc1tjXS5odG1sPTNEPTNEPTNEZCkp
e3JldHVybiBjfX1yZXR1cm4gbnVsbH0sZmluZEk9CnRlbUJ5SHRtbDpmdW5jdGlvbihjKXtyZXR1
cm4gdGhpcy5vcHRpb25zWyh0aGlzLmZpbmRJbmRleEJ5SHRtbChjKSldfSx0b1N0cj0KaW5nOmZ1
bmN0aW9uKCl7cmV0dXJuIlBvcHVwTWVudSJ9fSk7YS5jcmVhdGU9M0RmdW5jdGlvbiBiKGQsYyl7
cmV0dXJuIG5ldyBhPQooZCxjKX07YS5tYWtlX3BvcHVwbWVudT0zRGZ1bmN0aW9uKGQsZSl7dmFy
IGM9M0RbXTtfLmVhY2goZSxmdW5jdGlvbihoLGYpe3Y9CmFyIGc9M0R7aHRtbDpmfTtpZihoPTNE
PTNEPTNEbnVsbCl7Zy5oZWFkZXI9M0R0cnVlfWVsc2V7aWYoalF1ZXJ5LnR5cGUoaCk9Cj0zRD0z
RD0zRCJmdW5jdGlvbiIpe2cuZnVuYz0zRGh9fWMucHVzaChnKX0pO3JldHVybiBuZXcgYSgkKGQp
LGMpfTthLmNvbnZlcj0KdExpbmtzVG9PcHRpb25zPTNEZnVuY3Rpb24oZSxjKXtlPTNEJChlKTtj
PTNEY3x8ImEiO3ZhciBkPTNEW107ZS5maW5kKGMpLmVhPQpjaChmdW5jdGlvbihqLGcpe3ZhciBo
PTNEe30sZj0zRCQoaik7aC5odG1sPTNEZi50ZXh0KCk7aWYoZi5hdHRyKCJocmVmIikpe3Y9CmFy
IGw9M0RmLmF0dHIoImhyZWYiKSxtPTNEZi5hdHRyKCJ0YXJnZXQiKSxrPTNEZi5hdHRyKCJjb25m
aXJtIik7aC5mdW5jPTNEZj0KdW5jdGlvbigpe2lmKChrKSYmKCFjb25maXJtKGspKSl7cmV0dXJu
fXN3aXRjaChtKXtjYXNlIl9wYXJlbnQiOndpbmRvdy5wYXJlPQpudC5sb2NhdGlvbj0zRGw7YnJl
YWs7Y2FzZSJfdG9wIjp3aW5kb3cudG9wLmxvY2F0aW9uPTNEbDticmVhaztkZWZhdWx0OndpbmQ9
Cm93LmxvY2F0aW9uPTNEbH19fWQucHVzaChoKX0pO3JldHVybiBkfTthLmZyb21FeGlzdGluZ0Rv
bT0zRGZ1bmN0aW9uKGYsZSxjKT0Ke2Y9M0QkKGYpO2U9M0QkKGUpO3ZhciBkPTNEYS5jb252ZXJ0
TGlua3NUb09wdGlvbnMoZSxjKTtlLnJlbW92ZSgpO3JldHVybiBuPQpldyBhKGYsZCl9O2EubWFr
ZV9wb3B1cF9tZW51cz0zRGZ1bmN0aW9uKGUsZCxmKXtlPTNEZXx8ZG9jdW1lbnQ7ZD0zRGR8fCJk
aXY9Cltwb3B1cG1lbnVdIjtmPTNEZnx8ZnVuY3Rpb24oZyxoKXtyZXR1cm4iIyIrZy5hdHRyKCJw
b3B1cG1lbnUiKX07dmFyIGM9M0RbXT0KOyQoZSkuZmluZChkKS5lYWNoKGZ1bmN0aW9uKCl7dmFy
IGc9M0QkKHRoaXMpLGg9M0QkKGUpLmZpbmQoZihnLGUpKTtjLnB1c2goPQphLmZyb21Eb20oaCxn
KSk7aC5hZGRDbGFzcygicG9wdXAiKX0pO3JldHVybiBjfTtyZXR1cm4gYX0pOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1j
ZW50cmFsL2NvbW1pdHMvNWVhOWZjMmY3NWFhLwpDaGFuZ2VzZXQ6ICAgNWVhOWZjMmY3NWFhClVz
ZXI6ICAgICAgICBkYW5ub24KRGF0ZTogICAgICAgIDIwMTUtMDItMjMgMjE6Mjg6MDErMDA6MDAK
U3VtbWFyeTogICAgIFZlcmlmeSBhbmQgYXBwbHkgQGptY2hpbHRvbidzIGZpeCBmcm9tIGh0dHBz
Oi8vZ2l0aHViLmNvbS9qbWNoPQppbHRvbi9nYWxheHktY2VudHJhbC9jb21taXQvMzA2YTg2NTU4
YTdlZTdiZTFiYzJkNjhjZDkzOWIxNmI1ZjE4NjNkNCB0byBuZXg9CnQtc3RhYmxlLiAgU2hvdWxk
IGJlIHJlZmFjdG9yZWQgaW50byB1c2luZyB0aGUgc2FtZSBnYWxheHkubWVudS5qcyBvYmplY3Rz
ID0KLS0gSSdtIGFzc3VtaW5nIHRoYXQncyB3aHkgdGhpbmdzIGxpa2UgUG9wdXBNZW51LmZyb21F
eGlzdGluZ0RvbSBleGlzdCBhbmQgPQphcmUgb3RoZXJ3aXNlIHVudXNlZC4KQWZmZWN0ZWQgIzog
IDMgZmlsZXMKCmRpZmYgLXIgYzgxYmVlNGI3NzVmNTc4ZTQ1YWZiYTVmYTNiZjY5YmFmN2EwMTc1
OCAtciA1ZWE5ZmMyZjc1YWFlOGU1MmUxNjRhYj0KNzVjNzFhYzk3ZjgyYmZmMjQgY2xpZW50L2dh
bGF4eS9zY3JpcHRzL2dhbGF4eS5iYXNlLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9n
YWxheHkuYmFzZS5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvZ2FsYXh5LmJhc2UuanMK
QEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBvcHRpb25zWyBsaW5rLnRleHQoKSBdID0zRCB7CiAgICAgICAgICAgICAgICAgICAgIHVybDog
aHJlZiwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiggZXZlbnQgKSB7Cj0yMAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaWYgdGhlcmVzIGNvbmZpcm0gdGV4dCwgc2VuZCB0aGUgZGlhbG9nCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb25maXJtdGV4dCB8fCBjb25maXJtKCBjb25m
aXJtdGV4dCApICkgewpAQCAtMTg1LDcgKzE4NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmNsaWNr
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0KCmRpZmYgLXIgYzgxYmVl
NGI3NzVmNTc4ZTQ1YWZiYTVmYTNiZjY5YmFmN2EwMTc1OCAtciA1ZWE5ZmMyZjc1YWFlOGU1MmUx
NjRhYj0KNzVjNzFhYzk3ZjgyYmZmMjQgc3RhdGljL3NjcmlwdHMvZ2FsYXh5LmJhc2UuanMKLS0t
IGEvc3RhdGljL3NjcmlwdHMvZ2FsYXh5LmJhc2UuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvZ2Fs
YXh5LmJhc2UuanMKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBvcHRpb25zWyBsaW5rLnRleHQoKSBdID0zRCB7CiAgICAgICAgICAgICAg
ICAgICAgIHVybDogaHJlZiwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiggZXZlbnQgKSB7Cj0yMAog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmVzIGNvbmZpcm0gdGV4dCwgc2VuZCB0
aGUgZGlhbG9nCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb25maXJtdGV4dCB8fCBj
b25maXJtKCBjb25maXJtdGV4dCApICkgewpAQCAtMTg1LDcgKzE4NSwxMCBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rLmNsaWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0KCmRp
ZmYgLXIgYzgxYmVlNGI3NzVmNTc4ZTQ1YWZiYTVmYTNiZjY5YmFmN2EwMTc1OCAtciA1ZWE5ZmMy
Zjc1YWFlOGU1MmUxNjRhYj0KNzVjNzFhYzk3ZjgyYmZmMjQgc3RhdGljL3NjcmlwdHMvcGFja2Vk
L2dhbGF4eS5iYXNlLmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9nYWxheHkuYmFzZS5q
cworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvZ2FsYXh5LmJhc2UuanMKQEAgLTEsMSArMSwx
IEBACi0oZnVuY3Rpb24oKXt2YXIgYj0zRDA7dmFyIGM9M0RbIm1zIiwibW96Iiwid2Via2l0Iiwi
byJdO2Zvcih2YXIgYT0zRDA7YTxjLj0KbGVuZ3RoJiYhd2luZG93LnJlcXVlc3RBbmltYXRpb25G
cmFtZTsrK2Epe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9M0R3PQppbmRvd1tjW2FdKyJS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXTt3aW5kb3cuY2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1l
PTNEd2k9Cm5kb3dbY1thXSsiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIl19aWYoIXdpbmRv
dy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpez0Kd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT0z
RGZ1bmN0aW9uKGgsZSl7dmFyIGQ9M0RuZXcgRGF0ZSgpLmdldFRpbWUoKTt2PQphciBmPTNETWF0
aC5tYXgoMCwxNi0oZC1iKSk7dmFyIGc9M0R3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2go
ZCtmKX0sZik9CjtiPTNEZCtmO3JldHVybiBnfX1pZighd2luZG93LmNhbmNlbEFuaW1hdGlvbkZy
YW1lKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRj0KcmFtZT0zRGZ1bmN0aW9uKGQpe2NsZWFyVGlt
ZW91dChkKX19fSgpKTtpZighQXJyYXkuaW5kZXhPZil7QXJyYXkucHJvdG90eXBlPQouaW5kZXhP
Zj0zRGZ1bmN0aW9uKGMpe2Zvcih2YXIgYj0zRDAsYT0zRHRoaXMubGVuZ3RoO2I8YTtiKyspe2lm
KHRoaXNbYl09M0Q9Cj0zRGMpe3JldHVybiBifX1yZXR1cm4gLTF9fWZ1bmN0aW9uIG9ial9sZW5n
dGgoYyl7aWYoYy5sZW5ndGghPTNEPTNEdW5kZWZpbj0KZWQpe3JldHVybiBjLmxlbmd0aH12YXIg
Yj0zRDA7Zm9yKHZhciBhIGluIGMpe2IrK31yZXR1cm4gYn0kLmZuLm1ha2VBYnNvbHV0PQplPTNE
ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2
YXIgYz0zRGIucG9zaXQ9CmlvbigpO2IuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLG1hcmdpbkxl
ZnQ6MCxtYXJnaW5Ub3A6MCx0b3A6Yy50b3AsbGVmdDpjLj0KbGVmdCxyaWdodDokKHdpbmRvdyku
d2lkdGgoKS0oYy5sZWZ0K2Iud2lkdGgoKSl9KTtpZihhKXtiLnJlbW92ZSgpLmFwcGVuZFRvPQoo
ImJvZHkiKX19KX07ZnVuY3Rpb24gbWFrZV9wb3B1cG1lbnUoYixjKXt2YXIgYT0zRChiLmRhdGEo
Im1lbnVfb3B0aW9ucyIpKTs9CmIuZGF0YSgibWVudV9vcHRpb25zIixjKTtpZihhKXtyZXR1cm59
Yi5iaW5kKCJjbGljay5zaG93X3BvcHVwIixmdW5jdGlvbihkKT0KeyQoIi5wb3BtZW51LXdyYXBw
ZXIiKS5yZW1vdmUoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGc9M0QkKCI8dWwgY2xhc3M9
Cj0zRCdkcm9wZG93bi1tZW51JyBpZD0zRCciK2IuYXR0cigiaWQiKSsiLW1lbnUnPjwvdWw+Iik7
dmFyIGY9M0RiLmRhdGEoIm1lbj0KdV9vcHRpb25zIik7aWYob2JqX2xlbmd0aChmKTw9M0QwKXsk
KCI8bGk+Tm8gT3B0aW9ucy48L2xpPiIpLmFwcGVuZFRvKGcpfSQuPQplYWNoKGYsZnVuY3Rpb24o
aixpKXtpZihpKXt2YXIgbD0zRGkuYWN0aW9ufHxpO2cuYXBwZW5kKCQoIjxsaT48L2xpPiIpLmFw
cGU9Cm5kKCQoIjxhPiIpLmF0dHIoImhyZWYiLGkudXJsKS5odG1sKGopLmNsaWNrKGwpKSl9ZWxz
ZXtnLmFwcGVuZCgkKCI8bGk+PC9saT0KPiIpLmFkZENsYXNzKCJoZWFkIikuYXBwZW5kKCQoIjxh
IGhyZWY9M0QnIyc+PC9hPiIpLmh0bWwoaikpKX19KTt2YXIgaD0zRCQoPQoiPGRpdiBjbGFzcz0z
RCdwb3BtZW51LXdyYXBwZXInIHN0eWxlPTNEJ3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwOyB0
b3A6IC09CjEwMDA7Jz48L2Rpdj4iKS5hcHBlbmQoZykuYXBwZW5kVG8oImJvZHkiKTt2YXIgZT0z
RGQucGFnZVgtaC53aWR0aCgpLzI7ZT0zRD0KTWF0aC5taW4oZSwkKGRvY3VtZW50KS5zY3JvbGxM
ZWZ0KCkrJCh3aW5kb3cpLndpZHRoKCktJChoKS53aWR0aCgpLTUpO2U9M0RNPQphdGgubWF4KGUs
JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKzUpO2guY3NzKHt0b3A6ZC5wYWdlWSxsZWZ0OmV9KX0s
MTApO3NldFQ9CmltZW91dChmdW5jdGlvbigpe3ZhciBmPTNEZnVuY3Rpb24oaCl7JChoKS5iaW5k
KCJjbGljay5jbG9zZV9wb3B1cCIsZnVuY3Rpbz0KbigpeyQoIi5wb3BtZW51LXdyYXBwZXIiKS5y
ZW1vdmUoKTtoLnVuYmluZCgiY2xpY2suY2xvc2VfcG9wdXAiKX0pfTtmKCQod2luPQpkb3cuZG9j
dW1lbnQpKTtmKCQod2luZG93LnRvcC5kb2N1bWVudCkpO2Zvcih2YXIgZT0zRHdpbmRvdy50b3Au
ZnJhbWVzLmxlbmc9CnRoO2UtLTspe3ZhciBnPTNEJCh3aW5kb3cudG9wLmZyYW1lc1tlXS5kb2N1
bWVudCk7ZihnKX19LDUwKTtyZXR1cm4gZmFsc2V9KT0KfWZ1bmN0aW9uIG1ha2VfcG9wdXBfbWVu
dXMoYSl7YT0zRGF8fGRvY3VtZW50OyQoYSkuZmluZCgiZGl2W3BvcHVwbWVudV0iKS5lPQphY2go
ZnVuY3Rpb24oKXt2YXIgYj0zRHt9O3ZhciBkPTNEJCh0aGlzKTtkLmZpbmQoImEiKS5lYWNoKGZ1
bmN0aW9uKCl7dmFyIGc9Cj0zRCQodGhpcyksaT0zRGcuZ2V0KDApLGU9M0RpLmdldEF0dHJpYnV0
ZSgiY29uZmlybSIpLGY9M0RpLmdldEF0dHJpYnV0ZSgiaD0KcmVmIiksaD0zRGkuZ2V0QXR0cmli
dXRlKCJ0YXJnZXQiKTtpZighZil7YltnLnRleHQoKV09M0RudWxsfWVsc2V7YltnLnRleHQoPQop
XT0zRHt1cmw6ZixhY3Rpb246ZnVuY3Rpb24oKXtpZighZXx8Y29uZmlybShlKSl7aWYoaCl7d2lu
ZG93Lm9wZW4oZixoKTtyZXQ9CnVybiBmYWxzZX1lbHNle2cuY2xpY2soKX19fX19fSk7dmFyIGM9
M0QkKGEpLmZpbmQoIiMiK2QuYXR0cigicG9wdXBtZW51IikpOz0KYy5maW5kKCJhIikuYmluZCgi
Y2xpY2siLGZ1bmN0aW9uKGYpe2Yuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIHRydWV9KTttYWtl
PQpfcG9wdXBtZW51KGMsYik7Yy5hZGRDbGFzcygicG9wdXAiKTtkLnJlbW92ZSgpfSl9JC5mbi5y
ZWZyZXNoX3NlbGVjdDI9M0RmdW49CmN0aW9uKCl7dmFyIGI9M0QkKHRoaXMpO3ZhciBhPTNEe3Bs
YWNlaG9sZGVyOiJDbGljayB0byBzZWxlY3QiLGNsb3NlT25TZWxlYz0KdDohYi5pcygiW01VTFRJ
UExFXSIpLGRyb3Bkb3duQXV0b1dpZHRoOnRydWUsY29udGFpbmVyQ3NzQ2xhc3M6InNlbGVjdDIt
bWluPQp3aWR0aCJ9O3JldHVybiBiLnNlbGVjdDIoYSl9O2Z1bmN0aW9uIHJlcGxhY2VfYmlnX3Nl
bGVjdF9pbnB1dHMoYSxjLGIpe2lmKCE9CmpRdWVyeS5mbi5zZWxlY3QyKXtyZXR1cm59aWYoYT0z
RD0zRD0zRHVuZGVmaW5lZCl7YT0zRDIwfWlmKGM9M0Q9M0Q9M0R1bmRlZj0KaW5lZCl7Yz0zRDMw
MDB9Yj0zRGJ8fCQoInNlbGVjdCIpO2IuZWFjaChmdW5jdGlvbigpe3ZhciBlPTNEJCh0aGlzKS5u
b3QoIlttPQp1bHRpcGxlXSIpO3ZhciBkPTNEZS5maW5kKCJvcHRpb24iKS5sZW5ndGg7aWYoKGQ8
YSl8fChkPmMpKXtyZXR1cm59aWYoZS5oYXM9CkNsYXNzKCJuby1hdXRvY29tcGxldGUiKSl7cmV0
dXJufWUucmVmcmVzaF9zZWxlY3QyKCl9KX0kLmZuLm1ha2VfdGV4dF9lZGl0YT0KYmxlPTNEZnVu
Y3Rpb24oZyl7dmFyIGQ9M0QoIm51bV9jb2xzIiBpbiBnP2cubnVtX2NvbHM6MzApLGM9M0QoIm51
bV9yb3dzIiBpPQpuIGc/Zy5udW1fcm93czo0KSxlPTNEKCJ1c2VfdGV4dGFyZWEiIGluIGc/Zy51
c2VfdGV4dGFyZWE6ZmFsc2UpLGI9M0QoIm9uX2Y9CmluaXNoIiBpbiBnP2cub25fZmluaXNoOm51
bGwpLGY9M0QoImhlbHBfdGV4dCIgaW4gZz9nLmhlbHBfdGV4dDpudWxsKTt2YXIgYT0KPTNEJCh0
aGlzKTthLmFkZENsYXNzKCJlZGl0YWJsZS10ZXh0IikuY2xpY2soZnVuY3Rpb24obCl7aWYoJCh0
aGlzKS5jaGlsZHJlPQpuKCI6aW5wdXQiKS5sZW5ndGg+MCl7cmV0dXJufWEucmVtb3ZlQ2xhc3Mo
ImVkaXRhYmxlLXRleHQiKTt2YXIgaT0zRGZ1bmN0aW89Cm4obSl7YS5maW5kKCI6aW5wdXQiKS5y
ZW1vdmUoKTtpZihtIT0zRD0zRCIiKXthLnRleHQobSl9ZWxzZXthLmh0bWwoIjxicj4iKT0KfWEu
YWRkQ2xhc3MoImVkaXRhYmxlLXRleHQiKTtpZihiKXtiKG0pfX07dmFyIGg9M0QoImN1cl90ZXh0
IiBpbiBnP2cuY3VyX3RlPQp4dDphLnRleHQoKSksayxqO2lmKGUpe2s9M0QkKCI8dGV4dGFyZWEv
PiIpLmF0dHIoe3Jvd3M6Yyxjb2xzOmR9KS50ZXh0KCQudHI9CmltKGgpKS5rZXl1cChmdW5jdGlv
bihtKXtpZihtLmtleUNvZGU9M0Q9M0Q9M0QyNyl7aShoKX19KTtqPTNEJCgiPGJ1dHRvbi8+Ij0K
KS50ZXh0KCJEb25lIikuY2xpY2soZnVuY3Rpb24oKXtpKGsudmFsKCkpO3JldHVybiBmYWxzZX0p
fWVsc2V7az0zRCQoIjxpbnB1PQp0IHR5cGU9M0QndGV4dCcvPiIpLmF0dHIoe3ZhbHVlOiQudHJp
bShoKSxzaXplOmR9KS5ibHVyKGZ1bmN0aW9uKCl7aShoKX0pLms9CmV5dXAoZnVuY3Rpb24obSl7
aWYobS5rZXlDb2RlPTNEPTNEPTNEMjcpeyQodGhpcykudHJpZ2dlcigiYmx1ciIpfWVsc2V7aWYo
bT0KLmtleUNvZGU9M0Q9M0Q9M0QxMyl7aSgkKHRoaXMpLnZhbCgpKX19bS5zdG9wUHJvcGFnYXRp
b24oKX0pfWEudGV4dCgiIik7YS5hPQpwcGVuZChrKTtpZihqKXthLmFwcGVuZChqKX1rLmZvY3Vz
KCk7ay5zZWxlY3QoKTtsLnN0b3BQcm9wYWdhdGlvbigpfSk7aWYoZik9CnthLmF0dHIoInRpdGxl
IixmKS50b29sdGlwKCl9cmV0dXJuIGF9O2Z1bmN0aW9uIGFzeW5jX3NhdmVfdGV4dChkLGYsZSxh
LGMsaD0KLGksZyxiKXtpZihjPTNEPTNEPTNEdW5kZWZpbmVkKXtjPTNEMzB9aWYoaT0zRD0zRD0z
RHVuZGVmaW5lZCl7aT0zRDR9JCgiIyIrPQpkKS5jbGljayhmdW5jdGlvbigpe2lmKCQoIiNyZW5h
bWluZy1hY3RpdmUiKS5sZW5ndGg+MCl7cmV0dXJufXZhciBsPTNEJCgiIyI9CitmKSxrPTNEbC50
ZXh0KCksajtpZihoKXtqPTNEJCgiPHRleHRhcmVhPjwvdGV4dGFyZWE+IikuYXR0cih7cm93czpp
LGNvbHM6Yz0KfSkudGV4dCgkLnRyaW0oaykpfWVsc2V7aj0zRCQoIjxpbnB1dCB0eXBlPTNEJ3Rl
eHQnPjwvaW5wdXQ+IikuYXR0cih7dmFsdWU6PQokLnRyaW0oayksc2l6ZTpjfSl9ai5hdHRyKCJp
ZCIsInJlbmFtaW5nLWFjdGl2ZSIpO2ouYmx1cihmdW5jdGlvbigpeyQodGhpcyk9Ci5yZW1vdmUo
KTtsLnNob3coKTtpZihiKXtiKGopfX0pO2oua2V5dXAoZnVuY3Rpb24obil7aWYobi5rZXlDb2Rl
PTNEPTNEPTNEMj0KNyl7JCh0aGlzKS50cmlnZ2VyKCJibHVyIil9ZWxzZXtpZihuLmtleUNvZGU9
M0Q9M0Q9M0QxMyl7dmFyIG09M0R7fTttW2FdPTNEPQokKHRoaXMpLnZhbCgpOyQodGhpcykudHJp
Z2dlcigiYmx1ciIpOyQuYWpheCh7dXJsOmUsZGF0YTptLGVycm9yOmZ1bmN0aW9uKCk9CnthbGVy
dCgiVGV4dCBlZGl0aW5nIGZvciBlbHQgIitmKyIgZmFpbGVkIil9LHN1Y2Nlc3M6ZnVuY3Rpb24o
byl7aWYobyE9M0Q9Cj0zRCIiKXtsLnRleHQobyl9ZWxzZXtsLmh0bWwoIjxlbT5Ob25lPC9lbT4i
KX1pZihiKXtiKGopfX19KX19fSk7aWYoZyl7ZyhqKT0KfWwuaGlkZSgpO2ouaW5zZXJ0QWZ0ZXIo
bCk7ai5mb2N1cygpO2ouc2VsZWN0KCk7cmV0dXJufSl9ZnVuY3Rpb24gY29tbWF0aXplPQooYil7
Yis9M0QiIjt2YXIgYT0zRC8oXGQrKShcZHszfSkvO3doaWxlKGEudGVzdChiKSl7Yj0zRGIucmVw
bGFjZShhLCIkMSwkMiI9Cil9cmV0dXJuIGJ9ZnVuY3Rpb24gcmVzZXRfdG9vbF9zZWFyY2goYSl7
dmFyIGM9M0QkKCIjZ2FsYXh5X3Rvb2xzIikuY29udGVudD0KcygpO2lmKGMubGVuZ3RoPTNEPTNE
PTNEMCl7Yz0zRCQoZG9jdW1lbnQpfSQodGhpcykucmVtb3ZlQ2xhc3MoInNlYXJjaF9hY3RpPQp2
ZSIpO2MuZmluZCgiLnRvb2xUaXRsZSIpLnJlbW92ZUNsYXNzKCJzZWFyY2hfbWF0Y2giKTtjLmZp
bmQoIi50b29sU2VjdGlvbkI9Cm9keSIpLmhpZGUoKTtjLmZpbmQoIi50b29sVGl0bGUiKS5zaG93
KCk7Yy5maW5kKCIudG9vbFBhbmVsTGFiZWwiKS5zaG93KCk7Yz0KLmZpbmQoIi50b29sU2VjdGlv
bldyYXBwZXIiKS5lYWNoKGZ1bmN0aW9uKCl7aWYoJCh0aGlzKS5hdHRyKCJpZCIpIT0zRD0zRCJy
PQplY2VudGx5X3VzZWRfd3JhcHBlciIpeyQodGhpcykuc2hvdygpfWVsc2V7aWYoJCh0aGlzKS5o
YXNDbGFzcygidXNlcl9wcmVmX3Y9CmlzaWJsZSIpKXskKHRoaXMpLnNob3coKX19fSk7Yy5maW5k
KCIjc2VhcmNoLW5vLXJlc3VsdHMiKS5oaWRlKCk7Yy5maW5kKCIjcz0KZWFyY2gtc3Bpbm5lciIp
LmhpZGUoKTtpZihhKXt2YXIgYj0zRGMuZmluZCgiI3Rvb2wtc2VhcmNoLXF1ZXJ5Iik7Yi52YWwo
InNlPQphcmNoIHRvb2xzIil9fXZhciBHYWxheHlBc3luYz0zRGZ1bmN0aW9uKGEpe3RoaXMudXJs
X2RpY3Q9M0R7fTt0aGlzLmxvZ19hY3Q9Cmlvbj0zRChhPTNEPTNEPTNEdW5kZWZpbmVkP2ZhbHNl
OmEpfTtHYWxheHlBc3luYy5wcm90b3R5cGUuc2V0X2Z1bmNfdXJsPTNEZj0KdW5jdGlvbihhLGIp
e3RoaXMudXJsX2RpY3RbYV09M0RifTtHYWxheHlBc3luYy5wcm90b3R5cGUuc2V0X3VzZXJfcHJl
Zj0zRGZ1PQpuY3Rpb24oYSxiKXt2YXIgYz0zRHRoaXMudXJsX2RpY3RbYXJndW1lbnRzLmNhbGxl
ZV07aWYoYz0zRD0zRD0zRHVuZGVmaW5lZCk9CntyZXR1cm4gZmFsc2V9JC5hamF4KHt1cmw6Yyxk
YXRhOntwcmVmX25hbWU6YSxwcmVmX3ZhbHVlOmJ9LGVycm9yOmZ1bmN0aW9uKD0KKXtyZXR1cm4g
ZmFsc2V9LHN1Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZX19KX07R2FsYXh5QXN5bmMucHJv
dG90eXBlLmxvPQpnX3VzZXJfYWN0aW9uPTNEZnVuY3Rpb24oYyxiLGQpe2lmKCF0aGlzLmxvZ19h
Y3Rpb24pe3JldHVybn12YXIgYT0zRHRoaXMudXI9CmxfZGljdFthcmd1bWVudHMuY2FsbGVlXTtp
ZihhPTNEPTNEPTNEdW5kZWZpbmVkKXtyZXR1cm4gZmFsc2V9JC5hamF4KHt1cmw6YT0KLGRhdGE6
e2FjdGlvbjpjLGNvbnRleHQ6YixwYXJhbXM6ZH0sZXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gZmFs
c2V9LHN1Y2Nlc3M6PQpmdW5jdGlvbigpe3JldHVybiB0cnVlfX0pfTtmdW5jdGlvbiBpbml0X3Jl
ZnJlc2hfb25fY2hhbmdlKCl7JCgic2VsZWN0W3JlZnI9CmVzaF9vbl9jaGFuZ2U9M0QndHJ1ZSdd
Iikub2ZmKCJjaGFuZ2UiKS5jaGFuZ2UoZnVuY3Rpb24oKXt2YXIgYT0zRCQodGhpcyksZT0KPTNE
YS52YWwoKSxkPTNEZmFsc2UsYz0zRGEuYXR0cigicmVmcmVzaF9vbl9jaGFuZ2VfdmFsdWVzIik7
aWYoYyl7Yz0zRGMuc3BsPQppdCgiLCIpO3ZhciBiPTNEYS5hdHRyKCJsYXN0X3NlbGVjdGVkX3Zh
bHVlIik7aWYoJC5pbkFycmF5KGUsYyk9M0Q9M0Q9M0QtMSY9CiYkLmluQXJyYXkoYixjKT0zRD0z
RD0zRC0xKXtyZXR1cm59fSQod2luZG93KS50cmlnZ2VyKCJyZWZyZXNoX29uX2NoYW5nZSIpOz0K
JChkb2N1bWVudCkudHJpZ2dlcigiY29udmVydF90b192YWx1ZXMiKTthLmdldCgwKS5mb3JtLnN1
Ym1pdCgpfSk7JCgiOmNoZWNrPQpib3hbcmVmcmVzaF9vbl9jaGFuZ2U9M0QndHJ1ZSddIikub2Zm
KCJjbGljayIpLmNsaWNrKGZ1bmN0aW9uKCl7dmFyIGE9M0QkKHQ9CmhpcyksZT0zRGEudmFsKCks
ZD0zRGZhbHNlLGM9M0RhLmF0dHIoInJlZnJlc2hfb25fY2hhbmdlX3ZhbHVlcyIpO2lmKGMpe2M9
Cj0zRGMuc3BsaXQoIiwiKTt2YXIgYj0zRGEuYXR0cigibGFzdF9zZWxlY3RlZF92YWx1ZSIpO2lm
KCQuaW5BcnJheShlLGMpPTNEPQo9M0Q9M0QtMSYmJC5pbkFycmF5KGIsYyk9M0Q9M0Q9M0QtMSl7
cmV0dXJufX0kKHdpbmRvdykudHJpZ2dlcigicmVmcmVzaF9vbl89CmNoYW5nZSIpO2EuZ2V0KDAp
LmZvcm0uc3VibWl0KCl9KTskKCJhW2NvbmZpcm1dIikub2ZmKCJjbGljayIpLmNsaWNrKGZ1bmN0
aT0Kb24oKXtyZXR1cm4gY29uZmlybSgkKHRoaXMpLmF0dHIoImNvbmZpcm0iKSl9KX1qUXVlcnku
Zm4ucHJldmVudERvdWJsZVN1Ym1pPQpzc2lvbj0zRGZ1bmN0aW9uKCl7JCh0aGlzKS5vbigic3Vi
bWl0IixmdW5jdGlvbihiKXt2YXIgYT0zRCQodGhpcyk7aWYoYS5kYXQ9CmEoInN1Ym1pdHRlZCIp
PTNEPTNEPTNEdHJ1ZSl7Yi5wcmV2ZW50RGVmYXVsdCgpfWVsc2V7YS5kYXRhKCJzdWJtaXR0ZWQi
LHRydT0KZSl9fSk7cmV0dXJuIHRoaXN9OyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7aW5p
dF9yZWZyZXNoX29uX2NoYW5nZSgpO2lmPQooJC5mbi50b29sdGlwKXskKCIudW5pZmllZC1wYW5l
bC1oZWFkZXIgW3RpdGxlXSIpLnRvb2x0aXAoe3BsYWNlbWVudDoiYm90dG89Cm0ifSk7JCgiW3Rp
dGxlXSIpLnRvb2x0aXAoKX1tYWtlX3BvcHVwX21lbnVzKCk7cmVwbGFjZV9iaWdfc2VsZWN0X2lu
cHV0cygyMD0KLDE1MDApOyQoImEiKS5jbGljayhmdW5jdGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2
YXIgYz0zRChwYXJlbnQuZnJhbWVzJiZwYXJlPQpudC5mcmFtZXMuZ2FsYXh5X21haW4pO2lmKChi
LmF0dHIoInRhcmdldCIpPTNEPTNEImdhbGF4eV9tYWluIikmJighYykpe3ZhciA9CmE9M0RiLmF0
dHIoImhyZWYiKTtpZihhLmluZGV4T2YoIj8iKT0zRD0zRC0xKXthKz0zRCI/In1lbHNle2ErPTNE
IiYifWErPTNEIj0KdXNlX3BhbmVscz0zRFRydWUiO2IuYXR0cigiaHJlZiIsYSk7Yi5hdHRyKCJ0
YXJnZXQiLCJfc2VsZiIpfXJldHVybiBifSl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CisoZnVuY3Rpb24oKXt2YXIgYj0zRDA7dmFyIGM9M0RbIm1zIiwibW96Iiwid2Via2l0IiwibyJd
O2Zvcih2YXIgYT0zRDA7YTxjLj0KbGVuZ3RoJiYhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFt
ZTsrK2Epe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9M0R3PQppbmRvd1tjW2FdKyJSZXF1
ZXN0QW5pbWF0aW9uRnJhbWUiXTt3aW5kb3cuY2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lPTNE
d2k9Cm5kb3dbY1thXSsiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIl19aWYoIXdpbmRvdy5y
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUpez0Kd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT0zRGZ1
bmN0aW9uKGgsZSl7dmFyIGQ9M0RuZXcgRGF0ZSgpLmdldFRpbWUoKTt2PQphciBmPTNETWF0aC5t
YXgoMCwxNi0oZC1iKSk7dmFyIGc9M0R3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2goZCtm
KX0sZik9CjtiPTNEZCtmO3JldHVybiBnfX1pZighd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1l
KXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRj0KcmFtZT0zRGZ1bmN0aW9uKGQpe2NsZWFyVGltZW91
dChkKX19fSgpKTtpZighQXJyYXkuaW5kZXhPZil7QXJyYXkucHJvdG90eXBlPQouaW5kZXhPZj0z
RGZ1bmN0aW9uKGMpe2Zvcih2YXIgYj0zRDAsYT0zRHRoaXMubGVuZ3RoO2I8YTtiKyspe2lmKHRo
aXNbYl09M0Q9Cj0zRGMpe3JldHVybiBifX1yZXR1cm4gLTF9fWZ1bmN0aW9uIG9ial9sZW5ndGgo
Yyl7aWYoYy5sZW5ndGghPTNEPTNEdW5kZWZpbj0KZWQpe3JldHVybiBjLmxlbmd0aH12YXIgYj0z
RDA7Zm9yKHZhciBhIGluIGMpe2IrK31yZXR1cm4gYn0kLmZuLm1ha2VBYnNvbHV0PQplPTNEZnVu
Y3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2YXIg
Yz0zRGIucG9zaXQ9CmlvbigpO2IuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLG1hcmdpbkxlZnQ6
MCxtYXJnaW5Ub3A6MCx0b3A6Yy50b3AsbGVmdDpjLj0KbGVmdCxyaWdodDokKHdpbmRvdykud2lk
dGgoKS0oYy5sZWZ0K2Iud2lkdGgoKSl9KTtpZihhKXtiLnJlbW92ZSgpLmFwcGVuZFRvPQooImJv
ZHkiKX19KX07ZnVuY3Rpb24gbWFrZV9wb3B1cG1lbnUoYixjKXt2YXIgYT0zRChiLmRhdGEoIm1l
bnVfb3B0aW9ucyIpKTs9CmIuZGF0YSgibWVudV9vcHRpb25zIixjKTtpZihhKXtyZXR1cm59Yi5i
aW5kKCJjbGljay5zaG93X3BvcHVwIixmdW5jdGlvbihkKT0KeyQoIi5wb3BtZW51LXdyYXBwZXIi
KS5yZW1vdmUoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGc9M0QkKCI8dWwgY2xhc3M9Cj0z
RCdkcm9wZG93bi1tZW51JyBpZD0zRCciK2IuYXR0cigiaWQiKSsiLW1lbnUnPjwvdWw+Iik7dmFy
IGY9M0RiLmRhdGEoIm1lbj0KdV9vcHRpb25zIik7aWYob2JqX2xlbmd0aChmKTw9M0QwKXskKCI8
bGk+Tm8gT3B0aW9ucy48L2xpPiIpLmFwcGVuZFRvKGcpfSQuPQplYWNoKGYsZnVuY3Rpb24oaixp
KXtpZihpKXt2YXIgbD0zRGkuYWN0aW9ufHxpO2cuYXBwZW5kKCQoIjxsaT48L2xpPiIpLmFwcGU9
Cm5kKCQoIjxhPiIpLmF0dHIoImhyZWYiLGkudXJsKS5odG1sKGopLmNsaWNrKGwpKSl9ZWxzZXtn
LmFwcGVuZCgkKCI8bGk+PC9saT0KPiIpLmFkZENsYXNzKCJoZWFkIikuYXBwZW5kKCQoIjxhIGhy
ZWY9M0QnIyc+PC9hPiIpLmh0bWwoaikpKX19KTt2YXIgaD0zRCQoPQoiPGRpdiBjbGFzcz0zRCdw
b3BtZW51LXdyYXBwZXInIHN0eWxlPTNEJ3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwOyB0b3A6
IC09CjEwMDA7Jz48L2Rpdj4iKS5hcHBlbmQoZykuYXBwZW5kVG8oImJvZHkiKTt2YXIgZT0zRGQu
cGFnZVgtaC53aWR0aCgpLzI7ZT0zRD0KTWF0aC5taW4oZSwkKGRvY3VtZW50KS5zY3JvbGxMZWZ0
KCkrJCh3aW5kb3cpLndpZHRoKCktJChoKS53aWR0aCgpLTUpO2U9M0RNPQphdGgubWF4KGUsJChk
b2N1bWVudCkuc2Nyb2xsTGVmdCgpKzUpO2guY3NzKHt0b3A6ZC5wYWdlWSxsZWZ0OmV9KX0sMTAp
O3NldFQ9CmltZW91dChmdW5jdGlvbigpe3ZhciBmPTNEZnVuY3Rpb24oaCl7JChoKS5iaW5kKCJj
bGljay5jbG9zZV9wb3B1cCIsZnVuY3Rpbz0KbigpeyQoIi5wb3BtZW51LXdyYXBwZXIiKS5yZW1v
dmUoKTtoLnVuYmluZCgiY2xpY2suY2xvc2VfcG9wdXAiKX0pfTtmKCQod2luPQpkb3cuZG9jdW1l
bnQpKTtmKCQod2luZG93LnRvcC5kb2N1bWVudCkpO2Zvcih2YXIgZT0zRHdpbmRvdy50b3AuZnJh
bWVzLmxlbmc9CnRoO2UtLTspe3ZhciBnPTNEJCh3aW5kb3cudG9wLmZyYW1lc1tlXS5kb2N1bWVu
dCk7ZihnKX19LDUwKTtyZXR1cm4gZmFsc2V9KT0KfWZ1bmN0aW9uIG1ha2VfcG9wdXBfbWVudXMo
YSl7YT0zRGF8fGRvY3VtZW50OyQoYSkuZmluZCgiZGl2W3BvcHVwbWVudV0iKS5lPQphY2goZnVu
Y3Rpb24oKXt2YXIgYj0zRHt9O3ZhciBkPTNEJCh0aGlzKTtkLmZpbmQoImEiKS5lYWNoKGZ1bmN0
aW9uKCl7dmFyIGc9Cj0zRCQodGhpcyksaT0zRGcuZ2V0KDApLGU9M0RpLmdldEF0dHJpYnV0ZSgi
Y29uZmlybSIpLGY9M0RpLmdldEF0dHJpYnV0ZSgiaD0KcmVmIiksaD0zRGkuZ2V0QXR0cmlidXRl
KCJ0YXJnZXQiKTtpZighZil7YltnLnRleHQoKV09M0RudWxsfWVsc2V7YltnLnRleHQoPQopXT0z
RHt1cmw6ZixhY3Rpb246ZnVuY3Rpb24oail7aWYoIWV8fGNvbmZpcm0oZSkpe2lmKGgpe3dpbmRv
dy5vcGVuKGYsaCk7cmU9CnR1cm4gZmFsc2V9ZWxzZXtnLmNsaWNrKCl9fWVsc2V7ai5wcmV2ZW50
RGVmYXVsdCgpfX19fX0pO3ZhciBjPTNEJChhKS5maW5kKD0KIiMiK2QuYXR0cigicG9wdXBtZW51
IikpO2MuZmluZCgiYSIpLmJpbmQoImNsaWNrIixmdW5jdGlvbihmKXtmLnN0b3BQcm9wYWdhPQp0
aW9uKCk7cmV0dXJuIHRydWV9KTttYWtlX3BvcHVwbWVudShjLGIpO2MuYWRkQ2xhc3MoInBvcHVw
Iik7ZC5yZW1vdmUoKX0pfSQ9Ci5mbi5yZWZyZXNoX3NlbGVjdDI9M0RmdW5jdGlvbigpe3ZhciBi
PTNEJCh0aGlzKTt2YXIgYT0zRHtwbGFjZWhvbGRlcjoiQ2xpYz0KayB0byBzZWxlY3QiLGNsb3Nl
T25TZWxlY3Q6IWIuaXMoIltNVUxUSVBMRV0iKSxkcm9wZG93bkF1dG9XaWR0aDp0cnVlLGNvbnRh
PQppbmVyQ3NzQ2xhc3M6InNlbGVjdDItbWlud2lkdGgifTtyZXR1cm4gYi5zZWxlY3QyKGEpfTtm
dW5jdGlvbiByZXBsYWNlX2JpZ189CnNlbGVjdF9pbnB1dHMoYSxjLGIpe2lmKCFqUXVlcnkuZm4u
c2VsZWN0Mil7cmV0dXJufWlmKGE9M0Q9M0Q9M0R1bmRlZmluZWQpez0KYT0zRDIwfWlmKGM9M0Q9
M0Q9M0R1bmRlZmluZWQpe2M9M0QzMDAwfWI9M0RifHwkKCJzZWxlY3QiKTtiLmVhY2goZnVuY3Rp
b24oPQope3ZhciBlPTNEJCh0aGlzKS5ub3QoIlttdWx0aXBsZV0iKTt2YXIgZD0zRGUuZmluZCgi
b3B0aW9uIikubGVuZ3RoO2lmKChkPGE9Cil8fChkPmMpKXtyZXR1cm59aWYoZS5oYXNDbGFzcygi
bm8tYXV0b2NvbXBsZXRlIikpe3JldHVybn1lLnJlZnJlc2hfc2VsZWN0Mj0KKCl9KX0kLmZuLm1h
a2VfdGV4dF9lZGl0YWJsZT0zRGZ1bmN0aW9uKGcpe3ZhciBkPTNEKCJudW1fY29scyIgaW4gZz9n
Lm51bV9jPQpvbHM6MzApLGM9M0QoIm51bV9yb3dzIiBpbiBnP2cubnVtX3Jvd3M6NCksZT0zRCgi
dXNlX3RleHRhcmVhIiBpbiBnP2cudXNlX3Q9CmV4dGFyZWE6ZmFsc2UpLGI9M0QoIm9uX2Zpbmlz
aCIgaW4gZz9nLm9uX2ZpbmlzaDpudWxsKSxmPTNEKCJoZWxwX3RleHQiIGluID0KZz9nLmhlbHBf
dGV4dDpudWxsKTt2YXIgYT0zRCQodGhpcyk7YS5hZGRDbGFzcygiZWRpdGFibGUtdGV4dCIpLmNs
aWNrKGZ1bmN0PQppb24obCl7aWYoJCh0aGlzKS5jaGlsZHJlbigiOmlucHV0IikubGVuZ3RoPjAp
e3JldHVybn1hLnJlbW92ZUNsYXNzKCJlZGl0YWI9CmxlLXRleHQiKTt2YXIgaT0zRGZ1bmN0aW9u
KG0pe2EuZmluZCgiOmlucHV0IikucmVtb3ZlKCk7aWYobSE9M0Q9M0QiIil7YS50ZT0KeHQobSl9
ZWxzZXthLmh0bWwoIjxicj4iKX1hLmFkZENsYXNzKCJlZGl0YWJsZS10ZXh0Iik7aWYoYil7Yiht
KX19O3ZhciBoPTNEPQooImN1cl90ZXh0IiBpbiBnP2cuY3VyX3RleHQ6YS50ZXh0KCkpLGssajtp
ZihlKXtrPTNEJCgiPHRleHRhcmVhLz4iKS5hdHRyKHs9CnJvd3M6Yyxjb2xzOmR9KS50ZXh0KCQu
dHJpbShoKSkua2V5dXAoZnVuY3Rpb24obSl7aWYobS5rZXlDb2RlPTNEPTNEPTNEMjcpez0KaSho
KX19KTtqPTNEJCgiPGJ1dHRvbi8+IikudGV4dCgiRG9uZSIpLmNsaWNrKGZ1bmN0aW9uKCl7aShr
LnZhbCgpKTtyZXR1cm4gPQpmYWxzZX0pfWVsc2V7az0zRCQoIjxpbnB1dCB0eXBlPTNEJ3RleHQn
Lz4iKS5hdHRyKHt2YWx1ZTokLnRyaW0oaCksc2l6ZTpkfSk9Ci5ibHVyKGZ1bmN0aW9uKCl7aSho
KX0pLmtleXVwKGZ1bmN0aW9uKG0pe2lmKG0ua2V5Q29kZT0zRD0zRD0zRDI3KXskKHRoaXMpLj0K
dHJpZ2dlcigiYmx1ciIpfWVsc2V7aWYobS5rZXlDb2RlPTNEPTNEPTNEMTMpe2koJCh0aGlzKS52
YWwoKSl9fW0uc3RvcFByb3BhPQpnYXRpb24oKX0pfWEudGV4dCgiIik7YS5hcHBlbmQoayk7aWYo
ail7YS5hcHBlbmQoail9ay5mb2N1cygpO2suc2VsZWN0KCk7bC49CnN0b3BQcm9wYWdhdGlvbigp
fSk7aWYoZil7YS5hdHRyKCJ0aXRsZSIsZikudG9vbHRpcCgpfXJldHVybiBhfTtmdW5jdGlvbiBh
cz0KeW5jX3NhdmVfdGV4dChkLGYsZSxhLGMsaCxpLGcsYil7aWYoYz0zRD0zRD0zRHVuZGVmaW5l
ZCl7Yz0zRDMwfWlmKGk9M0Q9M0Q9Cj0zRHVuZGVmaW5lZCl7aT0zRDR9JCgiIyIrZCkuY2xpY2so
ZnVuY3Rpb24oKXtpZigkKCIjcmVuYW1pbmctYWN0aXZlIikubGVuZz0KdGg+MCl7cmV0dXJufXZh
ciBsPTNEJCgiIyIrZiksaz0zRGwudGV4dCgpLGo7aWYoaCl7aj0zRCQoIjx0ZXh0YXJlYT48L3Rl
eHRhPQpyZWE+IikuYXR0cih7cm93czppLGNvbHM6Y30pLnRleHQoJC50cmltKGspKX1lbHNle2o9
M0QkKCI8aW5wdXQgdHlwZT0zRCd0ZXg9CnQnPjwvaW5wdXQ+IikuYXR0cih7dmFsdWU6JC50cmlt
KGspLHNpemU6Y30pfWouYXR0cigiaWQiLCJyZW5hbWluZy1hY3RpdmUiKT0KO2ouYmx1cihmdW5j
dGlvbigpeyQodGhpcykucmVtb3ZlKCk7bC5zaG93KCk7aWYoYil7YihqKX19KTtqLmtleXVwKGZ1
bmN0aW9uPQoobil7aWYobi5rZXlDb2RlPTNEPTNEPTNEMjcpeyQodGhpcykudHJpZ2dlcigiYmx1
ciIpfWVsc2V7aWYobi5rZXlDb2RlPTNEPQo9M0Q9M0QxMyl7dmFyIG09M0R7fTttW2FdPTNEJCh0
aGlzKS52YWwoKTskKHRoaXMpLnRyaWdnZXIoImJsdXIiKTskLmFqYXgoe3U9CnJsOmUsZGF0YTpt
LGVycm9yOmZ1bmN0aW9uKCl7YWxlcnQoIlRleHQgZWRpdGluZyBmb3IgZWx0ICIrZisiIGZhaWxl
ZCIpfSxzdT0KY2Nlc3M6ZnVuY3Rpb24obyl7aWYobyE9M0Q9M0QiIil7bC50ZXh0KG8pfWVsc2V7
bC5odG1sKCI8ZW0+Tm9uZTwvZW0+Iil9aWYoPQpiKXtiKGopfX19KX19fSk7aWYoZyl7ZyhqKX1s
LmhpZGUoKTtqLmluc2VydEFmdGVyKGwpO2ouZm9jdXMoKTtqLnNlbGVjdCgpO3I9CmV0dXJufSl9
ZnVuY3Rpb24gY29tbWF0aXplKGIpe2IrPTNEIiI7dmFyIGE9M0QvKFxkKykoXGR7M30pLzt3aGls
ZShhLnRlc3QoYj0KKSl7Yj0zRGIucmVwbGFjZShhLCIkMSwkMiIpfXJldHVybiBifWZ1bmN0aW9u
IHJlc2V0X3Rvb2xfc2VhcmNoKGEpe3ZhciBjPTNEPQokKCIjZ2FsYXh5X3Rvb2xzIikuY29udGVu
dHMoKTtpZihjLmxlbmd0aD0zRD0zRD0zRDApe2M9M0QkKGRvY3VtZW50KX0kKHRoaXM9CikucmVt
b3ZlQ2xhc3MoInNlYXJjaF9hY3RpdmUiKTtjLmZpbmQoIi50b29sVGl0bGUiKS5yZW1vdmVDbGFz
cygic2VhcmNoX21hdD0KY2giKTtjLmZpbmQoIi50b29sU2VjdGlvbkJvZHkiKS5oaWRlKCk7Yy5m
aW5kKCIudG9vbFRpdGxlIikuc2hvdygpO2MuZmluZCgiPQoudG9vbFBhbmVsTGFiZWwiKS5zaG93
KCk7Yy5maW5kKCIudG9vbFNlY3Rpb25XcmFwcGVyIikuZWFjaChmdW5jdGlvbigpe2lmKCQ9Cih0
aGlzKS5hdHRyKCJpZCIpIT0zRD0zRCJyZWNlbnRseV91c2VkX3dyYXBwZXIiKXskKHRoaXMpLnNo
b3coKX1lbHNle2lmKCQodD0KaGlzKS5oYXNDbGFzcygidXNlcl9wcmVmX3Zpc2libGUiKSl7JCh0
aGlzKS5zaG93KCl9fX0pO2MuZmluZCgiI3NlYXJjaC1uby1yPQplc3VsdHMiKS5oaWRlKCk7Yy5m
aW5kKCIjc2VhcmNoLXNwaW5uZXIiKS5oaWRlKCk7aWYoYSl7dmFyIGI9M0RjLmZpbmQoIiN0b289
Cmwtc2VhcmNoLXF1ZXJ5Iik7Yi52YWwoInNlYXJjaCB0b29scyIpfX12YXIgR2FsYXh5QXN5bmM9
M0RmdW5jdGlvbihhKXt0aGlzLj0KdXJsX2RpY3Q9M0R7fTt0aGlzLmxvZ19hY3Rpb249M0QoYT0z
RD0zRD0zRHVuZGVmaW5lZD9mYWxzZTphKX07R2FsYXh5QXN5bmMuPQpwcm90b3R5cGUuc2V0X2Z1
bmNfdXJsPTNEZnVuY3Rpb24oYSxiKXt0aGlzLnVybF9kaWN0W2FdPTNEYn07R2FsYXh5QXN5bmMu
cHI9Cm90b3R5cGUuc2V0X3VzZXJfcHJlZj0zRGZ1bmN0aW9uKGEsYil7dmFyIGM9M0R0aGlzLnVy
bF9kaWN0W2FyZ3VtZW50cy5jYWxsZT0KZV07aWYoYz0zRD0zRD0zRHVuZGVmaW5lZCl7cmV0dXJu
IGZhbHNlfSQuYWpheCh7dXJsOmMsZGF0YTp7cHJlZl9uYW1lOmEscHJlPQpmX3ZhbHVlOmJ9LGVy
cm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxzdWNjZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRy
dWV9fSk9Cn07R2FsYXh5QXN5bmMucHJvdG90eXBlLmxvZ191c2VyX2FjdGlvbj0zRGZ1bmN0aW9u
KGMsYixkKXtpZighdGhpcy5sb2dfYWN0aT0Kb24pe3JldHVybn12YXIgYT0zRHRoaXMudXJsX2Rp
Y3RbYXJndW1lbnRzLmNhbGxlZV07aWYoYT0zRD0zRD0zRHVuZGVmaW5lZCl7PQpyZXR1cm4gZmFs
c2V9JC5hamF4KHt1cmw6YSxkYXRhOnthY3Rpb246Yyxjb250ZXh0OmIscGFyYW1zOmR9LGVycm9y
OmZ1bmN0aW89Cm4oKXtyZXR1cm4gZmFsc2V9LHN1Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1
ZX19KX07ZnVuY3Rpb24gaW5pdF9yZWZyZXNoXz0Kb25fY2hhbmdlKCl7JCgic2VsZWN0W3JlZnJl
c2hfb25fY2hhbmdlPTNEJ3RydWUnXSIpLm9mZigiY2hhbmdlIikuY2hhbmdlKGZ1PQpuY3Rpb24o
KXt2YXIgYT0zRCQodGhpcyksZT0zRGEudmFsKCksZD0zRGZhbHNlLGM9M0RhLmF0dHIoInJlZnJl
c2hfb25fY2hhbmc9CmVfdmFsdWVzIik7aWYoYyl7Yz0zRGMuc3BsaXQoIiwiKTt2YXIgYj0zRGEu
YXR0cigibGFzdF9zZWxlY3RlZF92YWx1ZSIpO2lmKD0KJC5pbkFycmF5KGUsYyk9M0Q9M0Q9M0Qt
MSYmJC5pbkFycmF5KGIsYyk9M0Q9M0Q9M0QtMSl7cmV0dXJufX0kKHdpbmRvdykudHJpPQpnZ2Vy
KCJyZWZyZXNoX29uX2NoYW5nZSIpOyQoZG9jdW1lbnQpLnRyaWdnZXIoImNvbnZlcnRfdG9fdmFs
dWVzIik7YS5nZXQoMCk9Ci5mb3JtLnN1Ym1pdCgpfSk7JCgiOmNoZWNrYm94W3JlZnJlc2hfb25f
Y2hhbmdlPTNEJ3RydWUnXSIpLm9mZigiY2xpY2siKS5jbD0KaWNrKGZ1bmN0aW9uKCl7dmFyIGE9
M0QkKHRoaXMpLGU9M0RhLnZhbCgpLGQ9M0RmYWxzZSxjPTNEYS5hdHRyKCJyZWZyZXNoX29uPQpf
Y2hhbmdlX3ZhbHVlcyIpO2lmKGMpe2M9M0RjLnNwbGl0KCIsIik7dmFyIGI9M0RhLmF0dHIoImxh
c3Rfc2VsZWN0ZWRfdmFsdWU9CiIpO2lmKCQuaW5BcnJheShlLGMpPTNEPTNEPTNELTEmJiQuaW5B
cnJheShiLGMpPTNEPTNEPTNELTEpe3JldHVybn19JCh3aW5kbz0KdykudHJpZ2dlcigicmVmcmVz
aF9vbl9jaGFuZ2UiKTthLmdldCgwKS5mb3JtLnN1Ym1pdCgpfSk7JCgiYVtjb25maXJtXSIpLm9m
PQpmKCJjbGljayIpLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGNvbmZpcm0oJCh0aGlzKS5hdHRy
KCJjb25maXJtIikpfSl9alF1ZXI9CnkuZm4ucHJldmVudERvdWJsZVN1Ym1pc3Npb249M0RmdW5j
dGlvbigpeyQodGhpcykub24oInN1Ym1pdCIsZnVuY3Rpb24oYil7dj0KYXIgYT0zRCQodGhpcyk7
aWYoYS5kYXRhKCJzdWJtaXR0ZWQiKT0zRD0zRD0zRHRydWUpe2IucHJldmVudERlZmF1bHQoKX1l
bHNlPQp7YS5kYXRhKCJzdWJtaXR0ZWQiLHRydWUpfX0pO3JldHVybiB0aGlzfTskKGRvY3VtZW50
KS5yZWFkeShmdW5jdGlvbigpe2luaXQ9Cl9yZWZyZXNoX29uX2NoYW5nZSgpO2lmKCQuZm4udG9v
bHRpcCl7JCgiLnVuaWZpZWQtcGFuZWwtaGVhZGVyIFt0aXRsZV0iKS50bz0Kb2x0aXAoe3BsYWNl
bWVudDoiYm90dG9tIn0pOyQoIlt0aXRsZV0iKS50b29sdGlwKCl9bWFrZV9wb3B1cF9tZW51cygp
O3JlcGxhPQpjZV9iaWdfc2VsZWN0X2lucHV0cygyMCwxNTAwKTskKCJhIikuY2xpY2soZnVuY3Rp
b24oKXt2YXIgYj0zRCQodGhpcyk7dmFyIGM9Cj0zRChwYXJlbnQuZnJhbWVzJiZwYXJlbnQuZnJh
bWVzLmdhbGF4eV9tYWluKTtpZigoYi5hdHRyKCJ0YXJnZXQiKT0zRD0zRCJnYT0KbGF4eV9tYWlu
IikmJighYykpe3ZhciBhPTNEYi5hdHRyKCJocmVmIik7aWYoYS5pbmRleE9mKCI/Iik9M0Q9M0Qt
MSl7YSs9M0QiPQo/In1lbHNle2ErPTNEIiYifWErPTNEInVzZV9wYW5lbHM9M0RUcnVlIjtiLmF0
dHIoImhyZWYiLGEpO2IuYXR0cigidGFyZ2V0Iiw9CiJfc2VsZiIpfXJldHVybiBifSl9KTsKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9n
YWxheHktY2VudHJhbC9jb21taXRzL2IxOGZjZTY5OGNhMC8KQ2hhbmdlc2V0OiAgIGIxOGZjZTY5
OGNhMApVc2VyOiAgICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0wMi0yMyAy
MjoxNDozNyswMDowMApTdW1tYXJ5OiAgICAgVUksIGhpc3RvcnkgcGFuZWw6IGNvcnJlY3RseSBk
ZWZhdWx0IGNsZWFyTWVzc2FnZXMgdGFyZ2V0IHdoZW49CiBubyBldmVudCBpcyBnaXZlbgpBZmZl
Y3RlZCAjOiAgOCBmaWxlcwoKZGlmZiAtciA1ZWE5ZmMyZjc1YWFlOGU1MmUxNjRhYjc1YzcxYWM5
N2Y4MmJmZjI0IC1yIGIxOGZjZTY5OGNhMGIyOWFhY2E3NzMzPQpjZjliYTk1YjY1YzU2Y2E0OCBj
bGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL2hpc3RvcnkvaGlzdG9yeS1wYW5lbC1lZGl0LWN1cnI9
CmVudC5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL2hpc3RvcnkvaGlzdG9yeS1w
YW5lbC1lZGl0LWN1cnJlbnQuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0
b3J5L2hpc3RvcnktcGFuZWwtZWRpdC1jdXJyZW50LmpzCkBAIC0zNzksMjEgKzM3OSwzMSBAQAog
ICAgIH0sCj0yMAogLy9UT0RPOiB0aGlzIHNlZW1zIG1vcmUgbGlrZSBhIHBlciB1c2VyIG1lc3Nh
Z2UgdGhhbiBhIGhpc3RvcnkgbWVzc2FnZTsgSU89ClcsIHRoaXMgZG9lc24ndCBiZWxvbmcgaGVy
ZQorICAgIC8qKiBPdmVycmlkZSB0byBwcmVzZXJ2ZSB0aGUgcXVvdGEgbWVzc2FnZSAqLworICAg
IGNsZWFyTWVzc2FnZXMgOiBmdW5jdGlvbiggZXYgKXsKKyAgICAgICAgdmFyICR0YXJnZXQgPTNE
ICFfLmlzVW5kZWZpbmVkKCBldiApPworICAgICAgICAgICAgJCggZXYuY3VycmVudFRhcmdldCAp
CisgICAgICAgICAgICA6dGhpcy4kbWVzc2FnZXMoKS5jaGlsZHJlbiggJ1tjbGFzcyQ9M0QibWVz
c2FnZSJdJyApOworICAgICAgICAkdGFyZ2V0ID0zRCAkdGFyZ2V0Lm5vdCggJy5xdW90YS1tZXNz
YWdlJyApOworICAgICAgICAkdGFyZ2V0LmZhZGVPdXQoIHRoaXMuZnhTcGVlZCwgZnVuY3Rpb24o
KXsKKyAgICAgICAgICAgICQoIHRoaXMgKS5yZW1vdmUoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiB0aGlzOworICAgIH0sCisKICAgICAvKiogU2hvdyB0aGUgb3ZlciBxdW90YSBtZXNz
YWdlICh3aGljaCBoYXBwZW5zIHRvIGJlIGluIHRoZSBoaXN0b3J5IHBhPQpuZWwpLgogICAgICAq
LwogICAgIHNob3dRdW90YU1lc3NhZ2UgOiBmdW5jdGlvbigpewotICAgICAgICB2YXIgbXNnID0z
RCB0aGlzLiRlbC5maW5kKCAnLnF1b3RhLW1lc3NhZ2UnICk7Ci0gICAgICAgIC8vdGhpcy5sb2co
IHRoaXMgKyAnIHNob3dpbmcgcXVvdGEgbWVzc2FnZTonLCBtc2csIHVzZXJEYXRhICk7Ci0gICAg
ICAgIGlmKCBtc2cuaXMoICc6aGlkZGVuJyApICl7IG1zZy5zbGlkZURvd24oIHRoaXMuZnhTcGVl
ZCApOyB9CisgICAgICAgIHZhciAkbXNnID0zRCB0aGlzLiQoICcucXVvdGEtbWVzc2FnZScgKTsK
KyAgICAgICAgaWYoICRtc2cuaXMoICc6aGlkZGVuJyApICl7ICRtc2cuc2xpZGVEb3duKCB0aGlz
LmZ4U3BlZWQgKTsgfQogICAgIH0sCj0yMAogLy9UT0RPOiB0aGlzIHNlZW1zIG1vcmUgbGlrZSBh
IHBlciB1c2VyIG1lc3NhZ2UgdGhhbiBhIGhpc3RvcnkgbWVzc2FnZQogICAgIC8qKiBIaWRlIHRo
ZSBvdmVyIHF1b3RhIG1lc3NhZ2UgKHdoaWNoIGhhcHBlbnMgdG8gYmUgaW4gdGhlIGhpc3Rvcnkg
cGE9Cm5lbCkuCiAgICAgICovCiAgICAgaGlkZVF1b3RhTWVzc2FnZSA6IGZ1bmN0aW9uKCl7Ci0g
ICAgICAgIHZhciBtc2cgPTNEIHRoaXMuJGVsLmZpbmQoICcucXVvdGEtbWVzc2FnZScgKTsKLSAg
ICAgICAgLy90aGlzLmxvZyggdGhpcyArICcgaGlkaW5nIHF1b3RhIG1lc3NhZ2U6JywgbXNnLCB1
c2VyRGF0YSApOwotICAgICAgICBpZiggIW1zZy5pcyggJzpoaWRkZW4nICkgKXsgbXNnLnNsaWRl
VXAoIHRoaXMuZnhTcGVlZCApOyB9CisgICAgICAgIHZhciAkbXNnID0zRCB0aGlzLiQoICcucXVv
dGEtbWVzc2FnZScgKTsKKyAgICAgICAgaWYoICEkbXNnLmlzKCAnOmhpZGRlbicgKSApeyAkbXNn
LnNsaWRlVXAoIHRoaXMuZnhTcGVlZCApOyB9CiAgICAgfSwKPTIwCiAgICAgLyoqIFJldHVybiBh
IHN0cmluZyByZXAgb2YgdGhlIGhpc3RvcnkKCmRpZmYgLXIgNWVhOWZjMmY3NWFhZThlNTJlMTY0
YWI3NWM3MWFjOTdmODJiZmYyNCAtciBiMThmY2U2OThjYTBiMjlhYWNhNzczMz0KY2Y5YmE5NWI2
NWM1NmNhNDggY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwu
anMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwu
anMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwu
anMKQEAgLTM4MSwxMiArMzgxLDkgQEAKICAgICAvKiogZXZlbnQgbWFwICovCiAgICAgZXZlbnRz
IDogXy5leHRlbmQoIF8uY2xvbmUoIF9zdXBlci5wcm90b3R5cGUuZXZlbnRzICksIHsKICAgICAg
ICAgLy8gdG9nZ2xlIGxpc3QgaXRlbSBzZWxlY3RvcnMKLSAgICAgICAgJ2NsaWNrIC5zaG93LXNl
bGVjdG9ycy1idG4nICAgICAgICAgICAgICAgICA6ICd0b2dnbGVTZWxlY3RvcnMnCisgICAgICAg
ICdjbGljayAuc2hvdy1zZWxlY3RvcnMtYnRuJyAgICAgICAgIDogJ3RvZ2dsZVNlbGVjdG9ycycs
CiAgICAgICAgIC8vIGFsbG93IChlcnJvcikgbWVzc2FnZXMgdG8gYmUgY2xpY2tlZCBhd2F5Ci0v
L1RPRE86IHN3aXRjaCB0byBjb21tb24gY2xvc2UgKFgpIGlkaW9tCi0gICAgICAgIC8vJ2NsaWNr
IC5tZXNzYWdlcycgICAgICAgICAgICAgICA6ICdjbGVhck1lc3NhZ2VzJywKLS8vVE9ETzogcmVt
b3ZlCi0gICAgICAgIC8vJ2NsaWNrIC5oaXN0b3J5LXNlYXJjaC1idG4nICAgICA6ICd0b2dnbGVT
ZWFyY2hDb250cm9scycKKyAgICAgICAgJ2NsaWNrIC5tZXNzYWdlcyBbY2xhc3MkPTNEbWVzc2Fn
ZV0nICA6ICdjbGVhck1lc3NhZ2VzJwogICAgIH0pLAo9MjAKICAgICAvKiogSGFuZGxlIHRoZSB1
c2VyIHRvZ2dsaW5nIHRoZSBkZWxldGVkIHZpc2liaWxpdHkgYnk6CkBAIC00NTcsMTQgKzQ1NCwx
NCBAQAogICAgICAqLwogICAgIGVycm9ySGFuZGxlciA6IGZ1bmN0aW9uKCBtb2RlbCwgeGhyLCBv
cHRpb25zLCBtc2csIGRldGFpbHMgKXsKICAgICAgICAgdGhpcy5lcnJvciggbW9kZWwsIHhociwg
b3B0aW9ucywgbXNnLCBkZXRhaWxzICk7Ci0vL1RPRE86IGdldHRpbmcgSlNPTiBwYXJzZSBlcnJv
cnMgZnJvbSBqcSBtaWdyYXRlCj0yMAogICAgICAgICAvLyBpbnRlcnJ1cHRlZCBhamF4CiAgICAg
ICAgIGlmKCB4aHIgJiYgeGhyLnN0YXR1cyA9M0Q9M0Q9M0QgMCAmJiB4aHIucmVhZHlTdGF0ZSA9
M0Q9M0Q9M0QgMCApeworICAgICAgICAgICAgLy9UT0RPOiBnbWFpbCBzdHlsZSAncmV0cnlpbmcg
aW4gTnMnCj0yMAogICAgICAgICAvLyBiYWQgZ2F0ZXdheQogICAgICAgICB9IGVsc2UgaWYoIHho
ciAmJiB4aHIuc3RhdHVzID0zRD0zRD0zRCA1MDIgKXsKLS8vVE9ETzogZ21haWwgc3R5bGUgJ3Jl
Y29ubmVjdGluZyBpbiBOcycKKyAgICAgICAgICAgIC8vVE9ETzogZ21haWwgc3R5bGUgJ3JldHJ5
aW5nIGluIE5zJwo9MjAKICAgICAgICAgLy8gb3RoZXJ3aXNlLCBzaG93IGFuIGVycm9yIG1lc3Nh
Z2UgaW5zaWRlIHRoZSBwYW5lbAogICAgICAgICB9IGVsc2UgewpAQCAtNTUxLDcgKzU0OCw3IEBA
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAkbXNnLmFwcGVuZCggJyAnLCAkZGV0
YWlsc0xpbmsgKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gJG1zZ0NvbnRhaW5lci5odG1s
KCAkbXNnICk7CisgICAgICAgIHJldHVybiAkbXNnQ29udGFpbmVyLmFwcGVuZCggJG1zZyApOwog
ICAgIH0sCj0yMAogICAgIC8qKiBjb252ZXJ0IG1zZyBhbmQgZGV0YWlscyBpbnRvIG1vZGFsIG9w
dGlvbnMgdXNhYmxlIGJ5IEdhbGF4eS5tb2RhbCA9CiovCkBAIC01ODIsMTAgKzU3OSwxMiBAQAo9
MjAKICAgICAvKiogUmVtb3ZlIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBwYW5lbC4gKi8KICAgICBj
bGVhck1lc3NhZ2VzIDogZnVuY3Rpb24oIGV2ICl7Ci0gICAgICAgICQoIGV2LmN1cnJlbnRUYXJn
ZXQgKS5mYWRlT3V0KCB0aGlzLmZ4U3BlZWQsIGZ1bmN0aW9uKCl7CisgICAgICAgIHZhciAkdGFy
Z2V0ID0zRCAhXy5pc1VuZGVmaW5lZCggZXYgKT8KKyAgICAgICAgICAgICQoIGV2LmN1cnJlbnRU
YXJnZXQgKQorICAgICAgICAgICAgOnRoaXMuJG1lc3NhZ2VzKCkuY2hpbGRyZW4oICdbY2xhc3Mk
PTNEIm1lc3NhZ2UiXScgKTsKKyAgICAgICAgJHRhcmdldC5mYWRlT3V0KCB0aGlzLmZ4U3BlZWQs
IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAkKCB0aGlzICkucmVtb3ZlKCk7CiAgICAgICAgIH0p
OwotICAgICAgICAvL3RoaXMuJG1lc3NhZ2VzKCkuY2hpbGRyZW4oKS5ub3QoICcucXVvdGEtbWVz
c2FnZScgKS5yZW1vdmUoKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfSwKPTIwCgpkaWZm
IC1yIDVlYTlmYzJmNzVhYWU4ZTUyZTE2NGFiNzVjNzFhYzk3ZjgyYmZmMjQgLXIgYjE4ZmNlNjk4
Y2EwYjI5YWFjYTc3MzM9CmNmOWJhOTViNjVjNTZjYTQ4IGNsaWVudC9nYWxheHkvc2NyaXB0cy9t
dmMvbGlzdC9saXN0LXBhbmVsLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvbGlz
dC9saXN0LXBhbmVsLmpzCisrKyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvbGlzdC9saXN0
LXBhbmVsLmpzCkBAIC0xMTksNiArMTE5LDggQEAKICAgICBfc2V0VXBMaXN0ZW5lcnMgOiBmdW5j
dGlvbigpewogICAgICAgICB0aGlzLm9mZigpOwo9MjAKKyAgICAgICAgLy9UT0RPOiBtb3ZlIGVy
cm9ySGFuZGxlciBkb3duIGludG8gbGlzdC1wYW5lbCBmcm9tIGhpc3RvcnktcGFuZWwgPQpvcgor
ICAgICAgICAvLyAgcGFzcyB0byBnbG9iYWwgZXJyb3IgaGFuZGxlciAoR2FsYXh5KQogICAgICAg
ICB0aGlzLm9uKCAnZXJyb3InLCBmdW5jdGlvbiggbW9kZWwsIHhociwgb3B0aW9ucywgbXNnLCBk
ZXRhaWxzICl7CiAgICAgICAgICAgICAvL3RoaXMuZXJyb3JIYW5kbGVyKCBtb2RlbCwgeGhyLCBv
cHRpb25zLCBtc2csIGRldGFpbHMgKTsKICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIG1vZGVs
LCB4aHIsIG9wdGlvbnMsIG1zZywgZGV0YWlscyApOwoKZGlmZiAtciA1ZWE5ZmMyZjc1YWFlOGU1
MmUxNjRhYjc1YzcxYWM5N2Y4MmJmZjI0IC1yIGIxOGZjZTY5OGNhMGIyOWFhY2E3NzMzPQpjZjli
YTk1YjY1YzU2Y2E0OCBzdGF0aWMvc2NyaXB0cy9tdmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVsLWVk
aXQtY3VycmVudC5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9tdmMvaGlzdG9yeS9oaXN0b3J5LXBh
bmVsLWVkaXQtY3VycmVudC5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9tdmMvaGlzdG9yeS9oaXN0
b3J5LXBhbmVsLWVkaXQtY3VycmVudC5qcwpAQCAtMzc5LDIxICszNzksMzEgQEAKICAgICB9LAo9
MjAKIC8vVE9ETzogdGhpcyBzZWVtcyBtb3JlIGxpa2UgYSBwZXIgdXNlciBtZXNzYWdlIHRoYW4g
YSBoaXN0b3J5IG1lc3NhZ2U7IElPPQpXLCB0aGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUKKyAgICAv
KiogT3ZlcnJpZGUgdG8gcHJlc2VydmUgdGhlIHF1b3RhIG1lc3NhZ2UgKi8KKyAgICBjbGVhck1l
c3NhZ2VzIDogZnVuY3Rpb24oIGV2ICl7CisgICAgICAgIHZhciAkdGFyZ2V0ID0zRCAhXy5pc1Vu
ZGVmaW5lZCggZXYgKT8KKyAgICAgICAgICAgICQoIGV2LmN1cnJlbnRUYXJnZXQgKQorICAgICAg
ICAgICAgOnRoaXMuJG1lc3NhZ2VzKCkuY2hpbGRyZW4oICdbY2xhc3MkPTNEIm1lc3NhZ2UiXScg
KTsKKyAgICAgICAgJHRhcmdldCA9M0QgJHRhcmdldC5ub3QoICcucXVvdGEtbWVzc2FnZScgKTsK
KyAgICAgICAgJHRhcmdldC5mYWRlT3V0KCB0aGlzLmZ4U3BlZWQsIGZ1bmN0aW9uKCl7CisgICAg
ICAgICAgICAkKCB0aGlzICkucmVtb3ZlKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9LAorCiAgICAgLyoqIFNob3cgdGhlIG92ZXIgcXVvdGEgbWVzc2FnZSAod2hp
Y2ggaGFwcGVucyB0byBiZSBpbiB0aGUgaGlzdG9yeSBwYT0KbmVsKS4KICAgICAgKi8KICAgICBz
aG93UXVvdGFNZXNzYWdlIDogZnVuY3Rpb24oKXsKLSAgICAgICAgdmFyIG1zZyA9M0QgdGhpcy4k
ZWwuZmluZCggJy5xdW90YS1tZXNzYWdlJyApOwotICAgICAgICAvL3RoaXMubG9nKCB0aGlzICsg
JyBzaG93aW5nIHF1b3RhIG1lc3NhZ2U6JywgbXNnLCB1c2VyRGF0YSApOwotICAgICAgICBpZigg
bXNnLmlzKCAnOmhpZGRlbicgKSApeyBtc2cuc2xpZGVEb3duKCB0aGlzLmZ4U3BlZWQgKTsgfQor
ICAgICAgICB2YXIgJG1zZyA9M0QgdGhpcy4kKCAnLnF1b3RhLW1lc3NhZ2UnICk7CisgICAgICAg
IGlmKCAkbXNnLmlzKCAnOmhpZGRlbicgKSApeyAkbXNnLnNsaWRlRG93biggdGhpcy5meFNwZWVk
ICk7IH0KICAgICB9LAo9MjAKIC8vVE9ETzogdGhpcyBzZWVtcyBtb3JlIGxpa2UgYSBwZXIgdXNl
ciBtZXNzYWdlIHRoYW4gYSBoaXN0b3J5IG1lc3NhZ2UKICAgICAvKiogSGlkZSB0aGUgb3ZlciBx
dW90YSBtZXNzYWdlICh3aGljaCBoYXBwZW5zIHRvIGJlIGluIHRoZSBoaXN0b3J5IHBhPQpuZWwp
LgogICAgICAqLwogICAgIGhpZGVRdW90YU1lc3NhZ2UgOiBmdW5jdGlvbigpewotICAgICAgICB2
YXIgbXNnID0zRCB0aGlzLiRlbC5maW5kKCAnLnF1b3RhLW1lc3NhZ2UnICk7Ci0gICAgICAgIC8v
dGhpcy5sb2coIHRoaXMgKyAnIGhpZGluZyBxdW90YSBtZXNzYWdlOicsIG1zZywgdXNlckRhdGEg
KTsKLSAgICAgICAgaWYoICFtc2cuaXMoICc6aGlkZGVuJyApICl7IG1zZy5zbGlkZVVwKCB0aGlz
LmZ4U3BlZWQgKTsgfQorICAgICAgICB2YXIgJG1zZyA9M0QgdGhpcy4kKCAnLnF1b3RhLW1lc3Nh
Z2UnICk7CisgICAgICAgIGlmKCAhJG1zZy5pcyggJzpoaWRkZW4nICkgKXsgJG1zZy5zbGlkZVVw
KCB0aGlzLmZ4U3BlZWQgKTsgfQogICAgIH0sCj0yMAogICAgIC8qKiBSZXR1cm4gYSBzdHJpbmcg
cmVwIG9mIHRoZSBoaXN0b3J5CgpkaWZmIC1yIDVlYTlmYzJmNzVhYWU4ZTUyZTE2NGFiNzVjNzFh
Yzk3ZjgyYmZmMjQgLXIgYjE4ZmNlNjk4Y2EwYjI5YWFjYTc3MzM9CmNmOWJhOTViNjVjNTZjYTQ4
IHN0YXRpYy9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwuanMKLS0tIGEvc3RhdGlj
L3NjcmlwdHMvbXZjL2hpc3RvcnkvaGlzdG9yeS1wYW5lbC5qcworKysgYi9zdGF0aWMvc2NyaXB0
cy9tdmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVsLmpzCkBAIC0zODEsMTIgKzM4MSw5IEBACiAgICAg
LyoqIGV2ZW50IG1hcCAqLwogICAgIGV2ZW50cyA6IF8uZXh0ZW5kKCBfLmNsb25lKCBfc3VwZXIu
cHJvdG90eXBlLmV2ZW50cyApLCB7CiAgICAgICAgIC8vIHRvZ2dsZSBsaXN0IGl0ZW0gc2VsZWN0
b3JzCi0gICAgICAgICdjbGljayAuc2hvdy1zZWxlY3RvcnMtYnRuJyAgICAgICAgICAgICAgICAg
OiAndG9nZ2xlU2VsZWN0b3JzJworICAgICAgICAnY2xpY2sgLnNob3ctc2VsZWN0b3JzLWJ0bicg
ICAgICAgICA6ICd0b2dnbGVTZWxlY3RvcnMnLAogICAgICAgICAvLyBhbGxvdyAoZXJyb3IpIG1l
c3NhZ2VzIHRvIGJlIGNsaWNrZWQgYXdheQotLy9UT0RPOiBzd2l0Y2ggdG8gY29tbW9uIGNsb3Nl
IChYKSBpZGlvbQotICAgICAgICAvLydjbGljayAubWVzc2FnZXMnICAgICAgICAgICAgICAgOiAn
Y2xlYXJNZXNzYWdlcycsCi0vL1RPRE86IHJlbW92ZQotICAgICAgICAvLydjbGljayAuaGlzdG9y
eS1zZWFyY2gtYnRuJyAgICAgOiAndG9nZ2xlU2VhcmNoQ29udHJvbHMnCisgICAgICAgICdjbGlj
ayAubWVzc2FnZXMgW2NsYXNzJD0zRG1lc3NhZ2VdJyAgOiAnY2xlYXJNZXNzYWdlcycKICAgICB9
KSwKPTIwCiAgICAgLyoqIEhhbmRsZSB0aGUgdXNlciB0b2dnbGluZyB0aGUgZGVsZXRlZCB2aXNp
YmlsaXR5IGJ5OgpAQCAtNDU3LDE0ICs0NTQsMTQgQEAKICAgICAgKi8KICAgICBlcnJvckhhbmRs
ZXIgOiBmdW5jdGlvbiggbW9kZWwsIHhociwgb3B0aW9ucywgbXNnLCBkZXRhaWxzICl7CiAgICAg
ICAgIHRoaXMuZXJyb3IoIG1vZGVsLCB4aHIsIG9wdGlvbnMsIG1zZywgZGV0YWlscyApOwotLy9U
T0RPOiBnZXR0aW5nIEpTT04gcGFyc2UgZXJyb3JzIGZyb20ganEgbWlncmF0ZQo9MjAKICAgICAg
ICAgLy8gaW50ZXJydXB0ZWQgYWpheAogICAgICAgICBpZiggeGhyICYmIHhoci5zdGF0dXMgPTNE
PTNEPTNEIDAgJiYgeGhyLnJlYWR5U3RhdGUgPTNEPTNEPTNEIDAgKXsKKyAgICAgICAgICAgIC8v
VE9ETzogZ21haWwgc3R5bGUgJ3JldHJ5aW5nIGluIE5zJwo9MjAKICAgICAgICAgLy8gYmFkIGdh
dGV3YXkKICAgICAgICAgfSBlbHNlIGlmKCB4aHIgJiYgeGhyLnN0YXR1cyA9M0Q9M0Q9M0QgNTAy
ICl7Ci0vL1RPRE86IGdtYWlsIHN0eWxlICdyZWNvbm5lY3RpbmcgaW4gTnMnCisgICAgICAgICAg
ICAvL1RPRE86IGdtYWlsIHN0eWxlICdyZXRyeWluZyBpbiBOcycKPTIwCiAgICAgICAgIC8vIG90
aGVyd2lzZSwgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGluc2lkZSB0aGUgcGFuZWwKICAgICAgICAg
fSBlbHNlIHsKQEAgLTU1MSw3ICs1NDgsNyBAQAogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgJG1zZy5hcHBlbmQoICcgJywgJGRldGFpbHNMaW5rICk7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuICRtc2dDb250YWluZXIuaHRtbCggJG1zZyApOworICAgICAgICByZXR1cm4gJG1z
Z0NvbnRhaW5lci5hcHBlbmQoICRtc2cgKTsKICAgICB9LAo9MjAKICAgICAvKiogY29udmVydCBt
c2cgYW5kIGRldGFpbHMgaW50byBtb2RhbCBvcHRpb25zIHVzYWJsZSBieSBHYWxheHkubW9kYWwg
PQoqLwpAQCAtNTgyLDEwICs1NzksMTIgQEAKPTIwCiAgICAgLyoqIFJlbW92ZSBhbGwgbWVzc2Fn
ZXMgZnJvbSB0aGUgcGFuZWwuICovCiAgICAgY2xlYXJNZXNzYWdlcyA6IGZ1bmN0aW9uKCBldiAp
ewotICAgICAgICAkKCBldi5jdXJyZW50VGFyZ2V0ICkuZmFkZU91dCggdGhpcy5meFNwZWVkLCBm
dW5jdGlvbigpeworICAgICAgICB2YXIgJHRhcmdldCA9M0QgIV8uaXNVbmRlZmluZWQoIGV2ICk/
CisgICAgICAgICAgICAkKCBldi5jdXJyZW50VGFyZ2V0ICkKKyAgICAgICAgICAgIDp0aGlzLiRt
ZXNzYWdlcygpLmNoaWxkcmVuKCAnW2NsYXNzJD0zRCJtZXNzYWdlIl0nICk7CisgICAgICAgICR0
YXJnZXQuZmFkZU91dCggdGhpcy5meFNwZWVkLCBmdW5jdGlvbigpewogICAgICAgICAgICAgJCgg
dGhpcyApLnJlbW92ZSgpOwogICAgICAgICB9KTsKLSAgICAgICAgLy90aGlzLiRtZXNzYWdlcygp
LmNoaWxkcmVuKCkubm90KCAnLnF1b3RhLW1lc3NhZ2UnICkucmVtb3ZlKCk7CiAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgIH0sCj0yMAoKZGlmZiAtciA1ZWE5ZmMyZjc1YWFlOGU1MmUxNjRhYjc1
YzcxYWM5N2Y4MmJmZjI0IC1yIGIxOGZjZTY5OGNhMGIyOWFhY2E3NzMzPQpjZjliYTk1YjY1YzU2
Y2E0OCBzdGF0aWMvc2NyaXB0cy9tdmMvbGlzdC9saXN0LXBhbmVsLmpzCi0tLSBhL3N0YXRpYy9z
Y3JpcHRzL212Yy9saXN0L2xpc3QtcGFuZWwuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZjL2xp
c3QvbGlzdC1wYW5lbC5qcwpAQCAtMTE5LDYgKzExOSw4IEBACiAgICAgX3NldFVwTGlzdGVuZXJz
IDogZnVuY3Rpb24oKXsKICAgICAgICAgdGhpcy5vZmYoKTsKPTIwCisgICAgICAgIC8vVE9ETzog
bW92ZSBlcnJvckhhbmRsZXIgZG93biBpbnRvIGxpc3QtcGFuZWwgZnJvbSBoaXN0b3J5LXBhbmVs
ID0Kb3IKKyAgICAgICAgLy8gIHBhc3MgdG8gZ2xvYmFsIGVycm9yIGhhbmRsZXIgKEdhbGF4eSkK
ICAgICAgICAgdGhpcy5vbiggJ2Vycm9yJywgZnVuY3Rpb24oIG1vZGVsLCB4aHIsIG9wdGlvbnMs
IG1zZywgZGV0YWlscyApewogICAgICAgICAgICAgLy90aGlzLmVycm9ySGFuZGxlciggbW9kZWws
IHhociwgb3B0aW9ucywgbXNnLCBkZXRhaWxzICk7CiAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCBtb2RlbCwgeGhyLCBvcHRpb25zLCBtc2csIGRldGFpbHMgKTsKCmRpZmYgLXIgNWVhOWZjMmY3
NWFhZThlNTJlMTY0YWI3NWM3MWFjOTdmODJiZmYyNCAtciBiMThmY2U2OThjYTBiMjlhYWNhNzcz
Mz0KY2Y5YmE5NWI2NWM1NmNhNDggc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy9oaXN0b3J5L2hp
c3RvcnktcGFuZWwtZWRpdC1jdXJyPQplbnQuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvcGFja2Vk
L212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwtZWRpdC1jdXJyZW50LmpzCisrKyBiL3N0YXRpYy9z
Y3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVsLWVkaXQtY3VycmVudC5qcwpA
QCAtMSwxICsxLDEgQEAKLWRlZmluZShbIm12Yy9oaXN0b3J5L2hpc3RvcnktbW9kZWwiLCJtdmMv
aGlzdG9yeS9oaXN0b3J5LXBhbmVsLWVkaXQiLCJtdmMvPQpjb2xsZWN0aW9uL2NvbGxlY3Rpb24t
cGFuZWwiLCJtdmMvYmFzZS1tdmMiLCJ1dGlscy9sb2NhbGl6YXRpb24iXSxmdW5jdGlvbig9CmQs
YyxhLGgsYil7dmFyIGU9M0RoLlNlc3Npb25TdG9yYWdlTW9kZWwuZXh0ZW5kKHtkZWZhdWx0czp7
dGFnc0VkaXRvclNob3duOj0KZmFsc2UsYW5ub3RhdGlvbkVkaXRvclNob3duOmZhbHNlLHNjcm9s
bFBvc2l0aW9uOjB9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0PQp1cm4iSGlzdG9yeVBhbmVsUHJl
ZnMoIitKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKSsiKSJ9fSk7ZS5zdG9yYWdlS2V5PQo9
M0RmdW5jdGlvbiBmKCl7cmV0dXJuKCJoaXN0b3J5LXBhbmVsIil9O3ZhciBnPTNEYy5IaXN0b3J5
UGFuZWxFZGl0O3ZhciBpPQo9M0RnLmV4dGVuZCh7Y2xhc3NOYW1lOmcucHJvdG90eXBlLmNsYXNz
TmFtZSsiIGN1cnJlbnQtaGlzdG9yeS1wYW5lbCIsZW1wdHk9Ck1zZzpiKCJUaGlzIGhpc3Rvcnkg
aXMgZW1wdHkuIENsaWNrICdHZXQgRGF0YScgb24gdGhlIGxlZnQgdG9vbCBtZW51IHRvIHN0YT0K
cnQiKSxub25lRm91bmRNc2c6YigiTm8gbWF0Y2hpbmcgZGF0YXNldHMgZm91bmQiKSxIRENBVmll
d0NsYXNzOmcucHJvdG90eXBlPQouSERDQVZpZXdDbGFzcy5leHRlbmQoe2ZvbGRvdXRTdHlsZToi
ZHJpbGxkb3duIn0pLGluaXRpYWxpemU6ZnVuY3Rpb24oail7aj0KPTNEanx8e307dGhpcy5wcmVm
ZXJlbmNlcz0zRG5ldyBlKF8uZXh0ZW5kKHtpZDplLnN0b3JhZ2VLZXkoKX0sXy5waWNrKGosXy5r
PQpleXMoZS5wcm90b3R5cGUuZGVmYXVsdHMpKSkpO2cucHJvdG90eXBlLmluaXRpYWxpemUuY2Fs
bCh0aGlzLGopO3RoaXMucGFuZWw9ClN0YWNrPTNEW107dGhpcy5jdXJyZW50Q29udGVudElkPTNE
ai5jdXJyZW50Q29udGVudElkfHxudWxsfSxfc2V0VXBMaXN0ZW5lcj0KczpmdW5jdGlvbigpe2cu
cHJvdG90eXBlLl9zZXRVcExpc3RlbmVycy5jYWxsKHRoaXMpO3ZhciBqPTNEdGhpczt0aGlzLiRz
Y3JvPQpsbENvbnRhaW5lcigpLm9uKCJzY3JvbGwiLGZ1bmN0aW9uKGspe2lmKGouJGVsLmlzKCI6
dmlzaWJsZSIpKXtqLnByZWZlcmVuY2U9CnMuc2V0KCJzY3JvbGxQb3NpdGlvbiIsJCh0aGlzKS5z
Y3JvbGxUb3AoKSl9fSk7dGhpcy5vbigibmV3LW1vZGVsIixmdW5jdGlvbj0KKCl7ai5wcmVmZXJl
bmNlcy5zZXQoInNjcm9sbFBvc2l0aW9uIiwwKX0pfSxsb2FkQ3VycmVudEhpc3Rvcnk6ZnVuY3Rp
b24oayl7PQp0aGlzLmRlYnVnKHRoaXMrIi5sb2FkQ3VycmVudEhpc3RvcnkiKTt2YXIgaj0zRHRo
aXM7cmV0dXJuIHRoaXMubG9hZEhpc3Rvcnk9CldpdGhEZXRhaWxzKCJjdXJyZW50IixrKS50aGVu
KGZ1bmN0aW9uKG0sbCl7ai50cmlnZ2VyKCJjdXJyZW50LWhpc3RvcnkiLGopfT0KKX0sc3dpdGNo
VG9IaXN0b3J5OmZ1bmN0aW9uKG0sbCl7dmFyIGo9M0R0aGlzLGs9M0RmdW5jdGlvbigpe3JldHVy
biBqUXVlcnkuPQpnZXRKU09OKGdhbGF4eV9jb25maWcucm9vdCsiaGlzdG9yeS9zZXRfYXNfY3Vy
cmVudD9pZD0zRCIrbSl9O3JldHVybiB0aGlzLmw9Cm9hZEhpc3RvcnlXaXRoRGV0YWlscyhtLGws
aykudGhlbihmdW5jdGlvbihvLG4pe2oudHJpZ2dlcigic3dpdGNoZWQtaGlzdG9yeT0KIixqKX0p
fSxjcmVhdGVOZXdIaXN0b3J5OmZ1bmN0aW9uKGwpe2lmKCFHYWxheHl8fCFHYWxheHkuY3VyclVz
ZXJ8fEdhbGF4eS5jPQp1cnJVc2VyLmlzQW5vbnltb3VzKCkpe3RoaXMuZGlzcGxheU1lc3NhZ2Uo
ImVycm9yIixiKCJZb3UgbXVzdCBiZSBsb2dnZWQgaW49CiB0byBjcmVhdGUgaGlzdG9yaWVzIikp
O3JldHVybiAkLndoZW4oKX12YXIgaj0zRHRoaXMsaz0zRGZ1bmN0aW9uKCl7cmV0dXJuID0KalF1
ZXJ5LmdldEpTT04oZ2FsYXh5X2NvbmZpZy5yb290KyJoaXN0b3J5L2NyZWF0ZV9uZXdfY3VycmVu
dCIpfTtyZXR1cm4gdGhpPQpzLmxvYWRIaXN0b3J5KHVuZGVmaW5lZCxsLGspLnRoZW4oZnVuY3Rp
b24obixtKXtqLnRyaWdnZXIoIm5ldy1oaXN0b3J5IixqKX09Cil9LHNldE1vZGVsOmZ1bmN0aW9u
KGssaixsKXtnLnByb3RvdHlwZS5zZXRNb2RlbC5jYWxsKHRoaXMsayxqLGwpO2lmKHRoaXMubT0K
b2RlbCl7dGhpcy5sb2coImNoZWNraW5nIGZvciB1cGRhdGVzIik7dGhpcy5tb2RlbC5jaGVja0Zv
clVwZGF0ZXMoKX1yZXR1cm4gPQp0aGlzfSxfc2V0VXBDb2xsZWN0aW9uTGlzdGVuZXJzOmZ1bmN0
aW9uKCl7Zy5wcm90b3R5cGUuX3NldFVwQ29sbGVjdGlvbkxpc3Q9CmVuZXJzLmNhbGwodGhpcyk7
dGhpcy5jb2xsZWN0aW9uLm9uKCJzdGF0ZTpyZWFkeSIsZnVuY3Rpb24oayxsLGope2lmKCghay5n
ZT0KdCgidmlzaWJsZSIpKSYmKCF0aGlzLnN0b3JhZ2UuZ2V0KCJzaG93X2hpZGRlbiIpKSl7dGhp
cy5yZW1vdmVJdGVtVmlldyhrKX19PQosdGhpcyl9LF9zZXRVcE1vZGVsTGlzdGVuZXJzOmZ1bmN0
aW9uKCl7Zy5wcm90b3R5cGUuX3NldFVwTW9kZWxMaXN0ZW5lcnMuY2E9CmxsKHRoaXMpO2lmKEdh
bGF4eSYmR2FsYXh5LnF1b3RhTWV0ZXIpe3RoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwiY2hhbmdl
Om5pYz0KZV9zaXplIixmdW5jdGlvbigpe0dhbGF4eS5xdW90YU1ldGVyLnVwZGF0ZSgpfSl9fSxf
YnVpbGROZXdSZW5kZXI6ZnVuY3Rpb24oPQope2lmKCF0aGlzLm1vZGVsKXtyZXR1cm4gJCgpfXZh
ciBqPTNEZy5wcm90b3R5cGUuX2J1aWxkTmV3UmVuZGVyLmNhbGwodGhpcyk9CjtqLmZpbmQoIi5z
ZWFyY2giKS5wcmVwZW5kVG8oai5maW5kKCIuY29udHJvbHMiKSk7dGhpcy5fcmVuZGVyUXVvdGFN
ZXNzYWdlKD0Kaik7cmV0dXJuIGp9LF9yZW5kZXJRdW90YU1lc3NhZ2U6ZnVuY3Rpb24oail7aj0z
RGp8fHRoaXMuJGVsO3JldHVybiAkKHRoaXMuPQp0ZW1wbGF0ZXMucXVvdGFNc2coe30sdGhpcykp
LnByZXBlbmRUbyhqLmZpbmQoIi5tZXNzYWdlcyIpKX0sX3JlbmRlckVtcHR5TWU9CnNzYWdlOmZ1
bmN0aW9uKGwpe3ZhciBrPTNEdGhpcyxqPTNEay4kZW1wdHlNZXNzYWdlKGwpLG09M0QkKCIudG9v
bE1lbnVDb250YT0KaW5lciIpO2lmKChfLmlzRW1wdHkoay52aWV3cykmJiFrLnNlYXJjaEZvcikm
JihHYWxheHkmJkdhbGF4eS51cGxvYWQmJm0uc2l6PQplKCkpKXtqLmVtcHR5KCk7ai5odG1sKFti
KCJUaGlzIGhpc3RvcnkgaXMgZW1wdHkiKSwiLiAiLGIoIllvdSBjYW4gIiksJzxhIGM9Cmxhc3M9
M0QidXBsb2FkZXItbGluayIgaHJlZj0zRCJqYXZhc2NyaXB0OnZvaWQoMCkiPicsYigibG9hZCB5
b3VyIG93biBkYXRhIj0KKSwiPC9hPiIsYigiIG9yICIpLCc8YSBjbGFzcz0zRCJnZXQtZGF0YS1s
aW5rIiBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKSI+PQonLGIoImdldCBkYXRhIGZyb20gYW4g
ZXh0ZXJuYWwgc291cmNlIiksIjwvYT4iXS5qb2luKCIiKSk7ai5maW5kKCIudXBsb2FkZXI9Ci1s
aW5rIikuY2xpY2soZnVuY3Rpb24obil7R2FsYXh5LnVwbG9hZC5zaG93KG4pfSk7ai5maW5kKCIu
Z2V0LWRhdGEtbGluayIpLj0KY2xpY2soZnVuY3Rpb24obil7bS5wYXJlbnQoKS5zY3JvbGxUb3Ao
MCk7bS5maW5kKCdzcGFuOmNvbnRhaW5zKCJHZXQgRGF0YSIpPQonKS5jbGljaygpfSk7cmV0dXJu
IGouc2hvdygpfXJldHVybiBnLnByb3RvdHlwZS5fcmVuZGVyRW1wdHlNZXNzYWdlLmNhbGwodGg9
CmlzLGwpfSxfcmVuZGVyVGFnczpmdW5jdGlvbihqKXt2YXIgaz0zRHRoaXM7Zy5wcm90b3R5cGUu
X3JlbmRlclRhZ3MuY2FsbCh0aD0KaXMsaik7aWYodGhpcy5wcmVmZXJlbmNlcy5nZXQoInRhZ3NF
ZGl0b3JTaG93biIpKXt0aGlzLnRhZ3NFZGl0b3IudG9nZ2xlKHRyPQp1ZSl9dGhpcy50YWdzRWRp
dG9yLm9uKCJoaWRkZW5VbnRpbEFjdGl2YXRlZDpzaG93biBoaWRkZW5VbnRpbEFjdGl2YXRlZDpo
aWQ9CmRlbiIsZnVuY3Rpb24obCl7ay5wcmVmZXJlbmNlcy5zZXQoInRhZ3NFZGl0b3JTaG93biIs
bC5oaWRkZW4pfSl9LF9yZW5kZXJBbj0Kbm90YXRpb246ZnVuY3Rpb24oail7dmFyIGs9M0R0aGlz
O2cucHJvdG90eXBlLl9yZW5kZXJBbm5vdGF0aW9uLmNhbGwodGhpcyxqPQopO2lmKHRoaXMucHJl
ZmVyZW5jZXMuZ2V0KCJhbm5vdGF0aW9uRWRpdG9yU2hvd24iKSl7dGhpcy5hbm5vdGF0aW9uRWRp
dG9yLnQ9Cm9nZ2xlKHRydWUpfXRoaXMuYW5ub3RhdGlvbkVkaXRvci5vbigiaGlkZGVuVW50aWxB
Y3RpdmF0ZWQ6c2hvd24gaGlkZGVuVW50aT0KbEFjdGl2YXRlZDpoaWRkZW4iLGZ1bmN0aW9uKGwp
e2sucHJlZmVyZW5jZXMuc2V0KCJhbm5vdGF0aW9uRWRpdG9yU2hvd24iLGwuPQpoaWRkZW4pfSl9
LF9zd2FwTmV3UmVuZGVyOmZ1bmN0aW9uKGspe2cucHJvdG90eXBlLl9zd2FwTmV3UmVuZGVyLmNh
bGwodGhpcyw9CmspO3ZhciBqPTNEdGhpcztfLmRlbGF5KGZ1bmN0aW9uKCl7dmFyIGw9M0RqLnBy
ZWZlcmVuY2VzLmdldCgic2Nyb2xsUG9zaXRpbz0KbiIpO2lmKGwpe2ouc2Nyb2xsVG8obCl9fSwx
MCk7cmV0dXJuIHRoaXN9LF9hdHRhY2hJdGVtczpmdW5jdGlvbihrKXtnLnByb3RvPQp0eXBlLl9h
dHRhY2hJdGVtcy5jYWxsKHRoaXMsayk7dmFyIGo9M0R0aGlzLGw7aWYoai5jdXJyZW50Q29udGVu
dElkJiYobD0zRGo9Ci52aWV3RnJvbU1vZGVsSWQoai5jdXJyZW50Q29udGVudElkKSkpe2ouc2V0
Q3VycmVudENvbnRlbnQobCl9cmV0dXJuIHRoaXN9LD0KYWRkSXRlbVZpZXc6ZnVuY3Rpb24obCxt
LGspe3ZhciBqPTNEZy5wcm90b3R5cGUuYWRkSXRlbVZpZXcuY2FsbCh0aGlzLGwsbSxrPQopO2lm
KCFqKXtyZXR1cm4gan1pZih0aGlzLnBhbmVsU3RhY2subGVuZ3RoKXtyZXR1cm4gdGhpcy5fY29s
bGFwc2VEcmlsbGRvd249ClBhbmVsKCl9cmV0dXJuIGp9LF9zZXRVcEl0ZW1WaWV3TGlzdGVuZXJz
OmZ1bmN0aW9uKGspe3ZhciBqPTNEdGhpcztnLnByb3RvdD0KeXBlLl9zZXRVcEl0ZW1WaWV3TGlz
dGVuZXJzLmNhbGwoaixrKTtrLm9uKCJleHBhbmRlZDpkcmlsbGRvd24iLGZ1bmN0aW9uKG0sPQps
KXt0aGlzLl9leHBhbmREcmlsbGRvd25QYW5lbChsKX0sdGhpcyk7ay5vbigiY29sbGFwc2VkOmRy
aWxsZG93biIsZnVuY3Rpb249CihtLGwpe3RoaXMuX2NvbGxhcHNlRHJpbGxkb3duUGFuZWwobCl9
LHRoaXMpO2sub24oImRpc3BsYXkgZWRpdCBwYXJhbXMgcmVydT0KbiByZXBvcnQtZXJyIHZpc3Vh
bGl6ZSIsZnVuY3Rpb24obCxtKXt0aGlzLnNldEN1cnJlbnRDb250ZW50KGwpfSx0aGlzKTtyZXR1
PQpybiB0aGlzfSxzZXRDdXJyZW50Q29udGVudDpmdW5jdGlvbihqKXt0aGlzLiQoIi5oaXN0b3J5
LWNvbnRlbnQuY3VycmVudC1jb249CnRlbnQiKS5yZW1vdmVDbGFzcygiY3VycmVudC1jb250ZW50
Iik7aWYoail7ai4kZWwuYWRkQ2xhc3MoImN1cnJlbnQtY29udGVudD0KIik7dGhpcy5jdXJyZW50
Q29udGVudElkPTNEai5tb2RlbC5pZH1lbHNle3RoaXMuY3VycmVudENvbnRlbnRJZD0zRG51bGx9
fSxfPQpleHBhbmREcmlsbGRvd25QYW5lbDpmdW5jdGlvbihqKXt0aGlzLnBhbmVsU3RhY2sucHVz
aChqKTt0aGlzLiQoIj4gLmNvbnRyb2w9CnMiKS5hZGQodGhpcy4kbGlzdCgpKS5oaWRlKCk7ai5w
YXJlbnROYW1lPTNEdGhpcy5tb2RlbC5nZXQoIm5hbWUiKTt0aGlzLiRlbD0KLmFwcGVuZChqLnJl
bmRlcigpLiRlbCl9LF9jb2xsYXBzZURyaWxsZG93blBhbmVsOmZ1bmN0aW9uKGope3RoaXMucGFu
ZWxTdGFjPQprLnBvcCgpO3RoaXMucmVuZGVyKCl9LGNvbm5lY3RUb1F1b3RhTWV0ZXI6ZnVuY3Rp
b24oail7aWYoIWope3JldHVybiB0aGlzfXQ9Cmhpcy5saXN0ZW5UbyhqLCJxdW90YTpvdmVyIix0
aGlzLnNob3dRdW90YU1lc3NhZ2UpO3RoaXMubGlzdGVuVG8oaiwicXVvdGE6dT0KbmRlciIsdGhp
cy5oaWRlUXVvdGFNZXNzYWdlKTt0aGlzLm9uKCJyZW5kZXJlZCByZW5kZXJlZDppbml0aWFsIixm
dW5jdGlvbigpPQp7aWYoaiYmai5pc092ZXJRdW90YSgpKXt0aGlzLnNob3dRdW90YU1lc3NhZ2Uo
KX19KTtyZXR1cm4gdGhpc30sc2hvd1F1b3RhTWU9CnNzYWdlOmZ1bmN0aW9uKCl7dmFyIGo9M0R0
aGlzLiRlbC5maW5kKCIucXVvdGEtbWVzc2FnZSIpO2lmKGouaXMoIjpoaWRkZW4iKT0KKXtqLnNs
aWRlRG93bih0aGlzLmZ4U3BlZWQpfX0saGlkZVF1b3RhTWVzc2FnZTpmdW5jdGlvbigpe3ZhciBq
PTNEdGhpcy4kZWwuPQpmaW5kKCIucXVvdGEtbWVzc2FnZSIpO2lmKCFqLmlzKCI6aGlkZGVuIikp
e2ouc2xpZGVVcCh0aGlzLmZ4U3BlZWQpfX0sdG9TdHI9CmluZzpmdW5jdGlvbigpe3JldHVybiJD
dXJyZW50SGlzdG9yeVBhbmVsKCIrKCh0aGlzLm1vZGVsKT8odGhpcy5tb2RlbC5nZXQoIj0KbmFt
ZSIpKTooIiIpKSsiKSJ9fSk7aS5wcm90b3R5cGUudGVtcGxhdGVzPTNEKGZ1bmN0aW9uKCl7dmFy
IGo9M0RoLndyYXBUZW1wPQpsYXRlKFsnPGRpdiBjbGFzcz0zRCJxdW90YS1tZXNzYWdlIGVycm9y
bWVzc2FnZSI+JyxiKCJZb3UgYXJlIG92ZXIgeW91ciBkaXM9CmsgcXVvdGEiKSwiLiAiLGIoIlRv
b2wgZXhlY3V0aW9uIGlzIG9uIGhvbGQgdW50aWwgeW91ciBkaXNrIHVzYWdlIGRyb3BzIGJlbD0K
b3cgeW91ciBhbGxvY2F0ZWQgcXVvdGEiKSwiLiIsIjwvZGl2PiJdLCJoaXN0b3J5Iik7cmV0dXJu
IF8uZXh0ZW5kKF8uY2xvbmUoPQpnLnByb3RvdHlwZS50ZW1wbGF0ZXMpLHtxdW90YU1zZzpqfSl9
KCkpO3JldHVybntDdXJyZW50SGlzdG9yeVBhbmVsOml9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQorZGVmaW5lKFsibXZjL2hpc3RvcnkvaGlzdG9yeS1tb2RlbCIsIm12Yy9oaXN0b3J5
L2hpc3RvcnktcGFuZWwtZWRpdCIsIm12Yy89CmNvbGxlY3Rpb24vY29sbGVjdGlvbi1wYW5lbCIs
Im12Yy9iYXNlLW12YyIsInV0aWxzL2xvY2FsaXphdGlvbiJdLGZ1bmN0aW9uKD0KZCxjLGEsaCxi
KXt2YXIgZT0zRGguU2Vzc2lvblN0b3JhZ2VNb2RlbC5leHRlbmQoe2RlZmF1bHRzOnt0YWdzRWRp
dG9yU2hvd246PQpmYWxzZSxhbm5vdGF0aW9uRWRpdG9yU2hvd246ZmFsc2Usc2Nyb2xsUG9zaXRp
b246MH0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXQ9CnVybiJIaXN0b3J5UGFuZWxQcmVmcygiK0pT
T04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpKyIpIn19KTtlLnN0b3JhZ2VLZXk9Cj0zRGZ1bmN0
aW9uIGYoKXtyZXR1cm4oImhpc3RvcnktcGFuZWwiKX07dmFyIGc9M0RjLkhpc3RvcnlQYW5lbEVk
aXQ7dmFyIGk9Cj0zRGcuZXh0ZW5kKHtjbGFzc05hbWU6Zy5wcm90b3R5cGUuY2xhc3NOYW1lKyIg
Y3VycmVudC1oaXN0b3J5LXBhbmVsIixlbXB0eT0KTXNnOmIoIlRoaXMgaGlzdG9yeSBpcyBlbXB0
eS4gQ2xpY2sgJ0dldCBEYXRhJyBvbiB0aGUgbGVmdCB0b29sIG1lbnUgdG8gc3RhPQpydCIpLG5v
bmVGb3VuZE1zZzpiKCJObyBtYXRjaGluZyBkYXRhc2V0cyBmb3VuZCIpLEhEQ0FWaWV3Q2xhc3M6
Zy5wcm90b3R5cGU9Ci5IRENBVmlld0NsYXNzLmV4dGVuZCh7Zm9sZG91dFN0eWxlOiJkcmlsbGRv
d24ifSksaW5pdGlhbGl6ZTpmdW5jdGlvbihqKXtqPQo9M0RqfHx7fTt0aGlzLnByZWZlcmVuY2Vz
PTNEbmV3IGUoXy5leHRlbmQoe2lkOmUuc3RvcmFnZUtleSgpfSxfLnBpY2soaixfLms9CmV5cyhl
LnByb3RvdHlwZS5kZWZhdWx0cykpKSk7Zy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMs
aik7dGhpcy5wYW5lbD0KU3RhY2s9M0RbXTt0aGlzLmN1cnJlbnRDb250ZW50SWQ9M0RqLmN1cnJl
bnRDb250ZW50SWR8fG51bGx9LF9zZXRVcExpc3RlbmVyPQpzOmZ1bmN0aW9uKCl7Zy5wcm90b3R5
cGUuX3NldFVwTGlzdGVuZXJzLmNhbGwodGhpcyk7dmFyIGo9M0R0aGlzO3RoaXMuJHNjcm89Cmxs
Q29udGFpbmVyKCkub24oInNjcm9sbCIsZnVuY3Rpb24oayl7aWYoai4kZWwuaXMoIjp2aXNpYmxl
Iikpe2oucHJlZmVyZW5jZT0Kcy5zZXQoInNjcm9sbFBvc2l0aW9uIiwkKHRoaXMpLnNjcm9sbFRv
cCgpKX19KTt0aGlzLm9uKCJuZXctbW9kZWwiLGZ1bmN0aW9uPQooKXtqLnByZWZlcmVuY2VzLnNl
dCgic2Nyb2xsUG9zaXRpb24iLDApfSl9LGxvYWRDdXJyZW50SGlzdG9yeTpmdW5jdGlvbihrKXs9
CnRoaXMuZGVidWcodGhpcysiLmxvYWRDdXJyZW50SGlzdG9yeSIpO3ZhciBqPTNEdGhpcztyZXR1
cm4gdGhpcy5sb2FkSGlzdG9yeT0KV2l0aERldGFpbHMoImN1cnJlbnQiLGspLnRoZW4oZnVuY3Rp
b24obSxsKXtqLnRyaWdnZXIoImN1cnJlbnQtaGlzdG9yeSIsail9PQopfSxzd2l0Y2hUb0hpc3Rv
cnk6ZnVuY3Rpb24obSxsKXt2YXIgaj0zRHRoaXMsaz0zRGZ1bmN0aW9uKCl7cmV0dXJuIGpRdWVy
eS49CmdldEpTT04oZ2FsYXh5X2NvbmZpZy5yb290KyJoaXN0b3J5L3NldF9hc19jdXJyZW50P2lk
PTNEIittKX07cmV0dXJuIHRoaXMubD0Kb2FkSGlzdG9yeVdpdGhEZXRhaWxzKG0sbCxrKS50aGVu
KGZ1bmN0aW9uKG8sbil7ai50cmlnZ2VyKCJzd2l0Y2hlZC1oaXN0b3J5PQoiLGopfSl9LGNyZWF0
ZU5ld0hpc3Rvcnk6ZnVuY3Rpb24obCl7aWYoIUdhbGF4eXx8IUdhbGF4eS5jdXJyVXNlcnx8R2Fs
YXh5LmM9CnVyclVzZXIuaXNBbm9ueW1vdXMoKSl7dGhpcy5kaXNwbGF5TWVzc2FnZSgiZXJyb3Ii
LGIoIllvdSBtdXN0IGJlIGxvZ2dlZCBpbj0KIHRvIGNyZWF0ZSBoaXN0b3JpZXMiKSk7cmV0dXJu
ICQud2hlbigpfXZhciBqPTNEdGhpcyxrPTNEZnVuY3Rpb24oKXtyZXR1cm4gPQpqUXVlcnkuZ2V0
SlNPTihnYWxheHlfY29uZmlnLnJvb3QrImhpc3RvcnkvY3JlYXRlX25ld19jdXJyZW50Iil9O3Jl
dHVybiB0aGk9CnMubG9hZEhpc3RvcnkodW5kZWZpbmVkLGwsaykudGhlbihmdW5jdGlvbihuLG0p
e2oudHJpZ2dlcigibmV3LWhpc3RvcnkiLGopfT0KKX0sc2V0TW9kZWw6ZnVuY3Rpb24oayxqLGwp
e2cucHJvdG90eXBlLnNldE1vZGVsLmNhbGwodGhpcyxrLGosbCk7aWYodGhpcy5tPQpvZGVsKXt0
aGlzLmxvZygiY2hlY2tpbmcgZm9yIHVwZGF0ZXMiKTt0aGlzLm1vZGVsLmNoZWNrRm9yVXBkYXRl
cygpfXJldHVybiA9CnRoaXN9LF9zZXRVcENvbGxlY3Rpb25MaXN0ZW5lcnM6ZnVuY3Rpb24oKXtn
LnByb3RvdHlwZS5fc2V0VXBDb2xsZWN0aW9uTGlzdD0KZW5lcnMuY2FsbCh0aGlzKTt0aGlzLmNv
bGxlY3Rpb24ub24oInN0YXRlOnJlYWR5IixmdW5jdGlvbihrLGwsail7aWYoKCFrLmdlPQp0KCJ2
aXNpYmxlIikpJiYoIXRoaXMuc3RvcmFnZS5nZXQoInNob3dfaGlkZGVuIikpKXt0aGlzLnJlbW92
ZUl0ZW1WaWV3KGspfX09Cix0aGlzKX0sX3NldFVwTW9kZWxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtn
LnByb3RvdHlwZS5fc2V0VXBNb2RlbExpc3RlbmVycy5jYT0KbGwodGhpcyk7aWYoR2FsYXh5JiZH
YWxheHkucXVvdGFNZXRlcil7dGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCJjaGFuZ2U6bmljPQpl
X3NpemUiLGZ1bmN0aW9uKCl7R2FsYXh5LnF1b3RhTWV0ZXIudXBkYXRlKCl9KX19LF9idWlsZE5l
d1JlbmRlcjpmdW5jdGlvbig9Cil7aWYoIXRoaXMubW9kZWwpe3JldHVybiAkKCl9dmFyIGo9M0Rn
LnByb3RvdHlwZS5fYnVpbGROZXdSZW5kZXIuY2FsbCh0aGlzKT0KO2ouZmluZCgiLnNlYXJjaCIp
LnByZXBlbmRUbyhqLmZpbmQoIi5jb250cm9scyIpKTt0aGlzLl9yZW5kZXJRdW90YU1lc3NhZ2Uo
PQpqKTtyZXR1cm4gan0sX3JlbmRlclF1b3RhTWVzc2FnZTpmdW5jdGlvbihqKXtqPTNEanx8dGhp
cy4kZWw7cmV0dXJuICQodGhpcy49CnRlbXBsYXRlcy5xdW90YU1zZyh7fSx0aGlzKSkucHJlcGVu
ZFRvKGouZmluZCgiLm1lc3NhZ2VzIikpfSxfcmVuZGVyRW1wdHlNZT0Kc3NhZ2U6ZnVuY3Rpb24o
bCl7dmFyIGs9M0R0aGlzLGo9M0RrLiRlbXB0eU1lc3NhZ2UobCksbT0zRCQoIi50b29sTWVudUNv
bnRhPQppbmVyIik7aWYoKF8uaXNFbXB0eShrLnZpZXdzKSYmIWsuc2VhcmNoRm9yKSYmKEdhbGF4
eSYmR2FsYXh5LnVwbG9hZCYmbS5zaXo9CmUoKSkpe2ouZW1wdHkoKTtqLmh0bWwoW2IoIlRoaXMg
aGlzdG9yeSBpcyBlbXB0eSIpLCIuICIsYigiWW91IGNhbiAiKSwnPGEgYz0KbGFzcz0zRCJ1cGxv
YWRlci1saW5rIiBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKSI+JyxiKCJsb2FkIHlvdXIgb3du
IGRhdGEiPQopLCI8L2E+IixiKCIgb3IgIiksJzxhIGNsYXNzPTNEImdldC1kYXRhLWxpbmsiIGhy
ZWY9M0QiamF2YXNjcmlwdDp2b2lkKDApIj49CicsYigiZ2V0IGRhdGEgZnJvbSBhbiBleHRlcm5h
bCBzb3VyY2UiKSwiPC9hPiJdLmpvaW4oIiIpKTtqLmZpbmQoIi51cGxvYWRlcj0KLWxpbmsiKS5j
bGljayhmdW5jdGlvbihuKXtHYWxheHkudXBsb2FkLnNob3cobil9KTtqLmZpbmQoIi5nZXQtZGF0
YS1saW5rIikuPQpjbGljayhmdW5jdGlvbihuKXttLnBhcmVudCgpLnNjcm9sbFRvcCgwKTttLmZp
bmQoJ3NwYW46Y29udGFpbnMoIkdldCBEYXRhIik9CicpLmNsaWNrKCl9KTtyZXR1cm4gai5zaG93
KCl9cmV0dXJuIGcucHJvdG90eXBlLl9yZW5kZXJFbXB0eU1lc3NhZ2UuY2FsbCh0aD0KaXMsbCl9
LF9yZW5kZXJUYWdzOmZ1bmN0aW9uKGope3ZhciBrPTNEdGhpcztnLnByb3RvdHlwZS5fcmVuZGVy
VGFncy5jYWxsKHRoPQppcyxqKTtpZih0aGlzLnByZWZlcmVuY2VzLmdldCgidGFnc0VkaXRvclNo
b3duIikpe3RoaXMudGFnc0VkaXRvci50b2dnbGUodHI9CnVlKX10aGlzLnRhZ3NFZGl0b3Iub24o
ImhpZGRlblVudGlsQWN0aXZhdGVkOnNob3duIGhpZGRlblVudGlsQWN0aXZhdGVkOmhpZD0KZGVu
IixmdW5jdGlvbihsKXtrLnByZWZlcmVuY2VzLnNldCgidGFnc0VkaXRvclNob3duIixsLmhpZGRl
bil9KX0sX3JlbmRlckFuPQpub3RhdGlvbjpmdW5jdGlvbihqKXt2YXIgaz0zRHRoaXM7Zy5wcm90
b3R5cGUuX3JlbmRlckFubm90YXRpb24uY2FsbCh0aGlzLGo9Cik7aWYodGhpcy5wcmVmZXJlbmNl
cy5nZXQoImFubm90YXRpb25FZGl0b3JTaG93biIpKXt0aGlzLmFubm90YXRpb25FZGl0b3IudD0K
b2dnbGUodHJ1ZSl9dGhpcy5hbm5vdGF0aW9uRWRpdG9yLm9uKCJoaWRkZW5VbnRpbEFjdGl2YXRl
ZDpzaG93biBoaWRkZW5VbnRpPQpsQWN0aXZhdGVkOmhpZGRlbiIsZnVuY3Rpb24obCl7ay5wcmVm
ZXJlbmNlcy5zZXQoImFubm90YXRpb25FZGl0b3JTaG93biIsbC49CmhpZGRlbil9KX0sX3N3YXBO
ZXdSZW5kZXI6ZnVuY3Rpb24oayl7Zy5wcm90b3R5cGUuX3N3YXBOZXdSZW5kZXIuY2FsbCh0aGlz
LD0Kayk7dmFyIGo9M0R0aGlzO18uZGVsYXkoZnVuY3Rpb24oKXt2YXIgbD0zRGoucHJlZmVyZW5j
ZXMuZ2V0KCJzY3JvbGxQb3NpdGlvPQpuIik7aWYobCl7ai5zY3JvbGxUbyhsKX19LDEwKTtyZXR1
cm4gdGhpc30sX2F0dGFjaEl0ZW1zOmZ1bmN0aW9uKGspe2cucHJvdG89CnR5cGUuX2F0dGFjaEl0
ZW1zLmNhbGwodGhpcyxrKTt2YXIgaj0zRHRoaXMsbDtpZihqLmN1cnJlbnRDb250ZW50SWQmJihs
PTNEaj0KLnZpZXdGcm9tTW9kZWxJZChqLmN1cnJlbnRDb250ZW50SWQpKSl7ai5zZXRDdXJyZW50
Q29udGVudChsKX1yZXR1cm4gdGhpc30sPQphZGRJdGVtVmlldzpmdW5jdGlvbihsLG0sayl7dmFy
IGo9M0RnLnByb3RvdHlwZS5hZGRJdGVtVmlldy5jYWxsKHRoaXMsbCxtLGs9Cik7aWYoIWope3Jl
dHVybiBqfWlmKHRoaXMucGFuZWxTdGFjay5sZW5ndGgpe3JldHVybiB0aGlzLl9jb2xsYXBzZURy
aWxsZG93bj0KUGFuZWwoKX1yZXR1cm4gan0sX3NldFVwSXRlbVZpZXdMaXN0ZW5lcnM6ZnVuY3Rp
b24oayl7dmFyIGo9M0R0aGlzO2cucHJvdG90PQp5cGUuX3NldFVwSXRlbVZpZXdMaXN0ZW5lcnMu
Y2FsbChqLGspO2sub24oImV4cGFuZGVkOmRyaWxsZG93biIsZnVuY3Rpb24obSw9Cmwpe3RoaXMu
X2V4cGFuZERyaWxsZG93blBhbmVsKGwpfSx0aGlzKTtrLm9uKCJjb2xsYXBzZWQ6ZHJpbGxkb3du
IixmdW5jdGlvbj0KKG0sbCl7dGhpcy5fY29sbGFwc2VEcmlsbGRvd25QYW5lbChsKX0sdGhpcyk7
ay5vbigiZGlzcGxheSBlZGl0IHBhcmFtcyByZXJ1PQpuIHJlcG9ydC1lcnIgdmlzdWFsaXplIixm
dW5jdGlvbihsLG0pe3RoaXMuc2V0Q3VycmVudENvbnRlbnQobCl9LHRoaXMpO3JldHU9CnJuIHRo
aXN9LHNldEN1cnJlbnRDb250ZW50OmZ1bmN0aW9uKGope3RoaXMuJCgiLmhpc3RvcnktY29udGVu
dC5jdXJyZW50LWNvbj0KdGVudCIpLnJlbW92ZUNsYXNzKCJjdXJyZW50LWNvbnRlbnQiKTtpZihq
KXtqLiRlbC5hZGRDbGFzcygiY3VycmVudC1jb250ZW50PQoiKTt0aGlzLmN1cnJlbnRDb250ZW50
SWQ9M0RqLm1vZGVsLmlkfWVsc2V7dGhpcy5jdXJyZW50Q29udGVudElkPTNEbnVsbH19LF89CmV4
cGFuZERyaWxsZG93blBhbmVsOmZ1bmN0aW9uKGope3RoaXMucGFuZWxTdGFjay5wdXNoKGopO3Ro
aXMuJCgiPiAuY29udHJvbD0KcyIpLmFkZCh0aGlzLiRsaXN0KCkpLmhpZGUoKTtqLnBhcmVudE5h
bWU9M0R0aGlzLm1vZGVsLmdldCgibmFtZSIpO3RoaXMuJGVsPQouYXBwZW5kKGoucmVuZGVyKCku
JGVsKX0sX2NvbGxhcHNlRHJpbGxkb3duUGFuZWw6ZnVuY3Rpb24oail7dGhpcy5wYW5lbFN0YWM9
CmsucG9wKCk7dGhpcy5yZW5kZXIoKX0sY29ubmVjdFRvUXVvdGFNZXRlcjpmdW5jdGlvbihqKXtp
Zighail7cmV0dXJuIHRoaXN9dD0KaGlzLmxpc3RlblRvKGosInF1b3RhOm92ZXIiLHRoaXMuc2hv
d1F1b3RhTWVzc2FnZSk7dGhpcy5saXN0ZW5UbyhqLCJxdW90YTp1PQpuZGVyIix0aGlzLmhpZGVR
dW90YU1lc3NhZ2UpO3RoaXMub24oInJlbmRlcmVkIHJlbmRlcmVkOmluaXRpYWwiLGZ1bmN0aW9u
KCk9CntpZihqJiZqLmlzT3ZlclF1b3RhKCkpe3RoaXMuc2hvd1F1b3RhTWVzc2FnZSgpfX0pO3Jl
dHVybiB0aGlzfSxjbGVhck1lc3NhZz0KZXM6ZnVuY3Rpb24oayl7dmFyIGo9M0QhXy5pc1VuZGVm
aW5lZChrKT8kKGsuY3VycmVudFRhcmdldCk6dGhpcy4kbWVzc2FnZXMoPQopLmNoaWxkcmVuKCdb
Y2xhc3MkPTNEIm1lc3NhZ2UiXScpO2o9M0RqLm5vdCgiLnF1b3RhLW1lc3NhZ2UiKTtqLmZhZGVP
dXQodGg9CmlzLmZ4U3BlZWQsZnVuY3Rpb24oKXskKHRoaXMpLnJlbW92ZSgpfSk7cmV0dXJuIHRo
aXN9LHNob3dRdW90YU1lc3NhZ2U6ZnVuYz0KdGlvbigpe3ZhciBqPTNEdGhpcy4kKCIucXVvdGEt
bWVzc2FnZSIpO2lmKGouaXMoIjpoaWRkZW4iKSl7ai5zbGlkZURvd24odGhpPQpzLmZ4U3BlZWQp
fX0saGlkZVF1b3RhTWVzc2FnZTpmdW5jdGlvbigpe3ZhciBqPTNEdGhpcy4kKCIucXVvdGEtbWVz
c2FnZSIpO2k9CmYoIWouaXMoIjpoaWRkZW4iKSl7ai5zbGlkZVVwKHRoaXMuZnhTcGVlZCl9fSx0
b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDdT0KcnJlbnRIaXN0b3J5UGFuZWwoIisoKHRoaXMu
bW9kZWwpPyh0aGlzLm1vZGVsLmdldCgibmFtZSIpKTooIiIpKSsiKSJ9fSk7aS5wPQpyb3RvdHlw
ZS50ZW1wbGF0ZXM9M0QoZnVuY3Rpb24oKXt2YXIgaj0zRGgud3JhcFRlbXBsYXRlKFsnPGRpdiBj
bGFzcz0zRCJxdW89CnRhLW1lc3NhZ2UgZXJyb3JtZXNzYWdlIj4nLGIoIllvdSBhcmUgb3ZlciB5
b3VyIGRpc2sgcXVvdGEiKSwiLiAiLGIoIlRvb2wgZT0KeGVjdXRpb24gaXMgb24gaG9sZCB1bnRp
bCB5b3VyIGRpc2sgdXNhZ2UgZHJvcHMgYmVsb3cgeW91ciBhbGxvY2F0ZWQgcXVvdGEiPQopLCIu
IiwiPC9kaXY+Il0sImhpc3RvcnkiKTtyZXR1cm4gXy5leHRlbmQoXy5jbG9uZShnLnByb3RvdHlw
ZS50ZW1wbGF0ZXMpLHs9CnF1b3RhTXNnOmp9KX0oKSk7cmV0dXJue0N1cnJlbnRIaXN0b3J5UGFu
ZWw6aX19KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIDVlYTlmYzJmNzVh
YWU4ZTUyZTE2NGFiNzVjNzFhYzk3ZjgyYmZmMjQgLXIgYjE4ZmNlNjk4Y2EwYjI5YWFjYTc3MzM9
CmNmOWJhOTViNjVjNTZjYTQ4IHN0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0
b3J5LXBhbmVsLmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0
b3J5LXBhbmVsLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0
b3J5LXBhbmVsLmpzCkBAIC0xLDEgKzEsMSBAQAotZGVmaW5lKFsibXZjL2xpc3QvbGlzdC1wYW5l
bCIsIm12Yy9oaXN0b3J5L2hpc3RvcnktbW9kZWwiLCJtdmMvaGlzdG9yeS9oaXM9CnRvcnktY29u
dGVudHMiLCJtdmMvaGlzdG9yeS9oZGEtbGkiLCJtdmMvaGlzdG9yeS9oZGNhLWxpIiwibXZjL2Nv
bGxlY3Rpb24vYz0Kb2xsZWN0aW9uLXBhbmVsIiwibXZjL3VzZXIvdXNlci1tb2RlbCIsInVpL2Zh
LWljb24tYnV0dG9uIiwibXZjL3VpL3BvcHVwLW1lPQpudSIsIm12Yy9iYXNlLW12YyIsInV0aWxz
L2xvY2FsaXphdGlvbiIsInVpL3NlYXJjaC1pbnB1dCJdLGZ1bmN0aW9uKGYsaCxuLGQ9CixiLG8s
aSxjLGEscSxnKXt2YXIgbD0zRHEuU2Vzc2lvblN0b3JhZ2VNb2RlbC5leHRlbmQoe2RlZmF1bHRz
OntleHBhbmRlZElkcz0KOnt9LHNob3dfZGVsZXRlZDpmYWxzZSxzaG93X2hpZGRlbjpmYWxzZX0s
YWRkRXhwYW5kZWQ6ZnVuY3Rpb24ocil7dmFyIHM9M0QiPQpleHBhbmRlZElkcyI7dGhpcy5zYXZl
KHMsXy5leHRlbmQodGhpcy5nZXQocyksXy5vYmplY3QoW3IuaWRdLFtyLmdldCgiaWQiKV09Cikp
KX0scmVtb3ZlRXhwYW5kZWQ6ZnVuY3Rpb24ocil7dmFyIHM9M0QiZXhwYW5kZWRJZHMiO3RoaXMu
c2F2ZShzLF8ub21pdCh0aD0KaXMuZ2V0KHMpLHIuaWQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXty
ZXR1cm4iSGlzdG9yeVByZWZzKCIrdGhpcy5pZCsiKSJ9fSk7PQpsLnN0b3JhZ2VLZXlQcmVmaXg9
M0QiaGlzdG9yeToiO2wuaGlzdG9yeVN0b3JhZ2VLZXk9M0RmdW5jdGlvbiBqKHIpe2lmKCFyKXs9
CnRocm93IG5ldyBFcnJvcigiSGlzdG9yeVByZWZzLmhpc3RvcnlTdG9yYWdlS2V5IG5lZWRzIHZh
bGlkIGlkOiAiK3IpfXJldHVybj0KKGwuc3RvcmFnZUtleVByZWZpeCtyKX07bC5nZXQ9M0RmdW5j
dGlvbiBlKHIpe3JldHVybiBuZXcgbCh7aWQ6bC5oaXN0b3J5U3RvPQpyYWdlS2V5KHIpfSl9O2wu
Y2xlYXJBbGw9M0RmdW5jdGlvbiBrKHMpe2Zvcih2YXIgciBpbiBzZXNzaW9uU3RvcmFnZSl7aWYo
ci49CmluZGV4T2YobC5zdG9yYWdlS2V5UHJlZml4KT0zRD0zRD0zRDApe3Nlc3Npb25TdG9yYWdl
LnJlbW92ZUl0ZW0ocil9fX07dmFyID0KcD0zRGYuTW9kZWxMaXN0UGFuZWw7dmFyIG09M0RwLmV4
dGVuZCh7SERBVmlld0NsYXNzOmQuSERBTGlzdEl0ZW1WaWV3LEhEQ0FWPQppZXdDbGFzczpiLkhE
Q0FMaXN0SXRlbVZpZXcsY29sbGVjdGlvbkNsYXNzOm4uSGlzdG9yeUNvbnRlbnRzLG1vZGVsQ29s
bGVjdGk9Cm9uS2V5OiJjb250ZW50cyIsdGFnTmFtZToiZGl2IixjbGFzc05hbWU6cC5wcm90b3R5
cGUuY2xhc3NOYW1lKyIgaGlzdG9yeS1wYT0KbmVsIixlbXB0eU1zZzpnKCJUaGlzIGhpc3Rvcnkg
aXMgZW1wdHkiKSxub25lRm91bmRNc2c6ZygiTm8gbWF0Y2hpbmcgZGF0YXNlPQp0cyBmb3VuZCIp
LHNlYXJjaFBsYWNlaG9sZGVyOmcoInNlYXJjaCBkYXRhc2V0cyIpLGluaXRpYWxpemU6ZnVuY3Rp
b24ocil7cC49CnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxyKTt0aGlzLmxpbmtUYXJn
ZXQ9M0RyLmxpbmtUYXJnZXR8fCJfYmxhbmsifT0KLGZyZWVNb2RlbDpmdW5jdGlvbigpe3AucHJv
dG90eXBlLmZyZWVNb2RlbC5jYWxsKHRoaXMpO2lmKHRoaXMubW9kZWwpe3RoaXMuPQptb2RlbC5j
bGVhclVwZGF0ZVRpbWVvdXQoKX1yZXR1cm4gdGhpc30sX3NldFVwTGlzdGVuZXJzOmZ1bmN0aW9u
KCl7cC5wcm90b3Q9CnlwZS5fc2V0VXBMaXN0ZW5lcnMuY2FsbCh0aGlzKTt0aGlzLm9uKCJlcnJv
ciIsZnVuY3Rpb24ocyx2LHIsdSx0KXt0aGlzLmVycj0Kb3JIYW5kbGVyKHMsdixyLHUsdCl9KTt0
aGlzLm9uKCJsb2FkaW5nLWRvbmUiLGZ1bmN0aW9uKCl7aWYoIXRoaXMudmlld3MubGVuPQpndGgp
e3RoaXMudHJpZ2dlcigiZW1wdHktaGlzdG9yeSIsdGhpcyl9fSl9LGxvYWRIaXN0b3J5V2l0aERl
dGFpbHM6ZnVuY3Rpb249Cih1LHQscyx2KXt0aGlzLmluZm8oImxvYWRIaXN0b3J5V2l0aERldGFp
bHM6Iix1LHQscyx2KTt2YXIgcj0zRGZ1bmN0aW9uKHcpez0KcmV0dXJuIF8udmFsdWVzKGwuZ2V0
KHcuaWQpLmdldCgiZXhwYW5kZWRJZHMiKSl9O3JldHVybiB0aGlzLmxvYWRIaXN0b3J5KHUsPQp0
LHMsdixyKX0sbG9hZEhpc3Rvcnk6ZnVuY3Rpb24odix1LHQsdyxyKXt0aGlzLmluZm8oImxvYWRI
aXN0b3J5OiIsdix1LHQsdyw9CnIpO3ZhciBzPTNEdGhpczt1PTNEdXx8e307cy50cmlnZ2VyKCJs
b2FkaW5nIixzKTt2YXIgeD0zRGguSGlzdG9yeS5nZXRIaXN0bz0KcnlEYXRhKHYse2hpc3RvcnlG
bjp0LGNvbnRlbnRzRm46dyxkZXRhaWxJZHNGbjp1LmluaXRpYWxseUV4cGFuZGVkfHxyfSk7cmV0
PQp1cm4gcy5fbG9hZEhpc3RvcnlGcm9tWEhSKHgsdSkuZmFpbChmdW5jdGlvbihBLHkseil7cy50
cmlnZ2VyKCJlcnJvciIscyxBLHU9CixnKCJBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgd2hpbGUg
Iit5KSx7aGlzdG9yeUlkOnYsaGlzdG9yeTp6fHx7fX0pfSkuYWx3YT0KeXMoZnVuY3Rpb24oKXtz
LnRyaWdnZXIoImxvYWRpbmctZG9uZSIscyl9KX0sX2xvYWRIaXN0b3J5RnJvbVhIUjpmdW5jdGlv
bih0PQoscyl7dmFyIHI9M0R0aGlzO3QudGhlbihmdW5jdGlvbih1LHYpe3IuSlNPTlRvTW9kZWwo
dSx2LHMpO3IucmVuZGVyKCl9KTt0LmY9CmFpbChmdW5jdGlvbih2LHUpe3IucmVuZGVyKCl9KTty
ZXR1cm4gdH0scmVmcmVzaENvbnRlbnRzOmZ1bmN0aW9uKHMscil7aWYodD0KaGlzLm1vZGVsKXty
ZXR1cm4gdGhpcy5tb2RlbC5yZWZyZXNoKHMscil9cmV0dXJuICQud2hlbigpfSxKU09OVG9Nb2Rl
bDpmdW5jPQp0aW9uKHUscixzKXt0aGlzLmxvZygiSlNPTlRvTW9kZWw6Iix1LHIscyk7cz0zRHN8
fHt9O3ZhciB0PTNEbmV3IGguSGlzdG9yeSg9CnUscixzKTt0aGlzLnNldE1vZGVsKHQpO3JldHVy
biB0fSxzZXRNb2RlbDpmdW5jdGlvbihzLHIpe3I9M0RyfHx7fTtwLnByb3RvdD0KeXBlLnNldE1v
ZGVsLmNhbGwodGhpcyxzLHIpO2lmKHRoaXMubW9kZWwpe3RoaXMuX3NldFVwV2ViU3RvcmFnZShy
LmluaXRpYWxsPQp5RXhwYW5kZWQsci5zaG93X2RlbGV0ZWQsci5zaG93X2hpZGRlbil9fSxfc2V0
VXBXZWJTdG9yYWdlOmZ1bmN0aW9uKHMscix0KXs9CmlmKHRoaXMuc3RvcmFnZSl7dGhpcy5zdG9w
TGlzdGVuaW5nKHRoaXMuc3RvcmFnZSl9dGhpcy5zdG9yYWdlPTNEbmV3IGwoe2lkOj0KbC5oaXN0
b3J5U3RvcmFnZUtleSh0aGlzLm1vZGVsLmdldCgiaWQiKSl9KTtpZihfLmlzT2JqZWN0KHMpKXt0
aGlzLnN0b3JhZ2UuPQpzZXQoImV4cGFuZGVkSWRzIixzKX1pZihfLmlzQm9vbGVhbihyKSl7dGhp
cy5zdG9yYWdlLnNldCgic2hvd19kZWxldGVkIixyKX09CmlmKF8uaXNCb29sZWFuKHQpKXt0aGlz
LnN0b3JhZ2Uuc2V0KCJzaG93X2hpZGRlbiIsdCl9dGhpcy50cmlnZ2VyKCJuZXctc3Rvcj0KYWdl
Iix0aGlzLnN0b3JhZ2UsdGhpcyk7dGhpcy5sb2codGhpcysiIChpbml0J2QpIHN0b3JhZ2U6Iix0
aGlzLnN0b3JhZ2UuZ2V0PQooKSk7dGhpcy5saXN0ZW5Ubyh0aGlzLnN0b3JhZ2UseyJjaGFuZ2U6
c2hvd19kZWxldGVkIjpmdW5jdGlvbih1LHYpe3RoaXMuc2g9Cm93RGVsZXRlZD0zRHZ9LCJjaGFu
Z2U6c2hvd19oaWRkZW4iOmZ1bmN0aW9uKHUsdil7dGhpcy5zaG93SGlkZGVuPTNEdn19LHRoaT0K
cyk7dGhpcy5zaG93RGVsZXRlZD0zRChyIT0zRD0zRHVuZGVmaW5lZCk/cjp0aGlzLnN0b3JhZ2Uu
Z2V0KCJzaG93X2RlbGV0ZWQiPQopO3RoaXMuc2hvd0hpZGRlbj0zRCh0IT0zRD0zRHVuZGVmaW5l
ZCk/dDp0aGlzLnN0b3JhZ2UuZ2V0KCJzaG93X2hpZGRlbiIpO3I9CmV0dXJuIHRoaXN9LF9idWls
ZE5ld1JlbmRlcjpmdW5jdGlvbigpe3ZhciByPTNEcC5wcm90b3R5cGUuX2J1aWxkTmV3UmVuZGVy
Lj0KY2FsbCh0aGlzKTtpZih0aGlzLm11bHRpc2VsZWN0QWN0aW9ucygpLmxlbmd0aCl7ci5maW5k
KCIuY29udHJvbHMgLmFjdGlvbnMiPQopLnByZXBlbmQodGhpcy5fcmVuZGVyU2VsZWN0QnV0dG9u
KCkpfXJldHVybiByfSxfcmVuZGVyU2VsZWN0QnV0dG9uOmZ1bmN0aW89Cm4ocil7cmV0dXJuIGMo
e3RpdGxlOmcoIk9wZXJhdGlvbnMgb24gbXVsdGlwbGUgZGF0YXNldHMiKSxjbGFzc2VzOiJzaG93
LXNlbD0KZWN0b3JzLWJ0biIsZmFJY29uOiJmYS1jaGVjay1zcXVhcmUtbyJ9KX0sX2dldEl0ZW1W
aWV3Q2xhc3M6ZnVuY3Rpb24ocil7dmFyPQogcz0zRHIuZ2V0KCJoaXN0b3J5X2NvbnRlbnRfdHlw
ZSIpO3N3aXRjaChzKXtjYXNlImRhdGFzZXQiOnJldHVybiB0aGlzLkhEQVY9Cmlld0NsYXNzO2Nh
c2UiZGF0YXNldF9jb2xsZWN0aW9uIjpyZXR1cm4gdGhpcy5IRENBVmlld0NsYXNzfXRocm93IG5l
dyBUeXBlRT0KcnJvcigiVW5rbm93biBoaXN0b3J5X2NvbnRlbnRfdHlwZTogIitzKX0sX2ZpbHRl
ckl0ZW06ZnVuY3Rpb24ocyl7dmFyIHI9M0R0PQpoaXM7cmV0dXJuKHAucHJvdG90eXBlLl9maWx0
ZXJJdGVtLmNhbGwocixzKSYmKCFzLmhpZGRlbigpfHxyLnNob3dIaWRkZW4pJiY9Cighcy5pc0Rl
bGV0ZWRPclB1cmdlZCgpfHxyLnNob3dEZWxldGVkKSl9LF9nZXRJdGVtVmlld09wdGlvbnM6ZnVu
Y3Rpb24ocyl7dj0KYXIgcj0zRHAucHJvdG90eXBlLl9nZXRJdGVtVmlld09wdGlvbnMuY2FsbCh0
aGlzLHMpO3JldHVybiBfLmV4dGVuZChyLHtsaW5rPQpUYXJnZXQ6dGhpcy5saW5rVGFyZ2V0LGV4
cGFuZGVkOiEhdGhpcy5zdG9yYWdlLmdldCgiZXhwYW5kZWRJZHMiKVtzLmlkXSxoYXM9ClVzZXI6
dGhpcy5tb2RlbC5vd25lZEJ5Q3VyclVzZXIoKX0pfSxfc2V0VXBJdGVtVmlld0xpc3RlbmVyczpm
dW5jdGlvbihzKXt2YT0KciByPTNEdGhpcztwLnByb3RvdHlwZS5fc2V0VXBJdGVtVmlld0xpc3Rl
bmVycy5jYWxsKHIscyk7cy5vbigiZXhwYW5kZWQiLGZ1PQpuY3Rpb24odCl7ci5zdG9yYWdlLmFk
ZEV4cGFuZGVkKHQubW9kZWwpfSk7cy5vbigiY29sbGFwc2VkIixmdW5jdGlvbih0KXtyLnM9CnRv
cmFnZS5yZW1vdmVFeHBhbmRlZCh0Lm1vZGVsKX0pO3JldHVybiB0aGlzfSxnZXRTZWxlY3RlZE1v
ZGVsczpmdW5jdGlvbigpez0KdmFyIHI9M0RwLnByb3RvdHlwZS5nZXRTZWxlY3RlZE1vZGVscy5j
YWxsKHRoaXMpO3IuaGlzdG9yeUlkPTNEdGhpcy5jb2xsZWN0PQppb24uaGlzdG9yeUlkO3JldHVy
biByfSxldmVudHM6Xy5leHRlbmQoXy5jbG9uZShwLnByb3RvdHlwZS5ldmVudHMpLHsiY2xpY2s9
CiAuc2hvdy1zZWxlY3RvcnMtYnRuIjoidG9nZ2xlU2VsZWN0b3JzIn0pLHRvZ2dsZVNob3dEZWxl
dGVkOmZ1bmN0aW9uKHIscyl7cj0KPTNEKHIhPTNEPTNEdW5kZWZpbmVkKT8ocik6KCF0aGlzLnNo
b3dEZWxldGVkKTtzPTNEKHMhPTNEPTNEdW5kZWZpbmVkKT8ocyk6PQoodHJ1ZSk7dGhpcy5zaG93
RGVsZXRlZD0zRHI7aWYocyl7dGhpcy5zdG9yYWdlLnNldCgic2hvd19kZWxldGVkIixyKX10aGlz
LnQ9CnJpZ2dlcigic2hvdy1oaWRkZW4iLHIpO3RoaXMucmVuZGVySXRlbXMoKTtyZXR1cm4gdGhp
cy5zaG93RGVsZXRlZH0sdG9nZ2xlUz0KaG93SGlkZGVuOmZ1bmN0aW9uKHIscyl7cj0zRChyIT0z
RD0zRHVuZGVmaW5lZCk/KHIpOighdGhpcy5zaG93SGlkZGVuKTtzPTNEPQoocyE9M0Q9M0R1bmRl
ZmluZWQpPyhzKToodHJ1ZSk7dGhpcy5zaG93SGlkZGVuPTNEcjtpZihzKXt0aGlzLnN0b3JhZ2Uu
c2V0KCI9CnNob3dfaGlkZGVuIixyKX10aGlzLnRyaWdnZXIoInNob3ctaGlkZGVuIixyKTt0aGlz
LnJlbmRlckl0ZW1zKCk7cmV0dXJuIHRoaT0Kcy5zaG93SGlkZGVufSxfZmlyc3RTZWFyY2g6ZnVu
Y3Rpb24ocil7dmFyIHM9M0R0aGlzLHQ9M0QiLmhpc3Rvcnktc2VhcmNoLWluPQpwdXQiO3RoaXMu
bG9nKCJvbkZpcnN0U2VhcmNoIixyKTtpZihzLm1vZGVsLmNvbnRlbnRzLmhhdmVEZXRhaWxzKCkp
e3Muc2VhcmM9CmhJdGVtcyhyKTtyZXR1cm59cy4kZWwuZmluZCh0KS5zZWFyY2hJbnB1dCgidG9n
Z2xlLWxvYWRpbmciKTtzLm1vZGVsLmNvbnRlbj0KdHMuZmV0Y2hBbGxEZXRhaWxzKHtzaWxlbnQ6
dHJ1ZX0pLmFsd2F5cyhmdW5jdGlvbigpe3MuJGVsLmZpbmQodCkuc2VhcmNoSW5wPQp1dCgidG9n
Z2xlLWxvYWRpbmciKX0pLmRvbmUoZnVuY3Rpb24oKXtzLnNlYXJjaEl0ZW1zKHIpfSl9LGVycm9y
SGFuZGxlcjpmdW49CmN0aW9uKHQsdyxzLHYsdSl7dGhpcy5lcnJvcih0LHcscyx2LHUpO2lmKHcm
Jncuc3RhdHVzPTNEPTNEPTNEMCYmdy5yZWFkeVN0YT0KdGU9M0Q9M0Q9M0QwKXt9ZWxzZXtpZih3
JiZ3LnN0YXR1cz0zRD0zRD0zRDUwMil7fWVsc2V7dmFyIHI9M0R0aGlzLl9wYXJzZUVyPQpyb3JN
ZXNzYWdlKHQsdyxzLHYsdSk7aWYoIXRoaXMuJG1lc3NhZ2VzKCkuaXMoIjp2aXNpYmxlIikpe3Ro
aXMub25jZSgicmVuZGU9CnJlZCIsZnVuY3Rpb24oKXt0aGlzLmRpc3BsYXlNZXNzYWdlKCJlcnJv
ciIsci5tZXNzYWdlLHIuZGV0YWlscyl9KX1lbHNle3RoaT0Kcy5kaXNwbGF5TWVzc2FnZSgiZXJy
b3IiLHIubWVzc2FnZSxyLmRldGFpbHMpfX19fSxfcGFyc2VFcnJvck1lc3NhZ2U6ZnVuY3RpPQpv
bih2LHkseix0LHIsdyl7dmFyIHU9M0RHYWxheHkuY3VyclVzZXIseD0zRHttZXNzYWdlOnRoaXMu
X2JlUG9saXRlKHQpLGRldGE9Cmlsczp7bWVzc2FnZTp0LHJhdmVuOih3aW5kb3cuUmF2ZW4mJl8u
aXNGdW5jdGlvbihSYXZlbi5sYXN0RXZlbnRJZCkpPyhSYXZlbj0KLmxhc3RFdmVudElkKCkpOih1
bmRlZmluZWQpLGFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsdXJsOih3aW5kb3cuR2FsYXh5KT8o
PQpHYWxheHkubGFzdEFqYXgudXJsKToodW5kZWZpbmVkKSxkYXRhOih3aW5kb3cuR2FsYXh5KT8o
R2FsYXh5Lmxhc3RBamF4LmRhdGE9Cik6KHVuZGVmaW5lZCksb3B0aW9uczooeSk/KF8ub21pdCh6
LCJ4aHIiKSk6KHopLHhocjp5LHNvdXJjZTooXy5pc0Z1bmN0aW9uKD0Kdi50b0pTT04pKT8odi50
b0pTT04oKSk6KHYrIiIpLHVzZXI6KHUgaW5zdGFuY2VvZiBpLlVzZXIpPyh1LnRvSlNPTigpKToo
dSsiPQoiKX19O18uZXh0ZW5kKHguZGV0YWlscyxyfHx7fSk7aWYoeSYmXy5pc0Z1bmN0aW9uKHku
Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKSk9Cnt2YXIgcz0zRHkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJz
KCk7cz0zRF8uY29tcGFjdChzLnNwbGl0KCJcbiIpKTtzPTNEXy5tYXAocz0KLGZ1bmN0aW9uKEEp
e3JldHVybiBBLnNwbGl0KCI6ICIpfSk7eC5kZXRhaWxzLnhoci5yZXNwb25zZUhlYWRlcnM9M0Rf
Lm9iamVjPQp0KHMpfXJldHVybiB4fSxfYmVQb2xpdGU6ZnVuY3Rpb24ocil7cj0zRHJ8fGcoIkFu
IGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHQ9CmluZyB1cGRhdGVzIGZyb20gdGhlIHNlcnZlciIp
O3JldHVybiByKyIuICIrZygiUGxlYXNlIGNvbnRhY3QgYSBHYWxheHkgYWRtaT0KbmlzdHJhdG9y
IGlmIHRoZSBwcm9ibGVtIHBlcnNpc3RzIikrIi4ifSxkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbih3
LHgsdil7dmFyPQogdD0zRHRoaXM7dGhpcy5zY3JvbGxUb1RvcCgpO3ZhciB1PTNEdGhpcy4kbWVz
c2FnZXMoKSxyPTNEJCgiPGRpdi8+IikuYWRkQ2w9CmFzcyh3KyJtZXNzYWdlIikuaHRtbCh4KTtp
ZighXy5pc0VtcHR5KHYpKXt2YXIgcz0zRCQoJzxhIGhyZWY9M0QiamF2YXNjcmlwdD0KOnZvaWQo
MCkiPkRldGFpbHM8L2E+JykuY2xpY2soZnVuY3Rpb24oKXtHYWxheHkubW9kYWwuc2hvdyh0Ll9t
ZXNzYWdlVG9Nb2RhPQpsT3B0aW9ucyh3LHgsdikpO3JldHVybiBmYWxzZX0pO3IuYXBwZW5kKCIg
IixzKX1yZXR1cm4gdS5odG1sKHIpfSxfbWVzc2FnZVQ9Cm9Nb2RhbE9wdGlvbnM6ZnVuY3Rpb24o
dSx4LHQpe3ZhciByPTNEdGhpcyxzPTNEe3RpdGxlOiJEZXRhaWxzIn07aWYoXy5pc09iaj0KZWN0
KHQpKXt0PTNEXy5vbWl0KHQsXy5mdW5jdGlvbnModCkpO3ZhciB3PTNESlNPTi5zdHJpbmdpZnko
dCxudWxsLCIgICIpLHY9Cj0zRCQoIjxwcmUvPiIpLnRleHQodyk7cy5ib2R5PTNEJCgiPGRpdi8+
IikuYXBwZW5kKHYpfWVsc2V7cy5ib2R5PTNEJCgiPGRpdj0KLz4iKS5odG1sKHQpfXMuYnV0dG9u
cz0zRHtPazpmdW5jdGlvbigpe0dhbGF4eS5tb2RhbC5oaWRlKCk7ci5jbGVhck1lc3NhZ2VzPQoo
KX19O3JldHVybiBzfSxjbGVhck1lc3NhZ2VzOmZ1bmN0aW9uKHIpeyQoci5jdXJyZW50VGFyZ2V0
KS5mYWRlT3V0KHRoaXMuZng9ClNwZWVkLGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmUoKX0pO3Jl
dHVybiB0aGlzfSxzY3JvbGxUb0hpZDpmdW5jdGlvbihyKXtyZT0KdHVybiB0aGlzLnNjcm9sbFRv
SXRlbShfLmZpcnN0KHRoaXMudmlld3NXaGVyZU1vZGVsKHtoaWQ6cn0pKSl9LHRvU3RyaW5nOmZ1
PQpuY3Rpb24oKXtyZXR1cm4iSGlzdG9yeVBhbmVsKCIrKCh0aGlzLm1vZGVsKT8odGhpcy5tb2Rl
bC5nZXQoIm5hbWUiKSk6KCIiKSk9CisiKSJ9fSk7bS5wcm90b3R5cGUudGVtcGxhdGVzPTNEKGZ1
bmN0aW9uKCl7dmFyIHI9M0RxLndyYXBUZW1wbGF0ZShbJzxkaXYgYz0KbGFzcz0zRCJjb250cm9s
cyI+JywnPGRpdiBjbGFzcz0zRCJ0aXRsZSI+JywnPGRpdiBjbGFzcz0zRCJuYW1lIj48JT0zRCBo
aXN0PQpvcnkubmFtZSAlPjwvZGl2PicsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0Qic3VidGl0bGUi
PjwvZGl2PicsJzxkaXYgY2xhc3M9M0Q9CiJoaXN0b3J5LXNpemUiPjwlPTNEIGhpc3Rvcnkubmlj
ZV9zaXplICU+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJhY3Rpb25zIj48Lz0KZGl2PicsJzxkaXYg
Y2xhc3M9M0QibWVzc2FnZXMiPicsIjwlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgJiYgaGlzdG9yeS5w
dXJnZWQgPQopeyAlPiIsJzxkaXYgY2xhc3M9M0QiZGVsZXRlZC1tc2cgd2FybmluZ21lc3NhZ2Vz
bWFsbCI+JyxnKCJUaGlzIGhpc3RvcnkgaGE9CnMgYmVlbiBwdXJnZWQgYW5kIGRlbGV0ZWQiKSwi
PC9kaXY+IiwiPCUgfSBlbHNlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgKXsgJT4iLD0KJzxkaXYgY2xh
c3M9M0QiZGVsZXRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+JyxnKCJUaGlzIGhpc3Rvcnkg
aGFzIGJlZW4gPQpkZWxldGVkIiksIjwvZGl2PiIsIjwlIH0gZWxzZSBpZiggaGlzdG9yeS5wdXJn
ZWQgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEImRlbGU9CnRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFs
bCI+JyxnKCJUaGlzIGhpc3RvcnkgaGFzIGJlZW4gcHVyZ2VkIiksIjwvZGl2PiIsIj0KPCUgfSAl
PiIsIjwlIGlmKCBoaXN0b3J5Lm1lc3NhZ2UgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEIjwlPTNEIGhp
c3RvcnkubWVzc2FnPQplLmxldmVsIHx8ICJpbmZvIiAlPm1lc3NhZ2VzbWFsbCI+JywiPCU9M0Qg
aGlzdG9yeS5tZXNzYWdlLnRleHQgJT4iLCI8L2Rpdj49CiIsIjwlIH0gJT4iLCI8L2Rpdj4iLCc8
ZGl2IGNsYXNzPTNEInRhZ3MtZGlzcGxheSI+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJhbj0Kbm90
YXRpb24tZGlzcGxheSI+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJzZWFyY2giPicsJzxkaXYgY2xh
c3M9M0Qic2VhcmNoLWluPQpwdXQiPjwvZGl2PicsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0QibGlz
dC1hY3Rpb25zIj4nLCc8ZGl2IGNsYXNzPTNEImJ0bi1ncm89CnVwIj4nLCc8YnV0dG9uIGNsYXNz
PTNEInNlbGVjdC1hbGwgYnRuIGJ0bi1kZWZhdWx0IicsJ2RhdGEtbW9kZT0zRCJzZWxlY3QiPj0K
JyxnKCJBbGwiKSwiPC9idXR0b24+IiwnPGJ1dHRvbiBjbGFzcz0zRCJkZXNlbGVjdC1hbGwgYnRu
IGJ0bi1kZWZhdWx0IicsJ2RhPQp0YS1tb2RlPTNEInNlbGVjdCI+JyxnKCJOb25lIiksIjwvYnV0
dG9uPiIsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0QibGlzdC1hY3Q9Cmlvbi1tZW51IGJ0bi1ncm91
cCI+JywiPC9kaXY+IiwiPC9kaXY+IiwiPC9kaXY+Il0sImhpc3RvcnkiKTtyZXR1cm4gXy5leHRl
bj0KZChfLmNsb25lKHAucHJvdG90eXBlLnRlbXBsYXRlcykse2NvbnRyb2xzOnJ9KX0oKSk7cmV0
dXJue0hpc3RvcnlQYW5lbDptfX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RlZmlu
ZShbIm12Yy9saXN0L2xpc3QtcGFuZWwiLCJtdmMvaGlzdG9yeS9oaXN0b3J5LW1vZGVsIiwibXZj
L2hpc3RvcnkvaGlzPQp0b3J5LWNvbnRlbnRzIiwibXZjL2hpc3RvcnkvaGRhLWxpIiwibXZjL2hp
c3RvcnkvaGRjYS1saSIsIm12Yy9jb2xsZWN0aW9uL2M9Cm9sbGVjdGlvbi1wYW5lbCIsIm12Yy91
c2VyL3VzZXItbW9kZWwiLCJ1aS9mYS1pY29uLWJ1dHRvbiIsIm12Yy91aS9wb3B1cC1tZT0KbnUi
LCJtdmMvYmFzZS1tdmMiLCJ1dGlscy9sb2NhbGl6YXRpb24iLCJ1aS9zZWFyY2gtaW5wdXQiXSxm
dW5jdGlvbihmLGgsbixkPQosYixvLGksYyxhLHEsZyl7dmFyIGw9M0RxLlNlc3Npb25TdG9yYWdl
TW9kZWwuZXh0ZW5kKHtkZWZhdWx0czp7ZXhwYW5kZWRJZHM9Cjp7fSxzaG93X2RlbGV0ZWQ6ZmFs
c2Usc2hvd19oaWRkZW46ZmFsc2V9LGFkZEV4cGFuZGVkOmZ1bmN0aW9uKHIpe3ZhciBzPTNEIj0K
ZXhwYW5kZWRJZHMiO3RoaXMuc2F2ZShzLF8uZXh0ZW5kKHRoaXMuZ2V0KHMpLF8ub2JqZWN0KFty
LmlkXSxbci5nZXQoImlkIildPQopKSl9LHJlbW92ZUV4cGFuZGVkOmZ1bmN0aW9uKHIpe3ZhciBz
PTNEImV4cGFuZGVkSWRzIjt0aGlzLnNhdmUocyxfLm9taXQodGg9CmlzLmdldChzKSxyLmlkKSl9
LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkhpc3RvcnlQcmVmcygiK3RoaXMuaWQrIikifX0p
Oz0KbC5zdG9yYWdlS2V5UHJlZml4PTNEImhpc3Rvcnk6IjtsLmhpc3RvcnlTdG9yYWdlS2V5PTNE
ZnVuY3Rpb24gaihyKXtpZighcil7PQp0aHJvdyBuZXcgRXJyb3IoIkhpc3RvcnlQcmVmcy5oaXN0
b3J5U3RvcmFnZUtleSBuZWVkcyB2YWxpZCBpZDogIityKX1yZXR1cm49CihsLnN0b3JhZ2VLZXlQ
cmVmaXgrcil9O2wuZ2V0PTNEZnVuY3Rpb24gZShyKXtyZXR1cm4gbmV3IGwoe2lkOmwuaGlzdG9y
eVN0bz0KcmFnZUtleShyKX0pfTtsLmNsZWFyQWxsPTNEZnVuY3Rpb24gayhzKXtmb3IodmFyIHIg
aW4gc2Vzc2lvblN0b3JhZ2Upe2lmKHIuPQppbmRleE9mKGwuc3RvcmFnZUtleVByZWZpeCk9M0Q9
M0Q9M0QwKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHIpfX19O3ZhciA9CnA9M0RmLk1vZGVs
TGlzdFBhbmVsO3ZhciBtPTNEcC5leHRlbmQoe0hEQVZpZXdDbGFzczpkLkhEQUxpc3RJdGVtVmll
dyxIRENBVj0KaWV3Q2xhc3M6Yi5IRENBTGlzdEl0ZW1WaWV3LGNvbGxlY3Rpb25DbGFzczpuLkhp
c3RvcnlDb250ZW50cyxtb2RlbENvbGxlY3RpPQpvbktleToiY29udGVudHMiLHRhZ05hbWU6ImRp
diIsY2xhc3NOYW1lOnAucHJvdG90eXBlLmNsYXNzTmFtZSsiIGhpc3RvcnktcGE9Cm5lbCIsZW1w
dHlNc2c6ZygiVGhpcyBoaXN0b3J5IGlzIGVtcHR5Iiksbm9uZUZvdW5kTXNnOmcoIk5vIG1hdGNo
aW5nIGRhdGFzZT0KdHMgZm91bmQiKSxzZWFyY2hQbGFjZWhvbGRlcjpnKCJzZWFyY2ggZGF0YXNl
dHMiKSxpbml0aWFsaXplOmZ1bmN0aW9uKHIpe3AuPQpwcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxs
KHRoaXMscik7dGhpcy5saW5rVGFyZ2V0PTNEci5saW5rVGFyZ2V0fHwiX2JsYW5rIn09CixmcmVl
TW9kZWw6ZnVuY3Rpb24oKXtwLnByb3RvdHlwZS5mcmVlTW9kZWwuY2FsbCh0aGlzKTtpZih0aGlz
Lm1vZGVsKXt0aGlzLj0KbW9kZWwuY2xlYXJVcGRhdGVUaW1lb3V0KCl9cmV0dXJuIHRoaXN9LF9z
ZXRVcExpc3RlbmVyczpmdW5jdGlvbigpe3AucHJvdG90PQp5cGUuX3NldFVwTGlzdGVuZXJzLmNh
bGwodGhpcyk7dGhpcy5vbigiZXJyb3IiLGZ1bmN0aW9uKHMsdixyLHUsdCl7dGhpcy5lcnI9Cm9y
SGFuZGxlcihzLHYscix1LHQpfSk7dGhpcy5vbigibG9hZGluZy1kb25lIixmdW5jdGlvbigpe2lm
KCF0aGlzLnZpZXdzLmxlbj0KZ3RoKXt0aGlzLnRyaWdnZXIoImVtcHR5LWhpc3RvcnkiLHRoaXMp
fX0pfSxsb2FkSGlzdG9yeVdpdGhEZXRhaWxzOmZ1bmN0aW9uPQoodSx0LHMsdil7dGhpcy5pbmZv
KCJsb2FkSGlzdG9yeVdpdGhEZXRhaWxzOiIsdSx0LHMsdik7dmFyIHI9M0RmdW5jdGlvbih3KXs9
CnJldHVybiBfLnZhbHVlcyhsLmdldCh3LmlkKS5nZXQoImV4cGFuZGVkSWRzIikpfTtyZXR1cm4g
dGhpcy5sb2FkSGlzdG9yeSh1LD0KdCxzLHYscil9LGxvYWRIaXN0b3J5OmZ1bmN0aW9uKHYsdSx0
LHcscil7dGhpcy5pbmZvKCJsb2FkSGlzdG9yeToiLHYsdSx0LHcsPQpyKTt2YXIgcz0zRHRoaXM7
dT0zRHV8fHt9O3MudHJpZ2dlcigibG9hZGluZyIscyk7dmFyIHg9M0RoLkhpc3RvcnkuZ2V0SGlz
dG89CnJ5RGF0YSh2LHtoaXN0b3J5Rm46dCxjb250ZW50c0ZuOncsZGV0YWlsSWRzRm46dS5pbml0
aWFsbHlFeHBhbmRlZHx8cn0pO3JldD0KdXJuIHMuX2xvYWRIaXN0b3J5RnJvbVhIUih4LHUpLmZh
aWwoZnVuY3Rpb24oQSx5LHope3MudHJpZ2dlcigiZXJyb3IiLHMsQSx1PQosZygiQW4gZXJyb3Ig
d2FzIGVuY291bnRlcmVkIHdoaWxlICIreSkse2hpc3RvcnlJZDp2LGhpc3Rvcnk6enx8e319KX0p
LmFsd2E9CnlzKGZ1bmN0aW9uKCl7cy50cmlnZ2VyKCJsb2FkaW5nLWRvbmUiLHMpfSl9LF9sb2Fk
SGlzdG9yeUZyb21YSFI6ZnVuY3Rpb24odD0KLHMpe3ZhciByPTNEdGhpczt0LnRoZW4oZnVuY3Rp
b24odSx2KXtyLkpTT05Ub01vZGVsKHUsdixzKTtyLnJlbmRlcigpfSk7dC5mPQphaWwoZnVuY3Rp
b24odix1KXtyLnJlbmRlcigpfSk7cmV0dXJuIHR9LHJlZnJlc2hDb250ZW50czpmdW5jdGlvbihz
LHIpe2lmKHQ9Cmhpcy5tb2RlbCl7cmV0dXJuIHRoaXMubW9kZWwucmVmcmVzaChzLHIpfXJldHVy
biAkLndoZW4oKX0sSlNPTlRvTW9kZWw6ZnVuYz0KdGlvbih1LHIscyl7dGhpcy5sb2coIkpTT05U
b01vZGVsOiIsdSxyLHMpO3M9M0RzfHx7fTt2YXIgdD0zRG5ldyBoLkhpc3RvcnkoPQp1LHIscyk7
dGhpcy5zZXRNb2RlbCh0KTtyZXR1cm4gdH0sc2V0TW9kZWw6ZnVuY3Rpb24ocyxyKXtyPTNEcnx8
e307cC5wcm90b3Q9CnlwZS5zZXRNb2RlbC5jYWxsKHRoaXMscyxyKTtpZih0aGlzLm1vZGVsKXt0
aGlzLl9zZXRVcFdlYlN0b3JhZ2Uoci5pbml0aWFsbD0KeUV4cGFuZGVkLHIuc2hvd19kZWxldGVk
LHIuc2hvd19oaWRkZW4pfX0sX3NldFVwV2ViU3RvcmFnZTpmdW5jdGlvbihzLHIsdCl7PQppZih0
aGlzLnN0b3JhZ2Upe3RoaXMuc3RvcExpc3RlbmluZyh0aGlzLnN0b3JhZ2UpfXRoaXMuc3RvcmFn
ZT0zRG5ldyBsKHtpZDo9CmwuaGlzdG9yeVN0b3JhZ2VLZXkodGhpcy5tb2RlbC5nZXQoImlkIikp
fSk7aWYoXy5pc09iamVjdChzKSl7dGhpcy5zdG9yYWdlLj0Kc2V0KCJleHBhbmRlZElkcyIscyl9
aWYoXy5pc0Jvb2xlYW4ocikpe3RoaXMuc3RvcmFnZS5zZXQoInNob3dfZGVsZXRlZCIscil9PQpp
ZihfLmlzQm9vbGVhbih0KSl7dGhpcy5zdG9yYWdlLnNldCgic2hvd19oaWRkZW4iLHQpfXRoaXMu
dHJpZ2dlcigibmV3LXN0b3I9CmFnZSIsdGhpcy5zdG9yYWdlLHRoaXMpO3RoaXMubG9nKHRoaXMr
IiAoaW5pdCdkKSBzdG9yYWdlOiIsdGhpcy5zdG9yYWdlLmdldD0KKCkpO3RoaXMubGlzdGVuVG8o
dGhpcy5zdG9yYWdlLHsiY2hhbmdlOnNob3dfZGVsZXRlZCI6ZnVuY3Rpb24odSx2KXt0aGlzLnNo
PQpvd0RlbGV0ZWQ9M0R2fSwiY2hhbmdlOnNob3dfaGlkZGVuIjpmdW5jdGlvbih1LHYpe3RoaXMu
c2hvd0hpZGRlbj0zRHZ9fSx0aGk9CnMpO3RoaXMuc2hvd0RlbGV0ZWQ9M0QociE9M0Q9M0R1bmRl
ZmluZWQpP3I6dGhpcy5zdG9yYWdlLmdldCgic2hvd19kZWxldGVkIj0KKTt0aGlzLnNob3dIaWRk
ZW49M0QodCE9M0Q9M0R1bmRlZmluZWQpP3Q6dGhpcy5zdG9yYWdlLmdldCgic2hvd19oaWRkZW4i
KTtyPQpldHVybiB0aGlzfSxfYnVpbGROZXdSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgcj0zRHAucHJv
dG90eXBlLl9idWlsZE5ld1JlbmRlci49CmNhbGwodGhpcyk7aWYodGhpcy5tdWx0aXNlbGVjdEFj
dGlvbnMoKS5sZW5ndGgpe3IuZmluZCgiLmNvbnRyb2xzIC5hY3Rpb25zIj0KKS5wcmVwZW5kKHRo
aXMuX3JlbmRlclNlbGVjdEJ1dHRvbigpKX1yZXR1cm4gcn0sX3JlbmRlclNlbGVjdEJ1dHRvbjpm
dW5jdGlvPQpuKHIpe3JldHVybiBjKHt0aXRsZTpnKCJPcGVyYXRpb25zIG9uIG11bHRpcGxlIGRh
dGFzZXRzIiksY2xhc3Nlczoic2hvdy1zZWw9CmVjdG9ycy1idG4iLGZhSWNvbjoiZmEtY2hlY2st
c3F1YXJlLW8ifSl9LF9nZXRJdGVtVmlld0NsYXNzOmZ1bmN0aW9uKHIpe3Zhcj0KIHM9M0RyLmdl
dCgiaGlzdG9yeV9jb250ZW50X3R5cGUiKTtzd2l0Y2gocyl7Y2FzZSJkYXRhc2V0IjpyZXR1cm4g
dGhpcy5IREFWPQppZXdDbGFzcztjYXNlImRhdGFzZXRfY29sbGVjdGlvbiI6cmV0dXJuIHRoaXMu
SERDQVZpZXdDbGFzc310aHJvdyBuZXcgVHlwZUU9CnJyb3IoIlVua25vd24gaGlzdG9yeV9jb250
ZW50X3R5cGU6ICIrcyl9LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKHMpe3ZhciByPTNEdD0KaGlzO3Jl
dHVybihwLnByb3RvdHlwZS5fZmlsdGVySXRlbS5jYWxsKHIscykmJighcy5oaWRkZW4oKXx8ci5z
aG93SGlkZGVuKSYmPQooIXMuaXNEZWxldGVkT3JQdXJnZWQoKXx8ci5zaG93RGVsZXRlZCkpfSxf
Z2V0SXRlbVZpZXdPcHRpb25zOmZ1bmN0aW9uKHMpe3Y9CmFyIHI9M0RwLnByb3RvdHlwZS5fZ2V0
SXRlbVZpZXdPcHRpb25zLmNhbGwodGhpcyxzKTtyZXR1cm4gXy5leHRlbmQocix7bGluaz0KVGFy
Z2V0OnRoaXMubGlua1RhcmdldCxleHBhbmRlZDohIXRoaXMuc3RvcmFnZS5nZXQoImV4cGFuZGVk
SWRzIilbcy5pZF0saGFzPQpVc2VyOnRoaXMubW9kZWwub3duZWRCeUN1cnJVc2VyKCl9KX0sX3Nl
dFVwSXRlbVZpZXdMaXN0ZW5lcnM6ZnVuY3Rpb24ocyl7dmE9CnIgcj0zRHRoaXM7cC5wcm90b3R5
cGUuX3NldFVwSXRlbVZpZXdMaXN0ZW5lcnMuY2FsbChyLHMpO3Mub24oImV4cGFuZGVkIixmdT0K
bmN0aW9uKHQpe3Iuc3RvcmFnZS5hZGRFeHBhbmRlZCh0Lm1vZGVsKX0pO3Mub24oImNvbGxhcHNl
ZCIsZnVuY3Rpb24odCl7ci5zPQp0b3JhZ2UucmVtb3ZlRXhwYW5kZWQodC5tb2RlbCl9KTtyZXR1
cm4gdGhpc30sZ2V0U2VsZWN0ZWRNb2RlbHM6ZnVuY3Rpb24oKXs9CnZhciByPTNEcC5wcm90b3R5
cGUuZ2V0U2VsZWN0ZWRNb2RlbHMuY2FsbCh0aGlzKTtyLmhpc3RvcnlJZD0zRHRoaXMuY29sbGVj
dD0KaW9uLmhpc3RvcnlJZDtyZXR1cm4gcn0sZXZlbnRzOl8uZXh0ZW5kKF8uY2xvbmUocC5wcm90
b3R5cGUuZXZlbnRzKSx7ImNsaWNrPQogLnNob3ctc2VsZWN0b3JzLWJ0biI6InRvZ2dsZVNlbGVj
dG9ycyIsImNsaWNrIC5tZXNzYWdlcyBbY2xhc3MkPTNEbWVzc2FnZV09CiI6ImNsZWFyTWVzc2Fn
ZXMifSksdG9nZ2xlU2hvd0RlbGV0ZWQ6ZnVuY3Rpb24ocixzKXtyPTNEKHIhPTNEPTNEdW5kZWZp
bmVkKT0KPyhyKTooIXRoaXMuc2hvd0RlbGV0ZWQpO3M9M0QocyE9M0Q9M0R1bmRlZmluZWQpPyhz
KToodHJ1ZSk7dGhpcy5zaG93RGVsZXRlPQpkPTNEcjtpZihzKXt0aGlzLnN0b3JhZ2Uuc2V0KCJz
aG93X2RlbGV0ZWQiLHIpfXRoaXMudHJpZ2dlcigic2hvdy1oaWRkZW4iLHI9Cik7dGhpcy5yZW5k
ZXJJdGVtcygpO3JldHVybiB0aGlzLnNob3dEZWxldGVkfSx0b2dnbGVTaG93SGlkZGVuOmZ1bmN0
aW9uKHIscz0KKXtyPTNEKHIhPTNEPTNEdW5kZWZpbmVkKT8ocik6KCF0aGlzLnNob3dIaWRkZW4p
O3M9M0QocyE9M0Q9M0R1bmRlZmluZWQpPyhzPQopOih0cnVlKTt0aGlzLnNob3dIaWRkZW49M0Ry
O2lmKHMpe3RoaXMuc3RvcmFnZS5zZXQoInNob3dfaGlkZGVuIixyKX10aGlzLnQ9CnJpZ2dlcigi
c2hvdy1oaWRkZW4iLHIpO3RoaXMucmVuZGVySXRlbXMoKTtyZXR1cm4gdGhpcy5zaG93SGlkZGVu
fSxfZmlyc3RTZT0KYXJjaDpmdW5jdGlvbihyKXt2YXIgcz0zRHRoaXMsdD0zRCIuaGlzdG9yeS1z
ZWFyY2gtaW5wdXQiO3RoaXMubG9nKCJvbkZpcnN0PQpTZWFyY2giLHIpO2lmKHMubW9kZWwuY29u
dGVudHMuaGF2ZURldGFpbHMoKSl7cy5zZWFyY2hJdGVtcyhyKTtyZXR1cm59cy4kZWw9Ci5maW5k
KHQpLnNlYXJjaElucHV0KCJ0b2dnbGUtbG9hZGluZyIpO3MubW9kZWwuY29udGVudHMuZmV0Y2hB
bGxEZXRhaWxzKHtzaT0KbGVudDp0cnVlfSkuYWx3YXlzKGZ1bmN0aW9uKCl7cy4kZWwuZmluZCh0
KS5zZWFyY2hJbnB1dCgidG9nZ2xlLWxvYWRpbmciKX0pPQouZG9uZShmdW5jdGlvbigpe3Muc2Vh
cmNoSXRlbXMocil9KX0sZXJyb3JIYW5kbGVyOmZ1bmN0aW9uKHQsdyxzLHYsdSl7dGhpcy49CmVy
cm9yKHQsdyxzLHYsdSk7aWYodyYmdy5zdGF0dXM9M0Q9M0Q9M0QwJiZ3LnJlYWR5U3RhdGU9M0Q9
M0Q9M0QwKXt9ZWxzZXtpZj0KKHcmJncuc3RhdHVzPTNEPTNEPTNENTAyKXt9ZWxzZXt2YXIgcj0z
RHRoaXMuX3BhcnNlRXJyb3JNZXNzYWdlKHQsdyxzLHYsdSk7PQppZighdGhpcy4kbWVzc2FnZXMo
KS5pcygiOnZpc2libGUiKSl7dGhpcy5vbmNlKCJyZW5kZXJlZCIsZnVuY3Rpb24oKXt0aGlzLmQ9
CmlzcGxheU1lc3NhZ2UoImVycm9yIixyLm1lc3NhZ2Usci5kZXRhaWxzKX0pfWVsc2V7dGhpcy5k
aXNwbGF5TWVzc2FnZSgiZXJybz0KciIsci5tZXNzYWdlLHIuZGV0YWlscyl9fX19LF9wYXJzZUVy
cm9yTWVzc2FnZTpmdW5jdGlvbih2LHkseix0LHIsdyl7dmFyIHU9Cj0zREdhbGF4eS5jdXJyVXNl
cix4PTNEe21lc3NhZ2U6dGhpcy5fYmVQb2xpdGUodCksZGV0YWlsczp7bWVzc2FnZTp0LHJhdmVu
Oj0KKHdpbmRvdy5SYXZlbiYmXy5pc0Z1bmN0aW9uKFJhdmVuLmxhc3RFdmVudElkKSk/KFJhdmVu
Lmxhc3RFdmVudElkKCkpOih1bmRlPQpmaW5lZCksYWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudCx1
cmw6KHdpbmRvdy5HYWxheHkpPyhHYWxheHkubGFzdEFqYXgudXJsKTo9Cih1bmRlZmluZWQpLGRh
dGE6KHdpbmRvdy5HYWxheHkpPyhHYWxheHkubGFzdEFqYXguZGF0YSk6KHVuZGVmaW5lZCksb3B0
aW9ucz0KOih5KT8oXy5vbWl0KHosInhociIpKTooeikseGhyOnksc291cmNlOihfLmlzRnVuY3Rp
b24odi50b0pTT04pKT8odi50b0pTT04oPQopKToodisiIiksdXNlcjoodSBpbnN0YW5jZW9mIGku
VXNlcik/KHUudG9KU09OKCkpOih1KyIiKX19O18uZXh0ZW5kKHguZGV0YWk9CmxzLHJ8fHt9KTtp
Zih5JiZfLmlzRnVuY3Rpb24oeS5nZXRBbGxSZXNwb25zZUhlYWRlcnMpKXt2YXIgcz0zRHkuZ2V0
QWxsUmVzcD0Kb25zZUhlYWRlcnMoKTtzPTNEXy5jb21wYWN0KHMuc3BsaXQoIlxuIikpO3M9M0Rf
Lm1hcChzLGZ1bmN0aW9uKEEpe3JldHVybiBBPQouc3BsaXQoIjogIil9KTt4LmRldGFpbHMueGhy
LnJlc3BvbnNlSGVhZGVycz0zRF8ub2JqZWN0KHMpfXJldHVybiB4fSxfYmVQb2w9Cml0ZTpmdW5j
dGlvbihyKXtyPTNEcnx8ZygiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyB1cGRhdGVz
IGZyb20gdGhlID0Kc2VydmVyIik7cmV0dXJuIHIrIi4gIitnKCJQbGVhc2UgY29udGFjdCBhIEdh
bGF4eSBhZG1pbmlzdHJhdG9yIGlmIHRoZSBwcm9iPQpsZW0gcGVyc2lzdHMiKSsiLiJ9LGRpc3Bs
YXlNZXNzYWdlOmZ1bmN0aW9uKHcseCx2KXt2YXIgdD0zRHRoaXM7dGhpcy5zY3JvbGw9ClRvVG9w
KCk7dmFyIHU9M0R0aGlzLiRtZXNzYWdlcygpLHI9M0QkKCI8ZGl2Lz4iKS5hZGRDbGFzcyh3KyJt
ZXNzYWdlIikuaHRtbD0KKHgpO2lmKCFfLmlzRW1wdHkodikpe3ZhciBzPTNEJCgnPGEgaHJlZj0z
RCJqYXZhc2NyaXB0OnZvaWQoMCkiPkRldGFpbHM8L2E+PQonKS5jbGljayhmdW5jdGlvbigpe0dh
bGF4eS5tb2RhbC5zaG93KHQuX21lc3NhZ2VUb01vZGFsT3B0aW9ucyh3LHgsdikpO3JldHU9CnJu
IGZhbHNlfSk7ci5hcHBlbmQoIiAiLHMpfXJldHVybiB1LmFwcGVuZChyKX0sX21lc3NhZ2VUb01v
ZGFsT3B0aW9uczpmdW5jdD0KaW9uKHUseCx0KXt2YXIgcj0zRHRoaXMscz0zRHt0aXRsZToiRGV0
YWlscyJ9O2lmKF8uaXNPYmplY3QodCkpe3Q9M0RfLm9taXQoPQp0LF8uZnVuY3Rpb25zKHQpKTt2
YXIgdz0zREpTT04uc3RyaW5naWZ5KHQsbnVsbCwiICAiKSx2PTNEJCgiPHByZS8+IikudGV4dCg9
CncpO3MuYm9keT0zRCQoIjxkaXYvPiIpLmFwcGVuZCh2KX1lbHNle3MuYm9keT0zRCQoIjxkaXYv
PiIpLmh0bWwodCl9cy5idXR0bz0KbnM9M0R7T2s6ZnVuY3Rpb24oKXtHYWxheHkubW9kYWwuaGlk
ZSgpO3IuY2xlYXJNZXNzYWdlcygpfX07cmV0dXJuIHN9LGNsZWFyPQpNZXNzYWdlczpmdW5jdGlv
bihzKXt2YXIgcj0zRCFfLmlzVW5kZWZpbmVkKHMpPyQocy5jdXJyZW50VGFyZ2V0KTp0aGlzLiRt
ZXM9CnNhZ2VzKCkuY2hpbGRyZW4oJ1tjbGFzcyQ9M0QibWVzc2FnZSJdJyk7ci5mYWRlT3V0KHRo
aXMuZnhTcGVlZCxmdW5jdGlvbigpez0KJCh0aGlzKS5yZW1vdmUoKX0pO3JldHVybiB0aGlzfSxz
Y3JvbGxUb0hpZDpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY3JvbGxUPQpvSXRlbShfLmZpcnN0
KHRoaXMudmlld3NXaGVyZU1vZGVsKHtoaWQ6cn0pKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0
dXJuIkg9CmlzdG9yeVBhbmVsKCIrKCh0aGlzLm1vZGVsKT8odGhpcy5tb2RlbC5nZXQoIm5hbWUi
KSk6KCIiKSkrIikifX0pO20ucHJvdG90eT0KcGUudGVtcGxhdGVzPTNEKGZ1bmN0aW9uKCl7dmFy
IHI9M0RxLndyYXBUZW1wbGF0ZShbJzxkaXYgY2xhc3M9M0QiY29udHJvbHMiPQo+JywnPGRpdiBj
bGFzcz0zRCJ0aXRsZSI+JywnPGRpdiBjbGFzcz0zRCJuYW1lIj48JT0zRCBoaXN0b3J5Lm5hbWUg
JT48L2Rpdj49CicsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0Qic3VidGl0bGUiPjwvZGl2PicsJzxk
aXYgY2xhc3M9M0QiaGlzdG9yeS1zaXplIj48JT0KPTNEIGhpc3RvcnkubmljZV9zaXplICU+PC9k
aXY+JywnPGRpdiBjbGFzcz0zRCJhY3Rpb25zIj48L2Rpdj4nLCc8ZGl2IGNsYXNzPQo9M0QibWVz
c2FnZXMiPicsIjwlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgJiYgaGlzdG9yeS5wdXJnZWQgKXsgJT4i
LCc8ZGl2IGNsYXM9CnM9M0QiZGVsZXRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+JyxnKCJU
aGlzIGhpc3RvcnkgaGFzIGJlZW4gcHVyZ2VkIGFuZD0KIGRlbGV0ZWQiKSwiPC9kaXY+IiwiPCUg
fSBlbHNlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEImRlPQpsZXRl
ZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+JyxnKCJUaGlzIGhpc3RvcnkgaGFzIGJlZW4gZGVs
ZXRlZCIpLCI8L2Rpdj49CiIsIjwlIH0gZWxzZSBpZiggaGlzdG9yeS5wdXJnZWQgKXsgJT4iLCc8
ZGl2IGNsYXNzPTNEImRlbGV0ZWQtbXNnIHdhcm5pbmdtZT0Kc3NhZ2VzbWFsbCI+JyxnKCJUaGlz
IGhpc3RvcnkgaGFzIGJlZW4gcHVyZ2VkIiksIjwvZGl2PiIsIjwlIH0gJT4iLCI8JSBpZiggPQpo
aXN0b3J5Lm1lc3NhZ2UgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEIjwlPTNEIGhpc3RvcnkubWVzc2Fn
ZS5sZXZlbCB8fCAiaW5mbyI9CiAlPm1lc3NhZ2VzbWFsbCI+JywiPCU9M0QgaGlzdG9yeS5tZXNz
YWdlLnRleHQgJT4iLCI8L2Rpdj4iLCI8JSB9ICU+IiwiPC9kaT0Kdj4iLCc8ZGl2IGNsYXNzPTNE
InRhZ3MtZGlzcGxheSI+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJhbm5vdGF0aW9uLWRpc3BsYXki
PQo+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJzZWFyY2giPicsJzxkaXYgY2xhc3M9M0Qic2VhcmNo
LWlucHV0Ij48L2Rpdj4nLCI8L2Q9Cml2PiIsJzxkaXYgY2xhc3M9M0QibGlzdC1hY3Rpb25zIj4n
LCc8ZGl2IGNsYXNzPTNEImJ0bi1ncm91cCI+JywnPGJ1dHRvbiBjbD0KYXNzPTNEInNlbGVjdC1h
bGwgYnRuIGJ0bi1kZWZhdWx0IicsJ2RhdGEtbW9kZT0zRCJzZWxlY3QiPicsZygiQWxsIiksIjwv
YnV0PQp0b24+IiwnPGJ1dHRvbiBjbGFzcz0zRCJkZXNlbGVjdC1hbGwgYnRuIGJ0bi1kZWZhdWx0
IicsJ2RhdGEtbW9kZT0zRCJzZWxlY3Q9CiI+JyxnKCJOb25lIiksIjwvYnV0dG9uPiIsIjwvZGl2
PiIsJzxkaXYgY2xhc3M9M0QibGlzdC1hY3Rpb24tbWVudSBidG4tZ3JvdT0KcCI+JywiPC9kaXY+
IiwiPC9kaXY+IiwiPC9kaXY+Il0sImhpc3RvcnkiKTtyZXR1cm4gXy5leHRlbmQoXy5jbG9uZShw
LnByb3RvPQp0eXBlLnRlbXBsYXRlcykse2NvbnRyb2xzOnJ9KX0oKSk7cmV0dXJue0hpc3RvcnlQ
YW5lbDptfX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClJlcG9zaXRvcnkgVVJMOiBo
dHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsLwoKLS0KClRoaXMgaXMg
YSBjb21taXQgbm90aWZpY2F0aW9uIGZyb20gYml0YnVja2V0Lm9yZy4gWW91IGFyZSByZWNlaXZp
bmcKdGhpcyBiZWNhdXNlIHlvdSBoYXZlIHRoZSBzZXJ2aWNlIGVuYWJsZWQsIGFkZHJlc3Npbmcg
dGhlIHJlY2lwaWVudCBvZgp0aGlzIGVtYWlsLgo
1
0
Branch: refs/heads/master
Home: https://github.com/galaxyproject/usegalaxy-playbook
Commit: 9e3a882297981048b076f0f987797ecdd0793e93
https://github.com/galaxyproject/usegalaxy-playbook/commit/9e3a882297981048…
Author: Martin Cech <cech.marten(a)gmail.com>
Date: 2015-02-23 (Mon, 23 Feb 2015)
Changed paths:
M stage/group_vars/all.yml
Log Message:
-----------
update test
1
0
3 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/da044e190f11/
Changeset: da044e190f11
User: martenson
Date: 2015-02-23 15:44:51+00:00
Summary: fix toolshed auth API returning double converted json
allow sessionless key retrieval
Affected #: 1 file
diff -r 67222d8cb3a54c7a3dc28accc8f16ff502fe547b -r da044e190f11d33a8556aa60ff563f1e801abf6d lib/galaxy/webapps/tool_shed/api/authenticate.py
--- a/lib/galaxy/webapps/tool_shed/api/authenticate.py
+++ b/lib/galaxy/webapps/tool_shed/api/authenticate.py
@@ -13,13 +13,14 @@
from galaxy import web
from galaxy.webapps.galaxy.api.authenticate import AuthenticationController
+from galaxy.web import _future_expose_api_raw_anonymous_and_sessionless as expose_api_raw_anonymous_and_sessionless
log = logging.getLogger( __name__ )
class ToolShedAuthenticationController( AuthenticationController ):
- @web.expose_api_anonymous
+ @expose_api_raw_anonymous_and_sessionless
def get_tool_shed_api_key( self, trans, **kwd ):
"""
def get_api_key( self, trans, **kwd )
https://bitbucket.org/galaxy/galaxy-central/commits/d06aa2582d93/
Changeset: d06aa2582d93
User: martenson
Date: 2015-02-23 15:54:52+00:00
Summary: Return more specific API auth errors
Affected #: 1 file
diff -r da044e190f11d33a8556aa60ff563f1e801abf6d -r d06aa2582d9353a39fe7e6afccfa34d58464551f lib/galaxy/webapps/galaxy/api/authenticate.py
--- a/lib/galaxy/webapps/galaxy/api/authenticate.py
+++ b/lib/galaxy/webapps/galaxy/api/authenticate.py
@@ -45,9 +45,11 @@
user = trans.sa_session.query( trans.app.model.User ).filter( trans.app.model.User.table.c.email == email ).all()
- if ( len( user ) is not 1 ):
- # DB is inconsistent and we have more users with same email
- raise exceptions.ObjectNotFound()
+ if ( len( user ) == 0 ):
+ raise exceptions.ObjectNotFound( 'The user does not exist.' )
+ elif ( len( user ) > 1 ):
+ # DB is inconsistent and we have more users with the same email.
+ raise exceptions.InconsistentDatabase( 'An error occured, please contact your administrator.' )
else:
user = user[0]
is_valid_user = user.check_password( password )
@@ -55,7 +57,7 @@
key = self.api_keys_manager.get_or_create_api_key( user )
return dict( api_key=key )
else:
- raise exceptions.AuthenticationFailed()
+ raise exceptions.AuthenticationFailed( 'Invalid password.' )
def _decode_baseauth( self, encoded_str ):
"""
https://bitbucket.org/galaxy/galaxy-central/commits/cc3c4f51d1ea/
Changeset: cc3c4f51d1ea
User: jmchilton
Date: 2015-02-18 16:34:23+00:00
Summary: Tool diagnostic API endpoints.
It is easy to get Galaxy's database and shed tool files out of sync and the results are bad. I don't think this is new but I may have made it worse this cycle by trying to slowly walk back Galaxy's use of the database to track lineages (e.g. https://bitbucket.org/galaxy/galaxy-central/commits/08f8850853d004bf8a456a1…)
New API endpoints include:
/api/configuration/dynamic_tool_confs
/api/configuration/tool_lineages
/api/<tool_id>/diagnostics
Affected #: 6 files
diff -r d06aa2582d9353a39fe7e6afccfa34d58464551f -r cc3c4f51d1ea571608b017c1d1fc8100f6ad9e35 lib/galaxy/tools/toolbox/lineages/interface.py
--- a/lib/galaxy/tools/toolbox/lineages/interface.py
+++ b/lib/galaxy/tools/toolbox/lineages/interface.py
@@ -40,3 +40,9 @@
externally).
"""
return self.version is None
+
+ def to_dict(self):
+ return dict(
+ id=self.id,
+ version=self.version,
+ )
diff -r d06aa2582d9353a39fe7e6afccfa34d58464551f -r cc3c4f51d1ea571608b017c1d1fc8100f6ad9e35 lib/galaxy/tools/toolbox/lineages/stock.py
--- a/lib/galaxy/tools/toolbox/lineages/stock.py
+++ b/lib/galaxy/tools/toolbox/lineages/stock.py
@@ -38,6 +38,13 @@
# method for comparing tool versions.
return sorted( versions, key=_to_loose_version )
+ def to_dict(self):
+ return dict(
+ tool_id=self.tool_id,
+ tool_versions=list(self.tool_versions),
+ lineage_type='stock',
+ )
+
def _to_loose_version( tool_lineage_version ):
version = str( tool_lineage_version.version )
diff -r d06aa2582d9353a39fe7e6afccfa34d58464551f -r cc3c4f51d1ea571608b017c1d1fc8100f6ad9e35 lib/galaxy/tools/toolbox/lineages/tool_shed.py
--- a/lib/galaxy/tools/toolbox/lineages/tool_shed.py
+++ b/lib/galaxy/tools/toolbox/lineages/tool_shed.py
@@ -8,9 +8,11 @@
""" Representation of tool lineage derived from tool shed repository
installations. """
- def __init__(self, app, tool_version):
+ def __init__(self, app, tool_version, tool_shed_repository=None):
self.app = app
self.tool_version_id = tool_version.id
+ # Only used for logging
+ self._tool_shed_repository = tool_shed_repository
@staticmethod
def from_tool( app, tool, tool_shed_repository ):
@@ -36,6 +38,16 @@
def get_versions( self, reverse=False ):
return map( ToolLineageVersion.from_guid, self.get_version_ids( reverse=reverse ) )
+ def to_dict(self):
+ tool_shed_repository = self._tool_shed_repository
+ rval = dict(
+ tool_version_id=self.tool_version_id,
+ tool_versions=map(lambda v: v.to_dict(), self.get_versions()),
+ tool_shed_repository=tool_shed_repository if tool_shed_repository is not None else None,
+ lineage_type='tool_shed',
+ )
+ return rval
+
def get_install_tool_version( app, tool_id ):
return app.install_model.context.query(
diff -r d06aa2582d9353a39fe7e6afccfa34d58464551f -r cc3c4f51d1ea571608b017c1d1fc8100f6ad9e35 lib/galaxy/webapps/galaxy/api/configuration.py
--- a/lib/galaxy/webapps/galaxy/api/configuration.py
+++ b/lib/galaxy/webapps/galaxy/api/configuration.py
@@ -4,6 +4,8 @@
"""
from galaxy.web import _future_expose_api_anonymous as expose_api_anonymous
+from galaxy.web import _future_expose_api as expose_api
+from galaxy.web import require_admin
from galaxy.web.base.controller import BaseAPIController
from galaxy.managers import base
@@ -33,6 +35,13 @@
@expose_api_anonymous
def version( self, trans, **kwds ):
+ """
+ GET /api/version
+ Return a description of the major version of Galaxy (e.g. 15.03).
+
+ :rtype: dict
+ :returns: dictionary with major version keyed on 'version_major'
+ """
return {"version_major": self.app.config.version_major }
def get_config_dict( self, trans, return_admin=False, view=None, keys=None, default_view='all' ):
@@ -52,6 +61,29 @@
view=view, keys=keys, default_view=default_view )
return serialized
+ @expose_api
+ @require_admin
+ def dynamic_tool_confs(self, trans):
+ confs = self.app.toolbox.dynamic_confs(include_migrated_tool_conf=True)
+ return map(_tool_conf_to_dict, confs)
+
+ @expose_api
+ @require_admin
+ def tool_lineages(self, trans):
+ rval = []
+ for id, tool in self.app.toolbox.tools():
+ if hasattr( tool, 'lineage' ):
+ lineage_dict = tool.lineage.to_dict()
+ else:
+ lineage_dict = None
+
+ entry = dict(
+ id=id,
+ lineage=lineage_dict
+ )
+ rval.append(entry)
+ return rval
+
#TODO: for lack of a manager file for the config. May well be better in config.py? Circ imports?
class ConfigSerializer( base.ModelSerializer ):
@@ -122,3 +154,10 @@
'allow_user_creation' : _defaults_to( False ),
'allow_user_deletion' : _defaults_to( False ),
})
+
+
+def _tool_conf_to_dict(conf):
+ return dict(
+ config_filename=conf['config_filename'],
+ tool_path=conf['tool_path'],
+ )
diff -r d06aa2582d9353a39fe7e6afccfa34d58464551f -r cc3c4f51d1ea571608b017c1d1fc8100f6ad9e35 lib/galaxy/webapps/galaxy/api/tools.py
--- a/lib/galaxy/webapps/galaxy/api/tools.py
+++ b/lib/galaxy/webapps/galaxy/api/tools.py
@@ -94,6 +94,36 @@
message, status = trans.app.toolbox.reload_tool_by_id( tool_id )
return { status: message }
+ @_future_expose_api
+ @web.require_admin
+ def diagnostics( self, trans, id, **kwd ):
+ """
+ GET /api/tools/{tool_id}/diagnostics
+ Return diagnostic information to help debug panel
+ and dependency related problems.
+ """
+ to_dict = lambda x: x.to_dict()
+ tool = self._get_tool( id, user=trans.user )
+ if hasattr( tool, 'lineage' ):
+ lineage_dict = tool.lineage.to_dict()
+ else:
+ lineage_dict = None
+ tool_shed_dependencies = tool.installed_tool_dependencies
+ if tool_shed_dependencies:
+ tool_shed_dependencies_dict = map(to_dict, tool_shed_dependencies)
+ else:
+ tool_shed_dependencies_dict = None
+ tool = self._get_tool( id, user=trans.user )
+ return {
+ "tool_id": tool.id,
+ "tool_version": tool.version,
+ "dependency_shell_commands": tool.build_dependency_shell_commands(),
+ "lineage": lineage_dict,
+ "requirements": map(to_dict, tool.requirements),
+ "installed_tool_shed_dependencies": tool_shed_dependencies_dict,
+ "tool_dir": tool.tool_dir,
+ }
+
@_future_expose_api_anonymous
def citations( self, trans, id, **kwds ):
tool = self._get_tool( id, user=trans.user )
diff -r d06aa2582d9353a39fe7e6afccfa34d58464551f -r cc3c4f51d1ea571608b017c1d1fc8100f6ad9e35 lib/galaxy/webapps/galaxy/buildapp.py
--- a/lib/galaxy/webapps/galaxy/buildapp.py
+++ b/lib/galaxy/webapps/galaxy/buildapp.py
@@ -210,6 +210,7 @@
webapp.mapper.resource_with_deleted( 'quota', 'quotas', path_prefix='/api' )
webapp.mapper.connect( '/api/tools/{id:.+?}/build', action='build', controller="tools" )
webapp.mapper.connect( '/api/tools/{id:.+?}/reload', action='reload', controller="tools" )
+ webapp.mapper.connect( '/api/tools/{id:.+?}/diagnostics', action='diagnostics', controller="tools" )
webapp.mapper.connect( '/api/tools/{id:.+?}/citations', action='citations', controller="tools" )
webapp.mapper.connect( '/api/tools/{id:.+?}/download', action='download', controller="tools" )
webapp.mapper.connect( '/api/tools/{id:.+?}', action='show', controller="tools" )
@@ -221,6 +222,18 @@
webapp.mapper.resource( 'workflow', 'workflows', path_prefix='/api' )
webapp.mapper.resource_with_deleted( 'history', 'histories', path_prefix='/api' )
webapp.mapper.connect( '/api/histories/{history_id}/citations', action='citations', controller="histories" )
+ webapp.mapper.connect(
+ 'dynamic_tool_confs',
+ '/api/configuration/dynamic_tool_confs',
+ controller="configuration",
+ action="dynamic_tool_confs"
+ )
+ webapp.mapper.connect(
+ 'tool_lineages',
+ '/api/configuration/tool_lineages',
+ controller="configuration",
+ action="tool_lineages"
+ )
webapp.mapper.resource( 'configuration', 'configuration', path_prefix='/api' )
webapp.mapper.connect( "configuration_version",
"/api/version", controller="configuration",
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0