Re: [mh] mqtt_discovery

Dave Neudoerffer <[email protected]> Tue, 17 Feb 2026 21:39:47 -0500
Newsgroups gmane.comp.misc.misterhouse.user
Message-ID <CAOFx8LNzWfKo__qZn16hJVrrsrSS=v2pHKDwMRV2NrveQFenPw@mail.gmail.com>
--000000000000a19df0064b101a7b
Content-Type: multipart/alternative; boundary="000000000000a19ded064b101a79"

--000000000000a19ded064b101a79
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

And you will need read_table_A.pl for the new MQTT_RAWITEM...

Dave

On Tue, Feb 17, 2026 at 6:55=E2=80=AFPM Dave Neudoerffer <dave@neudoerffer.=
com>
wrote:

> Hey Brian and Howard, et all,
>
> So, Brian, I got your first 2 problems fixed.  The set('3%') was a bug
> when the state and brightness topics are the same -- fixed.  The other
> problem was that the simple template processing I put in didn't handle a
> template of the form {{ <value_true> IF <condition> ELSE <value_false>}}.
> I added some support for that specific template form.
>
> Your sensor problem above is weird.  The discovery message bills the door
> sensor as a switch.  That sort of makes sense -- would send ON and OFF wh=
en
> the door is opened and closed.  But the messages that get sent don't matc=
h
> the discovery info at all.  A quick search (thanx gemini) would indicate
> that zwave JS is likely defining multiple mqtt devices for the sensor.  I
> think that the specific discovery message you sent is actually a
> configuration object that you can use to control the behaviour of the LED
> on device.  There must be other discovery objects as well for the sensor.
> It looks like -- door_state=3D22 means open and door_state=3D23 means clo=
sed --
> and a web search confirms that.  The *discovered device for door_state* s=
hould
> be able to handle the messages.
>
> If not, you could use the new MQTT_RAWITEM that I just added to define a
> binary_sensor to handle the messages using hand coded discovery info:
> MQTT_RAWITEM, Downstairs_Hall_Closet_Sensor, mqtt_discovery2,
> app/zwave-js-ui/config/binary_sensor/
> Downstairs_Hall-Closet_Sensor/closet_door_sensor/config,
> {"value_template":"{{ "ON" if value_json.value=3D=3D22 else "OFF" }}","
> state_topic":"app/zwave-js-ui/
> Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Access_Control/Door=
_state"}
> (I have tried this definition with the messages above and they are
> processed correctly into on/off for the binary_sensor, but again, if you
> can find the discovery message for the actual door_state, it should work
> too.)
>
>
> *<IMPORTANT POINT>*
> This conversation does raise an important point.  Almost all mqtt
> discovery stuff published by devices and other software, is specifically
> setup to be consumed by Home Assistant.  I HAVE NOT implemented the entir=
e
> Home Assistant discovery language in Misterhouse, nor do I intend to.  I =
am
> sure that Home Assistant would process these zwave JS discovery messages
> very well.  As per Howards comments earlier, if you were to setup Home
> Assistant, the devices would show up there.  You could then use the
> HA_Item.pm module in Misterhouse to pull in the Home Assistant entities
> that you want and run your misterhouse logic against those items.   This =
is
> actually easier to setup than it sounds.
>
> I have attached the latest mqtt files.  There are a lot of changes here,
> because this is my working version for optionally supporting the new HA
> device discovery variation of mqtt discovery.  I am running this code on =
4
> MH instances, and all seems good so far.  I will submit a pull request
> soon.   You need to replace all 3 in your installation (take backup copie=
s
> first :-).  If you have any problems, give me a shout.
>
> *<ASIDE>*
> The reason I have implemented the HA device discovery variation of mqtt
> discovery is that I have been trying out using the matter_bridge to expos=
e
> devices from HA to matter and thus to google (or alexa or apple).  The
> matter bridge works easiest if you can put a label on the HA devices that
> you want exposed.  However, you can't put labels on raw HA entities --
> hence putting in the HA device support.  Also, I still use Misterhouse fo=
r
> hosting my Insteon devices because I find the MH support better than HA,
> and I define all kinds of utility switches, scenes, and variables in
> Misterhouse that I expose to HA using mqtt.  Exposing those things as
> devices allows me to then expose the HA devices to matter via the
> matter_bridge and control them easily with Google home/assistant.  It is =
an
> alternative to the Google/Alexa support in Misterhouse or Home Assistant,
> which is cloud based and a pain to setup.
>
> Dave
>
> On Sun, Feb 15, 2026 at 6:16=E2=80=AFPM Brian M <misterhouse-ng1@silverfl=
ash.net>
> wrote:
>
>> Here's another one that might make more sense to you than to me. I'm
>> using a Zooz ZSE41 door sensor. mqtt_discovery.pm produced the following
>> code to define it:
>>
>> MQTT_DISCOVEREDITEM, Downstairs_Hall_Closet_Sensor, mqtt_discovery2,
>> app/zwave-js-ui/config/switch/Downstairs_Hall-Closet_Sensor/config_switc=
h_1/config,
>> {"payload_off":"0","payload_on":"1","value_template":"{{ value_json.valu=
e
>> }}","command_topic":"app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/confi=
guration/endpoint_0/LED_Indicator/set","enabled_by_default":false,"entity_c=
ategory":"config","state_topic":"app/zwave-js-ui/Downstairs_Hall/Closet_Sen=
sor/configuration/endpoint_0/LED_Indicator","availability":[{"payload_avail=
able":"true","payload_not_available":"false","topic":"app/zwave-js-ui/Downs=
tairs_Hall/Closet_Sensor/status","value_template":"{{'true'
>> if value_json.value else
>> 'false'}}"},{"topic":"app/zwave-js-ui/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui=
/status","value_template":"{{'online'
>> if value_json.value else
>> 'offline'}}"},{"payload_available":"true","payload_not_available":"false=
","topic":"app/zwave-js-ui/driver/status"}],"availability_mode":"all","devi=
ce":{"identifiers":["zwavejs2mqtt_0xc92945ec_node19"],"manufacturer":"Zooz"=
,"model":"Open/Close
>> XS Sensor
>> (ZSE41)","name":"Downstairs_Hall-Closet_Sensor","sw_version":"2.30.0"},"=
name":"Downstairs_Hall_Closet_Sensor","unique_id":"zwavejs2mqtt_0xc92945ec_=
19-112-0-1"}
>>
>>
>> Here's a door open/door close sequence.
>>
>> # Initial state: door closed
>>
>> # Opening door.
>> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive'
>> M:'{"time":1771196567992,"value":1771196567992}'
>> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
>> {"time":1771196567992,"value":1771196567992}
>> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0=
/alarmType'
>> M:'{"time":1771196567993,"value":0,"nodeName":"Closet_Sensor","nodeLocat=
ion":"Downstairs_Hall"}'
>> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/al=
armType
>> --
>> {"time":1771196567993,"value":0,"nodeName":"Closet_Sensor","nodeLocation=
":"Downstairs_Hall"}
>> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0=
/alarmLevel'
>> M:'{"time":1771196567994,"value":0,"nodeName":"Closet_Sensor","nodeLocat=
ion":"Downstairs_Hall"}'
>> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/al=
armLevel
>> --
>> {"time":1771196567994,"value":0,"nodeName":"Closet_Sensor","nodeLocation=
":"Downstairs_Hall"}
>> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0=
/Access_Control/Door_state_simple'
>> M:'{"time":1771196567995,"value":22,"nodeName":"Closet_Sensor","nodeLoca=
tion":"Downstairs_Hall"}'
>> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Ac=
cess_Control/Door_state_simple
>> --
>> {"time":1771196567995,"value":22,"nodeName":"Closet_Sensor","nodeLocatio=
n":"Downstairs_Hall"}
>> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0=
/Access_Control/Door_state'
>> M:'{"time":1771196567996,"value":22,"nodeName":"Closet_Sensor","nodeLoca=
tion":"Downstairs_Hall"}'
>> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Ac=
cess_Control/Door_state
>> --
>> {"time":1771196567996,"value":22,"nodeName":"Closet_Sensor","nodeLocatio=
n":"Downstairs_Hall"}
>> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive'
>> M:'{"time":1771196568241,"value":1771196568016}'
>> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
>> {"time":1771196568241,"value":1771196568016}
>>
>> # Closing door.
>> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive'
>> M:'{"time":1771196590395,"value":1771196590395}'
>> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
>> {"time":1771196590395,"value":1771196590395}
>> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0=
/alarmType'
>> M:'{"time":1771196590396,"value":0,"nodeName":"Closet_Sensor","nodeLocat=
ion":"Downstairs_Hall"}'
>> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/al=
armType
>> --
>> {"time":1771196590396,"value":0,"nodeName":"Closet_Sensor","nodeLocation=
":"Downstairs_Hall"}
>> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0=
/alarmLevel'
>> M:'{"time":1771196590397,"value":0,"nodeName":"Closet_Sensor","nodeLocat=
ion":"Downstairs_Hall"}'
>> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/al=
armLevel
>> --
>> {"time":1771196590397,"value":0,"nodeName":"Closet_Sensor","nodeLocation=
":"Downstairs_Hall"}
>> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0=
/Access_Control/Door_state_simple'
>> M:'{"time":1771196590398,"value":23,"nodeName":"Closet_Sensor","nodeLoca=
tion":"Downstairs_Hall"}'
>> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Ac=
cess_Control/Door_state_simple
>> --
>> {"time":1771196590398,"value":23,"nodeName":"Closet_Sensor","nodeLocatio=
n":"Downstairs_Hall"}
>> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0=
/Access_Control/Door_state'
>> M:'{"time":1771196590398,"value":23,"nodeName":"Closet_Sensor","nodeLoca=
tion":"Downstairs_Hall"}'
>> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Ac=
cess_Control/Door_state
>> --
>> {"time":1771196590398,"value":23,"nodeName":"Closet_Sensor","nodeLocatio=
n":"Downstairs_Hall"}
>> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive'
>> M:'{"time":1771196590646,"value":1771196590419}'
>> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
>> {"time":1771196590646,"value":1771196590419}
>>
>> The fields that indicate the door status don't appear in the discovery
>> data that I can see at all. The MH object always shows the state to be
>> "on", regardless of the actual door open/closed status.
>>
>>                        -B.
>>
>>
>>
>>
>>
>> On 2/14/26 11:17, Brian M wrote:
>>
>> Thanks, Dave. That would be great.
>>
>>              -B.
>>
>> On 2/14/26 10:42, Dave Neudoerffer wrote:
>>
>> Thanx for the trace Brian.  The discovery topics and templates being use=
d
>> are slightly different from anything I have seen before.  It shouldn't b=
e
>> too hard to enhance the MH discovery to handle this.  The Jinja template=
s
>> are a bit of a nuisance, but I will fudge something...  It will take me =
a
>> few days to get to this...
>>
>> Dave
>>
>> On Fri, Feb 13, 2026 at 7:01=E2=80=AFPM Brian M <misterhouse-ng1@silverf=
lash.net>
>> wrote:
>>
>>> Thanks, Dave. Mostly I'm in good shape, but I've got some edge cases.
>>>
>>> My primary problem at the moment seems to be that I can't set the
>>> brightness for my ZWave dimmer switches via ZWave-JS-UI. The correct MQ=
TT
>>> string in one instance is:
>>>
>>>
>>> app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/ta=
rgetValue/set
>>>
>>> Writing "3" to that MQTT topic (via MQTT-Explorer)  causes the light to
>>> come on at 3%, as expected. However, in MH setting it to 3, '3', or '3%=
'
>>> results in the light being turned on 100%.
>>>
>>> I can't tell if this is a problem in with the discovery itself, or the
>>> implementation of of setting the MQTT_DISCOVEREDITEM.  Here are some
>>> details:
>>>
>>> The MQTT discovered_item entry:
>>>
>>> MQTT_DISCOVEREDITEM, Upstairs_Landing_Stairs, mqtt_discovery2,
>>> app/zwave-js-ui/config/light/Upstairs_Landing-Stairs/dimmer/config,
>>> {"command_topic":"app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multil=
evel/endpoint_0/targetValue/set","state_topic":"app/zwave-js-ui/Upstairs_La=
nding/Stairs/switch_multilevel/endpoint_0/currentValue","state_value_templa=
te":"{{
>>> \"OFF\" if value_json.value =3D=3D 0 else \"ON\"
>>> }}","brightness_command_topic":"app/zwave-js-ui/Upstairs_Landing/Stairs=
/switch_multilevel/endpoint_0/targetValue/set","brightness_scale":99,"brigh=
tness_state_topic":"app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilev=
el/endpoint_0/currentValue","brightness_value_template":"{{
>>> value_json.value
>>> }}","on_command_type":"brightness","supported_color_modes":["brightness=
"],"availability":[{"payload_available":"true","payload_not_available":"fal=
se","topic":"app/zwave-js-ui/Upstairs_Landing/Stairs/status","value_templat=
e":"{{'true'
>>> if value_json.value else
>>> 'false'}}"},{"topic":"app/zwave-js-ui/_CLIENTS/ZWAVE_GATEWAY-zwave-js-u=
i/status","value_template":"{{'online'
>>> if value_json.value else
>>> 'offline'}}"},{"payload_available":"true","payload_not_available":"fals=
e","topic":"app/zwave-js-ui/driver/status"}],"availability_mode":"all","dev=
ice":{"identifiers":["zwavejs2mqtt_0xc92945ec_node259"],"manufacturer":"Zoo=
z","model":"Dimmer
>>> (ZEN72)","name":"Upstairs_Landing-Stairs","sw_version":"4.0.1"},"name":=
"Upstairs_Landing_Stairs","unique_id":"zwavejs2mqtt_0xc92945ec_259-38-0-cur=
rentValue"}
>>>
>>> Relevant log messages (MQTT debug level 2):
>>>
>>> 2026-02-13 15:54:59 [MQTT D2]: Pending $Upstairs_Landing_Stairs-->set(
>>> 3%, ,  ) cleared
>>> 2026-02-13 15:54:59 [MQTT D1]: unable to process template
>>> {{"OFF"ifvalue_json.value=3D=3D0else"ON"}}
>>> 2026-02-13 15:54:59 [MQTT D2]: fishing template value out of json with
>>> '$value =3D $value_json->{value}'
>>> 2026-02-13 15:54:59 [MQTT D1]: remote item MQTT to MH
>>> Upstairs_Landing_Stairs set(95%, '')
>>> 2026-02-13 15:54:59 [MQTT D2]: remote item $Upstairs_Landing_Stairs
>>> received message R:0
>>> T:app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/=
currentValue
>>> M:{"time":1771026899727,"value":95,"nodeName":"Stairs","nodeLocation":"=
Upstairs_Landing"}
>>> 2026-02-13 15:54:59 [MQTT D1]: unable to process template
>>> {{"OFF"ifvalue_json.value=3D=3D0else"ON"}}
>>> 2026-02-13 15:54:59 [MQTT D2]: fishing template value out of json with
>>> '$value =3D $value_json->{value}'
>>> 2026-02-13 15:54:59 [MQTT D1]: remote item MQTT to MH
>>> Upstairs_Landing_Stairs set(95%, 'mqtt')
>>> 2026-02-13 15:54:59 [MQTT D1]: mqttserver Rcv'd: R:0
>>> T:'app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0=
/duration'
>>> M:'{"time":1771026899728,"value":{"value":0,"unit":"seconds"},"nodeName=
":"Stairs","nodeLocation":"Upstairs_Landing"}'
>>> 2026-02-13 15:54:59 [MQTT D2]: UNHANDLED MESSAGE
>>> app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/du=
ration
>>> --
>>> {"time":1771026899728,"value":{"value":0,"unit":"seconds"},"nodeName":"=
Stairs","nodeLocation":"Upstairs_Landing"}
>>> 2026-02-13 15:54:59 [MQTT D1]: mqttserver Rcv'd: R:0
>>> T:'app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0=
/targetValue'
>>> M:'{"time":1771026899728,"value":95,"nodeName":"Stairs","nodeLocation":=
"Upstairs_Landing"}'
>>> 2026-02-13 15:54:59 [MQTT D2]: UNHANDLED MESSAGE
>>> app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/ta=
rgetValue
>>> --
>>> {"time":1771026899728,"value":95,"nodeName":"Stairs","nodeLocation":"Up=
stairs_Landing"}
>>> 2026-02-13 15:54:59 [MQTT D1]: mqttserver Rcv'd: R:0
>>> T:'app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0=
/currentValue'
>>> M:'{"time":1771026899858,"value":95,"nodeName":"Stairs","nodeLocation":=
"Upstairs_Landing"}'
>>> 2026-02-13 15:54:59 [MQTT D2]: remote item $Upstairs_Landing_Stairs
>>> received message R:0
>>> T:app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/=
currentValue
>>> M:{"time":1771026899858,"value":95,"nodeName":"Stairs","nodeLocation":"=
Upstairs_Landing"}
>>> 2026-02-13 15:54:59 [MQTT D1]: unable to process template
>>> {{"OFF"ifvalue_json.value=3D=3D0else"ON"}}
>>> 2026-02-13 15:54:59 [MQTT D2]: fishing template value out of json with
>>> '$value =3D $value_json->{value}'
>>> 2026-02-13 15:54:59 [MQTT D1]: remote item MQTT to MH
>>> Upstairs_Landing_Stairs set(95%, 'mqtt')
>>> 2026-02-13 15:54:59 [MQTT D2]: remote item $Upstairs_Landing_Stairs
>>> received message R:0
>>> T:app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/=
currentValue
>>> M:{"time":1771026899858,"value":95,"nodeName":"Stairs","nodeLocation":"=
Upstairs_Landing"}
>>> 2026-02-13 15:54:59 [MQTT D1]: unable to process template
>>> {{"OFF"ifvalue_json.value=3D=3D0else"ON"}}
>>> 2026-02-13 15:54:59 [MQTT D2]: fishing template value out of json with
>>> '$value =3D $value_json->{value}'
>>> 2026-02-13 15:54:59 [MQTT D1]: remote item MQTT to MH
>>> Upstairs_Landing_Stairs set(95%, 'mqtt')
>>>
>>>
>>> Clearly it's not happy, but I haven't been able to chase down the root
>>> cause. BTW, the "95%" mentioned in the logs was the switch's existing
>>> brightness level before I tried to change it.
>>>
>>> Hopefully, this is clearer to you than to me.
>>>
>>>                           -B.
>>>
>>>
>>>
>>>
>>> On 2/13/26 15:08, Dave Neudoerffer wrote:
>>>
>>> You are correct Brian. HA_Item is about mirroring home assistant
>>> entities.  Howard uses HA to host most of his devices and MH for
>>> automations using HA_Items. Without a HA service, HA_Item makes no sens=
e.
>>>
>>> In implementing mqtt_items, I had a few different sources of mqtt
>>> devices, but not a huge variety. No did not have any zwave2mqtt stuff. =
I
>>> have used the zigbee2mqtt stuff.  I am actually in the process of enhan=
cing
>>> the MH discovery stuff to handle the new HA device discovery methodolog=
y.
>>> If there is something I can help with, let me know.
>>>
>>> Dave
>>>
>>>
>>>
>>
>>

--000000000000a19ded064b101a79
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">And you will need read_table_A.pl for the new MQTT_RAWITEM=
...<div><br></div><div>Dave</div></div><br><div class=3D"gmail_quote gmail_=
quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Tue, Feb 17, 2026=
 at 6:55=E2=80=AFPM Dave Neudoerffer &lt;<a href=3D"mailto:dave@neudoerffer=
.com">[email protected]</a>&gt; wrote:<br></div><blockquote class=3D"gma=
il_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,2=
04,204);padding-left:1ex"><div dir=3D"ltr">Hey Brian and Howard, et all,<di=
v><br></div><div>So, Brian, I got your first 2 problems fixed.=C2=A0 The se=
t(&#39;3%&#39;) was a bug when the state and brightness topics are the same=
 -- fixed.=C2=A0 The other problem was that the simple template processing =
I put in didn&#39;t handle a template of the form {{ &lt;value_true&gt; IF =
&lt;condition&gt; ELSE &lt;value_false&gt;}}.=C2=A0 I added some support fo=
r that specific template form.=C2=A0=C2=A0</div><div><br></div><div>Your se=
nsor problem above is weird.=C2=A0 The discovery message bills the door sen=
sor as a switch.=C2=A0 That sort of makes sense -- would send ON and OFF wh=
en the door is opened and closed.=C2=A0 But the messages that get sent don&=
#39;t match the discovery info at all.=C2=A0 A quick search (thanx gemini) =
would indicate that zwave JS is likely defining multiple mqtt devices for t=
he sensor.=C2=A0 I think that the specific discovery message you=C2=A0sent =
is actually a configuration object that you can use to control the behaviou=
r of the LED on device.=C2=A0 There must be other discovery objects as well=
 for the sensor.=C2=A0 It looks like -- door_state=3D22 means open and door=
_state=3D23 means closed -- and a web search confirms that.=C2=A0 The <b>di=
scovered device for door_state</b>=C2=A0should be able to handle the messag=
es.=C2=A0=C2=A0</div><div><br></div><div>If not, you could use the new MQTT=
_RAWITEM that I just added to define a binary_sensor to handle the messages=
 using hand coded discovery info:</div><div><span style=3D"font-family:mono=
space">MQTT_RAWITEM, Downstairs_Hall_Closet_Sensor, mqtt_discovery2, app/zw=
ave-js-ui/config/binary_sensor/</span><span style=3D"font-family:monospace"=
>Downstairs_Hall-Closet_Sensor/closet_door_sensor</span><span style=3D"font=
-family:monospace">/config,=C2=A0</span></div><div><span style=3D"font-fami=
ly:monospace">{</span><span style=3D"font-family:monospace">&quot;value_tem=
plate&quot;:&quot;{{ &quot;ON&quot; if value_json.value=3D=3D22 else &quot;=
OFF&quot; }}&quot;,</span><span style=3D"font-family:monospace">&quot;</spa=
n><span style=3D"font-family:monospace">state_topic&quot;:&quot;app/zwave-j=
s-ui/</span><span style=3D"font-family:monospace">Downstairs_Hall/Closet_Se=
nsor/notification/endpoint_0/Access_Control/Door_state&quot;}</span></div><=
div>(I have tried this definition with the messages above and they are proc=
essed correctly into on/off for the binary_sensor, but again, if you can fi=
nd the=C2=A0discovery message for the actual door_state, it should work too=
.)</div><div><br></div><div><br></div><div><b>&lt;IMPORTANT POINT&gt;</b></=
div><div>This conversation does raise an important point.=C2=A0 Almost all =
mqtt discovery stuff published by devices and other software, is specifical=
ly setup to be consumed by Home Assistant.=C2=A0 I HAVE NOT implemented the=
 entire Home Assistant discovery language in Misterhouse, nor do I intend t=
o.=C2=A0 I am sure that Home Assistant would process these zwave JS discove=
ry messages very well.=C2=A0 As per Howards comments earlier, if you were t=
o setup Home Assistant, the devices would show up there.=C2=A0 You could th=
en use the HA_Item.pm module in Misterhouse to pull in the Home Assistant e=
ntities that you want and run your misterhouse logic against those items.=
=C2=A0 =C2=A0This is actually easier to setup than it sounds.</div><div><br=
></div><div>I have attached the latest mqtt files.=C2=A0 There are a lot of=
 changes here, because this is my working version for optionally supporting=
 the new HA device discovery variation of mqtt discovery.=C2=A0 I am runnin=
g this code on 4 MH instances, and all seems good so far.=C2=A0 I will subm=
it a pull request soon.=C2=A0 =C2=A0You need to replace all 3 in your insta=
llation (take backup copies first :-).=C2=A0 If you have any problems, give=
 me a shout.</div><div><br></div><div><b>&lt;ASIDE&gt;</b></div><div>The re=
ason I have implemented the HA device discovery variation of mqtt discovery=
 is that I have been trying out using the matter_bridge to expose devices f=
rom HA to matter and thus to google (or alexa or apple).=C2=A0 The matter b=
ridge works easiest if you can put a label on the HA devices that you want =
exposed.=C2=A0 However, you can&#39;t put labels on raw HA entities -- henc=
e putting in the HA device support.=C2=A0 Also, I still use Misterhouse for=
 hosting my Insteon devices because I find the MH support better than HA, a=
nd I define all kinds of utility switches, scenes, and variables in Misterh=
ouse that I expose to HA using mqtt.=C2=A0 Exposing those things as devices=
 allows me to then expose the HA devices to matter via the matter_bridge an=
d control them easily with Google home/assistant.=C2=A0 It is an alternativ=
e to the Google/Alexa support in Misterhouse or Home Assistant, which is cl=
oud based and a pain to setup.=C2=A0=C2=A0</div><div><br></div><div>Dave</d=
iv></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_att=
r">On Sun, Feb 15, 2026 at 6:16=E2=80=AFPM Brian M &lt;<a href=3D"mailto:mi=
[email protected]" target=3D"_blank">misterhouse-ng1@silverflas=
h.net</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"ma=
rgin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:=
1ex"><u></u>

 =20
   =20
 =20
  <div>
    <div>Here&#39;s another one that might make more
      sense to you than to me. I&#39;m using a Zooz ZSE41 door sensor.
      <a href=3D"http://mqtt_discovery.pm" target=3D"_blank">mqtt_discovery=
.pm</a> produced the following code to define it:</div>
    <blockquote>
      <div><font face=3D"monospace">MQTT_DISCOVEREDITEM,
          Downstairs_Hall_Closet_Sensor, mqtt_discovery2,
app/zwave-js-ui/config/switch/Downstairs_Hall-Closet_Sensor/config_switch_1=
/config,
          {&quot;payload_off&quot;:&quot;0&quot;,&quot;payload_on&quot;:&qu=
ot;1&quot;,&quot;value_template&quot;:&quot;{{
          value_json.value
}}&quot;,&quot;command_topic&quot;:&quot;app/zwave-js-ui/Downstairs_Hall/Cl=
oset_Sensor/configuration/endpoint_0/LED_Indicator/set&quot;,&quot;enabled_=
by_default&quot;:false,&quot;entity_category&quot;:&quot;config&quot;,&quot=
;state_topic&quot;:&quot;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/conf=
iguration/endpoint_0/LED_Indicator&quot;,&quot;availability&quot;:[{&quot;p=
ayload_available&quot;:&quot;true&quot;,&quot;payload_not_available&quot;:&=
quot;false&quot;,&quot;topic&quot;:&quot;app/zwave-js-ui/Downstairs_Hall/Cl=
oset_Sensor/status&quot;,&quot;value_template&quot;:&quot;{{&#39;true&#39;
          if value_json.value else
&#39;false&#39;}}&quot;},{&quot;topic&quot;:&quot;app/zwave-js-ui/_CLIENTS/=
ZWAVE_GATEWAY-zwave-js-ui/status&quot;,&quot;value_template&quot;:&quot;{{&=
#39;online&#39;
          if value_json.value else
&#39;offline&#39;}}&quot;},{&quot;payload_available&quot;:&quot;true&quot;,=
&quot;payload_not_available&quot;:&quot;false&quot;,&quot;topic&quot;:&quot=
;app/zwave-js-ui/driver/status&quot;}],&quot;availability_mode&quot;:&quot;=
all&quot;,&quot;device&quot;:{&quot;identifiers&quot;:[&quot;zwavejs2mqtt_0=
xc92945ec_node19&quot;],&quot;manufacturer&quot;:&quot;Zooz&quot;,&quot;mod=
el&quot;:&quot;Open/Close
          XS Sensor
(ZSE41)&quot;,&quot;name&quot;:&quot;Downstairs_Hall-Closet_Sensor&quot;,&q=
uot;sw_version&quot;:&quot;2.30.0&quot;},&quot;name&quot;:&quot;Downstairs_=
Hall_Closet_Sensor&quot;,&quot;unique_id&quot;:&quot;zwavejs2mqtt_0xc92945e=
c_19-112-0-1&quot;}<br>
        </font></div>
    </blockquote>
    <div><br>
    </div>
    <div>Here&#39;s a door open/door close
      sequence.=C2=A0</div>
    <div><br>
    </div>
    <div>
      <blockquote><font face=3D"monospace"># Initial state: door closed</fo=
nt><br>
        <br>
        <font face=3D"monospace"># Opening door.</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
          <a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActiv=
e</a>&#39;
          M:&#39;{&quot;time&quot;:1771196567992,&quot;value&quot;:17711965=
67992}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
          MESSAGE
          app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
          {&quot;time&quot;:1771196567992,&quot;value&quot;:1771196567992}<=
/font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
<a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/alarmType</a>&#39;
M:&#39;{&quot;time&quot;:1771196567993,&quot;value&quot;:0,&quot;nodeName&q=
uot;:&quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Ha=
ll&quot;}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
          MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/alarm=
Type
          --
{&quot;time&quot;:1771196567993,&quot;value&quot;:0,&quot;nodeName&quot;:&q=
uot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Hall&quot=
;}</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
<a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/alarmLevel</a>&#39;
M:&#39;{&quot;time&quot;:1771196567994,&quot;value&quot;:0,&quot;nodeName&q=
uot;:&quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Ha=
ll&quot;}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
          MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/alarm=
Level
          --
{&quot;time&quot;:1771196567994,&quot;value&quot;:0,&quot;nodeName&quot;:&q=
uot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Hall&quot=
;}</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
<a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/Access_Control/Door_state_simple</a>&#39;
M:&#39;{&quot;time&quot;:1771196567995,&quot;value&quot;:22,&quot;nodeName&=
quot;:&quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_H=
all&quot;}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
          MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acces=
s_Control/Door_state_simple
          --
{&quot;time&quot;:1771196567995,&quot;value&quot;:22,&quot;nodeName&quot;:&=
quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Hall&quo=
t;}</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
<a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/Access_Control/Door_state</a>&#39;
M:&#39;{&quot;time&quot;:1771196567996,&quot;value&quot;:22,&quot;nodeName&=
quot;:&quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_H=
all&quot;}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
          MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acces=
s_Control/Door_state
          --
{&quot;time&quot;:1771196567996,&quot;value&quot;:22,&quot;nodeName&quot;:&=
quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Hall&quo=
t;}</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
          <a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActiv=
e</a>&#39;
          M:&#39;{&quot;time&quot;:1771196568241,&quot;value&quot;:17711965=
68016}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
          MESSAGE
          app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
          {&quot;time&quot;:1771196568241,&quot;value&quot;:1771196568016}<=
/font><br>
        <br>
        <font face=3D"monospace"># Closing door.</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
          <a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActiv=
e</a>&#39;
          M:&#39;{&quot;time&quot;:1771196590395,&quot;value&quot;:17711965=
90395}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
          MESSAGE
          app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
          {&quot;time&quot;:1771196590395,&quot;value&quot;:1771196590395}<=
/font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
<a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/alarmType</a>&#39;
M:&#39;{&quot;time&quot;:1771196590396,&quot;value&quot;:0,&quot;nodeName&q=
uot;:&quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Ha=
ll&quot;}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
          MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/alarm=
Type
          --
{&quot;time&quot;:1771196590396,&quot;value&quot;:0,&quot;nodeName&quot;:&q=
uot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Hall&quot=
;}</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
<a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/alarmLevel</a>&#39;
M:&#39;{&quot;time&quot;:1771196590397,&quot;value&quot;:0,&quot;nodeName&q=
uot;:&quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Ha=
ll&quot;}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
          MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/alarm=
Level
          --
{&quot;time&quot;:1771196590397,&quot;value&quot;:0,&quot;nodeName&quot;:&q=
uot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Hall&quot=
;}</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
<a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/Access_Control/Door_state_simple</a>&#39;
M:&#39;{&quot;time&quot;:1771196590398,&quot;value&quot;:23,&quot;nodeName&=
quot;:&quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_H=
all&quot;}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
          MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acces=
s_Control/Door_state_simple
          --
{&quot;time&quot;:1771196590398,&quot;value&quot;:23,&quot;nodeName&quot;:&=
quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Hall&quo=
t;}</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
<a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/Access_Control/Door_state</a>&#39;
M:&#39;{&quot;time&quot;:1771196590398,&quot;value&quot;:23,&quot;nodeName&=
quot;:&quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_H=
all&quot;}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
          MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acces=
s_Control/Door_state
          --
{&quot;time&quot;:1771196590398,&quot;value&quot;:23,&quot;nodeName&quot;:&=
quot;Closet_Sensor&quot;,&quot;nodeLocation&quot;:&quot;Downstairs_Hall&quo=
t;}</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
          Rcv&#39;d: <a>R:0</a>
          <a>T:&#39;app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActiv=
e</a>&#39;
          M:&#39;{&quot;time&quot;:1771196590646,&quot;value&quot;:17711965=
90419}&#39;</font><br>
        <font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
          MESSAGE
          app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
          {&quot;time&quot;:1771196590646,&quot;value&quot;:1771196590419}<=
/font><br>
      </blockquote>
      The fields that indicate the door status don&#39;t appear in the
      discovery data that I can see at all. The MH object always shows
      the state to be &quot;on&quot;, regardless of the actual door open/cl=
osed
      status.=C2=A0</div>
    <div><br>
    </div>
    <div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0-B.</div>
    <div><br>
    </div>
    <div><br>
    </div>
    <div><br>
    </div>
    <div><br>
    </div>
    <div><br>
    </div>
    <div>On 2/14/26 11:17, Brian M wrote:<br>
    </div>
    <blockquote type=3D"cite">
     =20
      <div>Thanks, Dave. That would be great.</div>
      <div><br>
      </div>
      <div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-B.</div>
      <div><br>
      </div>
      <div>On 2/14/26 10:42, Dave Neudoerffer
        wrote:<br>
      </div>
      <blockquote type=3D"cite">
       =20
        <div dir=3D"ltr">Thanx for the trace Brian.=C2=A0 The discovery top=
ics
          and templates being used are slightly different from anything
          I have seen before.=C2=A0 It shouldn&#39;t be too hard to enhance=
 the
          MH discovery to handle this.=C2=A0 The Jinja templates are a bit =
of
          a nuisance, but I will fudge something...=C2=A0 It will take me a
          few days to get to this...
          <div><br>
          </div>
          <div>Dave</div>
        </div>
        <br>
        <div class=3D"gmail_quote">
          <div dir=3D"ltr" class=3D"gmail_attr">On Fri, Feb 13, 2026 at
            7:01=E2=80=AFPM Brian M &lt;<a href=3D"mailto:misterhouse-ng1@s=
ilverflash.net" target=3D"_blank">[email protected]</a>&gt;
            wrote:<br>
          </div>
          <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
            <div>
              <p>Thanks, Dave. Mostly I&#39;m in good shape, but I&#39;ve g=
ot
                some edge cases.=C2=A0</p>
              <p>My primary problem at the moment seems to be that I
                can&#39;t set the brightness for my ZWave dimmer switches
                via ZWave-JS-UI. The correct MQTT string in one instance
                is:</p>
              <p>=C2=A0 =C2=A0
app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/target=
Value/set</p>
              <p>Writing &quot;3&quot; to that MQTT topic (via MQTT-Explore=
r)=C2=A0
                causes the light to come on at 3%, as expected. However,
                in MH setting it to 3, &#39;3&#39;, or &#39;3%&#39; results=
 in the light
                being turned on 100%.</p>
              <p>I can&#39;t tell if this is a problem in with the discover=
y
                itself, or the implementation of of setting the
                MQTT_DISCOVEREDITEM.=C2=A0 Here are some details:</p>
              <p>The MQTT discovered_item entry:</p>
              <blockquote>
                <p><font face=3D"monospace">MQTT_DISCOVEREDITEM,
                    Upstairs_Landing_Stairs, mqtt_discovery2,
                    app/zwave-js-ui/config/light/Upstairs_Landing-Stairs/di=
mmer/config,
{&quot;command_topic&quot;:&quot;app/zwave-js-ui/Upstairs_Landing/Stairs/sw=
itch_multilevel/endpoint_0/targetValue/set&quot;,&quot;state_topic&quot;:&q=
uot;app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/cu=
rrentValue&quot;,&quot;state_value_template&quot;:&quot;{{
                    \&quot;OFF\&quot; if value_json.value =3D=3D 0 else \&q=
uot;ON\&quot;
}}&quot;,&quot;brightness_command_topic&quot;:&quot;app/zwave-js-ui/Upstair=
s_Landing/Stairs/switch_multilevel/endpoint_0/targetValue/set&quot;,&quot;b=
rightness_scale&quot;:99,&quot;brightness_state_topic&quot;:&quot;app/zwave=
-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/currentValue&qu=
ot;,&quot;brightness_value_template&quot;:&quot;{{
                    value_json.value
}}&quot;,&quot;on_command_type&quot;:&quot;brightness&quot;,&quot;supported=
_color_modes&quot;:[&quot;brightness&quot;],&quot;availability&quot;:[{&quo=
t;payload_available&quot;:&quot;true&quot;,&quot;payload_not_available&quot=
;:&quot;false&quot;,&quot;topic&quot;:&quot;app/zwave-js-ui/Upstairs_Landin=
g/Stairs/status&quot;,&quot;value_template&quot;:&quot;{{&#39;true&#39;
                    if value_json.value else
&#39;false&#39;}}&quot;},{&quot;topic&quot;:&quot;app/zwave-js-ui/_CLIENTS/=
ZWAVE_GATEWAY-zwave-js-ui/status&quot;,&quot;value_template&quot;:&quot;{{&=
#39;online&#39;
                    if value_json.value else
&#39;offline&#39;}}&quot;},{&quot;payload_available&quot;:&quot;true&quot;,=
&quot;payload_not_available&quot;:&quot;false&quot;,&quot;topic&quot;:&quot=
;app/zwave-js-ui/driver/status&quot;}],&quot;availability_mode&quot;:&quot;=
all&quot;,&quot;device&quot;:{&quot;identifiers&quot;:[&quot;zwavejs2mqtt_0=
xc92945ec_node259&quot;],&quot;manufacturer&quot;:&quot;Zooz&quot;,&quot;mo=
del&quot;:&quot;Dimmer
(ZEN72)&quot;,&quot;name&quot;:&quot;Upstairs_Landing-Stairs&quot;,&quot;sw=
_version&quot;:&quot;4.0.1&quot;},&quot;name&quot;:&quot;Upstairs_Landing_S=
tairs&quot;,&quot;unique_id&quot;:&quot;zwavejs2mqtt_0xc92945ec_259-38-0-cu=
rrentValue&quot;}</font></p>
              </blockquote>
              <p>Relevant log messages (MQTT debug level 2):</p>
              <blockquote>
                <p><font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    Pending $Upstairs_Landing_Stairs--&gt;set( 3%, ,=C2=A0 =
)
                    cleared</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    unable to process template
                    {{&quot;OFF&quot;ifvalue_json.value=3D=3D0else&quot;ON&=
quot;}}</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    fishing template value out of json with &#39;$value =3D
                    $value_json-&gt;{value}&#39;</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    remote item MQTT to MH Upstairs_Landing_Stairs
                    set(95%, &#39;&#39;)</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    remote item $Upstairs_Landing_Stairs received
                    message <a>R:0</a> <a>T:app/zwave-js-ui/Upstairs_Landin=
g/Stairs/switch_multilevel/endpoint_0/currentValue</a>=C2=A0
M:{&quot;time&quot;:1771026899727,&quot;value&quot;:95,&quot;nodeName&quot;=
:&quot;Stairs&quot;,&quot;nodeLocation&quot;:&quot;Upstairs_Landing&quot;}<=
/font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    unable to process template
                    {{&quot;OFF&quot;ifvalue_json.value=3D=3D0else&quot;ON&=
quot;}}</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    fishing template value out of json with &#39;$value =3D
                    $value_json-&gt;{value}&#39;</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    remote item MQTT to MH Upstairs_Landing_Stairs
                    set(95%, &#39;mqtt&#39;)</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    mqttserver Rcv&#39;d: <a>R:0</a>
                    <a>T:&#39;app/zwave-js-ui/Upstairs_Landing/Stairs/switc=
h_multilevel/endpoint_0/duration</a>&#39;
M:&#39;{&quot;time&quot;:1771026899728,&quot;value&quot;:{&quot;value&quot;=
:0,&quot;unit&quot;:&quot;seconds&quot;},&quot;nodeName&quot;:&quot;Stairs&=
quot;,&quot;nodeLocation&quot;:&quot;Upstairs_Landing&quot;}&#39;</font><br=
>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    UNHANDLED MESSAGE
app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/durati=
on
                    --
{&quot;time&quot;:1771026899728,&quot;value&quot;:{&quot;value&quot;:0,&quo=
t;unit&quot;:&quot;seconds&quot;},&quot;nodeName&quot;:&quot;Stairs&quot;,&=
quot;nodeLocation&quot;:&quot;Upstairs_Landing&quot;}</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    mqttserver Rcv&#39;d: <a>R:0</a>
                    <a>T:&#39;app/zwave-js-ui/Upstairs_Landing/Stairs/switc=
h_multilevel/endpoint_0/targetValue</a>&#39;
M:&#39;{&quot;time&quot;:1771026899728,&quot;value&quot;:95,&quot;nodeName&=
quot;:&quot;Stairs&quot;,&quot;nodeLocation&quot;:&quot;Upstairs_Landing&qu=
ot;}&#39;</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    UNHANDLED MESSAGE
app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/target=
Value
                    --
{&quot;time&quot;:1771026899728,&quot;value&quot;:95,&quot;nodeName&quot;:&=
quot;Stairs&quot;,&quot;nodeLocation&quot;:&quot;Upstairs_Landing&quot;}</f=
ont><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    mqttserver Rcv&#39;d: <a>R:0</a>
                    <a>T:&#39;app/zwave-js-ui/Upstairs_Landing/Stairs/switc=
h_multilevel/endpoint_0/currentValue</a>&#39;
M:&#39;{&quot;time&quot;:1771026899858,&quot;value&quot;:95,&quot;nodeName&=
quot;:&quot;Stairs&quot;,&quot;nodeLocation&quot;:&quot;Upstairs_Landing&qu=
ot;}&#39;</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    remote item $Upstairs_Landing_Stairs received
                    message <a>R:0</a> <a>T:app/zwave-js-ui/Upstairs_Landin=
g/Stairs/switch_multilevel/endpoint_0/currentValue</a>=C2=A0
M:{&quot;time&quot;:1771026899858,&quot;value&quot;:95,&quot;nodeName&quot;=
:&quot;Stairs&quot;,&quot;nodeLocation&quot;:&quot;Upstairs_Landing&quot;}<=
/font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    unable to process template
                    {{&quot;OFF&quot;ifvalue_json.value=3D=3D0else&quot;ON&=
quot;}}</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    fishing template value out of json with &#39;$value =3D
                    $value_json-&gt;{value}&#39;</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    remote item MQTT to MH Upstairs_Landing_Stairs
                    set(95%, &#39;mqtt&#39;)</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    remote item $Upstairs_Landing_Stairs received
                    message <a>R:0</a> <a>T:app/zwave-js-ui/Upstairs_Landin=
g/Stairs/switch_multilevel/endpoint_0/currentValue</a>=C2=A0
M:{&quot;time&quot;:1771026899858,&quot;value&quot;:95,&quot;nodeName&quot;=
:&quot;Stairs&quot;,&quot;nodeLocation&quot;:&quot;Upstairs_Landing&quot;}<=
/font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    unable to process template
                    {{&quot;OFF&quot;ifvalue_json.value=3D=3D0else&quot;ON&=
quot;}}</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
                    fishing template value out of json with &#39;$value =3D
                    $value_json-&gt;{value}&#39;</font><br>
                  <font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
                    remote item MQTT to MH Upstairs_Landing_Stairs
                    set(95%, &#39;mqtt&#39;)</font></p>
              </blockquote>
              <p><br>
                Clearly it&#39;s not happy, but I haven&#39;t been able to =
chase
                down the root cause. BTW, the &quot;95%&quot; mentioned in =
the
                logs was the switch&#39;s existing brightness level before =
I
                tried to change it.</p>
              <p>Hopefully, this is clearer to you than to me.</p>
              <p>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 -B.</p>
              <p><br>
              </p>
              <p><br>
              </p>
              <div><br>
              </div>
              <div>On 2/13/26 15:08, Dave Neudoerffer wrote:<br>
              </div>
              <blockquote type=3D"cite">
                <div dir=3D"auto">
                  <div>You are correct Brian. HA_Item is about mirroring
                    home assistant entities.=C2=A0 Howard uses HA to host
                    most of his devices and MH for automations using
                    HA_Items. Without a HA service, HA_Item makes no
                    sense.=C2=A0</div>
                  <div dir=3D"auto"><br>
                  </div>
                  <div dir=3D"auto">In implementing mqtt_items, I had a
                    few different sources of mqtt devices, but not a
                    huge variety. No did not have any zwave2mqtt stuff.
                    I have used the zigbee2mqtt stuff.=C2=A0 I am actually =
in
                    the process of enhancing the MH discovery stuff to
                    handle the new HA device discovery methodology.=C2=A0 I=
f
                    there is something I can help with, let me know.=C2=A0<=
/div>
                  <div dir=3D"auto"><br>
                  </div>
                  <div dir=3D"auto">Dave</div>
                </div>
              </blockquote>
              <br>
            </div>
          </blockquote>
        </div>
      </blockquote>
      <p><br>
      </p>
    </blockquote>
    <p><br>
    </p>
  </div>

</blockquote></div>
</blockquote></div>

--000000000000a19ded064b101a79--
--000000000000a19df0064b101a7b
Content-Type: application/octet-stream; name="read_table_A.pl"
Content-Disposition: attachment; filename="read_table_A.pl"
Content-Transfer-Encoding: base64
Content-ID: <f_mlrfc3ag0>
X-Attachment-Id: f_mlrfc3ag0

dXNlIHN0cmljdDsNCg0KI3VzZSB3YXJuaW5nczsNCg0KIyBGb3JtYXQgPSBBDQojDQojIFRoaXMg
aXMgQmlsbCBTb2JlbCdzIChic29iZWxAdmlwbWFpbC5jb20pIHRhYmxlIGRlZmluaXRpb24NCiMN
CiMgVHlwZSAgICAgICAgIEFkZHJlc3MvSW5mbyAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHcm91cHMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE90aGVyIEluZm8NCiMNCiNYMTBJLCAgICAgICAgICAgSjEsICAgICAgICAgICAg
ICAgICAgICAgT3V0c2lkZV9Gcm9udF9MaWdodF9Db2FjaGVzLCAgICAgICAgICAgIE91dHNpZGV8
RnJvbnR8TGlnaHR8TmlnaHRMaWdodGluZw0KIw0KIyBTZWUgbWgvY29kZS90ZXN0L3Rlc3QubWh0
IGZvciBhbiBleGFtcGxlLg0KIw0KIyBUaGUgbW9yZSBnZW5lcmFsaXplZCBmb3JtYXQgaXMgIlRZ
UEUsIFBBUk0xLCBQQVJNMiwgLi4uIi4gVGhlcmUgYXJlIGxvdHMNCiMgb2YgdHlwZXMgaGFyZGNv
ZGVkIGJlbG93LiBIb3dldmVyLCByZWFkX3RhYmxlX0EgaXMgYWxzbyBub3cgZXh0ZW5zaWJsZSwg
c28NCiMgd2UgZG9uJ3QgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGV2ZXJ5IG5ldyByZWNvcmQgdHlw
ZS4gSW5zdGVhZCwganVzdCBjcmVhdGUNCiMgYSAucG0gbW9kdWxlIGluIGFuIGFjY2Vzc2libGUg
bGlicmFyeSB0aGF0IG1hdGNoZXMgdGhlIGxvd2VyY2FzZSBvZiB0aGUNCiMgIlRZUEUiIGZpZWxk
IChlLmcuICJ0eXBlLnBtIikgdGhhdCBoYXMgYSAibmV3IiBtZXRob2QuIHJlYWRfdGFibGVfQSB3
aWxsIA0KIyBsb2FkIHRoZSBtb2R1bGUgYW5kIHdyaXRlIHRoZSBjb2RlIHRvIGludm9rZSB0aGUg
bmV3IG1ldGhvZCB3aXRoIHRoZSANCiMgcHJvdmlkZWQgcGFyYW1ldGVycy4gSWYgdGhlIG1vZHVs
ZSBhbHNvIGhhcyBhbiAiaW5pdCIgbWV0aG9kLCBpdCB3aWxsIGJlDQojIGludm9rZWQgYWZ0ZXIg
dGhlICJuZXciIG1ldGhvZCByZXR1cm5zLCBhcyBzb21lIE1IIG9wZXJhdGlvbnMgY2FuJ3QgYmUN
CiMgcGVyZm9ybWVkIHVudGlsICphZnRlciogbmV3IHJldHVybnMgYW5kIGluc3RhbnRpYXRpb24g
Y29tcGxldGVzLiBTZWUgDQojICJsaWIvcmVhZF90YWJsZV9hX3NhbXBsZS5wbSIgZm9yIGFuIGV4
YW1wbGUgbW9kdWxlLg0KDQojcHJpbnRfbG9nICJVc2luZyByZWFkX3RhYmxlX0EucGwiOw0KDQpt
eSAoICVncm91cHMsICVvYmplY3RzLCAlcGFja2FnZXMsICVhZGRyZXNzZXMsICVzY2VuZV9idWls
ZF9jb250cm9sbGVycywgJXNjZW5lX2J1aWxkX3Jlc3BvbmRlcnMgKTsNCg0Kc3ViIHJlYWRfdGFi
bGVfaW5pdF9BIHsNCg0KICAgICMgcmVzZXQga25vd24gZ3JvdXBzDQogICAgJjo6cHJpbnRfbG9n
KCJJbml0aWFsaXplZCByZWFkX3RhYmxlX0EucGwiKTsNCiAgICAlZ3JvdXBzICAgICAgICAgICAg
ICAgICAgPSAoKTsNCiAgICAlb2JqZWN0cyAgICAgICAgICAgICAgICAgPSAoKTsNCiAgICAlcGFj
a2FnZXMgICAgICAgICAgICAgICAgPSAoKTsNCiAgICAlYWRkcmVzc2VzICAgICAgICAgICAgICAg
PSAoKTsNCiAgICAlc2NlbmVfYnVpbGRfY29udHJvbGxlcnMgPSAoKTsNCiAgICAlc2NlbmVfYnVp
bGRfcmVzcG9uZGVycyAgPSAoKTsNCn0NCg0KDQpzdWIgcmVhZF90YWJsZV9BIHsNCiAgICBteSAo
JHJlY29yZCkgPSBAXzsNCiAgICBteSAkcmVjb3JkX3JhdyA9ICRyZWNvcmQ7DQoNCiAgICBpZiAo
ICRyZWNvcmQgPX4gL14jLyBvciAkcmVjb3JkID1+IC9eXHMqJC8gKSB7DQogICAgICAgIHJldHVy
bjsNCiAgICB9DQogICAgJHJlY29yZCA9fiBzL1xzKiMuKiQvLzsNCg0KICAgIG15ICgNCiAgICAg
ICAgJGNvZGUsICAgICAgJGFkZHJlc3MsICAgICRuYW1lLCAgICAgICRvYmplY3QsDQogICAgICAg
ICRncm91cGxpc3QsICRjb21wYXJpc29uLCAkbGltaXQsICAgICBAb3RoZXIsDQogICAgICAgICRv
dGhlciwgICAgICR2Y29tbWFuZCwgICAkb2NjdXBhbmN5LCAkbmV0d29yaywNCiAgICAgICAgJHBh
c3N3b3JkLCAgJGludGVyZmFjZSwgICRhZGRpdGlvbmFsX2NvZGUNCiAgICApOw0KICAgIG15IChA
aXRlbV9pbmZvKSA9IHNwbGl0KCAnXHMqLFxzKicsICRyZWNvcmQgKTsNCiAgICBteSAkdHlwZSA9
IHVjIHNoaWZ0IEBpdGVtX2luZm87DQoNCiAgICAjIC1bIFpXYXZlIF0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgaWYgKCAkdHlw
ZSBlcSAiWldBVkVfTElHSFQiICkgew0KICAgICAgICByZXF1aXJlICdaV2F2ZV9JdGVtcy5wbSc7
DQogICAgICAgIHJlcXVpcmUgJ1pXYXZlX1JaQzBQLnBtJzsNCiAgICAgICAgKCAkYWRkcmVzcywg
JG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVy
ID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICMgUXVvdGUgZGF0
YQ0KICAgICAgICAkb2JqZWN0ID0gIlpXYXZlX0xpZ2h0X0l0ZW0oJyRhZGRyZXNzJywgJG90aGVy
KSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlpXQVZFX0FQUExJQU5DRSIgKSB7DQog
ICAgICAgIHJlcXVpcmUgJ1pXYXZlX0l0ZW1zLnBtJzsNCiAgICAgICAgcmVxdWlyZSAnWldhdmVf
UlpDMFAucG0nOw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVy
ICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIick
XyciIH0gQG90aGVyICk7ICAgICAgICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICAkb2JqZWN0ID0g
IlpXYXZlX0FwcGxpYW5jZV9JdGVtKCckYWRkcmVzcycsICRvdGhlcikiOw0KICAgIH0NCg0KICAg
ICMgLVsgQ2xpcHNhbCBDQnVzIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tDQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQ0JVU19DR0FURSIgKSB7DQogICAg
ICAgIHJlcXVpcmUgQ2xpcHNhbF9DQnVzOw0KICAgICAgICByZXF1aXJlIENsaXBzYWxfQ0J1czo6
Q0dhdGU7DQogICAgICAgICggJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5m
bzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciAp
OyAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJDbGlwc2FsX0NCdXM6
OkNHYXRlKCdDbGlwc2FsX0NCdXNfQ2dhdGUnLCRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAo
ICR0eXBlIGVxICJDQlVTX0dST1VQIiApIHsNCiAgICAgICAgcmVxdWlyZSBDbGlwc2FsX0NCdXM6
Okdyb3VwOw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkg
PSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyci
IH0gQG90aGVyICk7ICAgICAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9
ICJDbGlwc2FsX0NCdXM6Okdyb3VwKCckYWRkcmVzcycsJyRuYW1lJywkb3RoZXIpIjsNCiAgICB9
DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQ0JVU19UUklHR0VSIiApIHsNCiAgICAgICAgcmVxdWly
ZSBDbGlwc2FsX0NCdXM6OlRyaWdnZXJHcm91cDsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUs
ICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9p
biAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICAgIyBRdW90ZSBk
YXRhDQogICAgICAgICRvYmplY3QgPSAiQ2xpcHNhbF9DQnVzOjpUcmlnZ2VyR3JvdXAoJyRhZGRy
ZXNzJywnJG5hbWUnLCRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJDQlVT
X1VOSVQiICkgew0KICAgICAgICByZXF1aXJlIENsaXBzYWxfQ0J1czo6VW5pdDsNCiAgICAgICAg
KCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAg
ICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAg
ICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiQ2xpcHNhbF9DQnVzOjpV
bml0KCckYWRkcmVzcycsJyRuYW1lJywkb3RoZXIpIjsNCiAgICB9DQoNCiAgICAjIC1bIFVQQiBd
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlVQQlBJTSIgKSB7DQoJIzwsVVBCUElNLE5hbWUsTmV0
d29ya0lELFBhc3N3b3JkLEFkZHJlc3M+Iw0KICAgICAgICByZXF1aXJlICdVUEJQSU0ucG0nOw0K
ICAgICAgICAoICRuYW1lLCAkbmV0d29yaywgJHBhc3N3b3JkLCAkYWRkcmVzcywgJGdyb3VwbGlz
dCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICgg
bWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAg
ICAgJG9iamVjdCA9ICJVUEJQSU0oJ1VQQlBJTScsICRuZXR3b3JrLCRwYXNzd29yZCwkYWRkcmVz
cykiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJVUEJEIiApIHsNCgkjPCxVUEJELE5h
bWUsSW50ZXJmYWNlLE5ldHdvcmtJRCxBZGRyZXNzLEdyb3Vwcz4jDQogICAgICAgIHJlcXVpcmUg
J1VQQl9EZXZpY2UucG0nOw0KICAgICAgICAoICRuYW1lLCAkb2JqZWN0LCAkbmV0d29yaywgJGFk
ZHJlc3MsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVy
ID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICAgIyBR
dW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiVVBCX0RldmljZShcJCRvYmplY3QsICRuZXR3
b3JrLCRhZGRyZXNzKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlVQQkwiICkgew0K
CSM8LFVQQkwsTmFtZSxJbnRlcmZhY2UsTmV0d29ya0lELEFkZHJlc3MsR3JvdXBzPiMNCiAgICAg
ICAgcmVxdWlyZSAnVVBCX0xpbmsucG0nOw0KICAgICAgICAoICRuYW1lLCAkb2JqZWN0LCAkbmV0
d29yaywgJGFkZHJlc3MsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAg
ICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAg
ICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiVVBCX0xpbmsoXCQkb2JqZWN0
LCAkbmV0d29yaywkYWRkcmVzcykiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJVUEJS
QUlOOCIgKSB7DQogICAgICAgIHJlcXVpcmUgJ1VQQl9SYWluOC5wbSc7DQogICAgICAgICggJG5h
bWUsICRvYmplY3QsICRuZXR3b3JrLCAkYWRkcmVzcywgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBA
aXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0g
QG90aGVyICk7ICAgICAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJV
UEJfUmFpbjgoXCQkb2JqZWN0LCAkbmV0d29yaywkYWRkcmVzcykiOw0KICAgIH0NCiAgICBlbHNp
ZiAoICR0eXBlIGVxICJVUEJUIiApIHsNCiAgICAgICAgcmVxdWlyZSAnVVBCX1RoZXJtb3N0YXQu
cG0nOw0KICAgICAgICAoICRuYW1lLCAkb2JqZWN0LCAkbmV0d29yaywgJGFkZHJlc3MsICRncm91
cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAn
LCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICAgIyBRdW90ZSBkYXRhDQog
ICAgICAgICRvYmplY3QgPSAiVVBCX1RoZXJtb3N0YXQoXCQkb2JqZWN0LCAkbmV0d29yaywkYWRk
cmVzcykiOw0KICAgIH0NCg0KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIGVsc2lmICggJHR5cGUg
ZXEgIklOU1RFT05fUExNIiApIHsNCgkjPCxJTlNURU9OX1BMTSxOYW1lPiMNCiAgICAgICAgcmVx
dWlyZSBJbnN0ZW9uX1BMTTsNCiAgICAgICAgKCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkg
PSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyci
IH0gQG90aGVyICk7ICAgICAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9
ICJJbnN0ZW9uX1BMTSgnSW5zdGVvbl9QTE0nLCRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAo
ICR0eXBlIGVxICJJTlNURU9OX0xBTVBMSU5DIiApIHsNCgkjPCxJTlNURU9OX0xBTVBMSU5DLEFk
ZHJlc3MsTmFtZSxHcm91cHM+Iw0KICAgICAgICByZXF1aXJlIEluc3Rlb246OkxpZ2h0aW5nOw0K
ICAgICAgICBpZiAoDQogICAgICAgICAgICB2YWxpZGF0ZV9kZWYoDQogICAgICAgICAgICAgICAg
JHR5cGUsIDIsIFsgJ2luc3Rlb25fYWRkcmVzcycsICduYW1lJyBdLCBcQGl0ZW1faW5mbw0KICAg
ICAgICAgICAgKQ0KICAgICAgICAgICkNCiAgICAgICAgew0KICAgICAgICAgICAgKCAkYWRkcmVz
cywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgICAg
ICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAg
IyBRdW90ZSBkYXRhDQogICAgICAgICAgICAkb2JqZWN0ID0gIkluc3Rlb246OkxhbXBMaW5jKFwn
JGFkZHJlc3NcJywkb3RoZXIpIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBl
IGVxICJJTlNURU9OX0JVTEJMSU5DIiApIHsNCgkjPCxJTlNURU9OX0JVTEJMSU5DLEFkZHJlc3Ms
TmFtZSxHcm91cHM+Iw0KICAgICAgICByZXF1aXJlIEluc3Rlb246OkxpZ2h0aW5nOw0KICAgICAg
ICBpZiAoDQogICAgICAgICAgICB2YWxpZGF0ZV9kZWYoDQogICAgICAgICAgICAgICAgJHR5cGUs
IDIsIFsgJ2luc3Rlb25fYWRkcmVzcycsICduYW1lJyBdLCBcQGl0ZW1faW5mbw0KICAgICAgICAg
ICAgKQ0KICAgICAgICAgICkNCiAgICAgICAgew0KICAgICAgICAgICAgKCAkYWRkcmVzcywgJG5h
bWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgICAgICRvdGhl
ciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICMgUXVvdGUg
ZGF0YQ0KICAgICAgICAgICAgJG9iamVjdCA9ICJJbnN0ZW9uOjpCdWxiTGluYyhcJyRhZGRyZXNz
XCcsJG90aGVyKSI7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiSU5T
VEVPTl9BUFBMSUFOQ0VMSU5DIiApIHsNCgkjPCxJTlNURU9OX0FQUExJQU5DRUxJTkMsQWRkcmVz
cyxOYW1lLEdyb3Vwcz4jDQogICAgICAgIHJlcXVpcmUgSW5zdGVvbjo6TGlnaHRpbmc7DQogICAg
ICAgIGlmICgNCiAgICAgICAgICAgIHZhbGlkYXRlX2RlZigNCiAgICAgICAgICAgICAgICAkdHlw
ZSwgMiwgWyAnaW5zdGVvbl9hZGRyZXNzJywgJ25hbWUnIF0sIFxAaXRlbV9pbmZvDQogICAgICAg
ICAgICApDQogICAgICAgICAgKQ0KICAgICAgICB7DQogICAgICAgICAgICAoICRhZGRyZXNzLCAk
bmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAgICAgJG90
aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAjIFF1
b3RlIGRhdGENCiAgICAgICAgICAgICRvYmplY3QgPSAiSW5zdGVvbjo6QXBwbGlhbmNlTGluYyhc
JyRhZGRyZXNzXCcsJG90aGVyKSI7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAkdHlw
ZSBlcSAiSU5TVEVPTl9TV0lUQ0hMSU5DIiApIHsNCgkjPCxJTlNURU9OX1NXSVRDSExJTkMsQWRk
cmVzcyxOYW1lLEdyb3Vwcz4jDQogICAgICAgIHJlcXVpcmUgSW5zdGVvbjo6TGlnaHRpbmc7DQog
ICAgICAgIGlmICgNCiAgICAgICAgICAgIHZhbGlkYXRlX2RlZigNCiAgICAgICAgICAgICAgICAk
dHlwZSwgMiwgWyAnaW5zdGVvbl9hZGRyZXNzJywgJ25hbWUnIF0sIFxAaXRlbV9pbmZvDQogICAg
ICAgICAgICApDQogICAgICAgICAgKQ0KICAgICAgICB7DQogICAgICAgICAgICAoICRhZGRyZXNz
LCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAgICAg
JG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAj
IFF1b3RlIGRhdGENCiAgICAgICAgICAgICRvYmplY3QgPSAiSW5zdGVvbjo6U3dpdGNoTGluYyhc
JyRhZGRyZXNzXCcsJG90aGVyKSI7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAkdHlw
ZSBlcSAiSU5TVEVPTl9TV0lUQ0hMSU5DUkVMQVkiICkgew0KCSM8LElOU1RFT05fU1dJVENITElO
Q1JFTEFZLEFkZHJlc3MsTmFtZSxHcm91cHM+Iw0KICAgICAgICByZXF1aXJlIEluc3Rlb246Okxp
Z2h0aW5nOw0KICAgICAgICBpZiAoDQogICAgICAgICAgICB2YWxpZGF0ZV9kZWYoDQogICAgICAg
ICAgICAgICAgJHR5cGUsIDIsIFsgJ2luc3Rlb25fYWRkcmVzcycsICduYW1lJyBdLCBcQGl0ZW1f
aW5mbw0KICAgICAgICAgICAgKQ0KICAgICAgICAgICkNCiAgICAgICAgew0KICAgICAgICAgICAg
KCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAg
ICAgICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsg
ICAgIyBRdW90ZSBkYXRhDQogICAgICAgICAgICAkb2JqZWN0ID0gIkluc3Rlb246OlN3aXRjaExp
bmNSZWxheShcJyRhZGRyZXNzXCcsJG90aGVyKSI7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxz
aWYgKCAkdHlwZSBlcSAiSU5TVEVPTl9LRVlQQURMSU5DIiApIHsNCgkjPCxJTlNURU9OX0tFWVBB
RExJTkMsQWRkcmVzcyxOYW1lLEdyb3Vwcz4jDQogICAgICAgIHJlcXVpcmUgSW5zdGVvbjo6TGln
aHRpbmc7DQogICAgICAgIGlmICgNCiAgICAgICAgICAgIHZhbGlkYXRlX2RlZigNCiAgICAgICAg
ICAgICAgICAkdHlwZSwgMiwNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAg
IHFyL15bWzp4ZGlnaXQ6XV17Mn1cLltbOnhkaWdpdDpdXXsyfVwuW1s6eGRpZ2l0Ol1dezJ9Oltb
OnhkaWdpdDpdXXsyfSQvLA0KICAgICAgICAgICAgICAgICAgICAnbmFtZScNCiAgICAgICAgICAg
ICAgICBdLA0KICAgICAgICAgICAgICAgIFxAaXRlbV9pbmZvDQogICAgICAgICAgICApDQogICAg
ICAgICAgKQ0KICAgICAgICB7DQogICAgICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3Vw
bGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAgICAgJG90aGVyID0gam9pbiAn
LCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAjIFF1b3RlIGRhdGENCiAg
ICAgICAgICAgICRvYmplY3QgPSAiSW5zdGVvbjo6S2V5UGFkTGluYyhcJyRhZGRyZXNzXCcsICRv
dGhlcikiOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIklOU1RFT05f
S0VZUEFETElOQ1JFTEFZIiApIHsNCgkjPCxJTlNURU9OX0tFWVBBRExJTkNSRUxBWSxBZGRyZXNz
LE5hbWUsR3JvdXBzPiMNCiAgICAgICAgcmVxdWlyZSBJbnN0ZW9uOjpMaWdodGluZzsNCiAgICAg
ICAgaWYgKA0KICAgICAgICAgICAgdmFsaWRhdGVfZGVmKA0KICAgICAgICAgICAgICAgICR0eXBl
LCAyLA0KICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgcXIvXltbOnhkaWdp
dDpdXXsyfVwuW1s6eGRpZ2l0Ol1dezJ9XC5bWzp4ZGlnaXQ6XV17Mn06W1s6eGRpZ2l0Ol1dezJ9
JC8sDQogICAgICAgICAgICAgICAgICAgICduYW1lJw0KICAgICAgICAgICAgICAgIF0sDQogICAg
ICAgICAgICAgICAgXEBpdGVtX2luZm8NCiAgICAgICAgICAgICkNCiAgICAgICAgICApDQogICAg
ICAgIHsNCiAgICAgICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIg
KSA9IEBpdGVtX2luZm87DQogICAgICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsg
IickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICAgICAgJG9iamVjdCA9
ICJJbnN0ZW9uOjpLZXlQYWRMaW5jUmVsYXkoXCckYWRkcmVzc1wnLCAkb3RoZXIpIjsNCiAgICAg
ICAgfQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJJTlNURU9OX1JFTU9URUxJTkMiICkg
ew0KCSM8LElOU1RFT05fUkVNT1RFTElOQyxBZGRyZXNzLE5hbWUsR3JvdXBzPiMNCiAgICAgICAg
cmVxdWlyZSBJbnN0ZW9uOjpDb250cm9sbGVyOw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwg
JGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2lu
ICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICAgICAgICAjIFF1b3RlIGRhdGEN
CiAgICAgICAgJG9iamVjdCA9ICJJbnN0ZW9uOjpSZW1vdGVMaW5jKFwnJGFkZHJlc3NcJywgJG90
aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIklOU1RFT05fTU9USU9OU0VOU09S
IiApIHsNCgkjPCxJTlNURU9OX01PVElPTlNFTlNPUixBZGRyZXNzLE5hbWUsR3JvdXBzPiMNCiAg
ICAgICAgcmVxdWlyZSBJbnN0ZW9uOjpTZWN1cml0eTsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5h
bWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0g
am9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICAjIFF1b3Rl
IGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJJbnN0ZW9uOjpNb3Rpb25TZW5zb3IoXCckYWRkcmVz
c1wnLCAkb3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiSU5TVEVPTl9UUklH
R0VSTElOQyIgKSB7DQoJIzwsSU5TVEVPTl9UUklHR0VSTElOQyxBZGRyZXNzLE5hbWUsR3JvdXBz
PiMNCiAgICAgICAgcmVxdWlyZSBJbnN0ZW9uOjpTZWN1cml0eTsNCiAgICAgICAgKCAkYWRkcmVz
cywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90
aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICAj
IFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJJbnN0ZW9uOjpUcmlnZ2VyTGluYyhcJyRh
ZGRyZXNzXCcsICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJJTlNURU9O
X0lPTElOQyIgKSB7DQoJIzwsSU5TVEVPTl9JT0xJTkMsQWRkcmVzcyxOYW1lLEdyb3Vwcz4jDQog
ICAgICAgIHJlcXVpcmUgSW5zdGVvbjo6SU9MaW5jOw0KICAgICAgICBpZiAoDQogICAgICAgICAg
ICB2YWxpZGF0ZV9kZWYoDQogICAgICAgICAgICAgICAgJHR5cGUsIDIsIFsgJ2luc3Rlb25fYWRk
cmVzcycsICduYW1lJyBdLCBcQGl0ZW1faW5mbw0KICAgICAgICAgICAgKQ0KICAgICAgICAgICkN
CiAgICAgICAgew0KICAgICAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBv
dGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBt
YXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgICAg
ICRvYmplY3QgPSAiSW5zdGVvbjo6SU9MaW5jKFwnJGFkZHJlc3NcJywgJG90aGVyKSI7DQogICAg
ICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiSU5TVEVPTl9FWklPOFNBIiApIHsN
CgkjPCxJTlNURU9OX0VaSU84U0EsQWRkcmVzcyxOYW1lLEdyb3Vwcz4jDQogICAgICAgIHJlcXVp
cmUgSW5zdGVvbjo6RVpJTzhTQTsNCiAgICAgICAgaWYgKA0KICAgICAgICAgICAgdmFsaWRhdGVf
ZGVmKA0KICAgICAgICAgICAgICAgICR0eXBlLCAyLA0KICAgICAgICAgICAgICAgIFsNCiAgICAg
ICAgICAgICAgICAgICAgcXIvXltbOnhkaWdpdDpdXXsyfVwuW1s6eGRpZ2l0Ol1dezJ9XC5bWzp4
ZGlnaXQ6XV17Mn06W1s6eGRpZ2l0Ol1dezJ9JC8sDQogICAgICAgICAgICAgICAgICAgICduYW1l
Jw0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgXEBpdGVtX2luZm8NCiAgICAg
ICAgICAgICkNCiAgICAgICAgICAgKQ0KICAgICAgICB7DQogICAgICAgICAgICAoJGFkZHJlc3Ms
ICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIpID0gQGl0ZW1faW5mbzsNCiAgICAgICAgICAgICRv
dGhlciA9IGpvaW4gJywgJywgKG1hcCB7IickXycifSBAb3RoZXIpOyAjIFF1b3RlIGRhdGENCiAg
ICAgICAgICAgICRvYmplY3QgPSAiSW5zdGVvbjo6RVpJTzhTQShcJyRhZGRyZXNzXCcsICRvdGhl
cikiOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIklOU1RFT05fRVpJ
TzhTQV9SRUxBWSIgKSB7DQoJIzwsSU5TVEVPTl9FWklPOFNBX1JFTEFZLEFkZHJlc3MsTmFtZSxH
cm91cHM+Iw0KICAgICAgICByZXF1aXJlIEluc3Rlb246OkVaSU84U0E7DQogICAgICAgICgkYWRk
cmVzcywgJG9iamVjdCwgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlcikgPSBAaXRlbV9pbmZvOw0K
ICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsIChtYXAgeyInJF8nIn0gQG90aGVyKTsgIyBRdW90
ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiSW5zdGVvbjo6RVpJTzhTQV9yZWxheSgkYWRkcmVz
cywgJG9iamVjdCwgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIklOU1RF
T05fRVpJTzhTQV9JTlBVVCIgKSB7DQoJIzwsSU5TVEVPTl9FWklPOFNBX0lOUFVULEFkZHJlc3Ms
TmFtZSxHcm91cHM+Iw0KICAgICAgICByZXF1aXJlIEluc3Rlb246OkxpZ2h0aW5nOw0KICAgICAg
ICBpZiAoDQogICAgICAgICAgICB2YWxpZGF0ZV9kZWYoDQogICAgICAgICAgICAgICAgJHR5cGUs
IDIsDQogICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICBxci9eW1s6eGRpZ2l0
Ol1dezJ9XC5bWzp4ZGlnaXQ6XV17Mn1cLltbOnhkaWdpdDpdXXsyfTpbWzp4ZGlnaXQ6XV17Mn0k
LywNCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnDQogICAgICAgICAgICAgICAgXSwNCiAgICAg
ICAgICAgICAgICBcQGl0ZW1faW5mbw0KICAgICAgICAgICAgKQ0KICAgICAgICAgICApDQogICAg
ICAgIHsNCiAgICAgICAgICAgICgkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlcikg
PSBAaXRlbV9pbmZvOw0KICAgICAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAobWFwIHsiJyRf
JyJ9IEBvdGhlcik7ICMgUXVvdGUgZGF0YQ0KICAgICAgICAgICAgJG9iamVjdCA9ICJJbnN0ZW9u
OjpTd2l0Y2hMaW5jUmVsYXkoXCckYWRkcmVzc1wnLCRvdGhlcikiOw0KICAgICAgICB9DQogICAg
fQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIklOU1RFT05fRkFOTElOQyIgKSB7DQoJIzwsSU5TVEVP
Tl9GQU5MSU5DLEFkZHJlc3MsTmFtZSxHcm91cHM+Iw0KICAgICAgICByZXF1aXJlIEluc3Rlb246
OkxpZ2h0aW5nOw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVy
ICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIick
XyciIH0gQG90aGVyICk7ICAgICAgICAgICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICAkb2JqZWN0
ID0gIkluc3Rlb246OkZhbkxpbmMoXCckYWRkcmVzc1wnLCAkb3RoZXIpIjsNCiAgICB9DQogICAg
ZWxzaWYgKCAkdHlwZSBlcSAiSU5TVEVPTl9PVVRMRVRMSU5DIiApIHsNCgkjPCxJTlNURU9OX09V
VExFVExJTkMsQWRkcmVzcyxOYW1lLEdyb3Vwcz4jDQogICAgICAgIHJlcXVpcmUgSW5zdGVvbjo6
TGlnaHRpbmc7DQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIg
KSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRf
JyIgfSBAb3RoZXIgKTsgICAgICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3Qg
PSAiSW5zdGVvbjo6T3V0bGV0TGluYyhcJyRhZGRyZXNzXCcsICRvdGhlcikiOw0KICAgIH0NCiAg
ICBlbHNpZiAoICR0eXBlIGVxICJJTlNURU9OX0lDT05UUk9MTEVSIiApIHsNCgkjPCxTQ0VORV9N
RU1CRVIsTWVtYmVyTmFtZSxMaW5rTmFtZSxPbkxldmVsLFJhbXBSYXRlPiMNCiAgICAgICAgcmVx
dWlyZSBJbnN0ZW9uOjpCYXNlSW5zdGVvbjsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRn
cm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAn
LCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICAjIFF1b3RlIGRhdGEN
CiAgICAgICAgbXkgKCAkZGV2aWNlaWQsICRncm91cGlkICkgPSAkYWRkcmVzcyA9fiAvKFxTKyk6
KFxTKykvOw0KICAgICAgICBpZiAoJGdyb3VwaWQpIHsNCiAgICAgICAgICAgICRvYmplY3QgPQ0K
ICAgICAgICAgICAgICAiSW5zdGVvbjo6SW50ZXJmYWNlQ29udHJvbGxlcihcJzAwLjAwLjAwOiRn
cm91cGlkXCcsICRvdGhlcikiOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAg
ICAgJG9iamVjdCA9DQogICAgICAgICAgICAgICJJbnN0ZW9uOjpJbnRlcmZhY2VDb250cm9sbGVy
KFwnMDAuMDAuMDA6JGFkZHJlc3NcJywgJG90aGVyKSI7DQogICAgICAgIH0NCiAgICB9DQogICAg
ZWxzaWYgKCAkdHlwZSBlcSAnSVBMVCcgb3IgJHR5cGUgZXEgJ0lOU1RFT05fVEhFUk1PU1RBVCcg
KSB7DQoJIzwsSU5TVEVPTl9USEVSTU9TVEFULEFkZHJlc3MsTmFtZSxHcm91cHM+Iw0KICAgICAg
ICByZXF1aXJlIEluc3Rlb246OlRoZXJtb3N0YXQ7DQogICAgICAgICggJGFkZHJlc3MsICRuYW1l
LCAkZ3JvdXBsaXN0LCAkb2JqZWN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRv
dGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAgICMg
UXVvdGUgZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIkluc3Rlb246OlRoZXJtb3N0YXQoXCckYWRk
cmVzc1wnLCAkb3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiSU5TVEVPTl9J
UlJJR0FUSU9OIiApIHsNCgkjPCxJTlNURU9OX0lSUklHQVRJT04sQWRkcmVzcyxOYW1lLEdyb3Vw
cz4jDQogICAgICAgIHJlcXVpcmUgSW5zdGVvbjo6SXJyaWdhdGlvbjsNCiAgICAgICAgKCAkYWRk
cmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAg
JG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAg
IyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiSW5zdGVvbjo6SXJyaWdhdGlvbihcJyRh
ZGRyZXNzXCcsICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJJTlNURU9O
X1NZTkNIUk9MSU5DIiApIHsNCgkjPCxJTlNURU9OX1NZTkNIUk9MSU5DLEFkZHJlc3MsTmFtZSxH
cm91cHM+Iw0KICAgICAgICByZXF1aXJlIEluc3Rlb246OkVuZXJneTsNCiAgICAgICAgKCAkYWRk
cmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAg
JG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAg
ICMgUXVvdGUgZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIkluc3Rlb246OlN5bmNocm9MaW5jKFwn
JGFkZHJlc3NcJywgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIklOU1RF
T05fSU1FVEVSIiApIHsNCgkjPCxJTlNURU9OX0lNRVRFUixBZGRyZXNzLE5hbWUsR3JvdXBzPiMN
CiAgICAgICAgcmVxdWlyZSBJbnN0ZW9uOjpFbmVyZ3k7DQogICAgICAgICggJGFkZHJlc3MsICRu
YW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9
IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAgICAjIFF1b3Rl
IGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJJbnN0ZW9uOjppTWV0ZXIoXCckYWRkcmVzc1wnLCAk
b3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiSU5TVEVPTl9NSUNST1NXSVRD
SCIgKSB7DQoJIzwsSU5TVEVPTl9NSUNST1NXSVRDSCxBZGRyZXNzLE5hbWUsR3JvdXBzPiMNCiAg
ICAgICAgcmVxdWlyZSBJbnN0ZW9uOjpMaWdodGluZzsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5h
bWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0g
am9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICMgUXVvdGUg
ZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIkluc3Rlb246Ok1pY3JvU3dpdGNoKFwnJGFkZHJlc3Nc
JywgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIklOU1RFT05fTUlDUk9T
V0lUQ0hSRUxBWSIgKSB7DQoJIzwsSU5TVEVPTl9NSUNST1NXSVRDSFJFTEFZLEFkZHJlc3MsTmFt
ZSxHcm91cHM+Iw0KICAgICAgICByZXF1aXJlIEluc3Rlb246OkxpZ2h0aW5nOw0KICAgICAgICAo
ICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAg
ICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICAg
ICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJJbnN0ZW9uOjpNaWNyb1N3
aXRjaFJlbGF5KFwnJGFkZHJlc3NcJywgJG90aGVyKSI7DQogICAgfQ0KDQogICAgIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tDQogICAgZWxzaWYgKCAkdHlwZSBlcSAnRlJPRycgKSB7DQoJIzxGcm9nZ3kgUml0YSAo
RlJPRyksRlJPRyxBZGRyZXNzLE5hbWUsR3JvdXBzLE9wdGlvbnM+Iw0KICAgICAgICByZXF1aXJl
ICdGcm9nZ3lSaXRhLnBtJzsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3Qs
IEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1h
cCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAg
ICRvYmplY3QgPSAiRnJvZ2d5Uml0YSgnJGFkZHJlc3MnLCAkb3RoZXIpIjsNCiAgICB9DQogICAg
ZWxzaWYgKCAkdHlwZSBlcSAiWDEwQSIgKSB7DQoJIzxYMTAgQXBwbGlhbmNlIChYMTBBKSxYMTBB
LEFkZHJlc3MsTmFtZSxHcm91cHMsSW50ZXJmYWNlPiMNCiAgICAgICAgaWYgKCB2YWxpZGF0ZV9k
ZWYoICR0eXBlLCAyLCBbICd4MTBfYWRkcmVzcycsICduYW1lJyBdLCBcQGl0ZW1faW5mbyApICkg
ew0KICAgICAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0g
QGl0ZW1faW5mbzsNCiAgICAgICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRf
JyIgfSBAb3RoZXIgKTsgICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICAgICAkb2JqZWN0
ID0gIlgxMF9BcHBsaWFuY2UoJyRhZGRyZXNzJywgJG90aGVyKSI7DQogICAgICAgIH0NCiAgICB9
DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiWDEwSSIgKSB7DQoJIzxYMTAgTGlnaHQgKFgxMEkpLFgx
MEksQWRkcmVzcyxOYW1lLEdyb3VwcyxJbnRlcmZhY2UsT3B0aW9ucz4jDQogICAgICAgIGlmICgg
dmFsaWRhdGVfZGVmKCAkdHlwZSwgMiwgWyAneDEwX2FkZHJlc3MnLCAnbmFtZScgXSwgXEBpdGVt
X2luZm8gKSApIHsNCiAgICAgICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBA
b3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICgg
bWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICAgICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICAg
ICAgJG9iamVjdCA9ICJYMTBfSXRlbSgnJGFkZHJlc3MnLCAkb3RoZXIpIjsNCiAgICAgICAgfQ0K
ICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJYMTBUUiIgKSB7DQoJIzxYMTAgVHJhbnNtaXR0
ZXIgKFgxMFRSKSxYMTBUUixBZGRyZXNzLE5hbWUsR3JvdXBzLEludGVyZmFjZSxPcHRpb25zPiMN
CiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1f
aW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhl
ciApOyAgICAgICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiWDEwX1Ry
YW5zbWl0dGVyKCckYWRkcmVzcycsICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBl
IGVxICJYMTBPIiApIHsNCgkjPFgxMCBPdGUgKFgxME8pLFgxME8sQWRkcmVzcyxOYW1lLEdyb3Vw
cyxJbnRlcmZhY2UsT3B0aW9ucz4jDQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBs
aXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywg
KCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAgICAgICMgUXVvdGUgZGF0YQ0KICAg
ICAgICAkb2JqZWN0ID0gIlgxMF9PdGUoJyRhZGRyZXNzJywgJG90aGVyKSI7DQogICAgfQ0KICAg
IGVsc2lmICggJHR5cGUgZXEgIlgxMFNMIiApIHsNCgkjPFgxMCBTd2l0Y2hMaW5jIChYMTBTTCks
WDEwU0wsQWRkcmVzcyxOYW1lLEdyb3VwcyxJbnRlcmZhY2UsT3B0aW9ucz4jDQogICAgICAgIGlm
ICggdmFsaWRhdGVfZGVmKCAkdHlwZSwgMiwgWyAneDEwX2FkZHJlc3MnLCAnbmFtZScgXSwgXEBp
dGVtX2luZm8gKSApIHsNCiAgICAgICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0
LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICAgICAkb3RoZXIgPSBqb2luICcsICcs
ICggbWFwIHsgIickXyciIH0gQG90aGVyICk7DQogICAgICAgICAgICAkb2JqZWN0ID0gIlgxMF9T
d2l0Y2hsaW5jKCckYWRkcmVzcycsICRvdGhlcikiOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVs
c2lmICggJHR5cGUgZXEgIlgxMEFMIiApIHsNCgkjPFgxMCBBcHBsaWFuY2VsaW5jIChYMTBBTCks
WDEwQUwsQWRkcmVzcyxOYW1lLEdyb3VwcyxJbnRlcmZhY2U+Iw0KICAgICAgICBpZiAoIHZhbGlk
YXRlX2RlZiggJHR5cGUsIDIsIFsgJ3gxMF9hZGRyZXNzJywgJ25hbWUnIF0sIFxAaXRlbV9pbmZv
ICkgKSB7DQoNCiAgICAgICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3Ro
ZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFw
IHsgIickXyciIH0gQG90aGVyICk7DQogICAgICAgICAgICAkb2JqZWN0ID0gIlgxMF9BcHBsaWFu
Y2VsaW5jKCckYWRkcmVzcycsICRvdGhlcikiOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lm
ICggJHR5cGUgZXEgIlgxMEtMIiApIHsNCgkjPFgxMCBLZXlwYWRsaW5jIChYMTBLTCksWDEwS0ws
QWRkcmVzcyxOYW1lLEdyb3VwcyxJbnRlcmZhY2UsT3B0aW9ucz4jDQogICAgICAgICggJGFkZHJl
c3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRv
dGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsNCiAgICAgICAgJG9i
amVjdCA9ICJYMTBfS2V5cGFkbGluYygnJGFkZHJlc3MnLCAkb3RoZXIpIjsNCiAgICB9DQogICAg
ZWxzaWYgKCAkdHlwZSBlcSAiWDEwTEwiICkgew0KCSM8WDEwIExhbXBsaW5jIChYMTBMTCksWDEw
TEwsQWRkcmVzcyxOYW1lLEdyb3VwcyxJbnRlcmZhY2UsT3B0aW9ucz4jDQogICAgICAgIGlmICgg
dmFsaWRhdGVfZGVmKCAkdHlwZSwgMiwgWyAneDEwX2FkZHJlc3MnLCAnbmFtZScgXSwgXEBpdGVt
X2luZm8gKSApIHsNCiAgICAgICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBA
b3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICgg
bWFwIHsgIickXyciIH0gQG90aGVyICk7DQogICAgICAgICAgICAkb2JqZWN0ID0gIlgxMF9MYW1w
bGluYygnJGFkZHJlc3MnLCAkb3RoZXIpIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNpZiAo
ICR0eXBlIGVxICJYMTBSTCIgKSB7DQoJIzxYMTAgUmVsYXlsaW5jIChYMTBSTCksWDEwUkwsQWRk
cmVzcyxOYW1lLEdyb3VwcyxJbnRlcmZhY2UsT3B0aW9ucz4jDQogICAgICAgICggJGFkZHJlc3Ms
ICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhl
ciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsNCiAgICAgICAgJG9iamVj
dCA9ICJYMTBfUmVsYXlsaW5jKCckYWRkcmVzcycsICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNp
ZiAoICR0eXBlIGVxICJYMTA2QlVUVE9OIiApIHsNCgkjPFgxMCA2IEJ1dHRvbiBSZW1vdGUgKFgx
MDZCVVRUT04pLFgxMDZCVVRUT04sQWRkcmVzcyxOYW1lPiMNCiAgICAgICAgKCAkYWRkcmVzcywg
JG5hbWUgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvYmplY3QgPSAiWDEwXzZCdXR0b25SZW1v
dGUoJyRhZGRyZXNzJykiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJYMTBHIiApIHsN
CgkjPFgxMCBHYXJhZ2UgRG9vciAoWDEwRyksWDEwRyxBZGRyZXNzLE5hbWUsR3JvdXBzLEludGVy
ZmFjZSxPcHRpb25zPiMNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBv
dGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7
ICInJF8nIiB9IEBvdGhlciApOyAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAi
WDEwX0dhcmFnZV9Eb29yKCckYWRkcmVzcycsICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAo
ICR0eXBlIGVxICJYMTBTIiApIHsNCgkjPFgxMCBJcnJpZ2F0aW9uIChYMTBTKSxYMTBTLEFkZHJl
c3MsTmFtZSxHcm91cHMsSW50ZXJmYWNlLE9wdGlvbnM+Iw0KICAgICAgICAoICRhZGRyZXNzLCAk
bmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIg
PSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICAgICAgICAgICAjIFF1
b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJYMTBfSXJyaWdhdGlvbkNvbnRyb2xsZXIoJyRh
ZGRyZXNzJywgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlgxMFQiICkg
ew0KCSM8WDEwIFJDUyAoWDEwVCksWDEwVCxBZGRyZXNzLE5hbWUsR3JvdXBzLEludGVyZmFjZSxP
cHRpb25zPiMNCiAgICAgICAgcmVxdWlyZSAnUkNTX0l0ZW0ucG0nOw0KICAgICAgICAoICRhZGRy
ZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAk
b3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICAgICAgICAg
ICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJSQ1NfSXRlbSgnJGFkZHJlc3MnLCAk
b3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiWDEwTVMiICkgew0KCSM8WDEw
IE1vdGlvbiBTZW5zb3IgKFgxME1TKSxYMTBNUyxBZGRyZXNzLE5hbWUsR3JvdXBzLFR5cGU+Iw0K
ICAgICAgICBpZiAoIHZhbGlkYXRlX2RlZiggJHR5cGUsIDIsIFsgJ3gxMF9hZGRyZXNzJywgJ25h
bWUnIF0sIFxAaXRlbV9pbmZvICkgKSB7DQogICAgICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwg
JGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAgICAgJG90aGVyID0g
am9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAjIFF1b3RlIGRh
dGENCiAgICAgICAgICAgICRvYmplY3QgPSAiWDEwX1NlbnNvcignJGFkZHJlc3MnLCAnJG5hbWUn
LCAkb3RoZXIpIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJSRiIg
KSB7DQoJIzwsUkYsPiMNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBv
dGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7
ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRv
YmplY3QgPSAiUkZfSXRlbSgnJGFkZHJlc3MnLCAnJG5hbWUnLCAkb3RoZXIpIjsNCiAgICB9DQog
ICAgZWxzaWYgKCAkdHlwZSBlcSAiQ09NUE9PTCIgKSB7DQoJIzwsQ09NUE9PTCw+Iw0KICAgICAg
ICAoICRhZGRyZXNzLCAkbmFtZSwgICAgICAgJGdyb3VwbGlzdCApID0gQGl0ZW1faW5mbzsNCiAg
ICAgICAgKCAkYWRkcmVzcywgJGNvbXBhcmlzb24sICRsaW1pdCApICAgICA9ICRhZGRyZXNzID1+
IC9ccyooXHcrKVxzKihcPHxcPnxcPSkqXHMqKFxkKikvOw0KICAgICAgICAkb2JqZWN0ID0gIkNv
bXBvb2xfSXRlbSgnJGFkZHJlc3MnLCAnJGNvbXBhcmlzb24nLCAnJGxpbWl0JykiDQogICAgICAg
ICAgaWYgJGNvbXBhcmlzb24gbmUgdW5kZWY7DQogICAgICAgICRvYmplY3QgPSAiQ29tcG9vbF9J
dGVtKCckYWRkcmVzcycpIiBpZiAkY29tcGFyaXNvbiBlcSB1bmRlZjsNCiAgICB9DQogICAgZWxz
aWYgKCAkdHlwZSBlcSAiR0VORVJJQyIgKSB7DQoJIzwsR0VORVJJQyxOYW1lLEdyb3Vwcz4jDQog
ICAgICAgICggJG5hbWUsICRncm91cGxpc3QgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvYmpl
Y3QgPSAiR2VuZXJpY19JdGVtIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQ09ERSIg
KSB7DQoJIzwsQ09ERSxDb2RlPiMNCiAgICAgICAgIyBUaGlzIGlzIGZvciBzaW1wbGUgb25lIGxp
bmUgYWRkaXRpb25zIHN1Y2ggYXMgc2V0dGluZyBhbiBhdHRyaWJ1dGUgb3IgYWRkaW5nIGFuIGlt
YWdlLg0KICAgICAgICAoJG9iamVjdCkgPSAiJHJlY29yZF9yYXciID1+IC9DT0RFLFxzKyguKikv
Ow0KICAgICAgICAkY29kZSAgID0gIiRvYmplY3RcbiI7DQogICAgICAgICRvYmplY3QgPSAnJzsN
CiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiTElHSFQiICkgew0KCSM8LExJR0hULD4jDQog
ICAgICAgIHJlcXVpcmUgJ0xpZ2h0X0l0ZW0ucG0nOw0KICAgICAgICAoICRvYmplY3QsICRuYW1l
LCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgIGlmICgkb2JqZWN0
KSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gIkxpZ2h0X0l0ZW0oXCQkb2JqZWN0LCAkb3RoZXIp
IjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRvYmplY3QgPSAiTGln
aHRfSXRlbSgpIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJET09S
IiApIHsNCgkjPCxET09SLD4jDQogICAgICAgIHJlcXVpcmUgJ0Rvb3JfSXRlbS5wbSc7DQogICAg
ICAgICggJG9iamVjdCwgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsN
CiAgICAgICAgJG9iamVjdCA9ICJEb29yX0l0ZW0oXCQkb2JqZWN0LCAkb3RoZXIpIjsNCiAgICB9
DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiTFRTV0lUQ0giICkgew0KCSM8LExUU1dJVENILD4jDQog
ICAgICAgIHJlcXVpcmUgJ0xpZ2h0X1N3aXRjaF9JdGVtLnBtJzsNCiAgICAgICAgKCAkb2JqZWN0
LCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb2Jq
ZWN0ID0gIkxpZ2h0X1N3aXRjaF9JdGVtKFwkJG9iamVjdCwgJG90aGVyKSI7DQogICAgfQ0KICAg
IGVsc2lmICggJHR5cGUgZXEgIk1PVElPTiIgKSB7DQoJIzwsTU9USU9OLD4jDQogICAgICAgIHJl
cXVpcmUgJ01vdGlvbl9JdGVtLnBtJzsNCiAgICAgICAgKCAkb2JqZWN0LCAkbmFtZSwgJGdyb3Vw
bGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb2JqZWN0ID0gIk1vdGlvbl9J
dGVtKFwkJG9iamVjdCwgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlBI
T1RPQ0VMTCIgKSB7DQoJIzwsUEhPVE9DRUxMLD4jDQogICAgICAgIHJlcXVpcmUgJ1Bob3RvY2Vs
bF9JdGVtLnBtJzsNCiAgICAgICAgKCAkb2JqZWN0LCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVy
ICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb2JqZWN0ID0gIlBob3RvY2VsbF9JdGVtKFwkJG9i
amVjdCwgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgJ0lSUklHQVRJT04n
ICkgew0KCSM8LElSUklHQVRJT04sPiMNCiAgICAgICAgcmVxdWlyZSAnSXJyaWdhdGlvbl9JdGVt
LnBtJzsNCiAgICAgICAgKCAkb2JqZWN0LCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBA
aXRlbV9pbmZvOw0KICAgICAgICAkb2JqZWN0ID0gIklycmlnYXRpb25fSXRlbShcJCRvYmplY3Qs
ICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJNT1RJT05fVFJBQ0tFUiIg
KSB7DQoJIzwsTU9USU9OX1RSQUNLRVIsPiMNCiAgICAgICAgcmVxdWlyZSAnTW90aW9uX1RyYWNr
ZXIucG0nOw0KICAgICAgICAoICRvYmplY3QsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9
IEBpdGVtX2luZm87DQogICAgICAgICRvYmplY3QgPSAiTW90aW9uX1RyYWNrZXIoXCQkb2JqZWN0
LCAkb3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiVEVNUCIgKSB7DQoJIzws
VEVNUCw+Iw0KICAgICAgICByZXF1aXJlICdUZW1wZXJhdHVyZV9JdGVtLnBtJzsNCiAgICAgICAg
KCAkb2JqZWN0LCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAg
ICAgICAkb2JqZWN0ID0gIlRlbXBlcmF0dXJlX0l0ZW0oXCQkb2JqZWN0LCAkb3RoZXIpIjsNCiAg
ICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQ0FNRVJBIiApIHsNCgkjPCxDQU1FUkEsPiMNCiAg
ICAgICAgcmVxdWlyZSAnQ2FtZXJhX0l0ZW0ucG0nOw0KICAgICAgICAoICRvYmplY3QsICRuYW1l
LCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvYmplY3QgPSAi
Q2FtZXJhX0l0ZW0oXCQkb2JqZWN0LCAkb3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlw
ZSBlcSAiT0NDVVBBTkNZIiApIHsNCgkjPCxPQ0NVUEFOQ1ksPiMNCiAgICAgICAgcmVxdWlyZSAn
T2NjdXBhbmN5X01vbml0b3IucG0nOw0KICAgICAgICAoICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3Ro
ZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvYmplY3QgPSAiT2NjdXBhbmN5X01vbml0b3Io
ICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJEU0MiICkgew0KCSM8LERT
Qyw+Iw0KICAgICAgICByZXF1aXJlICdkc2MucG0nOw0KICAgICAgICAoJG5hbWUsICRncm91cGxp
c3QsIEBvdGhlcikgPSBAaXRlbV9pbmZvOw0KICAgICAgICAjICRncm91cGxpc3QgdHJhbnNsYXRl
cyB0byAkdHlwZSBpbiB0aGUgbmV3IG9iamVjdCBkZWZpbml0aW9uIGNhbGwNCiAgICAgICAgJG9i
amVjdCA9ICJEU0MoJyRuYW1lJywgJyRncm91cGxpc3QnKSI7DQogICAgfQ0KICAgIGVsc2lmICgg
JHR5cGUgZXEgIkRTQ19QQVJUSVRJT04iICkgew0KCSM8LERTQ19QQVJUSVRJT04sPiMNCiAgICAg
ICAgKCAkbmFtZSwgJG9iamVjdCwgJGFkZHJlc3MsICRvdGhlciwgJGdyb3VwbGlzdCwgQG90aGVy
ICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb2JqZWN0ID0gIkRTQzo6UGFydGl0aW9uKFwkJG9i
amVjdCwgJyRhZGRyZXNzJykiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJEU0NfWk9O
RSIgKSB7DQoJIzwsRFNDX1pPTkUsPiMNCiAgICAgICAgKCAkbmFtZSwgJG9iamVjdCwgJGFkZHJl
c3MsICRvdGhlciwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAk
b2JqZWN0ID0gIkRTQzo6Wm9uZShcJCRvYmplY3QsICckYWRkcmVzcycsICckb3RoZXInKSI7DQog
ICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIk1VU0lDQSIgKSB7DQoJIzwsTVVTSUNBLD4jDQog
ICAgICAgIHJlcXVpcmUgJ011c2ljYS5wbSc7DQogICAgICAgICggJG5hbWUsICRncm91cGxpc3Qs
IEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG9iamVjdCA9ICJNdXNpY2EoJyRuYW1l
JykiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJNVVNJQ0FfWk9ORSIgKSB7DQoJIzws
TVVTSUNBX1pPTkUsPiMNCiAgICAgICAgKCAkbmFtZSwgJG9iamVjdCwgJGFkZHJlc3MsICRvdGhl
ciwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb2JqZWN0ID0g
Ik11c2ljYTo6Wm9uZShcJCRvYmplY3QsICRhZGRyZXNzLCAkb3RoZXIpIjsNCiAgICB9DQogICAg
ZWxzaWYgKCAkdHlwZSBlcSAiTVVTSUNBX1NPVVJDRSIgKSB7DQoJICM8LE1VU0lDQV9TT1VSQ0Us
PiMNCiAgICAgICAgKCAkbmFtZSwgJG9iamVjdCwgJG90aGVyLCAkZ3JvdXBsaXN0LCBAb3RoZXIg
KSA9IEBpdGVtX2luZm87DQogICAgICAgICRvYmplY3QgPSAiTXVzaWNhOjpTb3VyY2UoXCQkb2Jq
ZWN0LCAkb3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiUFJFU0VOQ0UiICkg
ew0KCSM8LFBSRVNFTkNFLE9iamVjdCxOYW1lLEdyb3VwcyxPdGhlcj4jDQogICAgICAgIHJlcXVp
cmUgJ1ByZXNlbmNlX01vbml0b3IucG0nOw0KICAgICAgICAoICRvYmplY3QsICRvY2N1cGFuY3ks
ICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvYmpl
Y3QgPSAiUHJlc2VuY2VfTW9uaXRvcihcJCRvYmplY3QsIFwkJG9jY3VwYW5jeSwkb3RoZXIpIjsN
CiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiR1JPVVAiICkgew0KCSM8LEdST1VQLE5hbWUs
Rmxvb3JQbGFuLEdyb3Vwcz4jDQogICAgICAgICggJG5hbWUsICRncm91cGxpc3QgKSA9IEBpdGVt
X2luZm87DQogICAgICAgICRvYmplY3QgPSAiR3JvdXAiDQogICAgICAgICAgdW5sZXNzICRncm91
cHN7JG5hbWV9OyAgICAjIFNraXAgbmV3IGdyb3VwIGlmIHdlIGFscmVhZHkgZGlkIHRoaXMNCiAg
ICAgICAgJGdyb3Vwc3skbmFtZX17ZW1wdHl9Kys7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUg
ZXEgIlZJUlRVQUxfQVVESU9fUk9VVEVSIiApIHsNCgkjPCxWSVJUVUFMX0FVRElPX1JPVVRFUixO
YW1lLEFkZHJlc3MsT3RoZXIsR3JvdXBzPiMNCiAgICAgICAgcmVxdWlyZSAnVmlydHVhbEF1ZGlv
LnBtJzsNCiAgICAgICAgKCAkbmFtZSwgJGFkZHJlc3MsICRvdGhlciwgJGdyb3VwbGlzdCApID0g
QGl0ZW1faW5mbzsNCiAgICAgICAgJG9iamVjdCA9ICJWaXJ0dWFsQXVkaW86OlJvdXRlcigkYWRk
cmVzcywgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlZJUlRVQUxfQVVE
SU9fU09VUkNFIiApIHsNCgkjPCxWSVJUVUFMX0FVRElPX1NPVVJDRSxOYW1lLE9iamVjdCxPdGhl
cixHcm91cHM+Iw0KICAgICAgICByZXF1aXJlICdWaXJ0dWFsQXVkaW8ucG0nOw0KICAgICAgICAo
ICRuYW1lLCAkb2JqZWN0LCAkb3RoZXIsICRncm91cGxpc3QgKSA9IEBpdGVtX2luZm87DQogICAg
ICAgICRvYmplY3QgPSAiVmlydHVhbEF1ZGlvOjpTb3VyY2UoJyRuYW1lJywgXCQkb2JqZWN0LCAn
JG90aGVyJykiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJNUDNQTEFZRVIiICkgew0K
CSM8LE1QM1BMQVlFUixBZGRyZXNzLE5hbWUsR3JvdXBzPiMNCiAgICAgICAgcmVxdWlyZSAnTXAz
UGxheWVyLnBtJzsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QgKSA9IEBp
dGVtX2luZm87DQogICAgICAgICRvYmplY3QgPSAiTXAzUGxheWVyKCckYWRkcmVzcycpIjsNCiAg
ICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQVVESU9UUk9OIiApIHsNCgkjPCxBVURJT1RST04s
QWRkcmVzcyxOYW1lLEdyb3Vwcz4jDQogICAgICAgIHJlcXVpcmUgJ0F1ZGlvdHJvblBsYXllci5w
bSc7DQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0ICkgPSBAaXRlbV9pbmZv
Ow0KICAgICAgICAkb2JqZWN0ID0gIkF1ZGlvdHJvblBsYXllcignJGFkZHJlc3MnKSI7DQogICAg
fQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIldFQVRIRVIiICkgew0KCSM8LFdFQVRIRVIsQWRkcmVz
cyxOYW1lLEdyb3Vwcz4jDQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0ICkg
PSBAaXRlbV9pbmZvOw0KDQogICAgICAgICMgICAgICAgKCRhZGRyZXNzLCAkY29tcGFyaXNvbiwg
JGxpbWl0KSA9ICRhZGRyZXNzID1+IC9ccyooXHcrKVxzKihcPHxcPnxcPSkqXHMqKFxkKikvOw0K
ICAgICAgICAjICAgICAgICRvYmplY3QgPSAiV2VhdGhlcl9JdGVtKCckYWRkcmVzcycsICckY29t
cGFyaXNvbicsICckbGltaXQnKSIgaWYgJGNvbXBhcmlzb24gbmUgdW5kZWY7DQogICAgICAgICRv
YmplY3QgPSAiV2VhdGhlcl9JdGVtKCckYWRkcmVzcycpIjsNCiAgICB9DQogICAgZWxzaWYgKCAk
dHlwZSBlcSAiU0c0ODVMQ0QiICkgew0KCSM8LFNHNDg1TENELD4jDQogICAgICAgIHJlcXVpcmUg
J1N0YXJnYXRlNDg1LnBtJzsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3Qs
IEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1h
cCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVj
dCA9ICJTdGFyZ2F0ZUxDREtleXBhZCgnJGFkZHJlc3MnLCAkb3RoZXIpIjsNCiAgICB9DQogICAg
ZWxzaWYgKCAkdHlwZSBlcSAiU0c0ODVSQ1NUSFJNIiApIHsNCgkjPCxTRzQ4NVJDU1RIUk0sPiMN
CiAgICAgICAgcmVxdWlyZSAnU3RhcmdhdGU0ODUucG0nOw0KICAgICAgICAoICRhZGRyZXNzLCAk
bmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIg
PSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICAgICAgICAjIFF1b3Rl
IGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJTdGFyZ2F0ZVJDU1RoZXJtb3N0YXQoJyRhZGRyZXNz
JywgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlNUQVJHQVRFRElOIiAp
IHsNCgkjPCxTVEFSR0FURURJTiw+Iw0KICAgICAgICByZXF1aXJlICdTdGFyZ2F0ZS5wbSc7DQog
ICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2lu
Zm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIg
KTsgICAgICAgICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIlN0YXJnYXRlRGln
aXRhbElucHV0KCckYWRkcmVzcycsICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBl
IGVxICJTVEFSR0FURVZBUiIgKSB7DQoJIzwsU1RBUkdBVEVWQVIsPiMNCiAgICAgICAgcmVxdWly
ZSAnU3RhcmdhdGUucG0nOw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwg
QG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFw
IHsgIickXyciIH0gQG90aGVyICk7ICAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9i
amVjdCA9ICJTdGFyZ2F0ZVZhcmlhYmxlKCckYWRkcmVzcycsICRvdGhlcikiOw0KICAgIH0NCiAg
ICBlbHNpZiAoICR0eXBlIGVxICJTVEFSR0FURUZMQUciICkgew0KCSM8LFNUQVJHQVRFRkxBRyw+
Iw0KICAgICAgICByZXF1aXJlICdTdGFyZ2F0ZS5wbSc7DQogICAgICAgICggJGFkZHJlc3MsICRu
YW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9
IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAgICMgUXVvdGUg
ZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIlN0YXJnYXRlRmxhZygnJGFkZHJlc3MnLCAkb3RoZXIp
IjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiU1RBUkdBVEVSRUxBWSIgKSB7DQoJIzws
U1RBUkdBVEVSRUxBWSw+Iw0KICAgICAgICByZXF1aXJlICdTdGFyZ2F0ZS5wbSc7DQogICAgICAg
ICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQog
ICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAg
ICAgICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIlN0YXJnYXRlUmVsYXkoJyRh
ZGRyZXNzJywgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlNUQVJHQVRF
VEhFUk0iICkgew0KCSM8LFNUQVJHQVRFVEhFUk0sPiMNCiAgICAgICAgcmVxdWlyZSAnU3Rhcmdh
dGUucG0nOw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkg
PSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyci
IH0gQG90aGVyICk7ICAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJT
dGFyZ2F0ZVRoZXJtb3N0YXQoJyRhZGRyZXNzJywgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lm
ICggJHR5cGUgZXEgIlNUQVJHQVRFUEhPTkUiICkgew0KCSM8LFNUQVJHQVRFUEhPTkUsPiMNCiAg
ICAgICAgcmVxdWlyZSAnU3RhcmdhdGUucG0nOw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwg
JGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2lu
ICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICAgICAgICAjIFF1b3RlIGRhdGEN
CiAgICAgICAgJG9iamVjdCA9ICJTdGFyZ2F0ZVRlbGVwaG9uZSgnJGFkZHJlc3MnLCAkb3RoZXIp
IjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiU1RBUkdBVEVJUiIgKSB7DQoJIzwsU1RB
UkdBVEVJUiw+Iw0KICAgICAgICByZXF1aXJlICdTdGFyZ2F0ZS5wbSc7DQogICAgICAgICggJGFk
ZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAg
ICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAg
ICMgUXVvdGUgZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIlN0YXJnYXRlSVIoJyRhZGRyZXNzJywg
JG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlNUQVJHQVRFQVNDSUkiICkg
ew0KCSM8LFNUQVJHQVRFQVNDSUksPiMNCiAgICAgICAgcmVxdWlyZSAnU3RhcmdhdGUucG0nOw0K
ICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9p
bmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVy
ICk7ICAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJTdGFyZ2F0ZUFT
Q0lJKCckYWRkcmVzcycsICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJY
QU5URUNIIiApIHsNCgkjPCxYQU5URUNILD4jDQogICAgICAgIHJlcXVpcmUgJ1hhbnRlY2gucG0n
Ow0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRl
bV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90
aGVyICk7ICAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJYYW50ZWNo
X1pvbmUoJyRhZGRyZXNzJywgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEg
IlNFUklBTCIgKSB7DQoJIzwsU0VSSUFMLFN0cmluZyxOYW1lLEdyb3VwcyxTdGF0ZSxQb3J0PiMN
CiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1f
aW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhl
ciApOyAgICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiU2VyaWFsX0l0
ZW0oJyRhZGRyZXNzJywgJG90aGVyKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlZP
SUNFIiApIHsNCgkjPCxWT0lDRSxJdGVtLFBocmFzZT4jDQogICAgICAgICggJG5hbWUsIEBvdGhl
ciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJHZjb21tYW5kID0gam9pbiAnLCcsIEBvdGhlcjsN
CiAgICAgICAgbXkgJGZpeGVkbmFtZSA9ICRuYW1lOw0KICAgICAgICAkZml4ZWRuYW1lID1+IHMv
Xy8gL2c7DQogICAgICAgIGlmICggISggJHZjb21tYW5kID1+IC8uKlxbLiovICkgKSB7DQogICAg
ICAgICAgICAkdmNvbW1hbmQgLj0gIiBbT04sT0ZGXSI7DQogICAgICAgIH0NCiAgICAgICAgJGNv
ZGUgLj0gc3ByaW50ZiAiXG5teSBcJHZfJXNfc3RhdGU7XG4iLCAkbmFtZTsNCiAgICAgICAgJGNv
ZGUgLj0gc3ByaW50ZiAiXCR2XyVzID0gbmV3IFZvaWNlX0NtZChcIiVzXCIpO1xuIiwgJG5hbWUs
ICR2Y29tbWFuZDsNCiAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAiaWYgKFwkdl8lc19zdGF0ZSA9
IHNhaWQgXCR2XyVzKSB7XG4iLCAkbmFtZSwgJG5hbWU7DQogICAgICAgICRjb2RlIC49IHNwcmlu
dGYgIiAgc2V0IFwkJXMgXCR2XyVzX3N0YXRlO1xuIiwgJG5hbWUsICRuYW1lOw0KICAgICAgICAk
Y29kZSAuPSBzcHJpbnRmICIgIHJlc3BvbmQgXCJUdXJuaW5nICVzIFwkdl8lc19zdGF0ZVwiO1xu
IiwNCiAgICAgICAgICAkZml4ZWRuYW1lLCAkbmFtZTsNCiAgICAgICAgJGNvZGUgLj0gc3ByaW50
ZiAifVxuIjsNCiAgICAgICAgcmV0dXJuICRjb2RlOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBl
IGVxICJJQlVUVE9OIiApIHsNCgkjPCxJQlVUVE9OLElELE5hbWUsUG9ydCxDaGFubmVsPiMNCiAg
ICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5m
bzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciAp
OyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJpQnV0dG9uKCckYWRkcmVzcycs
ICRvdGhlcikiOw0KICAgIH0NCg0KICAgICNXQUtFT05MQU4sIE1BQ0FERFJFU1MsIE5hbWUsIEdy
b3VwbGlzdA0KICAgICNXQUtFT05MQU4sIDAwOjA2OjViOjhlOjUyOmI5LCBCaWxsc09mZmljZUNv
bXB1dGVyLCBXYWtlYWJsZUNvbXB1dGVyc3xDb21wdXRlcnN8TW9ybmluZ1dha2V1cERldmljZXMN
CiAgICBlbHNpZiAoICR0eXBlIGVxICJXQUtFT05MQU4iICkgew0KCSM8LFdBS0VPTkxBTixNQUNB
RERSRVNTLE5hbWUsR3JvdXBsaXN0PiMNCiAgICAgICAgcmVxdWlyZSAnV2FrZU9uTGFuLnBtJzsN
CiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1f
aW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhl
ciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJXYWtlT25MYW4oJyRhZGRy
ZXNzJywgJG90aGVyKSI7DQogICAgfQ0KICAgICMjTkVUV09SSywgaXBhZGRyZXNzLCBOYW1lLCBH
cm91cGxpc3QsIHBpbmcgZGVsYXkgKHNlY29uZHMpLCBNQUMgQWRkcmVzcyAob3B0aW9uYWwpDQog
ICAgZWxzaWYgKCAkdHlwZSBlcSAnTkVUV09SSycgKSB7DQoJIzwsV0FLRU9OTEFOLElQLE5hbWUs
R3JvdXBsaXN0LFBpbmdEZWxheSxNQUNBRERSRVNTPiMNCiAgICAgICAgcmVxdWlyZSAnTmV0d29y
a19JdGVtLnBtJzsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhl
ciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICIn
JF8nIiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJOZXR3
b3JrX0l0ZW0oJyRhZGRyZXNzJywgJG90aGVyKSI7DQogICAgfQ0KDQogICAgI1lBQ0NMSUVOVCwg
bWFjaGluZW5hbWUsIE5hbWUsIEdyb3VwbGlzdA0KICAgICNZQUNDTElFTlQsIHRpdGFuLCBUaXRh
bllhY0NsaWVudCwgWWFjQ2xpZW50cw0KICAgIGVsc2lmICggJHR5cGUgZXEgIllBQ0NMSUVOVCIg
KSB7DQoJIzwsWUFDQ0xJRU5ULE1hY2hpbmVOYW1lLE5hbWUsR3JvdXBsaXN0PiMNCiAgICAgICAg
cmVxdWlyZSAnQ0lEX1NlcnZlci5wbSc7DQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3Jv
dXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywg
JywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRv
YmplY3QgPSAiQ0lEX1NlcnZlcl9ZQUMoJyRhZGRyZXNzJywgJG90aGVyKSI7DQogICAgfQ0KICAg
ICMjWk9ORSwgICAgICA0LCAgICAgU3RhaXJ3YXlfbW90aW9uLCAgICAgICAgICAgIEluc2lkZXxI
YWxsfFNlbnNvcnMNCiAgICBlbHNpZiAoICR0eXBlIGVxICJaT05FIiApIHsNCgkjPENhZGR4ICha
T05FKSxaT05FLEFkZHJlc3MsTmFtZSxHcm91cGxpc3QsT3RoZXI+Iw0KICAgICAgICAoICRhZGRy
ZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAk
b3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUg
ZGF0YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gIlNlbnNv
cl9ab25lKCckYWRkcmVzcycsJG90aGVyKSI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQog
ICAgICAgICAgICAkb2JqZWN0ID0gIlNlbnNvcl9ab25lKCckYWRkcmVzcycpIjsNCiAgICAgICAg
fQ0KICAgICAgICBpZiAoICEkcGFja2FnZXN7Y2FkZHh9KysgKSB7ICAgICMgZmlyc3QgdGltZSBm
b3IgdGhpcyBvYmplY3QgdHlwZT8NCiAgICAgICAgICAgICRjb2RlIC49ICJ1c2UgY2FkZHg7XG4i
Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgJ0ZBTkxJR0hUJyApIHsN
CgkjPCxGQU5MSUdIVCw+Iw0KICAgICAgICByZXF1aXJlICdGYW5fQ29udHJvbC5wbSc7DQogICAg
ICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87
DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsg
ICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiRmFuX0xpZ2h0KCckYWRkcmVzcycs
ICRvdGhlcikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICdGQU5NT1RPUicgKSB7DQoJ
IzwsRkFOTU9UT1IsPiMNCiAgICAgICAgcmVxdWlyZSAnRmFuX0NvbnRyb2wucG0nOw0KICAgICAg
ICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0K
ICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAg
ICMgUXVvdGUgZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIkZhbl9Nb3RvcignJGFkZHJlc3MnLCAk
b3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiUEEiICkgew0KCSM8LFBBLD4j
DQogICAgICAgIHJlcXVpcmUgJ1BBb2JqLnBtJzsNCiAgICAgICAgbXkgKCAkcGFfdHlwZSwgJHNl
cmlhbCApOw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgJHNlcmlhbCwg
JHBhX3R5cGUsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJHBhX3R5cGUgPSAnd2Rp
bycgdW5sZXNzICRwYV90eXBlOw0KDQogICAgICAgIGlmICggISRwYWNrYWdlc3tQQW9ian0rKyAp
IHsgICAgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9iamVjdCB0eXBlPw0KICAgICAgICAgICAgJGNv
ZGUgLj0NCiAgICAgICAgICAgICAgIm15ICglcGFfd2VlZGVyX21heF9wb3J0LCVwYV96b25lX3R5
cGVzLCVwYV96b25lX3R5cGVfYnlfem9uZSk7XG4iOw0KICAgICAgICB9DQoNCiAgICAgICAgJGNv
ZGUgLj0NCiAgICAgICAgICBzcHJpbnRmICJcblwkJS0zNXMgPSBuZXcgUEFvYmpfem9uZSgnJXMn
LCclcycsJyVzJywnJXMnLCclcycpO1xuIiwNCiAgICAgICAgICAicGFfJG5hbWUiLCAkYWRkcmVz
cywgJG5hbWUsICRncm91cGxpc3QsICRzZXJpYWwsICRwYV90eXBlOw0KICAgICAgICAkbmFtZSA9
ICJwYV8kbmFtZSI7DQoNCiAgICAgICAgJGdyb3VwbGlzdCA9ICJ8JGdyb3VwbGlzdHxhbGxzcGVh
a2VycyI7DQogICAgICAgICRncm91cGxpc3QgPX4gcy9cfFx8L1x8L2c7DQogICAgICAgICRncm91
cGxpc3QgPX4gcy9cfC9cfHBhXy9nOw0KICAgICAgICAkZ3JvdXBsaXN0ID1+IHMvXlx8Ly87DQog
ICAgICAgICRncm91cGxpc3QgLj0gJ3xoaWRkZW4nOw0KDQogICAgICAgIGlmICggJHBhX3R5cGUg
PX4gL153ZGlvL2kgKSB7DQoNCiAgICAgICAgICAgICMgQUhCIC8gQUxCICBvciBEQkggLyBEQkwN
CiAgICAgICAgICAgICRhZGRyZXNzID1+IHMvXihcUykoXFMpJC8kMUgkMi87ICAgICMgaWYgJHBh
X3R5cGUgZXEgJ3dkaW8nOw0KICAgICAgICAgICAgJGFkZHJlc3MgPSAiRCRhZGRyZXNzIiBpZiAk
cGFfdHlwZSBlcSAnd2Rpb19vbGQnOw0KICAgICAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAiXCQl
LTM1cyA9IG5ldyBTZXJpYWxfSXRlbSgnJXMnLCdvbicsJyVzJyk7XG4iLA0KICAgICAgICAgICAg
ICAkbmFtZSAuICdfb2JqJywgJGFkZHJlc3MsICRzZXJpYWw7DQoNCiAgICAgICAgICAgICRhZGRy
ZXNzID1+IHMvXihcU3sxLDJ9KUgoXFMpJC8kMUwkMi87DQogICAgICAgICAgICAkY29kZSAuPSBz
cHJpbnRmICJcJCUtMzVzIC0+IGFkZCAoJyVzJywnb2ZmJyk7XG4iLCAkbmFtZSAuICdfb2JqJywN
CiAgICAgICAgICAgICAgJGFkZHJlc3M7DQoNCiAgICAgICAgICAgICRvYmplY3QgPSAnJzsNCiAg
ICAgICAgfQ0KICAgICAgICBlbHNpZiAoIGxjICRwYV90eXBlIGVxICdvYmplY3QnICkgew0KICAg
ICAgICAgICAgaWYgKCAkbmFtZSA9fiAvXnBhX3BhXy9pICkgew0KICAgICAgICAgICAgICAgIHBy
aW50DQogICAgICAgICAgICAgICAgICAiXG5PYmplY3QgbmFtZSBcIiRuYW1lXCIgc3RhcnRzIHdp
dGggXCJwYV9cIi4gVGhpcyB3aWxsIGNhdXNlIGNvbmZsaWN0cy4gSWdub3JpbmcgZW50cnkiOw0K
ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgJGNvZGUg
Lj0gc3ByaW50ZiAiXCQlLTM1cyAtPiB0aWVfaXRlbXMoXCQlcywnb2ZmJywnb2ZmJyk7XG4iLA0K
ICAgICAgICAgICAgICAgICAgJG5hbWUsICRhZGRyZXNzOw0KICAgICAgICAgICAgICAgICRjb2Rl
IC49IHNwcmludGYgIlwkJS0zNXMgLT4gdGllX2l0ZW1zKFwkJXMsJ29uJywnb24nKTtcbiIsDQog
ICAgICAgICAgICAgICAgICAkbmFtZSwgJGFkZHJlc3M7DQogICAgICAgICAgICB9DQogICAgICAg
IH0NCiAgICAgICAgZWxzaWYgKCBsYyAkcGFfdHlwZSBlcSAnYXVkcmV5JyApIHsNCiAgICAgICAg
ICAgIHJlcXVpcmUgJ0F1ZHJleV9QbGF5LnBtJzsNCiAgICAgICAgICAgICRjb2RlIC49IHNwcmlu
dGYgIlwkJS0zNXMgPSBuZXcgQXVkcmV5X1BsYXkoJyVzJyk7XG4iLA0KICAgICAgICAgICAgICAk
bmFtZSAuICdfb2JqJywgJGFkZHJlc3M7DQogICAgICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJc
JCUtMzVzIC0+IGhpZGRlbigxKTtcbiIsICRuYW1lIC4gJ19vYmonOw0KICAgICAgICB9DQogICAg
ICAgIGVsc2lmICggbGMgJHBhX3R5cGUgZXEgJ3gxMCcgKSB7DQogICAgICAgICAgICAkb3RoZXIg
PSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0K
ICAgICAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAiXCQlLTM1cyA9IG5ldyBYMTBfQXBwbGlhbmNl
KCclcycsJyVzJyk7XG4iLA0KICAgICAgICAgICAgICAkbmFtZSAuICdfb2JqJywgJGFkZHJlc3Ms
ICRzZXJpYWw7DQogICAgICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJcJCUtMzVzIC0+IGhpZGRl
bigxKTtcbiIsICRuYW1lIC4gJ19vYmonOw0KICAgICAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAi
XCQlLTM1cyAtPiB0aWVfaXRlbXMoXCQlcywnb2ZmJywnb2ZmJyk7XG4iLA0KICAgICAgICAgICAg
ICAkbmFtZSwgJG5hbWUgLiAnX29iaic7DQogICAgICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJc
JCUtMzVzIC0+IHRpZV9pdGVtcyhcJCVzLCdvbicsJ29uJyk7XG4iLCAkbmFtZSwNCiAgICAgICAg
ICAgICAgJG5hbWUgLiAnX29iaic7DQogICAgICAgIH0NCiAgICAgICAgZWxzaWYgKCBsYyAkcGFf
dHlwZSBlcSAneGFwJyApIHsNCiAgICAgICAgICAgICRjb2RlIC49IHNwcmludGYgIlwkJS0zNXMg
PSBuZXcgeEFQX0l0ZW0oJyVzJyk7XG4iLCAkbmFtZSAuICdfb2JqJywNCiAgICAgICAgICAgICAg
JGFkZHJlc3M7DQogICAgICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJcJCUtMzVzIC0+IGhpZGRl
bigxKTtcbiIsICRuYW1lIC4gJ19vYmonOw0KICAgICAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAi
XCQlLTM1cyAtPiB0YXJnZXRfYWRkcmVzcygnJXMnKTtcbiIsDQogICAgICAgICAgICAgICRuYW1l
IC4gJ19vYmonLCAkYWRkcmVzczsNCiAgICAgICAgICAgICRjb2RlIC49IHNwcmludGYgIlwkJS0z
NXMgLT4gY2xhc3NfbmFtZSgnJXMnKTtcbiIsICRuYW1lIC4gJ19vYmonLA0KICAgICAgICAgICAg
ICAkc2VyaWFsOw0KICAgICAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAiXCQlLTM1cyAtPiB0aWVf
aXRlbXMoXCQlcywnb24nLCdvbicpO1xuIiwgJG5hbWUsDQogICAgICAgICAgICAgICRuYW1lIC4g
J19vYmonOw0KICAgICAgICB9DQogICAgICAgIGVsc2lmICggbGMgJHBhX3R5cGUgZXEgJ3hwbCcg
KSB7DQogICAgICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJcJCUtMzVzID0gbmV3IHhQTF9JdGVt
KCclcycpO1xuIiwgJG5hbWUgLiAnX29iaicsDQogICAgICAgICAgICAgICRhZGRyZXNzOw0KICAg
ICAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAiXCQlLTM1cyAtPiBoaWRkZW4oMSk7XG4iLCAkbmFt
ZSAuICdfb2JqJzsNCiAgICAgICAgICAgICRjb2RlIC49IHNwcmludGYgIlwkJS0zNXMgLT4gdGFy
Z2V0X2FkZHJlc3MoJyVzJyk7XG4iLA0KICAgICAgICAgICAgICAkbmFtZSAuICdfb2JqJywgJGFk
ZHJlc3M7DQogICAgICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJcJCUtMzVzIC0+IGNsYXNzX25h
bWUoJyVzJyk7XG4iLCAkbmFtZSAuICdfb2JqJywNCiAgICAgICAgICAgICAgJHNlcmlhbDsNCiAg
ICAgICAgICAgICRjb2RlIC49IHNwcmludGYgIlwkJS0zNXMgLT4gdGllX2l0ZW1zKFwkJXMsJ29u
Jywnb24nKTtcbiIsICRuYW1lLA0KICAgICAgICAgICAgICAkbmFtZSAuICdfb2JqJzsNCiAgICAg
ICAgfQ0KICAgICAgICBlbHNpZiAoIGxjICRwYV90eXBlIGVxICdhdmlvc3lzJyApIHsNCiAgICAg
ICAgICAgIG15ICRhdmlvc3lzcmVmID0gew0KICAgICAgICAgICAgICAgICdvbicgPT4gew0KICAg
ICAgICAgICAgICAgICAgICAnMScgPT4gJyEnLA0KICAgICAgICAgICAgICAgICAgICAnMicgPT4g
JyMnLA0KICAgICAgICAgICAgICAgICAgICAnMycgPT4gJyUnLA0KICAgICAgICAgICAgICAgICAg
ICAnNCcgPT4gJyYnLA0KICAgICAgICAgICAgICAgICAgICAnNScgPT4gJygnLA0KICAgICAgICAg
ICAgICAgICAgICAnNicgPT4gJ18nLA0KICAgICAgICAgICAgICAgICAgICAnNycgPT4gJ3snLA0K
ICAgICAgICAgICAgICAgICAgICAnOCcgPT4gJ30nDQogICAgICAgICAgICAgICAgfSwNCiAgICAg
ICAgICAgICAgICAnb2ZmJyA9PiB7DQogICAgICAgICAgICAgICAgICAgICcxJyA9PiAnQCcsDQog
ICAgICAgICAgICAgICAgICAgICcyJyA9PiAnJCcsDQogICAgICAgICAgICAgICAgICAgICczJyA9
PiAnXicsDQogICAgICAgICAgICAgICAgICAgICc0JyA9PiAnKicsDQogICAgICAgICAgICAgICAg
ICAgICc1JyA9PiAnKScsDQogICAgICAgICAgICAgICAgICAgICc2JyA9PiAnLScsDQogICAgICAg
ICAgICAgICAgICAgICc3JyA9PiAnWycsDQogICAgICAgICAgICAgICAgICAgICc4JyA9PiAnXScN
CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgJGNvZGUgLj0g
c3ByaW50ZiAiXCQlLTM1cyA9IG5ldyBTZXJpYWxfSXRlbSgnJXMnLCdvbicsJyVzJyk7XG4iLA0K
ICAgICAgICAgICAgICAkbmFtZSAuICdfb2JqJywgJGF2aW9zeXNyZWYtPnsnb24nfXskYWRkcmVz
c30sICRzZXJpYWw7DQogICAgICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJcJCUtMzVzIC0+IGFk
ZCAoJyVzJywnb2ZmJyk7XG4iLCAkbmFtZSAuICdfb2JqJywNCiAgICAgICAgICAgICAgJGF2aW9z
eXNyZWYtPnsnb2ZmJ317JGFkZHJlc3N9Ow0KICAgICAgICB9DQogICAgICAgIGVsc2lmICggbGMg
JHBhX3R5cGUgZXEgJ2FtaXhlcicgKSB7DQoNCiAgICAgICAgICAgICNOb3RoaW5nIG5lZWRlZCBo
ZXJlLCBleGNlcHQgdG8gYXZvaWQgdGhlICJlbHNlIiBzdGF0ZW1lbnQuDQogICAgICAgIH0NCiAg
ICAgICAgZWxzZSB7DQogICAgICAgICAgICBwcmludCAiXG5VbnJlY29nbml6ZWQgLm1odCBlbnRy
eSBmb3IgUEE6ICRyZWNvcmRcbiI7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0K
ICAgIH0NCiAgICBlbHNpZiAoICR0eXBlID1+IC9eRUlCLyApIHsNCgkjPEVJQiBTd2l0Y2ggKEVJ
QjEpLEVJQjEsQWRkcmVzcyxOYW1lLEdyb3VwcyxNb2RlPiMNCgkjPEVJQiBTd2l0Y2ggR3JvdXAg
KEVJQjFHKSxFSUIxRyxBZGRyZXNzLE5hbWUsR3JvdXBzLEFkZHJlc3Nlcz4jDQoJIzxFSUIgRGlt
bWVyIChFSUIyKSxFSUIyLEFkZHJlc3MsTmFtZSxHcm91cHM+Iw0KCSM8RUlCIFZhbHVlIChFSUI1
KSxFSUI1LEFkZHJlc3MsTmFtZSxHcm91cHMsTW9kZT4jDQoJIzxFSUIgRHJpdmUgKEVJQjcpLEVJ
QjcsQWRkcmVzcyxOYW1lLEdyb3Vwcz4jDQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3Jv
dXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywg
JywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRv
YmplY3QgPSAkdHlwZSAuICJfSXRlbSgnJGFkZHJlc3MnLCAkb3RoZXIpIjsNCiAgICB9DQogICAg
ZWxzaWYgKCAkdHlwZSBlcSAiWk1fWk9ORSIgKSB7DQoJIzxab25lTWluZGVyIHhBUCAoWk1fWk9O
RSksWk1fWk9ORSxBZGRyZXNzLE5hbWUsTW9uaXRvck5hbWUsR3JvdXBzPiMNCiAgICAgICAgbXkg
JG1vbml0b3JfbmFtZTsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRtb25pdG9yX25hbWUs
ICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9p
biAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAg
ICAgaWYgKCAhJHBhY2thZ2Vze1pvbmVNaW5kZXJfeEFQfSsrICkgeyAjIGZpcnN0IHRpbWUgZm9y
IHRoaXMgb2JqZWN0IHR5cGU/DQogICAgICAgICAgICAkY29kZSAuPSAidXNlIFpvbmVNaW5kZXJf
eEFQO1xuIjsNCiAgICAgICAgfQ0KICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJcblwkJS0zNXMg
PSBuZXcgWk1fWm9uZUl0ZW0oJyVzJyk7XG4iLCAkbmFtZSwNCiAgICAgICAgICAkYWRkcmVzczsN
CiAgICAgICAgaWYgKCAkb2JqZWN0c3skbW9uaXRvcl9uYW1lfSApIHsNCiAgICAgICAgICAgICRj
b2RlIC49IHNwcmludGYgIlwkJS0zNXMgLT4gYWRkKFwkJXMpO1xuIiwgJG1vbml0b3JfbmFtZSwg
JG5hbWU7DQogICAgICAgIH0NCiAgICAgICAgJG9iamVjdCA9ICcnOw0KICAgIH0NCiAgICBlbHNp
ZiAoICR0eXBlIGVxICJaTV9NT05JVE9SIiApIHsNCgkjPFpvbmVNaW5kZXIgeEFQIChaTV9NT05J
VE9SKSxaTV9NT05JVE9SLEFkZHJlc3MsTmFtZSxHcm91cHM+Iw0KICAgICAgICAoICRhZGRyZXNz
LCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3Ro
ZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0
YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gIlpNX01vbml0
b3JJdGVtKCckYWRkcmVzcycsJG90aGVyKSI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQog
ICAgICAgICAgICAkb2JqZWN0ID0gIlpNX01vbml0b3JJdGVtKCckYWRkcmVzcycpIjsNCiAgICAg
ICAgfQ0KICAgICAgICBpZiAoICEkcGFja2FnZXN7Wm9uZU1pbmRlcl94QVB9KysgKSB7ICMgZmly
c3QgdGltZSBmb3IgdGhpcyBvYmplY3QgdHlwZT8NCiAgICAgICAgICAgICRjb2RlIC49ICJ1c2Ug
Wm9uZU1pbmRlcl94QVA7XG4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUg
ZXEgIkFOQUxPR19TRU5TT1IiICkgew0KCSM8eEFQIEFuYWxvZyBTZW5zb3IgKEFOQUxPR19TRU5T
T1IpLEFOQUxPR19TRU5TT1IsSWRlbnRpZmllcixOYW1lLENvbmR1aXQsR3JvdXBzLFR5cGUsVG9r
ZW5zPiMNCiAgICAgICAgbXkgJHhjX25hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjeGFwIGNvbmR1aXQNCiAgICAgICAgbXkgJHNlbnNvcl90eXBlOw0KDQogICAgICAg
ICNBTkFMT0dfU0VOU09SLCB4YXAgc291cmNlLCBvYmplY3QgbmFtZSwgeGFwIGNvbmR1aXQgbmFt
ZSwgZ3JvdXBzLCB4YXAgc2Vuc29yIHR5cGUsIHRva2Vucy4uLg0KICAgICAgICBpZiAoICEkcGFj
a2FnZXN7QW5hbG9nU2Vuc29yX0l0ZW19KysgKQ0KICAgICAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICMgZmlyc3QgdGltZSBmb3IgdGhpcyBvYmplY3QgdHlwZT8NCiAg
ICAgICAgICAgICRjb2RlIC49ICJ1c2UgQW5hbG9nU2Vuc29yX0l0ZW07XG4iOw0KICAgICAgICB9
DQogICAgICAgICRhZGRyZXNzID0gc2hpZnQgQGl0ZW1faW5mbzsNCiAgICAgICAgaWYgKCAkb2Jq
ZWN0c3skYWRkcmVzc30gKSB7DQoNCiAgICAgICAgICAgICMgdGhlbiwgdGhpcyBpcyBhIG1vcmUg
c2ltcGxlIHdheSBvZiBhc3NvY2lhdGluZyBhbiBhbmFsb2cgc2Vuc29yIGl0ZW0gdG8gYW4gZXhp
c3Rpbmcgb2JqZWN0DQogICAgICAgICAgICAkeGNfbmFtZSA9ICRhZGRyZXNzOw0KICAgICAgICAg
ICAgKCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAg
ICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1
b3RlIGRhdGENCiAgICAgICAgICAgICRjb2RlIC49IHNwcmludGYgIlxuXCQlLTM1cyA9IG5ldyBB
bmFsb2dTZW5zb3JfSXRlbShcJCVzLCAlcyk7XG4iLA0KICAgICAgICAgICAgICAkbmFtZSwgJHhj
X25hbWUsICRvdGhlcjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICgg
JG5hbWUsICR4Y19uYW1lLCAkZ3JvdXBsaXN0LCAkc2Vuc29yX3R5cGUsIEBvdGhlciApID0gQGl0
ZW1faW5mbzsNCiAgICAgICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIg
fSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICAgICBpZiAoIGxjICRuYW1lIGVx
ICdhdXRvJyApIHsgICAgICAgICAgICAgICAgICAgICAgICNuZXcNCiAgICAgICAgICAgICAgICAk
bmFtZSA9ICR4Y19uYW1lIC4gIl8iIC4gJHNlbnNvcl90eXBlIC4gIl8iIC4gJGFkZHJlc3M7DQog
ICAgICAgICAgICAgICAgJG5hbWUgPX4gcy9cLi9fL2c7ICAgICNzdHJpcCBvdXQgYWxsIHRoZSBw
ZXJpb2RzIGZyb20geGFwIG5hbWVzDQogICAgICAgICAgICB9DQogICAgICAgICAgICAkY29kZSAu
PQ0KICAgICAgICAgICAgICBzcHJpbnRmICJcblwkJS0zNXMgPSBuZXcgQW5hbG9nU2Vuc29yX0l0
ZW0oJyVzJywgJyVzJywgJXMpO1xuIiwNCiAgICAgICAgICAgICAgJG5hbWUsICRhZGRyZXNzLCAk
c2Vuc29yX3R5cGUsICRvdGhlcjsNCiAgICAgICAgICAgIGlmICggJG9iamVjdHN7JHhjX25hbWV9
ICkgew0KICAgICAgICAgICAgICAgICRjb2RlIC49IHNwcmludGYgIlwkJS0zNXMgLT4gYWRkKFwk
JXMpO1xuIiwgJHhjX25hbWUsICRuYW1lOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAg
ICAgICRvYmplY3QgPSAnJzsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQU5BTE9HX1NF
TlNPUl9SIiApIHsNCgkjPHhBUCBBbmFsb2cgU2Vuc29yIFIgKEFOQUxPR19TRU5TT1JfUiksQU5B
TE9HX1NFTlNPUl9SLElkZW50aWZpZXIsTmFtZSxDb25kdWl0LEdyb3VwcyxUeXBlLFRva2Vucz4j
DQogICAgICAgIG15ICR4Y19uYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICN4YXAgY29uZHVpdA0KICAgICAgICBteSAkc2Vuc29yX3R5cGU7DQoNCiAgICAgICAg
I0FOQUxPR19TRU5TT1JfUiwgeGFwIHNvdXJjZSwgb2JqZWN0IG5hbWUsIHhhcCBjb25kdWl0IG5h
bWUsIGdyb3VwcywgeGFwIHNlbnNvciB0eXBlLCB0b2tlbnMuLi4NCiAgICAgICAgaWYgKCAhJHBh
Y2thZ2Vze0FuYWxvZ1NlbnNvcl9JdGVtfSsrICkNCiAgICAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9iamVjdCB0eXBlPw0KICAgICAgICAg
ICAgJGNvZGUgLj0gInVzZSBBbmFsb2dTZW5zb3JfSXRlbTtcbiI7DQogICAgICAgIH0NCiAgICAg
ICAgJGFkZHJlc3MgPSBzaGlmdCBAaXRlbV9pbmZvOw0KICAgICAgICBpZiAoICRvYmplY3RzeyRh
ZGRyZXNzfSApIHsNCg0KICAgICAgICAgICAgIyB0aGVuLCB0aGlzIGlzIGEgbW9yZSBzaW1wbGUg
d2F5IG9mIGFzc29jaWF0aW5nIGFuIGFuYWxvZyBzZW5zb3IgaXRlbSB0byBhbiBleGlzdGluZyBv
YmplY3QNCiAgICAgICAgICAgICR4Y19uYW1lID0gJGFkZHJlc3M7DQogICAgICAgICAgICAoICRu
YW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICAgICAkb3Ro
ZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0
YQ0KICAgICAgICAgICAgJGNvZGUgLj0NCiAgICAgICAgICAgICAgc3ByaW50ZiAiXG5cJCUtMzVz
ID0gbmV3IEFuYWxvZ1JhbmdlU2Vuc29yX0l0ZW0oXCQlcywgJXMpO1xuIiwNCiAgICAgICAgICAg
ICAgJG5hbWUsICR4Y19uYW1lLCAkb3RoZXI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQog
ICAgICAgICAgICAoICRuYW1lLCAkeGNfbmFtZSwgJGdyb3VwbGlzdCwgJHNlbnNvcl90eXBlLCBA
b3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICgg
bWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICAgICAgaWYg
KCBsYyAkbmFtZSBlcSAnYXV0bycgKSB7ICAgICAgICAgICAgICAgICAgICAgICAjbmV3DQogICAg
ICAgICAgICAgICAgJG5hbWUgPSAkeGNfbmFtZSAuICJfIiAuICRzZW5zb3JfdHlwZSAuICJfIiAu
ICRhZGRyZXNzOw0KICAgICAgICAgICAgICAgICRuYW1lID1+IHMvXC4vXy9nOyAgICAjc3RyaXAg
b3V0IGFsbCB0aGUgcGVyaW9kcyBmcm9tIHhhcCBuYW1lcw0KICAgICAgICAgICAgfQ0KICAgICAg
ICAgICAgJGNvZGUgLj0NCiAgICAgICAgICAgICAgc3ByaW50Zg0KICAgICAgICAgICAgICAiXG5c
JCUtMzVzID0gbmV3IEFuYWxvZ1JhbmdlU2Vuc29yX0l0ZW0oJyVzJywgJyVzJywgJXMpO1xuIiwN
CiAgICAgICAgICAgICAgJG5hbWUsICRhZGRyZXNzLCAkc2Vuc29yX3R5cGUsICRvdGhlcjsNCiAg
ICAgICAgICAgIGlmICggJG9iamVjdHN7JHhjX25hbWV9ICkgew0KICAgICAgICAgICAgICAgICRj
b2RlIC49IHNwcmludGYgIlwkJS0zNXMgLT4gYWRkKFwkJXMpO1xuIiwgJHhjX25hbWUsICRuYW1l
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICRvYmplY3QgPSAnJzsNCiAgICB9
DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQU5BTE9HX0FWRVJBR0UiICkgew0KCSM8eEFQIEFuYWxv
ZyBTZW5zb3IgQVZHIChBTkFMT0dfQVZFUkFHRSksQU5BTE9HX1NFTlNPUl9SLElkZW50aWZpZXIs
TmFtZSxDb25kdWl0LEdyb3VwcyxUeXBlLFRva2Vucz4jDQogICAgICAgIG15ICRzZW5zb3JfbmFt
ZTsNCgkjPHhBUCBBbmFsb2cgU2Vuc29yIEFWRyAoQU5BTE9HX0FWRVJBR0UpLEFOQUxPR19TRU5T
T1JfUixJZGVudGlmaWVyLE5hbWUsQ29uZHVpdCxHcm91cHMsVHlwZSxUb2tlbnM+Iw0KICAgICAg
ICAjQU5BTE9HX1NFTlNPUiwgeGFwIHNvdXJjZSwgb2JqZWN0IG5hbWUsIHhhcCBjb25kdWl0IG5h
bWUsIGdyb3VwcywgeGFwIHNlbnNvciB0eXBlLCB0b2tlbnMuLi4NCiAgICAgICAgKCAkc2Vuc29y
X25hbWUsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAg
ICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90
ZSBkYXRhDQogICAgICAgIGlmICggISRwYWNrYWdlc3tBbmFsb2dTZW5zb3JfSXRlbX0rKyApDQog
ICAgICAgIHsgICAgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9iamVjdCB0eXBlPw0KICAgICAgICAg
ICAgJGNvZGUgLj0gInVzZSBBbmFsb2dTZW5zb3JfSXRlbTtcbiI7DQogICAgICAgIH0NCg0KICAg
ICAgICAjICAgICRjb2RlIC49IHNwcmludGYgIlxuXCQlLTM1cyA9IG5ldyBBbmFsb2dBdmVyYWdp
bmdfSXRlbShcJCVzLCAlcyk7XG4iLA0KICAgICAgICAjICAgICAgICAgICAgICAkbmFtZSwgJHNl
bnNvcl9uYW1lLCAkb3RoZXI7DQogICAgICAgIGlmICggJG9iamVjdHN7JG5hbWV9ICkgew0KICAg
ICAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAiXCQlLTM1cyAtPiBhZGQoXCQlcyk7XG4iLCAkbmFt
ZSwgJHNlbnNvcl9uYW1lOw0KICAgICAgICAgICAgJG9iamVjdCA9ICcnOw0KICAgICAgICB9DQog
ICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJG9iamVjdCA9ICJBbmFsb2dBdmVyYWdpbmdfSXRl
bShcJCRzZW5zb3JfbmFtZSwkb3RoZXIpIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNpZiAo
ICR0eXBlIGVxICJPV1giICkgew0KCSM8eEFQIE9uZVdpcmUgKE9XWCksT1dYLD4jDQogICAgICAg
ICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQog
ICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAg
IyBRdW90ZSBkYXRhDQogICAgICAgIGlmICgkb3RoZXIpIHsNCiAgICAgICAgICAgICRvYmplY3Qg
PSAiT25lV2lyZV94QVAoJyRhZGRyZXNzJywgJG90aGVyKSI7DQogICAgICAgIH0NCiAgICAgICAg
ZWxzZSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gIk9uZVdpcmVfeEFQKCckYWRkcmVzcycpIjsN
CiAgICAgICAgfQ0KICAgICAgICBpZiAoICEkcGFja2FnZXN7T25lV2lyZV94QVB9KysgKSB7ICAg
ICMgZmlyc3QgdGltZSBmb3IgdGhpcyBvYmplY3QgdHlwZT8NCiAgICAgICAgICAgICRjb2RlIC49
ICJ1c2UgT25lV2lyZV94QVA7XG4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5
cGUgZXEgIlNEWCIgKSB7DQoJIzx4QVAgU3lzRGlhZyAoU0RYKSxTRFgsWGFwSW5zdGFuY2UsTmFt
ZSxQc2l4Y1NlcnZlck5hbWU+Iw0KICAgICAgICBteSAkc2VydmVyOw0KCSM8eEFQIFN5c0RpYWcg
KFNEWCksU0RYLFhhcEluc3RhbmNlLE5hbWUsUHNpeGNTZXJ2ZXJOYW1lPiMNCiAgICAgICAgI1NE
WCwgeGFwIGluc3RhbmNlLCBvYmplY3QgbmFtZSwgcHNpeGMgc2VydmVyIG5hbWUNCiAgICAgICAg
KCAkYWRkcmVzcywgJG5hbWUsICRzZXJ2ZXIsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1f
aW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhl
ciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgaWYgKCAhJHBhY2thZ2Vze1N5c0RpYWdfeEFQ
fSsrICkgeyAgICAjIGZpcnN0IHRpbWUgZm9yIHRoaXMgb2JqZWN0IHR5cGU/DQogICAgICAgICAg
ICAkY29kZSAuPSAidXNlIFN5c0RpYWdfeEFQO1xuIjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAo
JG90aGVyKSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gIlN5c0RpYWdfeEFQKCckYWRkcmVzcycs
ICckc2VydmVyJywgJG90aGVyKSI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAg
ICAgICAkb2JqZWN0ID0gIlN5c0RpYWdfeEFQKCckYWRkcmVzcycsICckc2VydmVyJykiOw0KICAg
ICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIkJTQyIgKSB7DQoJIzwsQlNDLD4j
DQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVt
X2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3Ro
ZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgIGlmICgkb3RoZXIpIHsNCiAgICAgICAgICAg
ICRvYmplY3QgPSAiQlNDX0l0ZW0oJyRhZGRyZXNzJywkb3RoZXIpIjsNCiAgICAgICAgfQ0KICAg
ICAgICBlbHNlIHsNCiAgICAgICAgICAgICRvYmplY3QgPSAiQlNDX0l0ZW0oJyRhZGRyZXNzJyki
Ow0KICAgICAgICB9DQogICAgICAgIGlmICggISRwYWNrYWdlc3tCU0N9KysgKSB7ICAgICMgZmly
c3QgdGltZSBmb3IgdGhpcyBvYmplY3QgdHlwZT8NCiAgICAgICAgICAgICRjb2RlIC49ICJ1c2Ug
QlNDO1xuIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJYUExfU0VO
U09SIiApIHsNCgkjPCxYUExfU0VOU09SLD4jDQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAk
Z3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4g
JywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAg
IGlmICgkb3RoZXIpIHsNCiAgICAgICAgICAgICRvYmplY3QgPSAieFBMX1NlbnNvcignJGFkZHJl
c3MnLCRvdGhlcikiOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJG9i
amVjdCA9ICJ4UExfU2Vuc29yKCckYWRkcmVzcycpIjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAo
ICEkcGFja2FnZXN7eFBMX0l0ZW1zfSsrICkgeyAgICAjIGZpcnN0IHRpbWUgZm9yIHRoaXMgb2Jq
ZWN0IHR5cGU/DQogICAgICAgICAgICAkY29kZSAuPSAidXNlIHhQTF9JdGVtcztcbiI7DQogICAg
ICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiWFBMX1VQUyIgKSB7DQoJIzwsWFBM
X1VQUyw+Iw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkg
PSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyci
IH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAg
ICAgICAgICAkb2JqZWN0ID0gInhQTF9VUFMoJyRhZGRyZXNzJywkb3RoZXIpIjsNCiAgICAgICAg
fQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRvYmplY3QgPSAieFBMX1VQUygnJGFkZHJl
c3MnKSI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCAhJHBhY2thZ2Vze3hQTF9JdGVtc30rKyAp
IHsgICAgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9iamVjdCB0eXBlPw0KICAgICAgICAgICAgJGNv
ZGUgLj0gInVzZSB4UExfSXRlbXM7XG4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICgg
JHR5cGUgZXEgIlhQTF9YMTBTRUNVUklUWSIgKSB7DQoJIzwsWFBMX1gxMFNFQ1VSSVRZLD4jDQog
ICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2lu
Zm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIg
KTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgIGlmICgkb3RoZXIpIHsNCiAgICAgICAgICAgICRv
YmplY3QgPSAieFBMX1gxMFNlY3VyaXR5KCckYWRkcmVzcycsJG90aGVyKSI7DQogICAgICAgIH0N
CiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gInhQTF9YMTBTZWN1cml0eSgn
JGFkZHJlc3MnKSI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCAhJHBhY2thZ2Vze3hQTF9JdGVt
c30rKyApIHsgICAgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9iamVjdCB0eXBlPw0KICAgICAgICAg
ICAgJGNvZGUgLj0gInVzZSB4UExfSXRlbXM7XG4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVs
c2lmICggJHR5cGUgZXEgIlhQTF9YMTBCQVNJQyIgKSB7DQoJIzwsWFBMX1gxMEJBU0lDLD4jDQog
ICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2lu
Zm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIg
KTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgIGlmICgkb3RoZXIpIHsNCiAgICAgICAgICAgICRv
YmplY3QgPSAieFBMX1gxMEJhc2ljKCckYWRkcmVzcycsJG90aGVyKSI7DQogICAgICAgIH0NCiAg
ICAgICAgZWxzZSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gInhQTF9YMTBCYXNpYygnJGFkZHJl
c3MnKSI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCAhJHBhY2thZ2Vze3hQTF9YMTBCYXNpY30r
KyApIHsgICAgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9iamVjdHR5cGU/DQogICAgICAgICAgICAk
Y29kZSAuPSAidXNlIHhQTF9YMTBCYXNpYztcbiI7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxz
aWYgKCAkdHlwZSBlcSAiWFBMX0lSUklHQVRFV0FZIiApIHsNCgkgIzx4UEwgSXJyaWdhdGlvbiBH
YXRld2F5IChYUExfSVJSSUdBVEVXQVkpLFhQTF9JUlJJR0FURVdBWSw+Iw0KICAgICAgICAoICRh
ZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAg
ICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVv
dGUgZGF0YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gInhQ
TF9JcnJpZ2F0aW9uR2F0ZXdheSgnJGFkZHJlc3MnLCRvdGhlcikiOw0KICAgICAgICB9DQogICAg
ICAgIGVsc2Ugew0KICAgICAgICAgICAgJG9iamVjdCA9ICJ4UExfSXJyaWdhdGlvbkdhdGV3YXko
JyRhZGRyZXNzJykiOw0KICAgICAgICB9DQogICAgICAgIGlmICggISRwYWNrYWdlc3t4UExfSXJy
aWdhdGlvbn0rKyApIHsgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9iamVjdCB0eXBlPw0KICAgICAg
ICAgICAgJGNvZGUgLj0gInVzZSB4UExfSXJyaWdhdGlvbjtcbiI7DQogICAgICAgIH0NCiAgICB9
DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiWFBMX0lSUklWQUxWRSIgKSB7DQoJIzx4UEwgSXJyaWdh
dGlvbiBWYWx2ZSAoWFBMX0lSUklWQUxWRSksWFBMX0lSUklWQUxWRSw+Iw0KICAgICAgICAoICRh
ZGRyZXNzLCAkbmFtZSwgJG9iamVjdCwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZv
Ow0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7
ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAgICAgICAgICAkb2Jq
ZWN0ID0gInhQTF9JcnJpZ2F0aW9uVmFsdmUoJyRhZGRyZXNzJyxcJCRvYmplY3QsJG90aGVyKSI7
DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gInhQTF9J
cnJpZ2F0aW9uVmFsdmUoJyRhZGRyZXNzJyxcJCRvYmplY3QpIjsNCiAgICAgICAgfQ0KICAgICAg
ICBpZiAoICEkcGFja2FnZXN7eFBMX0lycmlnYXRpb259KysgKSB7ICMgZmlyc3QgdGltZSBmb3Ig
dGhpcyBvYmplY3QgdHlwZT8NCiAgICAgICAgICAgICRjb2RlIC49ICJ1c2UgeFBMX0lycmlnYXRp
b247XG4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlhQTF9JUlJJ
UVVFVUUiICkgew0KCSM8eFBMIElycmlnYXRpb24gUXVldWUgKFhQTF9JUlJJUVVFVUUpLFhQTF9J
UlJJUVVFVUUsPiMNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsICRvYmpl
Y3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAo
IG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgaWYgKCRv
dGhlcikgew0KICAgICAgICAgICAgJG9iamVjdCA9ICJ4UExfSXJyaWdhdGlvblF1ZXVlKCckYWRk
cmVzcycsXCQkb2JqZWN0LCRvdGhlcikiOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAg
ICAgICAgICAgJG9iamVjdCA9ICJ4UExfSXJyaWdhdGlvblF1ZXVlKCckYWRkcmVzcycsXCQkb2Jq
ZWN0KSI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCAhJHBhY2thZ2Vze3hQTF9JcnJpZ2F0aW9u
fSsrICkgeyAjIGZpcnN0IHRpbWUgZm9yIHRoaXMgb2JqZWN0IHR5cGU/DQogICAgICAgICAgICAk
Y29kZSAuPSAidXNlIHhQTF9JcnJpZ2F0aW9uO1xuIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBl
bHNpZiAoICR0eXBlIGVxICJYUExfTElHSFRHQVRFV0FZIiApIHsNCgkjPCxYUExfTElHSFRHQVRF
V0FZLD4jDQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9
IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIg
fSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgIGlmICgkb3RoZXIpIHsNCiAgICAg
ICAgICAgICRvYmplY3QgPSAieFBMX0xpZ2h0R2F0ZXdheSgnJGFkZHJlc3MnLCRvdGhlcikiOw0K
ICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJG9iamVjdCA9ICJ4UExfTGln
aHRHYXRld2F5KCckYWRkcmVzcycpIjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoICEkcGFja2Fn
ZXN7eFBMX0xpZ2h0aW5nfSsrICkgeyAgICMgZmlyc3QgdGltZSBmb3IgdGhpcyBvYmplY3QgdHlw
ZT8NCiAgICAgICAgICAgICRjb2RlIC49ICJ1c2UgeFBMX0xpZ2h0aW5nO1xuIjsNCiAgICAgICAg
fQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJYUExfTElHSFQiICkgew0KCSM8LFhQTF9M
SUdIVCw+Iw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJG9iamVjdCwgJGdyb3VwbGlzdCwg
QG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFw
IHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAoJG90aGVy
KSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gInhQTF9MaWdodCgnJGFkZHJlc3MnLFwkJG9iamVj
dCwkb3RoZXIpIjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRvYmpl
Y3QgPSAieFBMX0xpZ2h0KCckYWRkcmVzcycsXCQkb2JqZWN0KSI7DQogICAgICAgIH0NCiAgICAg
ICAgaWYgKCAhJHBhY2thZ2Vze3hQTF9MaWdodGluZ30rKyApIHsgICAjIGZpcnN0IHRpbWUgZm9y
IHRoaXMgb2JqZWN0IHR5cGU/DQogICAgICAgICAgICAkY29kZSAuPSAidXNlIHhQTF9MaWdodGlu
ZztcbiI7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiWFBMX1BMVUdX
SVNFR0FURVdBWSIgKSB7DQoJIzwsWFBMX1BMVUdXSVNFR0FURVdBWSw+Iw0KICAgICAgICAoICRh
ZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAg
ICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVv
dGUgZGF0YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gInhQ
TF9QbHVnd2lzZUdhdGV3YXkoJyRhZGRyZXNzJywkb3RoZXIpIjsNCiAgICAgICAgfQ0KICAgICAg
ICBlbHNlIHsNCiAgICAgICAgICAgICRvYmplY3QgPSAieFBMX1BsdWd3aXNlR2F0ZXdheSgnJGFk
ZHJlc3MnKSI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCAhJHBhY2thZ2Vze3hQTF9QbHVnd2lz
ZX0rKyApIHsgICAjIGZpcnN0IHRpbWUgZm9yIHRoaXMgb2JqZWN0IHR5cGU/DQogICAgICAgICAg
ICAkY29kZSAuPSAidXNlIHhQTF9QbHVnd2lzZTtcbiI7DQogICAgICAgIH0NCiAgICB9DQogICAg
ZWxzaWYgKCAkdHlwZSBlcSAiWFBMX1BMVUdXSVNFIiApIHsNCgkjPCxYUExfUExVR1dJU0UsPiMN
CiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRvYmplY3QsICRncm91cGxpc3QsIEBvdGhlciAp
ID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8n
IiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgaWYgKCRvdGhlcikgew0KICAg
ICAgICAgICAgJG9iamVjdCA9ICJ4UExfUGx1Z3dpc2UoJyRhZGRyZXNzJyxcJCRvYmplY3QsJG90
aGVyKSI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkb2JqZWN0ID0g
InhQTF9QbHVnd2lzZSgnJGFkZHJlc3MnLFwkJG9iamVjdCkiOw0KICAgICAgICB9DQogICAgICAg
IGlmICggISRwYWNrYWdlc3t4UExfUGx1Z3dpc2V9KysgKSB7ICAgIyBmaXJzdCB0aW1lIGZvciB0
aGlzIG9iamVjdCB0eXBlPw0KICAgICAgICAgICAgJGNvZGUgLj0gInVzZSB4UExfUGx1Z3dpc2U7
XG4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlhQTF9TUVVFRVpF
Qk9YIiApIHsNCgkjPCxYUExfU1FVRUVaRUJPWCw+Iw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFt
ZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBq
b2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAg
ICAgICBpZiAoJG90aGVyKSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gInhQTF9TcXVlZXplYm94
KCckYWRkcmVzcycsJG90aGVyKSI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAg
ICAgICAkb2JqZWN0ID0gInhQTF9TcXVlZXplYm94KCckYWRkcmVzcycpIjsNCiAgICAgICAgfQ0K
ICAgICAgICBpZiAoICEkcGFja2FnZXN7eFBMX1NxdWVlemVib3h9KysgKSB7ICMgZmlyc3QgdGlt
ZSBmb3IgdGhpcyBvYmplY3QgdHlwZT8NCiAgICAgICAgICAgICRjb2RlIC49ICJ1c2UgeFBMX1Nx
dWVlemVib3g7XG4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlhQ
TF9TRUNVUklUWUdBVEVXQVkiICkgew0KCSM8LFhQTF9TRUNVUklUWUdBVEVXQVksPiMNCiAgICAg
ICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsN
CiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAg
ICAjIFF1b3RlIGRhdGENCiAgICAgICAgaWYgKCRvdGhlcikgew0KICAgICAgICAgICAgJG9iamVj
dCA9ICJ4UExfU2VjdXJpdHlHYXRld2F5KCckYWRkcmVzcycsJG90aGVyKSI7DQogICAgICAgIH0N
CiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gInhQTF9TZWN1cml0eUdhdGV3
YXkoJyRhZGRyZXNzJykiOw0KICAgICAgICB9DQogICAgICAgIGlmICggISRwYWNrYWdlc3t4UExf
U2VjdXJpdHl9KysgKSB7ICAgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9iamVjdCB0eXBlPw0KICAg
ICAgICAgICAgJGNvZGUgLj0gInVzZSB4UExfU2VjdXJpdHk7XG4iOw0KICAgICAgICB9DQogICAg
fQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlhQTF9aT05FIiApIHsNCgkjPCxYUExfWk9ORSw+Iw0K
ICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJG9iamVjdCwgJGdyb3VwbGlzdCwgQG90aGVyICkg
PSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyci
IH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAg
ICAgICAgICAkb2JqZWN0ID0gInhQTF9ab25lKCckYWRkcmVzcycsXCQkb2JqZWN0LCRvdGhlciki
Ow0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJG9iamVjdCA9ICJ4UExf
Wm9uZSgnJGFkZHJlc3MnLFwkJG9iamVjdCkiOw0KICAgICAgICB9DQogICAgICAgIGlmICggISRw
YWNrYWdlc3t4UExfU2VjdXJpdHl9KysgKSB7ICAgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9iamVj
dCB0eXBlPw0KICAgICAgICAgICAgJGNvZGUgLj0gInVzZSB4UExfU2VjdXJpdHk7XG4iOw0KICAg
ICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlhQTF9BUkVBIiApIHsNCgkjPCxY
UExfQVJFQSw+Iw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJG9iamVjdCwgJGdyb3VwbGlz
dCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICgg
bWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAoJG90
aGVyKSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gInhQTF9BcmVhKCckYWRkcmVzcycsXCQkb2Jq
ZWN0LCRvdGhlcikiOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJG9i
amVjdCA9ICJ4UExfQXJlYSgnJGFkZHJlc3MnLFwkJG9iamVjdCkiOw0KICAgICAgICB9DQogICAg
ICAgIGlmICggISRwYWNrYWdlc3t4UExfU2VjdXJpdHl9KysgKSB7ICAgIyBmaXJzdCB0aW1lIGZv
ciB0aGlzIG9iamVjdCB0eXBlPw0KICAgICAgICAgICAgJGNvZGUgLj0gInVzZSB4UExfU2VjdXJp
dHk7XG4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlgxMF9TQ0VO
RSIgKSB7DQoJIzwsWDEwX1NDRU5FLD4jDQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkZ3Jv
dXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywg
JywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgIGlm
ICgkb3RoZXIpIHsNCiAgICAgICAgICAgICRvYmplY3QgPSAiWDEwU0xfU2NlbmUoJyRhZGRyZXNz
Jywkb3RoZXIpIjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRvYmpl
Y3QgPSAiWDEwU0xfU2NlbmUoJyRhZGRyZXNzJykiOw0KICAgICAgICB9DQogICAgICAgIGlmICgg
ISRwYWNrYWdlc3tYMTBfU2NlbmV9KysgKSB7ICAgICMgZmlyc3QgdGltZSBmb3IgdGhpcyBvYmpl
Y3QgdHlwZT8NCiAgICAgICAgICAgICRjb2RlIC49ICJ1c2UgWDEwX1NjZW5lO1xuIjsNCiAgICAg
ICAgfQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJTQ0VORSIgKSB7DQogICAgICAgICgg
JG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVy
ID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGEN
CiAgICAgICAgaWYgKCRvdGhlcikgew0KICAgICAgICAgICAgJG9iamVjdCA9ICJTY2VuZSgkb3Ro
ZXIpIjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRvYmplY3QgPSAi
U2NlbmUoKSI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCAhJHBhY2thZ2Vze1NjZW5lfSsrICkg
eyAgICAjIGZpcnN0IHRpbWUgZm9yIHRoaXMgb2JqZWN0IHR5cGU/DQogICAgICAgICAgICAkY29k
ZSAuPSAidXNlIFNjZW5lO1xuIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBl
IGVxICJYMTBfU0NFTkVfTUVNQkVSIiApIHsNCgkjPCxYMTBfU0NFTkVfTUVNQkVSLD4jDQogICAg
ICAgIG15ICggJHNjZW5lX25hbWUsICRvbl9sZXZlbCwgJHJhbXBfcmF0ZSApOw0KICAgICAgICAo
ICRuYW1lLCAkc2NlbmVfbmFtZSwgJG9uX2xldmVsLCAkcmFtcF9yYXRlICkgPSBAaXRlbV9pbmZv
Ow0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7
ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAoICEkcGFja2FnZXN7WDEwX1NjZW5lfSsrICkg
eyAgICAjIGZpcnN0IHRpbWUgZm9yIHRoaXMgb2JqZWN0IHR5cGU/DQogICAgICAgICAgICAkY29k
ZSAuPSAidXNlIFgxMF9TY2VuZTtcbiI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCAoICRvYmpl
Y3RzeyRzY2VuZV9uYW1lfSApIGFuZCAoICRvYmplY3RzeyRuYW1lfSApICkgew0KICAgICAgICAg
ICAgaWYgKCRvbl9sZXZlbCkgew0KICAgICAgICAgICAgICAgIGlmICgkcmFtcF9yYXRlKSB7DQog
ICAgICAgICAgICAgICAgICAgICRjb2RlIC49IHNwcmludGYgIlwkJS0zNXMgLT4gYWRkKFwkJXMs
JyVzJywnJXMnKTtcbiIsDQogICAgICAgICAgICAgICAgICAgICAgJHNjZW5lX25hbWUsICRuYW1l
LCAkb25fbGV2ZWwsICRyYW1wX3JhdGU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJcJCUtMzVz
IC0+IGFkZChcJCVzLCclcycpO1xuIiwNCiAgICAgICAgICAgICAgICAgICAgICAkc2NlbmVfbmFt
ZSwgJG5hbWUsICRvbl9sZXZlbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQog
ICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJcJCUt
MzVzIC0+IGFkZChcJCVzKTtcbiIsICRzY2VuZV9uYW1lLCAkbmFtZTsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgfQ0KICAgICAgICAkb2JqZWN0ID0gJyc7DQogICAgfQ0KICAgIGVsc2lmICggJHR5
cGUgZXEgIlNDRU5FX01FTUJFUiIgKSB7DQogICAgICAgIG15ICggJHNjZW5lX25hbWUsICRvbl9s
ZXZlbCwgJHJhbXBfcmF0ZSApOw0KICAgICAgICBpZiAoDQogICAgICAgICAgICB2YWxpZGF0ZV9k
ZWYoDQogICAgICAgICAgICAgICAgJHR5cGUsIDIsDQogICAgICAgICAgICAgICAgWyAnbmFtZScs
ICduYW1lJywgJ2luc3Rlb25fb25fbGV2ZWwnLCAnaW5zdGVvbl9yYW1wX3JhdGUnIF0sDQogICAg
ICAgICAgICAgICAgXEBpdGVtX2luZm8NCiAgICAgICAgICAgICkNCiAgICAgICAgICApDQogICAg
ICAgIHsNCiAgICAgICAgICAgICggJG5hbWUsICRzY2VuZV9uYW1lLCAkb25fbGV2ZWwsICRyYW1w
X3JhdGUgKSA9IEBpdGVtX2luZm87DQogICAgICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICgg
bWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KDQogICAgICAgICAgICBp
ZiAoICEkcGFja2FnZXN7U2NlbmV9KysgKSB7ICAgICMgZmlyc3QgdGltZSBmb3IgdGhpcyBvYmpl
Y3QgdHlwZT8NCiAgICAgICAgICAgICAgICAkY29kZSAuPSAidXNlIFNjZW5lO1xuIjsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgIGlmICggKCAkb2JqZWN0c3skc2NlbmVfbmFtZX0gKSBhbmQg
KCAkb2JqZWN0c3skbmFtZX0gKSApIHsNCiAgICAgICAgICAgICAgICBpZiAoJG9uX2xldmVsKSB7
DQogICAgICAgICAgICAgICAgICAgIGlmICgkcmFtcF9yYXRlKSB7DQogICAgICAgICAgICAgICAg
ICAgICAgICAkY29kZSAuPSBzcHJpbnRmICJcJCUtMzVzIC0+IGFkZChcJCVzLCclcycsJyVzJyk7
XG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NlbmVfbmFtZSwgJG5hbWUsICRvbl9s
ZXZlbCwgJHJhbXBfcmF0ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjb2RlIC49IHNwcmludGYgIlwk
JS0zNXMgLT4gYWRkKFwkJXMsJyVzJyk7XG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAk
c2NlbmVfbmFtZSwgJG5hbWUsICRvbl9sZXZlbDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAg
ICAgJGNvZGUgLj0gc3ByaW50ZiAiXCQlLTM1cyAtPiBhZGQoXCQlcyk7XG4iLCAkc2NlbmVfbmFt
ZSwNCiAgICAgICAgICAgICAgICAgICAgICAkbmFtZTsNCiAgICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBwcmludA0KICAg
ICAgICAgICAgICAgICAgIlxuVGhlcmUgaXMgbm8gb2JqZWN0IGNhbGxlZCAkc2NlbmVfbmFtZSBk
ZWZpbmVkLiAgSWdub3JpbmcgU0NFTkVfTUVNQkVSIGVudHJ5LlxuIg0KICAgICAgICAgICAgICAg
ICAgdW5sZXNzICRvYmplY3RzeyRzY2VuZV9uYW1lfTsNCiAgICAgICAgICAgICAgICBwcmludA0K
ICAgICAgICAgICAgICAgICAgIlxuVGhlcmUgaXMgbm8gb2JqZWN0IGNhbGxlZCAkbmFtZSBkZWZp
bmVkLiAgSWdub3JpbmcgU0NFTkVfTUVNQkVSIGVudHJ5LlxuIg0KICAgICAgICAgICAgICAgICAg
dW5sZXNzICRvYmplY3RzeyRuYW1lfTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRvYmpl
Y3QgPSAnJzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJTQ0VORV9C
VUlMRCIgKSB7DQoJIzxJbnN0ZW9uIFNjZW5lIChTQ0VORV9CVUlMRCksU0NFTkVfQlVJTEQsTmFt
ZSxNZW1iZXIsQ29udHJvbGxlcj8oMS8wKSxSZXNwb25kZXI/KDEvMCksT25sZXZlbCxSYW1wcmF0
ZT4jDQogICAgICAgICNTQ0VORV9CVUlMRCwgc2NlbmVfbmFtZSwgc2NlbmVfbWVtYmVyLCBpc19j
b250cm9sbGVyPywgaXNfcmVzcG9uZGVyPywgb25sZXZlbCwgcmFtcHJhdGUNCiAgICAgICAgbXkg
KCAkc2NlbmVfbWVtYmVyLCAkaXNfc2NlbmVfY29udHJvbGxlciwgJGlzX3NjZW5lX3Jlc3BvbmRl
ciwNCiAgICAgICAgICAgICRvbl9sZXZlbCwgJHJhbXBfcmF0ZSApOw0KICAgICAgICBpZiAoDQog
ICAgICAgICAgICB2YWxpZGF0ZV9kZWYoDQogICAgICAgICAgICAgICAgJHR5cGUsIDIsDQogICAg
ICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAnbmFtZScsICAgICAgICAgICAgICdu
YW1lJywNCiAgICAgICAgICAgICAgICAgICAgJ2Jvb2xlYW4nLCAgICAgICAgICAnYm9vbGVhbics
DQogICAgICAgICAgICAgICAgICAgICdpbnN0ZW9uX29uX2xldmVsJywgJ2luc3Rlb25fcmFtcF9y
YXRlJw0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgXEBpdGVtX2luZm8NCiAg
ICAgICAgICAgICkNCiAgICAgICAgICApDQogICAgICAgIHsNCg0KDQogICAgICAgICAgICAoICRu
YW1lLCAkc2NlbmVfbWVtYmVyLCAkaXNfc2NlbmVfY29udHJvbGxlciwgJGlzX3NjZW5lX3Jlc3Bv
bmRlciwgJG9uX2xldmVsLCAkcmFtcF9yYXRlICkgPSBAaXRlbV9pbmZvOw0KDQogICAgICAgICAg
ICBpZiAoICEkcGFja2FnZXN7U2NlbmV9KysgKSB7ICAgICMgZmlyc3QgdGltZSBmb3IgdGhpcyBv
YmplY3QgdHlwZT8NCiAgICAgICAgICAgICAgICAkY29kZSAuPSAidXNlIFNjZW5lO1xuIjsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkaXNfc2NlbmVfY29udHJvbGxlcikgew0KICAg
ICAgICAgICAgICAgICRzY2VuZV9idWlsZF9jb250cm9sbGVyc3skbmFtZX17JHNjZW5lX21lbWJl
cn0gPSAiMSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJGlzX3NjZW5lX3Jlc3Bv
bmRlcikgew0KICAgICAgICAgICAgICAgICRzY2VuZV9idWlsZF9yZXNwb25kZXJzeyRuYW1lfXsk
c2NlbmVfbWVtYmVyfSA9DQogICAgICAgICAgICAgICAgICAiJG9uX2xldmVsLCRyYW1wX3JhdGUi
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJG9iamVjdCA9ICcnOw0KICAgICAgICB9DQog
ICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlBISUxJUFNfSFVFIiApIHsNCgkjPCxQSElMSVBT
X0hVRSw+Iw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkg
PSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyci
IH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAg
ICAgICAgICAkb2JqZWN0ID0gIlBoaWxpcHNfSHVlKCckYWRkcmVzcycsJG90aGVyKSI7DQogICAg
ICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gIlBoaWxpcHNfSHVl
KCckYWRkcmVzcycpIjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoICEkcGFja2FnZXN7UGhpbGlw
c19IdWV9KysgKSB7ICAgICMgZmlyc3QgdGltZSBmb3IgdGhpcyBvYmplY3QgdHlwZT8NCiAgICAg
ICAgICAgICRjb2RlIC49ICJ1c2UgUGhpbGlwc19IdWU7XG4iOw0KICAgICAgICB9DQogICAgfQ0K
ICAgIGVsc2lmICggJHR5cGUgZXEgIlBISUxJUFNfTFVYIiApIHsNCgkjPCxQSElMSVBTX0xVWCw+
Iw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRl
bV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90
aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAgICAgICAg
ICAkb2JqZWN0ID0gIlBoaWxpcHNfTHV4KCckYWRkcmVzcycsJG90aGVyKSI7DQogICAgICAgIH0N
CiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkb2JqZWN0ID0gIlBoaWxpcHNfTHV4KCckYWRk
cmVzcycpIjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoICEkcGFja2FnZXN7UGhpbGlwc19IdWV9
KysgKSB7ICAgICMgZmlyc3QgdGltZSBmb3IgdGhpcyBvYmplY3QgdHlwZT8NCiAgICAgICAgICAg
ICRjb2RlIC49ICJ1c2UgUGhpbGlwc19IdWU7XG4iOw0KICAgICAgICB9DQogICAgfQ0KICAgICMt
LS0tLS0tLS0tLS0tLSBSYVpiZXJyeSBPYmplY3RzIC0tLS0tLS0tLS0tLS0tLS0tDQogICAgZWxz
aWYgKCAkdHlwZSBlcSAiUkFaQkVSUllfQ09OVFJPTExFUiIgKSB7DQoJIzxSYXpiZXJyeSBaLVdh
dmUoUkFaQkVSUllfQ09OVFJPTExFUiksUkFaQkVSUllfQ09OVFJPTExFUixJcEFkZHJlc3MsQ29u
dHJvbGxlcl9uYW1lLEdyb3VwcyxQb2xsICh0aW1lL3B1c2gpLE9wdGlvbnM+Iw0KICAgICAgICBt
eSAkcG9sbDsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxpc3QsICRwb2xsLCBA
b3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywnLCAoIG1hcCB7
ICIkXyIgfSBAb3RoZXIgKTsgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRwb2xsID0gIici
IC4gJHBvbGwgLiAiJyIgaWYgKGRlZmluZWQgJHBvbGwpOw0KICAgICAgICAkb3RoZXIgPX4gcy9e
W1wnXCJdLy87ICNzdHJpcCBvdXQgcXVvdGVzIGluIGNhc2UgdGhleSBhcmUgaW5jbHVkZWQNCiAg
ICAgICAgJG90aGVyID1+IHMvW1wnXCJdJC8vOw0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAg
IAkJJG9iamVjdCA9ICJyYVpiZXJyeSgnJGFkZHJlc3MnLCAkcG9sbCwgJyRvdGhlcicpIjsNCiAg
ICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgCQkkb2JqZWN0ID0gInJhWmJlcnJ5KCckYWRk
cmVzcycsICRwb2xsKSI7DQogICAgICAgIH0gICANCiAgICAgICAgJGNvZGUgLj0gInVzZSByYVpi
ZXJyeTtcbiI7DQoJfSANCiAgICBlbHNpZiAoICR0eXBlIGVxICJSQVpCRVJSWV9DT01NIiApIHsN
CgkjPFJhemJlcnJ5IFotV2F2ZShSQVpCRVJSWV9DT01NKSxSQVpCRVJSWV9DT01NLERldmljZV9p
ZCxOYW1lLEdyb3VwcyxDb250cm9sbGVyLE9wdGlvbnM+Iw0KICAgICAgICBteSAoJGNvbnRyb2xs
ZXIpOw0KICAgICAgICAoICRuYW1lLCAkY29udHJvbGxlciwgJGdyb3VwbGlzdCApID0gQGl0ZW1f
aW5mbzsNCiAgICAgICAgJG9iamVjdCA9ICJyYVpiZXJyeV9jb21tKFwkIiAuICRjb250cm9sbGVy
IC4gIikiOw0KDQoJfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlJBWkJFUlJZX0RJTU1FUiIgKSB7
DQoJIzxSYXpiZXJyeSBaLVdhdmUoUkFaQkVSUllfRElNTUVSKSxSQVpCRVJSWV9ESU1NRVIsRGV2
aWNlX2lkLE5hbWUsR3JvdXBzLENvbnRyb2xsZXIsT3B0aW9ucz4jDQogICAgICAgIG15ICggJGRl
dmlkLCAkY29udHJvbGxlciApOw0KICAgICAgICAoICRkZXZpZCwgJG5hbWUsICRncm91cGxpc3Qs
ICRjb250cm9sbGVyLCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpv
aW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAg
ICAgIGlmICgkb3RoZXIpIHsNCiAgICAgCQkkb2JqZWN0ID0gInJhWmJlcnJ5X2RpbW1lcihcJCIg
LiAkY29udHJvbGxlciAuICIsJyRkZXZpZCcsJyRvdGhlcicpIjsNCiAgICAgICAgfQ0KICAgICAg
ICBlbHNlIHsNCiAgICAgCQkkb2JqZWN0ID0gInJhWmJlcnJ5X2RpbW1lcihcJCIgLiAkY29udHJv
bGxlciAuICIsJyRkZXZpZCcpIjsNCiAgICAgICAgfSAgICANCgl9DQogICAgZWxzaWYgKCAkdHlw
ZSBlcSAiUkFaQkVSUllfU1dJVENIIiApIHsNCgkjPFJhemJlcnJ5IFotV2F2ZShSQVpCRVJSWV9T
V0lUQ0gpLFJBWkJFUlJZX1NXSVRDSCxEZXZpY2VfaWQsTmFtZSxHcm91cHMsQ29udHJvbGxlcixP
cHRpb25zPiMNCiAgICAgICAgbXkgKCAkZGV2aWQsICRjb250cm9sbGVyICk7DQogICAgICAgICgg
JGRldmlkLCAkbmFtZSwgJGdyb3VwbGlzdCwgJGNvbnRyb2xsZXIsIEBvdGhlciApID0gQGl0ZW1f
aW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhl
ciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgaWYgKCRvdGhlcikgew0KICAgICAJCSRvYmpl
Y3QgPSAicmFaYmVycnlfc3dpdGNoKFwkIiAuICRjb250cm9sbGVyIC4gIiwnJGRldmlkJywnJG90
aGVyJykiOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAJCSRvYmplY3QgPSAicmFa
YmVycnlfc3dpdGNoKFwkIiAuICRjb250cm9sbGVyIC4gIiwnJGRldmlkJykiOw0KICAgICAgICB9
ICAgIA0KCX0JDQogICAgZWxzaWYgKCAkdHlwZSBlcSAiUkFaQkVSUllfQkxJTkQiICkgew0KCSM8
UmF6YmVycnkgWi1XYXZlKFJBWkJFUlJZX0JMSU5EKSxSQVpCRVJSWV9CTElORCxEZXZpY2VfaWQs
TmFtZSxHcm91cHMsQ29udHJvbGxlcixPcHRpb25zPiMNCiAgICAgICAgbXkgKCAkZGV2aWQsICRj
b250cm9sbGVyICk7DQogICAgICAgICggJGRldmlkLCAkbmFtZSwgJGdyb3VwbGlzdCwgJGNvbnRy
b2xsZXIsICRvdGhlciApID0gQGl0ZW1faW5mbzsNCg0KICAgICAgICAjJG90aGVyID0gam9pbiAn
LCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAg
aWYgKCRvdGhlcikgew0KICAgICAJCSRvYmplY3QgPSAicmFaYmVycnlfYmxpbmQoXCQiIC4gJGNv
bnRyb2xsZXIgLiAiLCckZGV2aWQnLCckb3RoZXInKSI7DQogICAgICAgIH0NCiAgICAgICAgZWxz
ZSB7DQogICAgIAkJJG9iamVjdCA9ICJyYVpiZXJyeV9ibGluZChcJCIgLiAkY29udHJvbGxlciAu
ICIsJyRkZXZpZCcpIjsNCiAgICAgICAgfSAgICANCgl9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAi
UkFaQkVSUllfTE9DSyIgKSB7DQoJIzxSYXpiZXJyeSBaLVdhdmUoUkFaQkVSUllfTE9DSyksUkFa
QkVSUllfTE9DSyxEZXZpY2VfaWQsTmFtZSxHcm91cHMsQ29udHJvbGxlcixPcHRpb25zPiMNCiAg
ICAgICAgbXkgKCAkZGV2aWQsICRjb250cm9sbGVyICk7DQogICAgICAgICggJGRldmlkLCAkbmFt
ZSwgJGdyb3VwbGlzdCwgJGNvbnRyb2xsZXIsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAg
ICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1
b3RlIGRhdGENCiAgICAgICAgaWYgKCRvdGhlcikgew0KICAgICAJCSRvYmplY3QgPSAicmFaYmVy
cnlfbG9jayhcJCIgLiAkY29udHJvbGxlciAuICIsJyRkZXZpZCcsJyRvdGhlcicpIjsNCiAgICAg
ICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgCQkkb2JqZWN0ID0gInJhWmJlcnJ5X2xvY2soXCQi
IC4gJGNvbnRyb2xsZXIgLiAiLCckZGV2aWQnKSI7DQogICAgICAgIH0gICAgDQoJfQkNCiAgICBl
bHNpZiAoICR0eXBlIGVxICJSQVpCRVJSWV9USEVSTU9TVEFUIiApIHsNCgkjPFJhemJlcnJ5IFot
V2F2ZShSQVpCRVJSWV9USEVSTU9TVEFUKSxSQVpCRVJSWV9USEVSTU9TVEFULERldmljZV9pZCxO
YW1lLEdyb3VwcyxDb250cm9sbGVyLE9wdGlvbnM+Iw0KICAgICAgICBteSAoICRkZXZpZCwgJGNv
bnRyb2xsZXIgKTsNCiAgICAgICAgKCAkZGV2aWQsICRuYW1lLCAkZ3JvdXBsaXN0LCAkY29udHJv
bGxlciwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcs
ICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAo
JG90aGVyKSB7DQogICAgIAkJJG9iamVjdCA9ICJyYVpiZXJyeV90aGVybW9zdGF0KFwkIiAuICRj
b250cm9sbGVyIC4gIiwnJGRldmlkJywnJG90aGVyJykiOw0KICAgICAgICB9DQogICAgICAgIGVs
c2Ugew0KICAgICAJCSRvYmplY3QgPSAicmFaYmVycnlfdGhlcm1vc3RhdChcJCIgLiAkY29udHJv
bGxlciAuICIsJyRkZXZpZCcpIjsNCiAgICAgICAgfSAgICANCgl9CQ0KICAgIGVsc2lmICggJHR5
cGUgZXEgIlJBWkJFUlJZX1RFTVBfU0VOU09SIiApIHsNCgkjPFJhemJlcnJ5IFotV2F2ZShSQVpC
RVJSWV9URU1QX1NFTlNPUiksUkFaQkVSUllfVEVNUF9TRU5TT1IsRGV2aWNlX2lkLE5hbWUsR3Jv
dXBzLENvbnRyb2xsZXIsT3B0aW9ucz4jDQogICAgICAgIG15ICggJGRldmlkLCAkY29udHJvbGxl
ciApOw0KICAgICAgICAoICRkZXZpZCwgJG5hbWUsICRncm91cGxpc3QsICRjb250cm9sbGVyLCBA
b3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAg
eyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgIGlmICgkb3RoZXIp
IHsNCiAgICAgCQkkb2JqZWN0ID0gInJhWmJlcnJ5X3RlbXBfc2Vuc29yKFwkIiAuICRjb250cm9s
bGVyIC4gIiwnJGRldmlkJywnJG90aGVyJykiOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0K
ICAgICAJCSRvYmplY3QgPSAicmFaYmVycnlfdGVtcF9zZW5zb3IoXCQiIC4gJGNvbnRyb2xsZXIg
LiAiLCckZGV2aWQnKSI7DQogICAgICAgIH0gICAgDQoJfQ0KICAgIGVsc2lmICggJHR5cGUgZXEg
IlJBWkJFUlJZX0JJTkFSWV9TRU5TT1IiICkgew0KCSM8UmF6YmVycnkgWi1XYXZlKFJBWkJFUlJZ
X0JJTkFSWV9TRU5TT1IpLFJBWkJFUlJZX0JJTkFSWV9TRU5TT1IsRGV2aWNlX2lkLE5hbWUsR3Jv
dXBzLENvbnRyb2xsZXIsT3B0aW9ucz4jDQogICAgICAgIG15ICggJGRldmlkLCAkY29udHJvbGxl
ciApOw0KICAgICAgICAoICRkZXZpZCwgJG5hbWUsICRncm91cGxpc3QsICRjb250cm9sbGVyLCBA
b3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAg
eyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgIGlmICgkb3RoZXIp
IHsNCiAgICAgCQkkb2JqZWN0ID0gInJhWmJlcnJ5X2JpbmFyeV9zZW5zb3IoXCQiIC4gJGNvbnRy
b2xsZXIgLiAiLCckZGV2aWQnLCckb3RoZXInKSI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7
DQogICAgICAgICAgICAkb2JqZWN0ID0gInJhWmJlcnJ5X2JpbmFyeV9zZW5zb3IoXCQiIC4gJGNv
bnRyb2xsZXIgLiAiLCckZGV2aWQnKSI7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAk
dHlwZSBlcSAiUkFaQkVSUllfQkFUVEVSWSIgKSB7DQoJIzxSYXpiZXJyeSBaLVdhdmUoUkFaQkVS
UllfQkFUVEVSWSksUkFaQkVSUllfQkFUVEVSWSxEZXZpY2VfaWQsTmFtZSxHcm91cHMsQ29udHJv
bGxlcixPcHRpb25zPiMNCiAgICAgICAgbXkgKCAkZGV2aWQsICRjb250cm9sbGVyICk7DQogICAg
ICAgICggJGRldmlkLCAkbmFtZSwgJGdyb3VwbGlzdCwgJGNvbnRyb2xsZXIsIEBvdGhlciApID0g
QGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9
IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgaWYgKCRvdGhlcikgew0KICAgICAg
ICAgICAgJG9iamVjdCA9ICJyYVpiZXJyeV9iYXR0ZXJ5KFwkIiAuICRjb250cm9sbGVyIC4gIiwn
JGRldmlkJywnJG90aGVyJykiOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAg
ICAgJG9iamVjdCA9ICJyYVpiZXJyeV9iYXR0ZXJ5KFwkIiAuICRjb250cm9sbGVyIC4gIiwnJGRl
dmlkJykiOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlJBWkJFUlJZ
X0dFTkVSSUMiICkgew0KCSM8UmF6YmVycnkgWi1XYXZlKFJBWkJFUlJZX0dFTkVSSUMpLFJBWkJF
UlJZX0dFTkVSSUMsRGV2aWNlX2lkIChGdWxsIERldmljZSBJRCksTmFtZSxHcm91cHMsQ29udHJv
bGxlcixPcHRpb25zPiMNCiAgICAgICAgbXkgKCAkZGV2aWQsICRjb250cm9sbGVyICk7DQogICAg
ICAgICggJGRldmlkLCAkbmFtZSwgJGdyb3VwbGlzdCwgJGNvbnRyb2xsZXIsIEBvdGhlciApID0g
QGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9
IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgaWYgKCRvdGhlcikgew0KICAgICAg
ICAgICAgJG9iamVjdCA9ICJyYVpiZXJyeV9nZW5lcmljKFwkIiAuICRjb250cm9sbGVyIC4gIiwn
JGRldmlkJywnJG90aGVyJykiOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAg
ICAgJG9iamVjdCA9ICJyYVpiZXJyeV9nZW5lcmljKFwkIiAuICRjb250cm9sbGVyIC4gIiwnJGRl
dmlkJykiOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlJBWkJFUlJZ
X1ZPTFRBR0UiICkgew0KCSM8UmF6YmVycnkgWi1XYXZlKFJBWkJFUlJZX1ZPTFRBR0UpLFJBWkJF
UlJZX1ZPTFRBR0UsRGV2aWNlX2lkIChNYWpvciBOdW1iZXIpLE5hbWUsR3JvdXBzLENvbnRyb2xs
ZXIsT3B0aW9ucz4jDQogICAgICAgIG15ICggJGRldmlkLCAkY29udHJvbGxlciApOw0KICAgICAg
ICAoICRkZXZpZCwgJG5hbWUsICRncm91cGxpc3QsICRjb250cm9sbGVyLCBAb3RoZXIgKSA9IEBp
dGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBA
b3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgIGlmICgkb3RoZXIpIHsNCiAgICAgICAg
ICAgICRvYmplY3QgPSAicmFaYmVycnlfdm9sdGFnZShcJCIgLiAkY29udHJvbGxlciAuICIsJyRk
ZXZpZCcsJyRvdGhlcicpIjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAg
ICRvYmplY3QgPSAicmFaYmVycnlfdm9sdGFnZShcJCIgLiAkY29udHJvbGxlciAuICIsJyRkZXZp
ZCcpIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJSQVpCRVJSWV9N
T1RJT04iICkgew0KCSM8UmF6YmVycnkgWi1XYXZlKFJBWkJFUlJZX01PVElPTiksUkFaQkVSUllf
TU9USU9OLERldmljZV9pZCAoRnVsbCBEZXZpY2UgSUQpLE5hbWUsR3JvdXBzLENvbnRyb2xsZXIs
T3B0aW9ucz4jDQogICAgICAgIG15ICggJGRldmlkLCAkY29udHJvbGxlciApOw0KICAgICAgICAo
ICRkZXZpZCwgJG5hbWUsICRncm91cGxpc3QsICRjb250cm9sbGVyLCBAb3RoZXIgKSA9IEBpdGVt
X2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3Ro
ZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgIGlmICgkb3RoZXIpIHsNCiAgICAgICAgICAg
ICRvYmplY3QgPSAicmFaYmVycnlfbW90aW9uKFwkIiAuICRjb250cm9sbGVyIC4gIiwnJGRldmlk
JywnJG90aGVyJykiOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJG9i
amVjdCA9ICJyYVpiZXJyeV9tb3Rpb24oXCQiIC4gJGNvbnRyb2xsZXIgLiAiLCckZGV2aWQnKSI7
DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiUkFaQkVSUllfQlJJR0hU
TkVTUyIgKSB7DQoJIzxSYXpiZXJyeSBaLVdhdmUoUkFaQkVSUllfR0VORVJJQyksUkFaQkVSUllf
R0VORVJJQyxEZXZpY2VfaWQgKEZ1bGwgRGV2aWNlIElEKSxOYW1lLEdyb3VwcyxDb250cm9sbGVy
LE9wdGlvbnM+Iw0KICAgICAgICBteSAoICRkZXZpZCwgJGNvbnRyb2xsZXIgKTsNCiAgICAgICAg
KCAkZGV2aWQsICRuYW1lLCAkZ3JvdXBsaXN0LCAkY29udHJvbGxlciwgQG90aGVyICkgPSBAaXRl
bV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90
aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICBpZiAoJG90aGVyKSB7DQogICAgICAgICAg
ICAkb2JqZWN0ID0gInJhWmJlcnJ5X2JyaWdodG5lc3MoXCQiIC4gJGNvbnRyb2xsZXIgLiAiLCck
ZGV2aWQnLCckb3RoZXInKSI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAg
ICAkb2JqZWN0ID0gInJhWmJlcnJ5X2JyaWdodG5lc3MoXCQiIC4gJGNvbnRyb2xsZXIgLiAiLCck
ZGV2aWQnKSI7DQogICAgICAgIH0NCiAgICB9ICAgIA0KICAgICMtLS0tLS0tLS0tLS0tLSBFbmQg
b2YgUmFaYmVycnkgT2JqZWN0cyAtLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgIyAtWyBNeVNlbnNv
cnMgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIk1ZU19JTlRFUkZBQ0UiICkgew0KCSM8TXlTZW5zb3Jz
IChNWVNfSU5URVJGQUNFKSxNWVNfSU5URVJGQUNFLD4jDQogICAgICAgIHJlcXVpcmUgJ015U2Vu
c29ycy5wbSc7DQogICAgICAgIG15ICggJGd3X3R5cGUsICRsb25nX25hbWUsICRwb3J0ICk7DQog
ICAgICAgICggJG5hbWUsICRsb25nX25hbWUsICRnd190eXBlLCAkcG9ydCwgJGdyb3VwbGlzdCwg
QG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFw
IHsgIickXyciIH0gQG90aGVyICk7ICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3Qg
PSAiTXlTZW5zb3JzOjpJbnRlcmZhY2UoJyRnd190eXBlJywgJyRwb3J0JywgJyRsb25nX25hbWUn
LCAkb3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiTVlTX05PREUiICkgew0K
CSM8TXlTZW5zb3JzIChNWVNfTk9ERSksTVlTX05PREUsPiMNCiAgICAgICAgcmVxdWlyZSAnTXlT
ZW5zb3JzLnBtJzsNCiAgICAgICAgbXkgKCAkcGFyZW50LCAkbG9uZ19uYW1lICk7DQogICAgICAg
ICggJGFkZHJlc3MsICRuYW1lLCAkbG9uZ19uYW1lLCAkcGFyZW50LCAkZ3JvdXBsaXN0LCBAb3Ro
ZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAi
JyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3Qg
PSAiTXlTZW5zb3JzOjpOb2RlKCRhZGRyZXNzLCAnJGxvbmdfbmFtZScsICRwYXJlbnQsICRvdGhl
cikiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJNWVNfQklOQVJZIiApIHsNCgkjPE15
U2Vuc29ycyAoTVlTX0JJTkFSWSksTVlTX0JJTkFSWSw+Iw0KICAgICAgICByZXF1aXJlICdNeVNl
bnNvcnMucG0nOw0KICAgICAgICBteSAoICRwYXJlbnQsICRsb25nX25hbWUgKTsNCiAgICAgICAg
KCAkYWRkcmVzcywgJG5hbWUsICRsb25nX25hbWUsICRwYXJlbnQsICRncm91cGxpc3QsIEBvdGhl
ciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICIn
JF8nIiB9IEBvdGhlciApOyAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9
ICJNeVNlbnNvcnM6OkJpbmFyeSgkYWRkcmVzcywgJyRsb25nX25hbWUnLCAkcGFyZW50LCAkb3Ro
ZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiTVlTX0RPT1IiICkgew0KCSM8TXlT
ZW5zb3JzIChNWVNfRE9PUiksTVlTX0RPT1IsPiMNCiAgICAgICAgcmVxdWlyZSAnTXlTZW5zb3Jz
LnBtJzsNCiAgICAgICAgbXkgKCAkcGFyZW50LCAkbG9uZ19uYW1lICk7DQogICAgICAgICggJGFk
ZHJlc3MsICRuYW1lLCAkbG9uZ19uYW1lLCAkcGFyZW50LCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9
IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIg
fSBAb3RoZXIgKTsgICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiTXlT
ZW5zb3JzOjpEb29yKCRhZGRyZXNzLCAnJGxvbmdfbmFtZScsICRwYXJlbnQsICRvdGhlcikiOw0K
ICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJNWVNfTU9USU9OIiApIHsNCgkjPE15U2Vuc29y
cyAoTVlTX01PVElPTiksTVlTX01PVElPTiw+Iw0KICAgICAgICByZXF1aXJlICdNeVNlbnNvcnMu
cG0nOw0KICAgICAgICBteSAoICRwYXJlbnQsICRsb25nX25hbWUgKTsNCiAgICAgICAgKCAkYWRk
cmVzcywgJG5hbWUsICRsb25nX25hbWUsICRwYXJlbnQsICRncm91cGxpc3QsIEBvdGhlciApID0g
QGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9
IEBvdGhlciApOyAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJNeVNl
bnNvcnM6Ok1vdGlvbigkYWRkcmVzcywgJyRsb25nX25hbWUnLCAkcGFyZW50LCAkb3RoZXIpIjsN
CiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiTVlTX1RFTVBFUkFUVVJFIiApIHsNCgkjPE15
U2Vuc29ycyAoTVlTX1RFTVBFUkFUVVJFKSxNWVNfVEVNUEVSQVRVUkUsPiMNCiAgICAgICAgcmVx
dWlyZSAnTXlTZW5zb3JzLnBtJzsNCiAgICAgICAgbXkgKCAkcGFyZW50LCAkbG9uZ19uYW1lICk7
DQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkbG9uZ19uYW1lLCAkcGFyZW50LCAkZ3JvdXBs
aXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywg
KCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAgIyBRdW90ZSBkYXRhDQogICAgICAg
ICRvYmplY3QgPSAiTXlTZW5zb3JzOjpUZW1wZXJhdHVyZSgkYWRkcmVzcywgJyRsb25nX25hbWUn
LCAkcGFyZW50LCAkb3RoZXIpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiTVlTX0hV
TUlESVRZIiApIHsNCgkjPE15U2Vuc29ycyAoTVlTX0hVTUlESVRZKSxNWVNfSFVNSURJVFksPiMN
CiAgICAgICAgcmVxdWlyZSAnTXlTZW5zb3JzLnBtJzsNCiAgICAgICAgbXkgKCAkcGFyZW50LCAk
bG9uZ19uYW1lICk7DQogICAgICAgICggJGFkZHJlc3MsICRuYW1lLCAkbG9uZ19uYW1lLCAkcGFy
ZW50LCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9
IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVjdCA9ICJNeVNlbnNvcnM6
Okh1bWlkaXR5KCRhZGRyZXNzLCAnJGxvbmdfbmFtZScsICRwYXJlbnQsICRvdGhlcikiOw0KICAg
IH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJNWVNfTVVMVElNRVRFUiIgKSB7DQoJIzxNeVNlbnNv
cnMgKE1ZU19NVUxUSU1FVEVSKSxNWVNfTVVMVElNRVRFUiw+Iw0KICAgICAgICByZXF1aXJlICdN
eVNlbnNvcnMucG0nOw0KICAgICAgICBteSAoICRwYXJlbnQsICRsb25nX25hbWUgKTsNCiAgICAg
ICAgKCAkYWRkcmVzcywgJG5hbWUsICRsb25nX25hbWUsICRwYXJlbnQsICRncm91cGxpc3QsIEBv
dGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7
ICInJF8nIiB9IEBvdGhlciApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUXVv
dGUgZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIk15U2Vuc29yczo6TXVsdGltZXRlcigkYWRkcmVz
cywgJyRsb25nX25hbWUnLCAkcGFyZW50LCAkb3RoZXIpIjsNCiAgICB9DQoJCQkNCiAgICAjLS0t
LS0tLS0tLS0tLS0gQUQyIE9iamVjdHMgLS0tLS0tLS0tLS0tLS0tLS0NCiAgICBlbHNpZiAoICR0
eXBlIGVxICJBRDJfSU5URVJGQUNFIiApIHsNCgkjPEFkZW1jbyBBbGFybSAoQUQyX0lOVEVSRkFD
RSksQUQyX0lOVEVSRkFDRSxOYW1lLEluc3RhbmNlLE90aGVyPiMNCiAgICAgICAgcmVxdWlyZSBB
RDI7DQogICAgICAgIG15ICgkaW5zdGFuY2UpOw0KICAgICAgICAoICRuYW1lLCAkaW5zdGFuY2Us
ICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9p
biAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAg
ICAgJG9iamVjdCA9ICJBRDIoJyRpbnN0YW5jZScsJyRvdGhlcicpIjsNCiAgICB9DQogICAgZWxz
aWYgKCAkdHlwZSBlcSAiQUQyX0RPT1JfSVRFTSIgKSB7DQoJIzxBZGVtY28gQWxhcm0gKEFEMl9E
T09SX0lURU0pLEFEMl9ET09SX0lURU0sTmFtZSxJbnN0YW5jZSxab25lLFBhcnRpdGlvbixBZGRy
ZXNzICh0eXBlPWFkZHJlc3MpPiMNCiAgICAgICAgcmVxdWlyZSBBRDI7DQogICAgICAgIG15ICgg
JGluc3RhbmNlLCAkZXhwYW5kZXIsICRyZWxheSwgJHdpcmVsZXNzLCAkem9uZSwgJHBhcnRpdGlv
biApOw0KICAgICAgICAoICRuYW1lLCAkaW5zdGFuY2UsICR6b25lLCAkcGFydGl0aW9uLCAkYWRk
cmVzcywgJGdyb3VwbGlzdCwgQG90aGVyICkgPQ0KICAgICAgICAgIEBpdGVtX2luZm87DQogICAg
ICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBR
dW90ZSBkYXRhDQogICAgICAgIG15ICggJG1hcCwgJGFkZHJlc3MgKSA9IHNwbGl0KCAnPScsICRh
ZGRyZXNzICk7DQogICAgICAgICRleHBhbmRlciA9ICRhZGRyZXNzIGlmICggdWMoJG1hcCkgZXEg
IkVYUCIgKTsNCiAgICAgICAgJHJlbGF5ICAgID0gJGFkZHJlc3MgaWYgKCB1YygkbWFwKSBlcSAi
UkVMIiApOw0KICAgICAgICAkd2lyZWxlc3MgPSAkYWRkcmVzcyBpZiAoIHVjKCRtYXApIGVxICJS
RlgiICk7DQogICAgICAgICRvYmplY3QgPQ0KICAgICAgICAgICJBRDJfSXRlbSgnZG9vcicsJyRp
bnN0YW5jZScsJyR6b25lJywnJHBhcnRpdGlvbicsJyRleHBhbmRlcicsJyRyZWxheScsJyR3aXJl
bGVzcycsJyRvdGhlcicpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQUQyX01PVElP
Tl9JVEVNIiApIHsNCgkjPEFkZW1jbyBBbGFybSAoQUQyX01PVElPTl9JVEVNKSxBRDJfTU9USU9O
X0lURU0sTmFtZSxJbnN0YW5jZSxab25lLFBhcnRpdGlvbixBZGRyZXNzICh0eXBlPWFkZHJlc3Mp
PiMNCiAgICAgICAgcmVxdWlyZSBBRDI7DQogICAgICAgIG15ICggJGluc3RhbmNlLCAkZXhwYW5k
ZXIsICRyZWxheSwgJHdpcmVsZXNzLCAkem9uZSwgJHBhcnRpdGlvbiApOw0KICAgICAgICAoICRu
YW1lLCAkaW5zdGFuY2UsICR6b25lLCAkcGFydGl0aW9uLCAkYWRkcmVzcywgJGdyb3VwbGlzdCwg
QG90aGVyICkgPQ0KICAgICAgICAgIEBpdGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4g
JywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAg
IG15ICggJG1hcCwgJGFkZHJlc3MgKSA9IHNwbGl0KCAnPScsICRhZGRyZXNzICk7DQogICAgICAg
ICRleHBhbmRlciA9ICRhZGRyZXNzIGlmICggdWMoJG1hcCkgZXEgIkVYUCIgKTsNCiAgICAgICAg
JHJlbGF5ICAgID0gJGFkZHJlc3MgaWYgKCB1YygkbWFwKSBlcSAiUkVMIiApOw0KICAgICAgICAk
d2lyZWxlc3MgPSAkYWRkcmVzcyBpZiAoIHVjKCRtYXApIGVxICJSRlgiICk7DQogICAgICAgICRv
YmplY3QgPQ0KICAgICAgICAgICJBRDJfSXRlbSgnbW90aW9uJywnJGluc3RhbmNlJywnJHpvbmUn
LCckcGFydGl0aW9uJywnJGV4cGFuZGVyJywnJHJlbGF5JywnJHdpcmVsZXNzJywnJG90aGVyJyki
Ow0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJBRDJfR0VORVJJQ19JVEVNIiApIHsNCgkj
PEFkZW1jbyBBbGFybSAoQUQyX0dFTkVSSUNfSVRFTSksQUQyX0dFTkVSSUNfSVRFTSxOYW1lLElu
c3RhbmNlLFpvbmUsUGFydGl0aW9uLEFkZHJlc3MgKHR5cGU9YWRkcmVzcyk+Iw0KICAgICAgICBy
ZXF1aXJlIEFEMjsNCiAgICAgICAgbXkgKCAkaW5zdGFuY2UsICRleHBhbmRlciwgJHJlbGF5LCAk
d2lyZWxlc3MsICR6b25lLCAkcGFydGl0aW9uICk7DQogICAgICAgICggJG5hbWUsICRpbnN0YW5j
ZSwgJHpvbmUsICRwYXJ0aXRpb24sICRhZGRyZXNzLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9DQog
ICAgICAgICAgQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7
ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgbXkgKCAkbWFwLCAk
YWRkcmVzcyApID0gc3BsaXQoICc9JywgJGFkZHJlc3MgKTsNCiAgICAgICAgJGV4cGFuZGVyID0g
JGFkZHJlc3MgaWYgKCB1YygkbWFwKSBlcSAiRVhQIiApOw0KICAgICAgICAkcmVsYXkgICAgPSAk
YWRkcmVzcyBpZiAoIHVjKCRtYXApIGVxICJSRUwiICk7DQogICAgICAgICR3aXJlbGVzcyA9ICRh
ZGRyZXNzIGlmICggdWMoJG1hcCkgZXEgIlJGWCIgKTsNCiAgICAgICAgJG9iamVjdCA9DQogICAg
ICAgICAgIkFEMl9JdGVtKCcnLCckaW5zdGFuY2UnLCckem9uZScsJyRwYXJ0aXRpb24nLCckZXhw
YW5kZXInLCckcmVsYXknLCckd2lyZWxlc3MnLCckb3RoZXInKSI7DQogICAgfQ0KICAgIGVsc2lm
ICggJHR5cGUgZXEgIkFEMl9QQVJUSVRJT04iICkgew0KCSM8QWRlbWNvIEFsYXJtIChBRDJfUEFS
VElUSU9OKSxBRDJfUEFSVElUSU9OLE5hbWUsSW5zdGFuY2UsUGFydGl0aW9uLEFkZHJlc3MsT3Ro
ZXI+Iw0KICAgICAgICByZXF1aXJlIEFEMjsNCiAgICAgICAgbXkgKCAkaW5zdGFuY2UsICRudW1i
ZXIgKTsNCiAgICAgICAgKCAkbmFtZSwgJGluc3RhbmNlLCAkbnVtYmVyLCAkYWRkcmVzcywgJGdy
b3VwbGlzdCwgQG90aGVyICkgPQ0KICAgICAgICAgIEBpdGVtX2luZm87DQogICAgICAgICRvdGhl
ciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBAb3RoZXIgKTsgICAgIyBRdW90ZSBkYXRh
DQogICAgICAgICRvYmplY3QgPSAiQUQyX1BhcnRpdGlvbignJGluc3RhbmNlJywnJG51bWJlcics
JyRhZGRyZXNzJywnJG90aGVyJykiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJBRDJf
T1VUUFVUIiApIHsNCgkjPEFkZW1jbyBBbGFybSAoQUQyX09VVFBVVCksQUQyX09VVFBVVCxOYW1l
LEluc3RhbmNlLE91dHB1dF9OdW1iZXIgKFplcm8gUGFkZGVkKSxPdGhlcj4jDQogICAgICAgIHJl
cXVpcmUgQUQyOw0KICAgICAgICBteSAoICRpbnN0YW5jZSwgJG91dHB1dCApOw0KICAgICAgICAo
ICRuYW1lLCAkaW5zdGFuY2UsICRvdXRwdXQsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1f
aW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhl
ciApOyAgICAgICAgICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICAkb2JqZWN0ID0gIkFEMl9PdXRw
dXQoJyRpbnN0YW5jZScsJyRvdXRwdXQnLCckb3RoZXInKSI7DQogICAgfQ0KDQogICAgIy0tLS0t
LS0tLS0tLS0tIEVuZCBBRDIgT2JqZWN0cyAtLS0tLS0tLS0tLS0tDQogICAgIy0tLS0tLS0tLS0t
LS0tIEFsZXhhIE9iamVjdHMgLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgIzxIdWUgRW11bGF0
aW9uIChBTEVYQV9CUklER0UpLEFMRVhBX0JSSURHRSxOYW1lPiMNCiAgICAgICAgIzxIdWUgRW11
bGF0aW9uIChBTEVYQUJSSURHRV9JVEVNKSxBTEVYQUJSSURHRV9JVEVNLE5hbWUsUGFyZW50PiMN
CiAgICAgICAgIzxIdWUgRW11bGF0aW9uIChBTEVYQUJSSURHRV9BREQpLEFMRVhBQlJJREdFX0FE
RCxQYXJlbnQsUmVhbG5hbWUsTmFtZSxTdWIsT24sT2ZmLFN0YXRlc3ViPiMNCiAgICAgICAgIzxB
bWF6b24gRWNobyAoQUxFWEFfQlJJREdFKSxBTEVYQV9CUklER0UsTmFtZT4jDQogICAgICAgICM8
QW1hem9uIEVjaG8gKEFMRVhBQlJJREdFX0lURU0pLEFMRVhBQlJJREdFX0lURU0sTmFtZSxQYXJl
bnQ+Iw0KICAgICAgICAjPEFtYXpvbiBFY2hvIChBTEVYQUJSSURHRV9BREQpLEFMRVhBQlJJREdF
X0FERCxQYXJlbnQsUmVhbG5hbWUsTmFtZSxTdWIsT24sT2ZmLFN0YXRlc3ViPiMNCiAgICBlbHNp
ZiAoKCAkdHlwZSBlcSAiQUxFWF9CUklER0UiICkgb3IgKCAkdHlwZSBlcSAiQUxFWEFfQlJJREdF
IiApKSB7DQogICAgICAgICM8R29vZ2xlIEhvbWUgKEFMRVhBX0JSSURHRSksQUxFWEFfQlJJREdF
LE5hbWU+Iw0KICAgICAgICByZXF1aXJlICdBbGV4YUJyaWRnZS5wbSc7DQogICAgICAgICggJG5h
bWUgKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvYmplY3QgPSAiQWxleGFCcmlkZ2UoJyRvdGhl
cicpIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQUxFWEFCUklER0VfSVRFTSIgKSB7
DQogICAgICAgICM8R29vZ2xlIEhvbWUgKEFMRVhBQlJJREdFX0lURU0pLEFMRVhBQlJJREdFX0lU
RU0sTmFtZSxQYXJlbnQ+Iw0KICAgICAgICByZXF1aXJlICdBbGV4YUJyaWRnZS5wbSc7DQogICAg
ICAgIG15ICggJHBhcmVudCApOw0KICAgICAgICAoICRuYW1lLCAkcGFyZW50ICkgPSBAaXRlbV9p
bmZvOw0KICAgICAgICAkb2JqZWN0ID0gIkFsZXhhQnJpZGdlX0l0ZW0oXCQkcGFyZW50KSI7DQog
ICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIkFMRVhBQlJJREdFX0FERCIgKSB7DQogICAgICAg
ICM8R29vZ2xlIEhvbWUgKEFMRVhBQlJJREdFX0FERCksQUxFWEFCUklER0VfQURELFBhcmVudCxS
ZWFsbmFtZSxOYW1lLFN1YixPbixPZmYsU3RhdGVzdWI+Iw0KICAgICAgICBteSAoICRwYXJlbnQs
ICRyZWFsbmFtZSwgJG5hbWUsICRzdWIsICRvbiwgJG9mZiwgJHN0YXRlc3ViLCBAb3RoZXIgKSA9
IEBpdGVtX2luZm87DQogICAgICAgIGlmICgkc3ViID1+IC9eJi8pIHsgJHN1YiA9fiBzLyYvXFwm
LyB9DQogICAgICAgIGlmICgkc3ViID1+IC9eXFxcXCYvKSB7ICRzdWIgPX4gcy9cXC8vIH0NCiAg
ICAgICAgaWYgKCRzdWIgPX4gL3J1bl92b2ljZV9jbWQvKSB7ICRyZWFsbmFtZSA9fiBzL18vIC9n
IH0NCiAgICAgICAgdW5sZXNzICggKCRzdWIgPX4gL3J1bl92b2ljZV9jbWQvKSB8fCAoJHN1YiA9
fiAvJi8pICkgeyAkcmVhbG5hbWUgPSAiXCQkcmVhbG5hbWUiIH0NCiAgICAgICAgdW5sZXNzICgg
JHN1YiA9fiAvJi8gKSB7ICRzdWIgPSAiJyIuJHN1Yi4iJyIgfQ0KICAgICAgICBteSAkb3RoZXIg
PSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7ICAgICMgUXVvdGUgZGF0YQ0K
ICAgICAgICBpZiAoICEkcGFja2FnZXN7QWxleGFCcmlkZ2V9KysgKSB7ICMgZmlyc3QgdGltZSBm
b3IgdGhpcyBvYmplY3QgdHlwZT8NCiAgICAgICAgICAgICRjb2RlIC49ICJ1c2UgQWxleGFCcmlk
Z2U7XG4iOw0KICAgICAgICB9DQogICAgICAgICRjb2RlIC49IHNwcmludGYgIlwkJS0zNXMgLT4g
YWRkKCckcmVhbG5hbWUnLCckbmFtZScsJHN1YiwnJG9uJywnJG9mZicsJyRzdGF0ZXN1YicsJG90
aGVyKTtcbiIsICRwYXJlbnQ7DQogICAgICAgICRvYmplY3QgPSAnJzsNCiAgICB9DQogICAgIy0t
LS0tLS0tLS0tLS0tIEVuZCBBbGV4YSBPYmplY3RzIC0tLS0tLS0tLS0tLS0tLS0NCiAgICAjLS0t
LS0tLS0tLS0tLS0gQm9uZEhvbWUgT2JqZWN0cyAtLS0tLS0tLS0tLS0tLS0tLQ0KICAgIGVsc2lm
ICggJHR5cGUgZXEgIkJPTkRIT01FIiApIHsNCiAgICAgICAgIzxCb25kIEhvbWUgKEJPTkRIT01F
KSxCT05ESE9NRSxOYW1lLEluc3RhbmNlPiMNCiAgICAgICAgcmVxdWlyZSAnQm9uZEhvbWUucG0n
Ow0KCSRjb2RlIC49ICcjbm9sb29wPXN0YXJ0Jy4iXG4iOw0KICAgICAgICBteSAoJGluc3RhbmNl
KTsNCiAgICAgICAgKCAkbmFtZSwgJGluc3RhbmNlLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBp
dGVtX2luZm87DQogICAgICAgICRvdGhlciA9IGpvaW4gJywgJywgKCBtYXAgeyAiJyRfJyIgfSBA
b3RoZXIgKTsgICAgIyBRdW90ZSBkYXRhDQogICAgICAgICRvYmplY3QgPSAiQm9uZEhvbWUoJyRp
bnN0YW5jZScsJyRvdGhlcicpIi4nOycuIlxuIi4nI25vbG9vcD1zdG9wJy4iXG4iOw0KICAgIH0N
CiAgICBlbHNpZiAoICR0eXBlIGVxICJCT05ESE9NRV9ERVZJQ0UiICkgew0KICAgICAgICAjPEJv
bmQgSG9tZSAoQk9OREhPTUVfREVWSUNFKSxCT05ESE9NRV9ERVZJQ0UsTmFtZSxJbnN0YW5jZSxC
b25kRGV2TmFtZT4jDQoJcmVxdWlyZSAnQm9uZEhvbWUucG0nOw0KCSRjb2RlIC49ICcjbm9sb29w
PXN0YXJ0Jy4iXG4iOw0KCW15ICgkaW5zdGFuY2UsICRib25kZGV2bmFtZSk7DQogICAgICAgICgg
JG5hbWUsICRpbnN0YW5jZSwgJGJvbmRkZXZuYW1lLCAkZ3JvdXBsaXN0LCBAb3RoZXIgKSA9IEBp
dGVtX2luZm87DQoJJG90aGVyID0gam9pbiAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciAp
Ow0KICAgICAgICAkb2JqZWN0ID0gIkJvbmRIb21lX0RldmljZSgnJGluc3RhbmNlJywnJGJvbmRk
ZXZuYW1lJykiLic7Jy4iXG4iLicjbm9sb29wPXN0b3AnLiJcbiI7DQoJJGNvZGUgLj0gJyNub2xv
b3A9c3RvcCcuIlxuIjsNCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQk9OREhPTUVfTUFO
VUFMIiApIHsNCiAgICAgICAgIzxCb25kIEhvbWUgKEJPTkRIT01FX01BTlVBTCksQk9OREhPTUVf
TUFOVUFMLE5hbWUsSW5zdGFuY2U+Iw0KCXJlcXVpcmUgJ0JvbmRIb21lLnBtJzsNCgkkY29kZSAu
PSAnI25vbG9vcD1zdGFydCcuIlxuIjsNCiAgICAgICAgbXkgKCRpbnN0YW5jZSk7DQogICAgICAg
ICggJG5hbWUsICRpbnN0YW5jZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0K
ICAgICAgICAkb3RoZXIgPSBqb2luICcsICcsICggbWFwIHsgIickXyciIH0gQG90aGVyICk7DQog
ICAgICAgICRvYmplY3QgPSAiQm9uZEhvbWVfTWFudWFsKCckaW5zdGFuY2UnKSIuJzsnLiJcbiIu
JyNub2xvb3A9c3RvcCcuIlxuIjsNCgkkY29kZSAuPSAnI25vbG9vcD1zdG9wJy4iXG4iOw0KICAg
IH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJCT05ESE9NRV9NQU5VQUxfQ01EIiApIHsNCiAgICAg
ICAgIzxCb25kIEhvbWUgKEJPTkRIT01FX01BTlVBTF9DTUQpLEJPTkRIT01FX01BTlVBTF9DTUQs
Qm9uZEhvbWVNYW51YWxPYmplY3QsQ29tbWFuZE5hbWUsRnJlcXVlbmN5LE1vZHVsYXRpb24sRW5j
b2RpbmcsQnBzLFJlcHMsRGF0YT4jDQogICAgICAgICRjb2RlIC49ICcjbm9sb29wPXN0YXJ0Jy4i
XG4iOw0KCW15ICgkcGFyZW50LCAkY21kbmFtZSwgJGZyZXF1ZW5jeSwgJG1vZHVsYXRpb24sICRl
bmNvZGluZywgJGJwcywgJHJlcHMsICRkYXRhKSA9IEBpdGVtX2luZm87Ow0KCSRjb2RlIC49IHNw
cmludGYgIlwkJS0zNXMgLT4gYWRkY21kKCckY21kbmFtZScsICckZnJlcXVlbmN5JywgJyRtb2R1
bGF0aW9uJywgJyRlbmNvZGluZycsICckYnBzJywgJyRyZXBzJywgJyRkYXRhJyk7XG4iLCAkcGFy
ZW50Ow0KICAgICAgICAkb2JqZWN0ID0gJyc7DQoJJGNvZGUgLj0gJyNub2xvb3A9c3RvcCcuIlxu
IjsNCiAgICB9DQogICAgIy0tLS0tLS0tLS0tLS0tIEVuZCBCb25kSG9tZSBPYmplY3RzIC0tLS0t
LS0tLS0tLS0tLS0tDQogICAgIy0tLS0tLS0tLS0tLS0tIEFvR1NtYXJ0SG9tZSBPYmplY3RzIC0t
LS0tLS0tLS0tLS0tLS0tDQogICAgZWxzaWYgKCAkdHlwZSBlcSAiQU9HU01BUlRIT01FX0lURU1T
IiApIHsNCgkjPEFjdGlvbnMgb24gR29vZ2xlIChBT0dTTUFSVEhPTUVfSVRFTVMpLEFPR1NNQVJU
SE9NRV9JVEVNUyxOYW1lPiMNCiAgICAgICAgcmVxdWlyZSAnQW9HU21hcnRIb21lX0l0ZW1zLnBt
JzsNCiAgICAgICAgKCRuYW1lKSA9IEBpdGVtX2luZm87DQogICAgICAgICRvYmplY3QgPSAiQW9H
U21hcnRIb21lX0l0ZW1zKCkiOw0KICAgIH0NCiAgICBlbHNpZiAoICR0eXBlIGVxICJBT0dTTUFS
VEhPTUVfSVRFTSIgKSB7DQoJIzxBY3Rpb25zIG9uIEdvb2dsZSAoQU9HU01BUlRIT01FX0lURU0p
LEFPR1NNQVJUSE9NRV9JVEVNLFBhcmVudCxSZWFsbmFtZSxOYW1lLFN1YixPbixPZmYsU3RhdGVz
dWIsUHJvcGVydGllcz4jDQogICAgICAgIG15ICgkcGFyZW50LCAkcmVhbG5hbWUsICRuYW1lLCAk
c3ViLCAkb24sICRvZmYsICRzdGF0ZXN1YiwgQG90aGVyKSA9IEBpdGVtX2luZm87DQogICAgICAg
ICRzdWIgPX4gcyVeJiVcXCYlOyAjICImbXlfc3Vicm91dGluZSIgLT4gIlwmbXlfc3Vicm91dGlu
ZSINCiAgICAgICAgJHN1YiA9fiBzJV5cXFxcJiVcXCYlOyAjICJcXCZteV9zdWJyb3V0aW5lIiAt
PiAiXCZteV9zdWJyb3V0aW5lIg0KICAgICAgICAkc3ViID0gIickc3ViJyIgaWYgJHN1YiAhfiAv
Ji87DQogICAgICAgICRzdGF0ZXN1YiA9fiBzJV4mJVxcJiU7ICMgIiZteV9zdWJyb3V0aW5lIiAt
PiAiXCZteV9zdWJyb3V0aW5lIg0KICAgICAgICAkc3RhdGVzdWIgPX4gcyVeXFxcXCYlXFwmJTsg
IyAiXFwmbXlfc3Vicm91dGluZSIgLT4gIlwmbXlfc3Vicm91dGluZSINCiAgICAgICAgJHN0YXRl
c3ViID0gIickc3RhdGVzdWInIiBpZiAkc3RhdGVzdWIgIX4gLyYvOw0KICAgICAgICAkcmVhbG5h
bWUgPSAiXCQkcmVhbG5hbWUiIGlmICRyZWFsbmFtZTsNCiAgICAgICAgbXkgJG90aGVyID0gam9p
biAnLCAnLCAoIG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAg
ICAgaWYgKCEkcGFja2FnZXN7QW9HU21hcnRIb21lX0l0ZW1zfSsrICkgeyAjIGZpcnN0IHRpbWUg
Zm9yIHRoaXMgb2JqZWN0IHR5cGU/DQogICAgICAgICAgICAkY29kZSAuPSAidXNlIEFvR1NtYXJ0
SG9tZV9JdGVtcztcbiI7DQogICAgICAgIH0NCiAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAiXCQl
LTM1cyAtPiBhZGQoJyRyZWFsbmFtZScsJyRuYW1lJywkc3ViLCckb24nLCckb2ZmJywkc3RhdGVz
dWIsJG90aGVyKTtcbiIsICRwYXJlbnQ7DQogICAgICAgICRvYmplY3QgPSAnJzsNCiAgICB9DQog
ICAgIy0tLS0tLS0tLS0tLS0tIEVuZCBBb0dTbWFydEhvbWUgT2JqZWN0cyAtLS0tLS0tLS0tLS0t
LS0tDQogICAgIy0tLS0tLS0tLS0tLS0tIE1RVFQgT2JqZWN0cyAtLS0tLS0tLS0tLS0tLS0tLQ0K
ICAgIGVsc2lmICggJHR5cGUgZXEgIk1RVFRfQlJPS0VSIiApIHsNCiAgICAgICAgICMgdGhlcmUg
bXVzdCBiZSBvbmUgcmVjb3JkIGZvciB0aGUgYnJva2VyIGFib3ZlIGFueSBNUVRUX0RFVklDRSBk
ZWZpbml0aW9ucw0KICAgICAgICAjIGl0IHRha2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0DQogICAg
ICAgICMgTVFUVF9CUk9LRVIsIG5hbWVfb2ZfYnJva2VyDQogICAgICAgICMgZS5nLk1RVFRfQlJP
S0VSLCBtcXR0XzENCiAgICAgICAgcmVxdWlyZSAnbXF0dC5wbSc7DQogICAgICAgIG15ICggJG5h
bWUsICR0b3BpYywgJGhvc3QsICRwb3J0LCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJGtlZXBhbGl2
ZSwgJG9wdGlvbnMgKSA9IEBpdGVtX2luZm87DQoJJHRvcGljID1+IHMvXCovIy9nOw0KICAgICAg
ICAkY29kZSAuPSBzcHJpbnRmKCAiXG5cJCUtMzVzID0gbmV3IG1xdHQoXCIlc1wiLCAnJGhvc3Qn
LCAnJHBvcnQnLCAnJHRvcGljJywgJyR1c2VybmFtZScsICckcGFzc3dvcmQnLCAka2VlcGFsaXZl
LCAnJG9wdGlvbnMnICk7XG4iLCAkbmFtZSwgJG5hbWUgKTsNCiAgICB9DQogICAgZWxzaWYgKCAk
dHlwZSBlcSAiTVFUVF9ERVZJQ0UiICkgew0KICAgICAgICAjIHRoZXJlIGlzIG9uZSByZWNvcmQg
cGVyIG1xdHQgZGV2aWNlIGFuZCBpdCBtdXN0IGJlIGJlbG93IHRoZSBNUVRUX0JST0tFUiBkZWZp
bml0aW9uDQogICAgICAgICMgaXQgdGFrZXMgdGhlIGZvbGxvd2luZyBmb3JtDQogICAgICAgICMg
TVFUVF9ERVZJQ0UsIG5hbWVfb2ZfZGV2aWNlLCBncm91cHMsIG5hbWVfb2ZfYnJva2VyLCB0b3Bp
Yw0KICAgICAgICAjIGUuZy4gTVFUVF9ERVZJQ0UsIE1RVFRfdGVzdCwgS2l0Y2hlbiwgbXF0dF8x
LCBzdGF0L21oX21xdHRfdGVzdC9TRU5TT1INCiAgICAgICAgIyBpZiB0aGUgZGV2aWNlIGlzIHRv
IHRyYW5zbWl0IHRvIE1ILCBpdHMgdG9waWMgbXVzdCBtYXRjaCB0aGUNCiAgICAgICAgIyBjb25m
aWcgcGFyYW1ldGVyIG1xdHRfdG9waWMgaW4gdGhlIG1oLmluaSBmaWxlICAgDQogICAgICAgIHJl
cXVpcmUgJ21xdHQucG0nOw0KICAgICAgICBteSAoJE1RVFRfYnJva2VyX25hbWUsICRNUVRUX3Rv
cGljKTsNCiAgICAgICAgKCAkbmFtZSwgJGdyb3VwbGlzdCwgJE1RVFRfYnJva2VyX25hbWUsICRN
UVRUX3RvcGljICkgPSBAaXRlbV9pbmZvOw0KICAgICAgIA0KICAgICAgICAkY29kZSAuPSBzcHJp
bnRmKCAiXG5cJCUtMzVzID0gbmV3IG1xdHRfSXRlbShcJCVzXCxcIiVzXCIpO1xuIiwNCiAgICAg
ICAgICAgICRuYW1lLCAkTVFUVF9icm9rZXJfbmFtZSwgJE1RVFRfdG9waWMgKTsNCiAgICAgICAN
CiAgICB9DQogICAgZWxzaWYoICR0eXBlIGVxICJNUVRUX0xPQ0FMSVRFTSIgKSB7DQoJIyAkc3Rh
dGV0b3BpYyBhbmQgJGNtbmR0b3BpYyBhcmUgb3B0aW9uYWwgYW5kIGhhdmUgZGVmYXVsdHMgYmFz
ZWQgb24gJHR5cGUuDQoJbXkgKCRsb2NhbF9vYmpfbmFtZSwgJGJyb2tlciwgJHR5cGUsICR0b3Bp
Y3ByZWZpeCwgJGRpc2NvdmVyYWJsZSwgJGZyaWVuZGx5X25hbWUsICRzdGF0ZXRvcGljLCAkY21u
ZHRvcGljKTsNCgkoJG5hbWUsICRsb2NhbF9vYmpfbmFtZSwgJGJyb2tlciwgJHR5cGUsICR0b3Bp
Y3ByZWZpeCwgJGRpc2NvdmVyYWJsZSwgJGZyaWVuZGx5X25hbWUsICRzdGF0ZXRvcGljLCAkY21u
ZHRvcGljKSA9IEBpdGVtX2luZm87DQoJcmVxdWlyZSBtcXR0X2l0ZW1zOw0KCWlmKCAkYnJva2Vy
ICkgew0KCSAgICAkYnJva2VyID0gJyQnIC4gJGJyb2tlcjsNCgl9IGVsc2Ugew0KCSAgICAkYnJv
a2VyID0gJ3VuZGVmJzsNCgl9DQoJJGNvZGUgLj0gIlwkJHtuYW1lfSA9IG5ldyBtcXR0X0xvY2Fs
SXRlbSggJHticm9rZXJ9LCAnJG5hbWUnLCAnJHR5cGUnLCBcJCRsb2NhbF9vYmpfbmFtZSwgJyR0
b3BpY3ByZWZpeCcsICRkaXNjb3ZlcmFibGUsICckZnJpZW5kbHlfbmFtZScsICckc3RhdGV0b3Bp
YycsICckY21uZHRvcGljJyApO1xuIjsNCiAgICB9DQogICAgZWxzaWYoICR0eXBlIGVxICJNUVRU
X1JFTU9URUlURU0iICkgew0KCSMgJHN0YXRldG9waWMgJGNtbmR0b3BpYyBhcmUgb3B0aW9uYWwg
YW5kIGhhdmUgZGVmYXVsdHMgYmFzZWQgb24gJHR5cGUuDQoJKCRuYW1lLCAkZ3JvdXBsaXN0KSA9
IEBpdGVtX2luZm87CSMgTmVlZCB0aGVzZSB0byBzdGF5IGluIHNjb3BlLCBzbyB3ZSBjYW4gYXNz
aWduIGdyb3Vwcy4NCglteSAoJGJyb2tlciwgJHR5cGUsICR0b3BpY3ByZWZpeCwgJGRpc2NvdmVy
YWJsZSwgJGZyaWVuZGx5X25hbWUsICRzdGF0ZXRvcGljLCAkY21uZHRvcGljKTsNCgkoJG5hbWUs
ICRncm91cGxpc3QsICRicm9rZXIsICR0eXBlLCAkdG9waWNwcmVmaXgsICRkaXNjb3ZlcmFibGUs
ICRmcmllbmRseV9uYW1lLCAkc3RhdGV0b3BpYywgJGNtbmR0b3BpYykgPSBAaXRlbV9pbmZvOw0K
CXJlcXVpcmUgbXF0dF9pdGVtczsNCgkkY29kZSAuPSAiXCQke25hbWV9ID0gbmV3IG1xdHRfUmVt
b3RlSXRlbSggXCQke2Jyb2tlcn0sICckdHlwZScsICckdG9waWNwcmVmaXgnLCAkZGlzY292ZXJh
YmxlLCAnJGZyaWVuZGx5X25hbWUnLCAnJHN0YXRldG9waWMnLCAnJGNtbmR0b3BpYycpO1xuIjsN
CiAgICB9DQogICAgZWxzaWYoICR0eXBlIGVxICJNUVRUX0lOU1RNUVRUIiApIHsNCglteSAoJGJy
b2tlciwgJHR5cGUsICR0b3BpY3ByZWZpeCwgJGRpc2NvdmVyYWJsZSwgJGZyaWVuZGx5X25hbWUp
Ow0KCSgkbmFtZSwgJGdyb3VwbGlzdCwgJGJyb2tlciwgJHR5cGUsICR0b3BpY3ByZWZpeCwgJGRp
c2NvdmVyYWJsZSwgJGZyaWVuZGx5X25hbWUpID0gQGl0ZW1faW5mbzsNCglyZXF1aXJlIG1xdHRf
aXRlbXM7DQoJJGNvZGUgLj0gIlwkJHtuYW1lfSA9IG5ldyBtcXR0X0luc3RNcXR0SXRlbSggXCQk
e2Jyb2tlcn0sICckdHlwZScsICckdG9waWNwcmVmaXgnLCAkZGlzY292ZXJhYmxlLCAnJGZyaWVu
ZGx5X25hbWUnICk7XG4iOw0KICAgIH0NCiAgICBlbHNpZiggJHR5cGUgZXEgIk1RVFRfRElTQ09W
RVJZIiApIHsNCglteSAoJGRpc2NvdmVyeV90b3BpYywgJGJyb2tlciwgJGFjdGlvbik7DQoJKCRu
YW1lLCAkZGlzY292ZXJ5X3RvcGljLCAkYnJva2VyLCAkYWN0aW9uKSA9IEBpdGVtX2luZm87DQoJ
cmVxdWlyZSBtcXR0X2Rpc2NvdmVyeTsNCglyZXF1aXJlIG1xdHRfaXRlbXM7DQoJJGNvZGUgLj0g
IlwkJHtuYW1lfSA9IG5ldyBtcXR0X0Rpc2NvdmVyeSggXCQke2Jyb2tlcn0sICckbmFtZScsICck
ZGlzY292ZXJ5X3RvcGljJywgJyRhY3Rpb24nICk7ICAjbm9sb29wXG4iOw0KICAgIH0NCiAgICBl
bHNpZiggJHR5cGUgZXEgIk1RVFRfRElTQ09WRVJFRElURU0iICkgew0KCW15ICgkZGlzY19uYW1l
LCAkZGlzY190b3BpYywgJGRpc2NfbXNnICk7IA0KCSgkbmFtZSwgJGRpc2NfbmFtZSwgJGRpc2Nf
dG9waWMsICRkaXNjX21zZyApID0gJHJlY29yZCA9fiAvTVFUVF9ESVNDT1ZFUkVESVRFTVxzKixc
cyooW14sXSspLFxzKihbXixdKyksXHMqKFteLF0rKVwsXHMqKC4qKSQvOw0KCSRuYW1lID1+IHMv
XHMqJC8vOw0KCSRkaXNjX25hbWUgPX4gcy9ccyokLy87DQoJJGRpc2NfdG9waWMgPX4gcy9ccyok
Ly87DQoJJGRpc2NfbXNnID1+IHMvXHMqJC8vOw0KCSRkaXNjX21zZyA9fiBzL1wnL1xcJy9nOw0K
CSRjb2RlIC49ICJcJCR7bmFtZX0gPSBuZXcgbXF0dF9EaXNjb3ZlcmVkSXRlbSggXCQke2Rpc2Nf
bmFtZX0sICckbmFtZScsICckZGlzY190b3BpYycsICckZGlzY19tc2cnLCAnc3RhdGljJyApO1xu
IjsNCiAgICB9DQogICAgZWxzaWYoICR0eXBlIGVxICJNUVRUX1JBV0lURU0iICkgew0KCW15ICgk
ZGlzY19uYW1lLCAkZGlzY190b3BpYywgJGRpc2NfbXNnICk7IA0KCSgkbmFtZSwgJGRpc2NfbmFt
ZSwgJGRpc2NfdG9waWMsICRkaXNjX21zZyApID0gJHJlY29yZCA9fiAvTVFUVF9SQVdJVEVNXHMq
LFxzKihbXixdKyksXHMqKFteLF0rKSxccyooW14sXSspXCxccyooLiopJC87DQoJJG5hbWUgPX4g
cy9ccyokLy87DQoJJGRpc2NfbmFtZSA9fiBzL1xzKiQvLzsNCgkkZGlzY190b3BpYyA9fiBzL1xz
KiQvLzsNCgkkZGlzY19tc2cgPX4gcy9ccyokLy87DQoJJGRpc2NfbXNnID1+IHMvXCcvXFwnL2c7
DQoJJGNvZGUgLj0gIlwkJHtuYW1lfSA9IG5ldyBtcXR0X0Rpc2NvdmVyZWRJdGVtKCBcJCR7ZGlz
Y19uYW1lfSwgJyRuYW1lJywgJyRkaXNjX3RvcGljJywgJyRkaXNjX21zZycsICdyYXcnICk7XG4i
Ow0KICAgIH0NCiAgICAjLS0tLS0tLS0tLS0tLS0gRW5kIE1RVFQgT2JqZWN0cyAtLS0tLS0tLS0t
LS0tLS0tDQogICAgIy0tLS0tLS0tLS0tLS0tIEhvbWUgQXNzaXN0YW50IE9iamVjdHMgLS0tLS0t
LS0tLS0tLS0tLS0NCiAgICBlbHNpZiggJHR5cGUgZXEgIkhBX1NFUlZFUiIgKSB7DQogICAgbXkg
KCRrZWVwYWxpdmUsICRhcGlfa2V5KTsNCgkoJG5hbWUsICRhZGRyZXNzLCAka2VlcGFsaXZlLCAk
YXBpX2tleSwgQG90aGVyKSA9IEBpdGVtX2luZm87DQoJcmVxdWlyZSBIQV9JdGVtOw0KCSRjb2Rl
IC49ICJcJCR7bmFtZX0gPSBuZXcgSEFfU2VydmVyKCAnJG5hbWUnLCAnJGFkZHJlc3MnLCAnJGtl
ZXBhbGl2ZScsICckYXBpX2tleScgKTtcbiI7DQogICAgfQ0KICAgIGVsc2lmKCAkdHlwZSBlcSAi
SEFfSVRFTSIgKSB7DQogICAgbXkgKCRkb21haW4sICRlbnRpdHksICRoYV9zZXJ2ZXIsICRvcHRp
b25zKTsNCgkoJG5hbWUsICRkb21haW4sICRlbnRpdHksICRoYV9zZXJ2ZXIsICRncm91cGxpc3Qs
ICRvcHRpb25zLCBAb3RoZXIpID0gQGl0ZW1faW5mbzsNCglyZXF1aXJlIEhBX0l0ZW07DQoJJGNv
ZGUgLj0gIlwkJHtuYW1lfSA9IG5ldyBIQV9JdGVtKCAnJGRvbWFpbicsICckZW50aXR5JywgXCQk
aGFfc2VydmVyICI7DQoJJGNvZGUgLj0gIiwnJG9wdGlvbnMnICIgaWYgKCRvcHRpb25zKTsNCgkk
Y29kZSAuPSAiKTtcbiI7DQogICAgfQ0KICAgICMtLS0tLS0tLS0tLS0tLSBFbmQgSG9tZSBBc3Np
c3RhbnQgT2JqZWN0cyAtLS0tLS0tLS0tLS0tLS0tLQ0KICAgIGVsc2lmICggJHR5cGUgPX4gL1BM
Q0JVU18uKi8gKSB7DQoJIzwsUExDQlVTX1NjZW5lLEFkZHJlc3MsTmFtZSxHcm91cHMsRGVmYXVs
dHxTY2VuZXM+Iw0KICAgICAgICByZXF1aXJlIFBMQ0JVUzsNCiAgICAgICAgKCAkYWRkcmVzcywg
JG5hbWUsICRncm91cGxpc3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgKCAkb2Jq
ZWN0LCAkZ3JvdXBsaXN0LCAkYWRkaXRpb25hbF9jb2RlICkgPSBQTENCVVMtPmdlbmVyYXRlX2Nv
ZGUoICR0eXBlLCBAaXRlbV9pbmZvICk7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIldJ
TksiICkgew0KCSM8LFdJTkssPiMNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICRncm91cGxp
c3QsIEBvdGhlciApID0gQGl0ZW1faW5mbzsNCiAgICAgICAgJG90aGVyID0gam9pbiAnLCAnLCAo
IG1hcCB7ICInJF8nIiB9IEBvdGhlciApOyAgICAjIFF1b3RlIGRhdGENCiAgICAgICAgJG9iamVj
dCA9ICJXaW5rKCckYWRkcmVzcycsJG90aGVyKSI7DQogICAgICAgIGlmICggISRwYWNrYWdlc3tX
aW5rfSsrICkgeyAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCB0aW1lIGZvciB0aGlzIG9i
amVjdCB0eXBlPw0KICAgICAgICAgICAgJGNvZGUgLj0gInVzZSBXaW5rO1xuIjsNCiAgICAgICAg
ICAgICY6Ok1haW5Mb29wX3ByZV9hZGRfaG9vayggXCZXaW5rOjpHZXREZXZpY2VzQW5kU3RhdHVz
LCAxICk7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiS0FTQSIgKSB7
DQogICAgICAgIHJlcXVpcmUgS2FzYV9JdGVtOw0KICAgICAgICBteSAoICR0eXBlLCAkaW5kZXgg
KTsNCiAgICAgICAgKCAkYWRkcmVzcywgJG5hbWUsICR0eXBlLCAkaW5kZXgsICRncm91cGxpc3Qg
KSA9IEBpdGVtX2luZm87DQogICAgICAgICMgQ2hlY2sgaWYgZGV2aWNlIGhhcyBhbiBpbmRleCAN
CiAgICAgICAgaWYgKCRpbmRleCBlcSAnJykgew0KICAgICAgICAgICAgJG9iamVjdCA9ICJLYXNh
X0l0ZW0oJyRhZGRyZXNzJywgJyR0eXBlJykiOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg
ICAgJG9iamVjdCA9ICJLYXNhX0l0ZW0oJyRhZGRyZXNzJywgJyR0eXBlJywgJGluZGV4KSI7DQog
ICAgICAgIH0NCiAgICB9DQogICAgZWxzaWYgKCAkdHlwZSBlcSAiVEFTTU9UQV9IVFRQX1NXSVRD
SCIgKSB7DQogICAgICAgIHJlcXVpcmUgVGFzbW90YV9IVFRQX0l0ZW07DQogICAgICAgIG15ICgg
JG91dHB1dCApOw0KICAgICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJG91dHB1dCwgJGdyb3VwbGlz
dCwgQG90aGVyICkgPSBAaXRlbV9pbmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsJywgIEBv
dGhlciA7ICAgICMgUXVvdGUgZGF0YQ0KICAgICAgICAkb3RoZXIgPX4gcy9eW1wnXCJdLy87ICNz
dHJpcCBvdXQgcXVvdGVzIGluIGNhc2UgdGhleSBhcmUgaW5jbHVkZWQNCiAgICAgICAgJG90aGVy
ID1+IHMvW1wnXCJdJC8vOw0KICAgICAgICAkb2JqZWN0ID0gIlRhc21vdGFfSFRUUDo6U3dpdGNo
KCckYWRkcmVzcycsICckb3V0cHV0JywgJyRvdGhlcicpIjsNCiAgICB9DQogICAgZWxzaWYgKCAk
dHlwZSBlcSAiVEFTTU9UQV9IVFRQX1NXSVRDSF9QT1dFUk1PTiIgKSB7DQogICAgICAgIHJlcXVp
cmUgVGFzbW90YV9IVFRQX0l0ZW07DQogICAgICAgIG15ICggJG91dHB1dCApOw0KICAgICAgICAo
ICRhZGRyZXNzLCAkbmFtZSwgJG91dHB1dCwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9p
bmZvOw0KICAgICAgICAkb3RoZXIgPSBqb2luICcsJywgQG90aGVyOyAgICAjIFF1b3RlIGRhdGEN
CiAgICAgICAgJG90aGVyID1+IHMvXltcJ1wiXS8vOyAjc3RyaXAgb3V0IHF1b3RlcyBpbiBjYXNl
IHRoZXkgYXJlIGluY2x1ZGVkDQogICAgICAgICRvdGhlciA9fiBzL1tcJ1wiXSQvLzsNCiAgICAg
ICAgJG9iamVjdCA9ICJUYXNtb3RhX0hUVFA6OlN3aXRjaF9Qb3dlck1vbignJGFkZHJlc3MnLCAn
JG91dHB1dCcsICckb3RoZXInKSI7DQogICAgfQ0KICAgIGVsc2lmICggJHR5cGUgZXEgIlRBU01P
VEFfSFRUUF9GQU4iICkgew0KICAgICAgICByZXF1aXJlIFRhc21vdGFfSFRUUF9JdGVtOw0KICAg
ICAgICAoICRhZGRyZXNzLCAkbmFtZSwgJGdyb3VwbGlzdCwgQG90aGVyICkgPSBAaXRlbV9pbmZv
Ow0KICAgICAgICAkb3RoZXIgPSBqb2luICcsJywgIEBvdGhlciA7ICAgICMgUXVvdGUgZGF0YQ0K
ICAgICAgICAkb3RoZXIgPX4gcy9eW1wnXCJdLy87ICNzdHJpcCBvdXQgcXVvdGVzIGluIGNhc2Ug
dGhleSBhcmUgaW5jbHVkZWQNCiAgICAgICAgJG90aGVyID1+IHMvW1wnXCJdJC8vOw0KICAgICAg
ICAkb2JqZWN0ID0gIlRhc21vdGFfSFRUUDo6RmFuKCckYWRkcmVzcycsICckb3RoZXInKSI7DQog
ICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAjIERvZXNuJ3QgbWF0Y2ggYW55dGhpbmcgaGVyZSwg
YnV0IGRvbid0IGp1c3QgZmFpbC4gSW5zdGVhZCwgbWFrZQ0KICAgICAgICAjIHJlYWRfdGFibGVf
QSBleHRlbnNpYmxlIGJ5IHNlYXJjaGluZyBsaWIgZm9yIGEgbW9kdWxlIHdpdGgNCiAgICAgICAg
IyB0aGUgbG93ZXIgY2FzZSBvZiB0aGlzIG5hbWUuIFNlZSBjb21tZW50cyBhdCB0aGUgdG9wIGZv
ciBkZXRhaWxzLA0KICAgICAgICAjIGFuZCByZWFkX3RhYmxlX2Ffc2FtcGxlLnBtIGZvciBhbiBl
eGFtcGxlLg0KICAgICAgICBteSAkbGN0eXBlID0gbGMoJHR5cGUpOwkJIyBDb252ZXJ0IHRvIGxv
d2VyIGNhc2UuDQogICAgICAgIGV2YWwgInJlcXVpcmUgJGxjdHlwZTsiOwkjIENhbiB3ZSBsb2Fk
IGl0Pw0KICAgICAgICBpZiAoJEApIHsNCiAgICAgICAgICAgIHByaW50IHFxPFxuVW5yZWNvZ25p
emVkIC5taHQgZW50cnkgYW5kICJyZXF1aXJlICRsY3R5cGU7IiByZXR1cm5lZCAiJEAiOiAkcmVj
b3JkLlxuPjsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICAkbmFtZSA9
ICRpdGVtX2luZm9bMF07DQogICAgICAgIEBpdGVtX2luZm8gPSBtYXAgeyRfID1+IC9eWyciXS8/
JF86IickXycifSBAaXRlbV9pbmZvOwkjIEFkZCBzaW5nbGUgcXVvdGVzIGlmIG5vIHF1b3Rpbmcg
cHJlc2VudC4NCiAgICAgICAgIyBOb3RlOiB3ZSBkb24ndCBoYW5kbGUgZ3JvdXBsaXN0IGhlcmUs
IGFzIGl0IG1heSBub3QgYXBwbHkgdG8gc29tZSBvYmplY3RzLiBJbnN0ZWFkLA0KICAgICAgICAj
IHRoZSAiaW5pdCIgbWV0aG9kIGNhbiBtYW5hZ2UgZ3JvdXAgbWVtYmVyc2hpcCBpZiB0aGF0J3Mg
YXBwcm9wcmlhdGUuDQogICAgICAgIG15ICRpdGVtX2luZm8gPSBqb2luKCcsJyxAaXRlbV9pbmZv
KTsNCiAgICAgICAgJG9iamVjdCA9ICIkbGN0eXBlKCAkaXRlbV9pbmZvICkiOw0KICAgICAgICAk
YWRkaXRpb25hbF9jb2RlID0gc3ByaW50ZigNCgkJIiUtMzZzICVzIiwgDQoJCSJcJCR7bmFtZX0i
LCAiLT4gaW5pdCggJGl0ZW1faW5mbyApIGlmIChcJCR7bmFtZX0tPmNhbignaW5pdCcpKTsJIyBu
b2xvb3BcbiIsDQoJKTsNCgkkZ3JvdXBsaXN0ID0gJyc7CSMgTm8gZ3JvdXBsaXN0IHByb2Nlc3Np
bmcgaGVyZSwgdGhvdWdoIHRoZSBpbml0IG1ldGhvZCBtaWdodCBkbyB0aGF0Lg0KICAgIH0NCg0K
ICAgIGlmICgkb2JqZWN0KSB7DQogICAgICAgIG15ICRjb2RlMiA9IHNwcmludGYgIlxuXCQlLTM1
cyA9ICBuZXcgJXM7XG4iLCAkbmFtZSwgJG9iamVjdDsNCiAgICAgICAgJGNvZGUyID1+IHMvPSAq
bmV3IFxTKyAqXCgvLT4gYWRkIFwoLyBpZiAkb2JqZWN0c3skbmFtZX0rKzsNCiAgICAgICAgJGNv
ZGUgLj0gJGNvZGUyOw0KICAgIH0NCiAgICAjIFByb2Nlc3MgZ3JvdXBsaXN0LiBUaGlzIGNvZGUg
d2FzIG1vdmVkIGludG8gYSBzdWJyb3V0aW5lIHNvIGl0IGNvdWxkIGJlIGNhbGxlZCBieSBleHRl
bnNpb24NCiAgICAjIG1vZHVsZXMsIHRvby4NCiAgICAkY29kZSAuPSByZWFkX3RhYmxlX2dyb3Vw
bGlzdF9BKCRuYW1lLCAkZ3JvdXBsaXN0KSBpZiAoJGdyb3VwbGlzdCk7DQoNCiAgICAjIEFkZCBp
biBhbnl0aGluZyBlbHNlIHNvbWUgcmVjb3JkLXR5cGUgYWJvdmUgbmVlZGVkLg0KICAgIGlmICgk
YWRkaXRpb25hbF9jb2RlKSB7DQogICAgICAgICRjb2RlIC49ICRhZGRpdGlvbmFsX2NvZGU7DQog
ICAgfQ0KDQogICAgcmV0dXJuICRjb2RlOw0KfQ0KDQpzdWIgcmVhZF90YWJsZV9maW5pc2hfQSB7
DQogICAgbXkgJGNvZGUgPSAnJzsNCg0KICAgICNhIHNjZW5lIGNhbm5vdCBleGlzdCB3aXRob3V0
IGEgcmVzcG9uZGVyLCBidXQgaXQgY291bGQgbGFjayBhIGNvbnRyb2xsZXIgaWYNCiAgICAjc2Nl
bmUgaXMgYSBQTE0gU2NlbmUNCiAgICBmb3JlYWNoIG15ICRzY2VuZSAoIHNvcnQga2V5cyAlc2Nl
bmVfYnVpbGRfcmVzcG9uZGVycyApIHsNCiAgICAgICAgJGNvZGUgLj0gIlxuI1NDRU5FX0JVSUxE
IERlZmluaXRpb24gZm9yIHNjZW5lOiAkc2NlbmVcbiI7DQoNCiAgICAgICAgaWYgKCAkb2JqZWN0
c3skc2NlbmV9ICkgew0KDQogICAgICAgICAgICAjU2luY2UgYW4gb2JqZWN0IGV4aXN0cyB3aXRo
IHRoZSBzYW1lIG5hbWUgYXMgdGhlIHNjZW5lLA0KICAgICAgICAgICAgI21ha2UgaXQgYSBjb250
cm9sbGVyIGFuZCByZXNwb25kZXIgb2YgdGhlIHNjZW5lLCB0b28uIEhvcGVmdWxseSBpdCBjYW4g
YmUgYSBjb250cm9sbGVyDQogICAgICAgICAgICAkc2NlbmVfYnVpbGRfY29udHJvbGxlcnN7JHNj
ZW5lfXskc2NlbmV9ID0gIjEiOw0KICAgICAgICAgICAgJHNjZW5lX2J1aWxkX3Jlc3BvbmRlcnN7
JHNjZW5lfXskc2NlbmV9ID0gIjEiOw0KICAgICAgICB9DQoNCiAgICAgICAgI0xvb3AgdGhyb3Vn
aCB0aGUgY29udHJvbGxlciBoYXNoDQogICAgICAgIGlmICggZXhpc3RzICRzY2VuZV9idWlsZF9j
b250cm9sbGVyc3skc2NlbmV9ICkgew0KICAgICAgICAgICAgZm9yZWFjaCBteSAkc2NlbmVfY29u
dHJvbGxlciAoDQogICAgICAgICAgICAgICAga2V5cyAleyAkc2NlbmVfYnVpbGRfY29udHJvbGxl
cnN7JHNjZW5lfSB9ICkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoICRvYmpl
Y3RzeyRzY2VuZV9jb250cm9sbGVyfSApIHsNCg0KICAgICAgICAgICAgICAgICAgICAjTWFrZSBh
IGxpbmsgdG8gZWFjaCByZXNwb25kZXIgaW4gdGhlIHJlc3BvbmRlciBoYXNoDQogICAgICAgICAg
ICAgICAgICAgIHdoaWxlICggbXkgKCAkc2NlbmVfcmVzcG9uZGVyLCAkcmVzcG9uZGVyX2RhdGEg
KSA9DQogICAgICAgICAgICAgICAgICAgICAgICBlYWNoKCAleyAkc2NlbmVfYnVpbGRfcmVzcG9u
ZGVyc3skc2NlbmV9IH0gKSApDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
ICAgICAgICAgIG15ICggJG9uX2xldmVsLCAkcmFtcF9yYXRlICkgPQ0KICAgICAgICAgICAgICAg
ICAgICAgICAgICBzcGxpdCggJywnLCAkcmVzcG9uZGVyX2RhdGEgKTsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAgICAoICRvYmplY3RzeyRzY2VuZV9yZXNwb25kZXJ9ICkNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbmQgKCAkc2NlbmVfcmVzcG9uZGVyIG5lICRzY2VuZV9j
b250cm9sbGVyICkgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkb25fbGV2ZWwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCRyYW1wX3JhdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICRjb2RlIC49DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmlu
dGYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwkJS0zNXMgLT4gYWRk
KFwkJXMsJyVzJywnJXMnKTtcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICRzY2VuZV9jb250cm9sbGVyLCAkc2NlbmVfcmVzcG9uZGVyLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAkb25fbGV2ZWwsICAgICAgICAgJHJhbXBfcmF0ZTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2Rl
IC49DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYgIlwkJS0z
NXMgLT4gYWRkKFwkJXMsJyVzJyk7XG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkc2NlbmVfY29udHJvbGxlciwgJHNjZW5lX3Jlc3BvbmRlciwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9uX2xldmVsOw0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkY29kZSAuPSBzcHJpbnRmICJcJCUtMzVzIC0+IGFkZChcJCVzKTtcbiIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJHNjZW5lX2NvbnRyb2xsZXIsICRzY2VuZV9yZXNwb25k
ZXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg
ICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIDo6cHJpbnRfbG9nKCAiW1JlYWRf
VGFibGVfQV0gRVJST1I6IFRoZXJlIGlzIG5vIG9iamVjdCAiDQogICAgICAgICAgICAgICAgICAg
ICAgICAgIC4gImNhbGxlZCAkc2NlbmVfY29udHJvbGxlciBkZWZpbmVkLiAgSWdub3JpbmcgU0NF
TkVfQlVJTEQgZW50cnkuIg0KICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAg
IDo6cHJpbnRfbG9nKCAiW1JlYWRfVGFibGVfQV0gRVJST1I6IFRoZXJlIGlzIG5vIGNvbnRyb2xs
ZXIgIg0KICAgICAgICAgICAgICAgICAgLiAiZGVmaW5lZCBmb3IgJHNjZW5lLiAgSWdub3Jpbmcg
U0NFTkVfQlVJTEQgZW50cnkuIiApOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkY29k
ZTsNCn0NCg0KDQoNCnN1YiByZWFkX3RhYmxlX2dyb3VwbGlzdF9BIHsNCg0KICAgIG15KCRuYW1l
LCAkZ3JvdXBsaXN0KSA9IEBfOw0KICAgICRncm91cGxpc3QgPSAnJyB1bmxlc3MgJGdyb3VwbGlz
dDsgICAgIyBBdm9pZCAtdyB1bmluaWFsaXplZCBlcnJvcnMNCiAgICBteSAkY29kZSA9ICcnOw0K
ICAgIGZvciBteSAkZ3JvdXAgKCBzcGxpdCggJ1x8JywgJGdyb3VwbGlzdCApICkgew0KICAgICAg
ICAkZ3JvdXAgPX4gcy8gKiQvLzsNCiAgICAgICAgJGdyb3VwID1+IHMvXiAvLzsNCg0KICAgICAg
ICBpZiAoIGxjKCRncm91cCkgZXEgJ2hpZGRlbicgKSB7DQogICAgICAgICAgICAkY29kZSAuPSBz
cHJpbnRmICJcJCUtMzVzIC0+IGhpZGRlbigxKTtcbiIsICRuYW1lOw0KICAgICAgICAgICAgbmV4
dDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICggJGdyb3VwIGVxICcnKXsNCiAgICAgICAgICAg
ICY6OnByaW50X2xvZygiZ3JvdXBsaXN0ICckZ3JvdXBsaXN0JyBjb250YWlucyBlbXB0eSBncm91
cCEiKTsNCiAgICAgICAgICAgIG5leHQ7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoICRuYW1l
IGVxICRncm91cCApIHsNCiAgICAgICAgICAgICY6OnByaW50X2xvZygNCiAgICAgICAgICAgICAg
ICAibWh0IG9iamVjdCBhbmQgZ3JvdXAgbmFtZSBhcmUgdGhlIHNhbWU6ICRuYW1lICBCYWQgaWRl
YSEiKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICMgQWxsb3cgZm9y
IGZsb29ycGxhbiBkYXRhOiAgQmVkcm9vbSg1LDE1KXxMaWdodHMNCiAgICAgICAgICAgIGlmICgg
JGdyb3VwID1+IC8oXFMrKVwoKFxTKz8pXCkvICkgew0KICAgICAgICAgICAgICAgICRncm91cCA9
ICQxOw0KICAgICAgICAgICAgICAgIG15ICRsb2MgPSAkMjsNCiAgICAgICAgICAgICAgICAkbG9j
ID1+IHMvOy8sL2c7DQogICAgICAgICAgICAgICAgJGxvYyAuPSAnLDEsMScgaWYgKCAkbG9jID1+
IHRyLywvLC8gKSA8IDM7DQogICAgICAgICAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAiXCQlLTM1
cyAtPiBzZXRfZnBfbG9jYXRpb24oJGxvYyk7XG4iLCAkbmFtZTsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgICAgIHVubGVzcyAoJGdyb3Vwc3skZ3JvdXB9KSB7DQogICAgICAgICAgICAgICAgJGNv
ZGUgLj0gc3ByaW50ZiAiXCQlLTM1cyA9ICBuZXcgR3JvdXAgdW5sZXNzIChcJCVzKTtcbiIsICRn
cm91cCwgJGdyb3VwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdW5sZXNzICgkZ3JvdXBz
eyRncm91cH17JG5hbWV9KSB7DQogICAgICAgICAgICAgICAgJGNvZGUgLj0gc3ByaW50ZiAiXCQl
LTM1cyAtPiBhZGQoXCQlcyk7XG4iLCAkZ3JvdXAsICRuYW1lOw0KICAgICAgICAgICAgICAgICRn
cm91cHN7JGdyb3VwfXskbmFtZX0rKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0N
Cg0KICAgIHJldHVybiAkY29kZTsNCn0NCg0KDQoNCiNUaGlzIGlzIGNhbGxlZCBpbnNpZGUgZWFj
aCBkZWZpbml0aW9uLCB0aGlzIGlzIHVzaW5nIFNDRU5FX0JVSUxEIGFzIGFuIGV4YW1wbGU6DQoj
IENhbGxlZCB3aXRoIDoNCiMgICAtICR0eXBlOiAgICAgIE5hbWUgb2YgdGhlIGRldmljZSBiZWlu
ZyB2YWxpZGF0ZWQNCiMgICAtICRyZXFfY291bnQ6ICBOdW1iZXIgb2YgcmVxdWlyZWQgcGFyYW1l
dGVycywNCiMgICAtICRyZXFfYXJyYXk6ICBBcnJheSBvZiBwYXJhbWV0ZXIgdHlwZXMgdG8gYmUg
dmFsaWRhdGVkDQojICAgLSAkcGFzc2VkX3ZhbHVlczogICRSZWYgb2YgdGhlIHBhcmFtZXRlciBh
cnJheS4NCiMNCiN2YWxpZGF0ZV9kZWYoJ0lOU1RFT05fU1dJVENITElOQycsMixbJ25hbWUnLCdu
YW1lJywgJ2Jvb2xlYW4nLCdib29sZWFuJywnaW5zdGVvbl9vbl9sZXZlbCcsJ2luc3Rlb25fcmFt
cF9yYXRlJ10sIFxAaXRlbV9pbmZvKTsNCg0KIyAjR2xvYmFsIHZhbGlkYXRpb24gcm91dGluZToN
CnN1YiB2YWxpZGF0ZV9kZWYgew0KICAgIG15ICggJHR5cGUsICRyZXFfY291bnQsICRyZXFfYXJy
YXksICRwYXNzZWRfdmFsdWVzICkgPSBAXzsNCiAgICBteSAkcGFyYW1OdW0gPSAwOw0KICAgIG15
ICRwYXJhbUNvdW50ID0NCiAgICAgIHNjYWxhciBAeyRwYXNzZWRfdmFsdWVzfTsgICAgIyBOdW1i
ZXIgb2YgcGFyYW1ldGVycyBwYXNzZWQgb24gdGhlIGl0ZW0NCiAgICBmb3JlYWNoIG15ICRwYXJh
bV90eXBlICggQHskcmVxX2FycmF5fSApIHsNCg0KICAgICAgICBpZiAoIGRlZmluZWQgJCRwYXNz
ZWRfdmFsdWVzWyRwYXJhbU51bV0NCiAgICAgICAgICAgICYmICQkcGFzc2VkX3ZhbHVlc1skcGFy
YW1OdW1dIG5lICcnICkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKCByZWYoJHBhcmFtX3R5
cGUpIGVxICdSZWdleHAnICkgew0KICAgICAgICAgICAgICAgIHVubGVzcyAoICQkcGFzc2VkX3Zh
bHVlc1skcGFyYW1OdW1dID1+IG0vJHBhcmFtX3R5cGUvaSApIHsNCiAgICAgICAgICAgICAgICAg
ICAgOjpwcmludF9sb2coDQogICAgICAgICAgICAgICAgICAgICAgICAiW1JlYWRfVGFibGVfQV0g
RVJST1I6ICRfWzBdOiAkJHBhc3NlZF92YWx1ZXNbMF0sIGZhaWxlZCB0byBtYXRjaCAkcGFyYW1f
dHlwZTogIEZvdW5kIFwiJCRwYXNzZWRfdmFsdWVzWyRwYXJhbU51bV1cIiwgRGVmaW5pdGlvbiBz
a2lwcGVkLiINCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgOjpw
cmludF9sb2coICJbUmVhZF90YWJsZS1BXSAgICAgICAgJF9bMF0sICINCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgLiBqb2luKCAnLCAnLCBAJHBhc3NlZF92YWx1ZXMgKSApOw0KICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQog
ICAgICAgICAgICBlbHNpZiAoICRwYXJhbV90eXBlIGVxICdib29sZWFuJyApIHsNCiAgICAgICAg
ICAgICAgICA6OnByaW50X2xvZygNCiAgICAgICAgICAgICAgICAgICAgIkVycm9yIGl0ZW0gJHBh
cmFtTnVtIGluIGRlZmluaXRpb24sIHNob3VsZCBiZSAwIG9yIDEiKQ0KICAgICAgICAgICAgICAg
ICAgdW5sZXNzICggJCRwYXNzZWRfdmFsdWVzWyRwYXJhbU51bV0gPX4gL14oMHwxKSQvICk7DQog
ICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNpZiAoICRwYXJhbV90eXBlIGVxICduYW1lJyAp
IHsNCiAgICAgICAgICAgICAgICB1bmxlc3MgKCAkJHBhc3NlZF92YWx1ZXNbJHBhcmFtTnVtXSA9
fiAvXltBLVpfXVtBLVowLTlfXSokL2kgKSB7DQogICAgICAgICAgICAgICAgICAgIDo6cHJpbnRf
bG9nKA0KICAgICAgICAgICAgICAgICAgICAgICAgIltSZWFkX1RhYmxlX0FdIEVSUk9SOiAkX1sw
XTogJCRwYXNzZWRfdmFsdWVzWzBdLCBjYW4gb25seSB1c2UgY2hhcmFjdGVycyBBLXogYW5kIF8g
IEZvdW5kIFwiJCRwYXNzZWRfdmFsdWVzWyRwYXJhbU51bV1cIiwgRGVmaW5pdGlvbiBza2lwcGVk
LiINCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgOjpwcmludF9s
b2coICJbUmVhZF90YWJsZS1BXSAgICAgICAgJF9bMF0sICINCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgLiBqb2luKCAnLCAnLCBAJHBhc3NlZF92YWx1ZXMgKSApOw0KICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAg
ICAgICBlbHNpZiAoICRwYXJhbV90eXBlIGVxICdpbnN0ZW9uX29uX2xldmVsJyApIHsNCiAgICAg
ICAgICAgICAgICA6OnByaW50X2xvZygNCiAgICAgICAgICAgICAgICAgICAgIltSZWFkX1RhYmxl
X0FdIFdBUk5JTkc6ICRfWzBdOiAkJHBhc3NlZF92YWx1ZXNbMF0gT24gbGV2ZWwgc2hvdWxkIGJl
IDAtMTAwJSwgZ290IFwiJCRwYXNzZWRfdmFsdWVzWyRwYXJhbU51bV1cIiAiDQogICAgICAgICAg
ICAgICAgICApDQogICAgICAgICAgICAgICAgICB1bmxlc3MgKCggJCRwYXNzZWRfdmFsdWVzWyRw
YXJhbU51bV0gPX4gbS9eKFxkKyklPyQvDQogICAgICAgICAgICAgICAgICAgICYmICQxIDw9IDEw
MA0KICAgICAgICAgICAgICAgICAgICAmJiAkMSA+PSAwICkgb3IgKGxjICQkcGFzc2VkX3ZhbHVl
c1skcGFyYW1OdW1dID1+IC9ec3VyL2kpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVs
c2lmICggJHBhcmFtX3R5cGUgZXEgJ2luc3Rlb25fcmFtcF9yYXRlJyApIHsNCiAgICAgICAgICAg
ICAgICA6OnByaW50X2xvZygNCiAgICAgICAgICAgICAgICAgICAgIltSZWFkX1RhYmxlX0FdIFdB
Uk5JTkc6ICRfWzBdOiAkJHBhc3NlZF92YWx1ZXNbMF0gUmFtcCByYXRlIHNob3VsZCBiZSAwLTU0
MCBzZWNvbmRzLCBnb3QgXCIkJHBhc3NlZF92YWx1ZXNbJHBhcmFtTnVtXVwiICINCiAgICAgICAg
ICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgIHVubGVzcyAoICQkcGFzc2VkX3ZhbHVlc1sk
cGFyYW1OdW1dID1+IG0vXihbLjAtOV0rKXM/JC8NCiAgICAgICAgICAgICAgICAgICAgJiYgJDEg
PD0gNTQwDQogICAgICAgICAgICAgICAgICAgICYmICQxID49IDAgKTsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICAgIGVsc2lmICggJHBhcmFtX3R5cGUgZXEgJ2luc3Rlb25fYWRkcmVzcycgKSB7
DQogICAgICAgICAgICAgICAgbXkgKCAkeDEsICR4MiwgJHgzICkgPSAkJHBhc3NlZF92YWx1ZXNb
JHBhcmFtTnVtXSA9fg0KICAgICAgICAgICAgICAgICAgbS9eKFtBLUYwLTldezJ9KVwuKFtBLUYw
LTldezJ9KVwuKFtBLUYwLTldezJ9KSQvaTsNCiAgICAgICAgICAgICAgICB1bmxlc3MgKCAkeDEg
JiYgJHgyICYmICR4MyApIHsNCiAgICAgICAgICAgICAgICAgICAgOjpwcmludF9sb2coDQogICAg
ICAgICAgICAgICAgICAgICAgICAiW1JlYWRfVGFibGVfQV0gRVJST1I6ICRfWzBdOiAkJHBhc3Nl
ZF92YWx1ZXNbMF0gSW5zdGVvbiBBZGRyZXNzIHNob3VsZCBiZSB4eC54eC54eCwgZ290IFwiJCRw
YXNzZWRfdmFsdWVzWyRwYXJhbU51bV1cIiAiDQogICAgICAgICAgICAgICAgICAgICk7DQogICAg
ICAgICAgICAgICAgICAgIDo6cHJpbnRfbG9nKCAiW1JlYWRfdGFibGUtQV0gICAgICAgICRfWzBd
LCAiDQogICAgICAgICAgICAgICAgICAgICAgICAgIC4gam9pbiggJywgJywgQCRwYXNzZWRfdmFs
dWVzICkgKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzaWYgKCAkcGFyYW1fdHlwZSBlcSAneDEw
X2FkZHJlc3MnICkgew0KICAgICAgICAgICAgICAgIG15ICggJGhhLCAkZGEgKSA9DQogICAgICAg
ICAgICAgICAgICAkJHBhc3NlZF92YWx1ZXNbJHBhcmFtTnVtXSA9fiBtL14oW0EtUF0pKFswLTld
ezEsMn0pJC9pOw0KICAgICAgICAgICAgICAgIHVubGVzcyAoICRoYSAmJiAkZGEgJiYgJGRhIDwg
MTcgKSB7DQogICAgICAgICAgICAgICAgICAgIDo6cHJpbnRfbG9nKA0KICAgICAgICAgICAgICAg
ICAgICAgICAgIltSZWFkX1RhYmxlX0FdIEVSUk9SOiAkX1swXTogJCRwYXNzZWRfdmFsdWVzWzBd
IFgxMCBBZGRyZXNzIHNob3VsZCBiZSAyLTMgY2hhcmFjdGVycywgIEhvdXNlIGNvZGUgQS1QLCBE
ZXZpY2UgMS0xNiwgZ290IFwiJCRwYXNzZWRfdmFsdWVzWyRwYXJhbU51bV1cIiwgRGVmaW5pdGlv
biBza2lwcGVkLiINCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAg
OjpwcmludF9sb2coICJbUmVhZF90YWJsZS1BXSAgICAgICAgJF9bMF0sICINCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgLiBqb2luKCAnLCAnLCBAJHBhc3NlZF92YWx1ZXMgKSApOw0KICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9
DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICA6OnByaW50X2xvZygNCiAgICAg
ICAgICAgICAgICAgICAgIltSZWFkX1RhYmxlX0FdIFdBUk5JTkc6IFVua25vd24gdmFsaWRhdGlv
biB0eXBlOiAkcGFyYW1fdHlwZSINCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfQ0K
ICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgaWYgKCAkcGFyYW1OdW0gPCAk
cmVxX2NvdW50ICkgew0KICAgICAgICAgICAgICAgIG15ICRwYyA9IHNjYWxhciBAJHBhc3NlZF92
YWx1ZXM7DQogICAgICAgICAgICAgICAgOjpwcmludF9sb2coDQogICAgICAgICAgICAgICAgICAg
ICJbUmVhZF90YWJsZS1BXSBFUlJPUjogJF9bMF0gICRyZXFfY291bnQgcGFyYW1ldGVycyBhcmUg
cmVxdWlyZWQgaW4gdGhlIGRlZmluaXRpb24sICRwYyBwYXJhbWV0ZXJzIGZvdW5kOiBkZWZpbml0
aW9uIHNraXBwZWQuIg0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgOjpwcmlu
dF9sb2coICJbUmVhZF90YWJsZS1BXSAgICAgICAgJF9bMF0sICINCiAgICAgICAgICAgICAgICAg
ICAgICAuIGpvaW4oICcsICcsIEAkcGFzc2VkX3ZhbHVlcyApICk7DQogICAgICAgICAgICAgICAg
cmV0dXJuIDA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHBhcmFtTnVtKys7
DQogICAgfQ0KICAgIHJldHVybiAxOw0KfQ0KDQoxOw0KDQojDQojICRMb2c6IHJlYWRfdGFibGVf
QS5wbCx2ICQNCiMgUmV2aXNpb24gMS4yOSAgMjAwNi8wMS8yOSAyMDozMDoxNyAgd2ludGVyDQoj
ICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioNCiMNCiMgUmV2aXNpb24gMS4yOCAgMjAwNS8xMC8w
MiAxNzoyNDo0NyAgd2ludGVyDQojICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioNCiMNCiMgUmV2
aXNpb24gMS4yNyAgMjAwNS8wNS8yMiAxODoxMzowNyAgd2ludGVyDQojICoqKiBlbXB0eSBsb2cg
bWVzc2FnZSAqKioNCiMNCiMgUmV2aXNpb24gMS4yNiAgMjAwNS8wMy8yMCAxOTowMjowMiAgd2lu
dGVyDQojICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioNCiMNCiMgUmV2aXNpb24gMS4yNSAgMjAw
NC8xMS8yMiAyMjo1NzoyNiAgd2ludGVyDQojICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioNCiMN
CiMgUmV2aXNpb24gMS4yNCAgMjAwNC8wNy8xOCAyMjoxNjozNyAgd2ludGVyDQojICoqKiBlbXB0
eSBsb2cgbWVzc2FnZSAqKioNCiMNCiMgUmV2aXNpb24gMS4yMyAgMjAwNC8wNi8wNiAyMTozODo0
NCAgd2ludGVyDQojICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioNCiMNCiMgUmV2aXNpb24gMS4y
MiAgMjAwNC8wMy8yMyAwMTo1ODowOCAgd2ludGVyDQojICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAq
KioNCiMNCiMgUmV2aXNpb24gMS4yMSAgMjAwMy8xMi8yMiAwMDoyNTowNiAgd2ludGVyDQojICAt
IDIuODYgcmVsZWFzZQ0KIw0KIyBSZXZpc2lvbiAxLjIwICAyMDAzLzExLzIzIDIwOjI2OjAyICB3
aW50ZXINCiMgIC0gMi44NCByZWxlYXNlDQojDQojIFJldmlzaW9uIDEuMTkgIDIwMDMvMDkvMDIg
MDI6NDg6NDYgIHdpbnRlcg0KIyAgLSAyLjgzIHJlbGVhc2UNCiMNCiMgUmV2aXNpb24gMS4xOCAg
MjAwMy8wNy8wNiAxNzo1NToxMiAgd2ludGVyDQojICAtIDIuODIgcmVsZWFzZQ0KIw0KIyBSZXZp
c2lvbiAxLjE3ICAyMDAzLzAxLzEyIDIwOjM5OjIxICB3aW50ZXINCiMgIC0gMi43NiByZWxlYXNl
DQojDQojIFJldmlzaW9uIDEuMTYgIDIwMDIvMTIvMjQgMDM6MDU6MDggIHdpbnRlcg0KIyAtIDIu
NzUgcmVsZWFzZQ0KIw0KIyBSZXZpc2lvbiAxLjE1ICAyMDAyLzExLzEwIDAxOjU5OjU3ICB3aW50
ZXINCiMgLSAyLjczIHJlbGVhc2UNCiMNCiMgUmV2aXNpb24gMS4xNCAgMjAwMi8wOC8yMiAxMzo0
NTo1MCAgd2ludGVyDQojIC0gMi43MCByZWxlYXNlDQojDQojIFJldmlzaW9uIDEuMTMgIDIwMDIv
MDgvMjIgMDQ6MzM6MjAgIHdpbnRlcg0KIyAtIDIuNzAgcmVsZWFzZQ0KIw0KIyBSZXZpc2lvbiAx
LjEyICAyMDAyLzA1LzI4IDEzOjA3OjUyICB3aW50ZXINCiMgLSAyLjY4IHJlbGVhc2UNCiMNCiMg
UmV2aXNpb24gMS4xMSAgMjAwMS8xMS8xOCAyMjo1MTo0MyAgd2ludGVyDQojIC0gMi42MSByZWxl
YXNlDQojDQojIFJldmlzaW9uIDEuMTAgIDIwMDEvMTAvMjEgMDE6MjI6MzMgIHdpbnRlcg0KIyAt
IDIuNjAgcmVsZWFzZQ0KIw0KIyBSZXZpc2lvbiAxLjkgIDIwMDEvMDgvMTIgMDQ6MDI6NTggIHdp
bnRlcg0KIyAtIDIuNTcgdXBkYXRlDQojDQojIFJldmlzaW9uIDEuOCAgMjAwMS8wMy8yNCAxODow
ODozOCAgd2ludGVyDQojIC0gMi40NyByZWxlYXNlDQojDQojIFJldmlzaW9uIDEuNyAgMjAwMS8w
Mi8wNCAyMDozMTozMSAgd2ludGVyDQojIC0gMi40MyByZWxlYXNlDQojDQojIFJldmlzaW9uIDEu
NiAgMjAwMC8xMi8yMSAxODo1NDoxNSAgd2ludGVyDQojIC0gMi4zOCByZWxlYXNlDQojDQojIFJl
dmlzaW9uIDEuNSAgMjAwMC8xMi8wMyAxOTozODo1NSAgd2ludGVyDQojIC0gMi4zNiByZWxlYXNl
DQojDQojIFJldmlzaW9uIDEuNCAgMjAwMC8xMC8yMiAxNjo0ODoyOSAgd2ludGVyDQojIC0gMi4z
MiByZWxlYXNlDQojDQojIFJldmlzaW9uIDEuMyAgMjAwMC8xMC8wMSAyMzoyOTo0MCAgd2ludGVy
DQojIC0gMi4yOSByZWxlYXNlDQojDQojDQo=
--000000000000a19df0064b101a7b
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--000000000000a19df0064b101a7b
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

________________________________________________________
To unsubscribe from this list, go to: https://lists.sourceforge.net/lists/listinfo/misterhouse-users


--000000000000a19df0064b101a7b--