X-MimeOLE: Produced By Microsoft Exchange V6.5
Received: by onstor-exch02.onstor.net 
	id <01C88EE5.EB9DD028@onstor-exch02.onstor.net>; Tue, 25 Mar 2008 19:05:53 -0700
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----_=_NextPart_001_01C88EE5.EB9DD028"
Content-class: urn:content-classes:message
Subject: RE: Status on Bobcat to Cougar migration
Date: Tue, 25 Mar 2008 19:05:52 -0700
Message-ID: <BB375AF679D4A34E9CA8DFA650E2B04E090EABC4@onstor-exch02.onstor.net>
In-Reply-To: <BB375AF679D4A34E9CA8DFA650E2B04E090EA567@onstor-exch02.onstor.net>
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
Thread-Topic: Status on Bobcat to Cougar migration
Thread-Index: AciNxURpsKYnLI3nRtmHL6+62Rw7cwASofrgAANLIGAAAJpboAAxNCXw
References: <BB375AF679D4A34E9CA8DFA650E2B04E08FC318D@onstor-exch02.onstor.net> <47E3F5CD.7070200@onstor.com> <47E7CB2F.20400@onstor.com> <BB375AF679D4A34E9CA8DFA650E2B04E090EA529@onstor-exch02.onstor.net> <BB375AF679D4A34E9CA8DFA650E2B04E090EA555@onstor-exch02.onstor.net> <BB375AF679D4A34E9CA8DFA650E2B04E090EA567@onstor-exch02.onstor.net>
From: "Manohar Divate" <manohar.divate@onstor.com>
To: "Manohar Divate" <manohar.divate@onstor.com>,
	"Sandrine Boulanger" <sandrine.boulanger@onstor.com>,
	"Sripal Surendiran (HCL)" <sripal.surendiran@onstor.com>,
	"Tim Gardner" <tim.gardner@onstor.com>
Cc: "Andy Sharp" <andy.sharp@onstor.com>,
	"Sudharsan Srinivasan" <sudharsan@onstor.com>,
	"Paul Hammer" <paul.hammer@onstor.com>,
	"Narain Ramadass" <narain.ramadass@onstor.com>,
	"Larry Scheer" <larry.scheer@onstor.com>,
	"Vikas Saini" <vikas.saini@onstor.com>,
	"dl-QA" <dl-qa@onstor.com>

This is a multi-part message in MIME format.

------_=_NextPart_001_01C88EE5.EB9DD028
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable


Team


More good news

Another test passed without any major incident

Do the Post installation as explained=20

1) system copy all -i=20
2) move secondary flash of Bobcat=20
3) shutdown Bobcat
4) Place the 512MB flash in secondary position in Cougar
5) Boot the Cougar (with FTI build)
6) run FTI and answer 'Y" to copy from secondary flash
7) Filer reboots=20
8) Do scsi discover lun all << need to triage why this is required)
9) All configuration are transferred and are up and running

Note : No need to spoof  mac address of bobcat to Cougar.


The attached diagrams are only for reference for the test cases being
tried.=20
(Cluster and fabric)

Any questions please let me know.

Thanks
Manny




-----Original Message-----
From: Manohar Divate=20
Sent: Monday, March 24, 2008 7:30 PM
To: Sandrine Boulanger; Sripal Surendiran (HCL); Tim Gardner
Cc: Andy Sharp; Sudharsan Srinivasan; Paul Hammer; Narain Ramadass;
Larry Scheer; Vikas Saini; dl-QA
Subject: RE: Status on Bobcat to Cougar migration

Yes good catch

1) Bobcat secondary flash was moved to Cougar secondary flash position

2) Agree Ideally 15 to 20 may NOT be required if Filer negotiates
Storage in Point to Point and Auto mode. (If Works as designed per
document, May be an defect)

3) Step 15 to 20 explains the work around which was non intrusive

-----Original Message-----
From: Sandrine Boulanger=20
Sent: Monday, March 24, 2008 7:11 PM
To: Manohar Divate; Sripal Surendiran (HCL); Tim Gardner
Cc: Andy Sharp; Sudharsan Srinivasan; Paul Hammer; Narain Ramadass;
Larry Scheer; Vikas Saini; dl-QA
Subject: RE: Status on Bobcat to Cougar migration

Thanks Manny.
Some steps seem to be missing for the flash move from Bobcat to Cougar.
Step 13, why do we need the root password? Can't this be avoided?
Also ideally, we should not need steps 15 to 20. how come the fc ports
do not show the right type?

-----Original Message-----
From: Manohar Divate=20
Sent: Monday, March 24, 2008 6:16 PM
To: Sripal Surendiran (HCL); Tim Gardner
Cc: Andy Sharp; Sudharsan Srinivasan; Paul Hammer; Narain Ramadass;
Larry Scheer; Vikas Saini; Sandrine Boulanger; dl-QA
Subject: Status on Bobcat to Cougar migration

Some Good News to report

Initial testing of FTIcode + Migration from Bobcat to Cougar passed
without any incidents.

Steps fallowed "For One node BC to one node in a box of Cougar "

Bobcat##

1) Bobcat with Build version 3.2.0.4BC
2) Storage Nexsan Blade 8 disks

Configuration=20
a) Create 9 nos. VSVRS
b) 2 volumes
c) Hourly snapshot schedule on 1 volume
d) Hourly local mirror schedule on 1 vol
e) Hourly DMIP mirror to SS system

3) system copy all -i=20
4) remove secondary flash (note down where sec flash #green led)
5) system show summary (note down mac address)
6) system shutdown -y

Cougar###=20
7)
8) Flash install FTI code on to Secondary flash (answer 'n' for both
questions)
9) set boot_dev sda1 (depending on your secondary flash)
10) seep program
11) enter mac address of bobcat noted at step #5
12) reboot
13) Answer Yes when Filer boots with FTI menu=20
'copy config from secondary flash"
   Enter root and admin passwords
14) Filer reboots
15) FC ports will be down and come up type N_PORTS=20
16) ON Storage set topology=3DLoop, Link speed=3D2GB=20
17) On Filer run cmd port disable all and port enable all
18) When FC ports State UP with type L_PORT
19) scsi discover lun all
20) scsi show all ( find all luns)

Sanity tests passed
1) All configurations migrated with no issues
2) No process cores and no crash during migration
3) Tests continued

Further tests with 2 node cluster are planned.

Any questions let me know

Thanks
Manny



------_=_NextPart_001_01C88EE5.EB9DD028
Content-Type: text/html;
	name="Migration-dc_cluster1.htm"
Content-Transfer-Encoding: base64
Content-Description: Migration-dc_cluster1.htm
Content-Disposition: attachment;
	filename="Migration-dc_cluster1.htm"

PGh0bWw+DQoJPGhlYWQ+DQoJCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ii8+DQoJCTxtZXRhIG5hbWU9IlRpdGxlIiBjb250
ZW50PSIiLz4KCQk8bWV0YSBuYW1lPSJTdWJqZWN0IiBjb250ZW50PSIiLz4KCQk8bWV0YSBuYW1l
PSJDYXRlZ29yeSIgY29udGVudD0iIi8+CgkJPG1ldGEgbmFtZT0iS2V5d29yZHMiIGNvbnRlbnQ9
IiIvPgoJCTxtZXRhIG5hbWU9IkRlc2NyaXB0aW9uIiBjb250ZW50PSIiLz4KCQk8bWV0YSBuYW1l
PSJBdXRob3IiIGNvbnRlbnQ9Ik5ldHdvcmsgQWRtaW5pc3RyYXRvciIvPgoJCTxtZXRhIG5hbWU9
Ik1hbmFnZXIiIGNvbnRlbnQ9IiIvPgoJCTxtZXRhIG5hbWU9IkNvbXBhbnkiIGNvbnRlbnQ9Ik9O
U3RvciwgSW5jLiIvPgoNCgkJPHRpdGxlPk1pZ3JhdGlvbi1kY19jbHVzdGVyMTwvdGl0bGU+DQoJ
CTxzY3JpcHQgc3JjPSJNaWdyYXRpb24tZGNfY2x1c3RlcjFfZmlsZXMvZnJhbWVzZXQuanMiIHR5
cGU9InRleHQvanNjcmlwdCIgbGFuZ3VhZ2U9ImpzY3JpcHQiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0
IHR5cGU9InRleHQvanNjcmlwdCIgbGFuZ3VhZ2U9ImpzY3JpcHQiID4NCg0KZnVuY3Rpb24gRmls
ZUVudHJ5IChwYWdlSW5kZXgsIHBhZ2VJRCwgcGFnZU5hbWUsIHByaUltYWdlLCBzZWNJbWFnZSkg
DQp7DQoJdGhpcy5QYWdlSW5kZXggPSBwYWdlSW5kZXg7DQoJdGhpcy5QYWdlSUQJICA9IHBhZ2VJ
RDsNCgl0aGlzLlBhZ2VOYW1lID0gcGFnZU5hbWU7DQoJdGhpcy5QcmlJbWFnZSA9IHByaUltYWdl
Ow0KCXRoaXMuU2VjSW1hZ2UgPSBzZWNJbWFnZTsNCn0NCg0KdmFyIHZpZXdNZ3IgPSBudWxsOw0K
DQp2YXIgZ19GaWxlTGlzdCA9IG5ldyAgQXJyYXkoDQogbmV3IEZpbGVFbnRyeSAoMSwgMCwgIlBh
Z2UtMSIsICJ2bWxfMS5odG0iLCAiZ2lmXzEuaHRtIikKDQopOw0KDQp2YXIgZ19DdXJQYWdlSW5k
ZXggPSAwOw0KdmFyIGdfWm9vbUxvYWRlZCA9IGZhbHNlOw0KdmFyIGdfV2lkZ2V0c0xvYWRlZCA9
IGZhbHNlOw0KdmFyIGdfRmlsZVByb3RvY29sID0gImZpbGU6Ly8iOw0KDQp2YXIgZ19ITE1lbnVF
bnRyeSA9ICJtZW51RW50cnkiOw0KdmFyIGdfSExNZW51RW50cnlEaXYgPSAibWVudUVudHJ5RGl2
IjsNCg0KdmFyIGdfTG9hZGluZ1dpZGdldHMgPSBmYWxzZTsNCg0KDQpmdW5jdGlvbiBDVmlld01n
cihjb252ZXJ0ZWRJbWdJRCwgaGlnaGxpZ2h0RGl2SUQpDQp7DQoJdGhpcy5vblJlc2l6ZSA9IG51
bGw7DQoJdGhpcy5BcHBseVpvb20gPSBudWxsOw0KCXRoaXMuQ2hhbmdpbmdWaWV3ID0gZmFsc2U7
DQoNCgl0aGlzLnB1dF9Mb2NhdGlvbiA9IFZpZXdNZ3JEZWZhdWx0RmluZDsNCgl0aGlzLlpvb20g
PSBWaWV3TWdyRGVmYXVsdFJlc2l6ZTsNCgl0aGlzLlBvc3Rab29tUHJvY2Vzc2luZyA9IG51bGw7
DQoJdGhpcy5zZXRWaWV3ID0gbnVsbDsNCgl0aGlzLlBvc3RTZXRWaWV3UHJvY2Vzc2luZyA9IG51
bGw7DQoJdGhpcy52aWV3Q2hhbmdlZCA9IG51bGw7DQoNCgl0aGlzLlN1cHBvcnRzRGV0YWlscyA9
IGZhbHNlOw0KCXRoaXMuU3VwcG9ydHNTZWFyY2ggPSBmYWxzZTsNCg0KCXRoaXMudmlzQkJveExl
ZnQgPSAwLjA7DQoJdGhpcy52aXNCQm94UmlnaHQgPSAwLjA7DQoJdGhpcy52aXNCQm94Qm90dG9t
ID0gMC4wOw0KCXRoaXMudmlzQkJveFRvcCA9IDAuMDsNCg0KCXRoaXMuaGlnaGxpZ2h0RGl2ID0g
bnVsbDsNCgl0aGlzLnN0ZXBXaWR0aCA9IDEwOw0KDQoJdGhpcy5pZCA9IGNvbnZlcnRlZEltZ0lE
Ow0KCXRoaXMuem9vbUZhY3RvciA9IC0xOw0KCXRoaXMuem9vbUxhc3QgPSAtMTsNCgl0aGlzLm9y
aWdXSCA9IDE7DQoJdGhpcy5vcmlnV2lkdGggPSAxMDA7CQ0KCXRoaXMuYXNwZWN0UmF0aW8gPSAx
Ow0KDQoJdGhpcy5kb2NEcmF3aW5nID0gbnVsbDsNCgl2YXIgZG9jRHJhd2luZyA9IGZybURyYXdp
bmcuZG9jdW1lbnQ7DQoJaWYoZG9jRHJhd2luZykNCgl7DQoJCXRoaXMuZG9jRHJhd2luZyA9IGRv
Y0RyYXdpbmc7DQoJCXZhciBkb2NFbCA9IGRvY0RyYXdpbmcuYWxsKHRoaXMuaWQpOw0KCQlpZiAo
ZG9jRWwpDQoJCXsNCgkJCXRoaXMucyA9IGRvY0VsLnN0eWxlOw0KCQkJdGhpcy5vcmlnV2lkdGgg
PSB0aGlzLnMucGl4ZWxXaWR0aDsNCgkJCXRoaXMub3JpZ1dIID0gdGhpcy5zLnBpeGVsV2lkdGgg
LyB0aGlzLnMucGl4ZWxIZWlnaHQ7DQoJCX0NCgkJdGhpcy5oaWdobGlnaHREaXYgPSBkb2NEcmF3
aW5nLmFsbChoaWdobGlnaHREaXZJRCk7DQoJfQ0KDQoJdGhpcy5sb2FkUGFnZSA9IERlZlBhZ2VM
b2FkOw0KCXRoaXMuZ2V0UE5aCT0gbnVsbDsNCn0NCg0KZnVuY3Rpb24gRGVmUGFnZUxvYWQgKHBh
Z2VJbmRleCkNCnsNCglpZiAocGFnZUluZGV4ID49IDApDQoJew0KCQl2YXIgY3VyUGF0aCA9IGZy
bURyYXdpbmcubG9jYXRpb24uaHJlZjsNCgkJdmFyIGZpbGVEZWxpbSA9IGN1clBhdGgubGFzdElu
ZGV4T2YgKCcvJyk7DQoJCXZhciBuZXdQYXRoID0gY3VyUGF0aC5zdWJzdHJpbmcgKDAsIGZpbGVE
ZWxpbSArIDEpOw0KCQluZXdQYXRoICs9IGdfRmlsZUxpc3RbcGFnZUluZGV4XS5QcmlJbWFnZTsN
CgkJZnJtRHJhd2luZy5sb2NhdGlvbi5ocmVmID0gbmV3UGF0aDsNCg0KCQlTZXRQTlpEaXNwbGF5
IChwYWdlSW5kZXgpOw0KCX0NCn0NCg0KZnVuY3Rpb24gQ3VyUGFnZVVwZGF0ZSAocGFnZUluZGV4
KQ0Kew0KCWlmIChwYWdlSW5kZXggPj0gMCkNCgl7DQoJCWdfQ3VyUGFnZUluZGV4ID0gcGFnZUlu
ZGV4Ow0KDQoJCVNldEN1clBhZ2VJbkdvdG8gKHBhZ2VJbmRleCk7DQoNCgkJdmFyIGRpdkRldGFp
bHMgPSBmcm1Ub29sYmFyLmRvY3VtZW50LmFsbCgiZGl2RGV0YWlscyIpOw0KCQlpZiAoZGl2RGV0
YWlscykNCgkJew0KCQkJdmFyIGRpc3BsYXlTdGF0dXMgPSAiYmxvY2siOw0KCQkJaWYgKCF2aWV3
TWdyIHx8ICF2aWV3TWdyLlN1cHBvcnRzRGV0YWlscykNCgkJCXsNCgkJCQlkaXNwbGF5U3RhdHVz
ID0gIm5vbmUiOw0KCQkJfQ0KDQoJCQlkaXZEZXRhaWxzLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5
U3RhdHVzOw0KCQl9DQoNCgkJdmFyIGRpdlNlYXJjaCA9IGZybVRvb2xiYXIuZG9jdW1lbnQuYWxs
KCJkaXZTZWFyY2giKTsNCgkJaWYgKGRpdlNlYXJjaCkNCgkJew0KCQkJdmFyIGRpc3BsYXlTdGF0
dXMgPSAiYmxvY2siOw0KCQkJaWYgKCF2aWV3TWdyIHx8ICF2aWV3TWdyLlN1cHBvcnRzU2VhcmNo
KQ0KCQkJew0KCQkJCWRpc3BsYXlTdGF0dXMgPSAibm9uZSI7DQoJCQl9DQoNCgkJCWRpdlNlYXJj
aC5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheVN0YXR1czsNCgkJfQ0KDQoJCVNldFBOWkRpc3BsYXkg
KHBhZ2VJbmRleCk7DQoNCgkJTG9hZFpvb20gKCk7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBGcmFtZVBh
Z2VMb2FkZWQgKCkNCnsNCglpZiAoaXNVcExldmVsICYmIHZpZXdNZ3IgPT0gbnVsbCkNCgl7DQoJ
CXZhciBjdXJQYXRoID0gZnJtRHJhd2luZy5sb2NhdGlvbi5ocmVmOw0KCQl2YXIgZmlsZURlbGlt
ID0gY3VyUGF0aC5sYXN0SW5kZXhPZiAoJy8nKTsNCgkJaWYgKGZpbGVEZWxpbSA+PSAwKQ0KCQl7
DQoJCQl2YXIgZmlsZU5hbWUgPSBjdXJQYXRoLnN1YnN0cmluZyAoZmlsZURlbGltICsgMSwgY3Vy
UGF0aC5sZW5ndGgpOw0KCQkJdmFyIHBhZ2VJbmRleCA9IFBhZ2VJbmRleEZyb21GaWxlTmFtZSAo
ZmlsZU5hbWUpOw0KCQkJU2V0Q3VyUGFnZUluR290byAocGFnZUluZGV4KTsNCgkJCVNldFBOWkRp
c3BsYXkgKHBhZ2VJbmRleCk7DQoJCX0NCgl9DQp9DQoNCmZ1bmN0aW9uIExvYWRab29tICgpDQp7
DQoJdmFyIHpvb21XaWRnZXQgPSBmcm1Ub29sYmFyLmlmcm1QTlo7DQoJaWYgKHpvb21XaWRnZXQp
DQoJew0KCQlpZiAoZ19ab29tTG9hZGVkKQ0KCQl7DQoJCQl6b29tV2lkZ2V0LmZpbmRDb250ZW50
KCk7DQoJCQlQYWdlTG9hZGVkRG9DYWxsYmFjayAoKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXdp
bmRvdy5zZXRUaW1lb3V0KCJMb2FkWm9vbSgpIiwgNTAwKTsNCgkJfQ0KCX0NCgllbHNlDQoJew0K
CQlQYWdlTG9hZGVkRG9DYWxsYmFjayAoKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIFNldEN1clBhZ2VJ
bkdvdG8gKHBhZ2VJbmRleCkNCnsNCgl2YXIgZ290b1BhZ2VTZWxlY3QgPSBmcm1Ub29sYmFyLmRv
Y3VtZW50LmFsbCgiU2VsZWN0MSIpOw0KCWlmIChnb3RvUGFnZVNlbGVjdCAhPSBudWxsKQ0KCXsN
CgkJZ290b1BhZ2VTZWxlY3QudmFsdWUgPSBwYWdlSW5kZXg7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBT
ZXRQTlpEaXNwbGF5IChwYWdlSW5kZXgpDQp7DQoJdmFyIGRpdlBOWiA9IGZybVRvb2xiYXIuZG9j
dW1lbnQuYWxsKCJkaXZQTloiKTsNCglpZiAoZGl2UE5aKQ0KCXsNCgkJdmFyIGRpc3BsYXlTdGF0
dXMgPSAiYmxvY2siOw0KCQlpZiAoZ19GaWxlTGlzdFtwYWdlSW5kZXhdLlBhZ2VJRCA8IDApDQoJ
CXsNCgkJCWRpc3BsYXlTdGF0dXMgPSAibm9uZSI7DQoJCX0NCg0KCQlkaXZQTlouc3R5bGUuZGlz
cGxheSA9IGRpc3BsYXlTdGF0dXM7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBWaWV3TWdyRGVmYXVsdEZp
bmQoKQ0Kew0KCXJldHVybjsNCn0NCg0KZnVuY3Rpb24gVmlld01nckRlZmF1bHRSZXNpemUoc2l6
ZSkNCnsNCglyZXR1cm47DQp9DQoNCg0KDQpnX2NhbGxCYWNrRnVuY3Rpb25BcnJheSA9IG5ldyBB
cnJheSgpOw0KZnVuY3Rpb24gUGFnZUxvYWRlZERvQ2FsbGJhY2soKQ0Kew0KCWlmIChnX1dpZGdl
dHNMb2FkZWQpCQ0KCXsNCgkJZm9yKCB2YXIgaT0wOyBpIDwgZ19jYWxsQmFja0Z1bmN0aW9uQXJy
YXkubGVuZ3RoOyBpKysgKQ0KCQl7DQoJCQlnX2NhbGxCYWNrRnVuY3Rpb25BcnJheVtpXSgpOw0K
CQl9DQoJCWdfY2FsbEJhY2tGdW5jdGlvbkFycmF5ID0gbmV3IEFycmF5KCk7DQoJfQ0KCWVsc2UN
Cgl7DQoJCXdpbmRvdy5zZXRUaW1lb3V0KCJQYWdlTG9hZGVkRG9DYWxsYmFjaygpIiwgNTAwKTsN
Cgl9DQp9DQoNCg0KZnVuY3Rpb24gUGFyc2VQYXJhbXMgKHN0clJhd1BhcmFtcykNCnsNCglzdHJS
YXdQYXJhbXMgPSBzdHJSYXdQYXJhbXMuc3Vic3RyaW5nKDEpOw0KDQoJdmFyIGFycmF5UGFyYW1U
b2tlbnMgPSBzdHJSYXdQYXJhbXMuc3BsaXQoJyYnKTsNCglmb3IgKHZhciBjb3VudCA9IDA7IGNv
dW50IDwgYXJyYXlQYXJhbVRva2Vucy5sZW5ndGg7IGNvdW50KyspDQoJew0KCQlhcnJheVBhcmFt
VG9rZW5zW2NvdW50XSA9IHVuZXNjYXBlKGFycmF5UGFyYW1Ub2tlbnNbY291bnRdKTsNCgkJdGhp
c1tjb3VudF0gPSBhcnJheVBhcmFtVG9rZW5zW2NvdW50XS5zdWJzdHJpbmcoMCwgYXJyYXlQYXJh
bVRva2Vuc1tjb3VudF0uaW5kZXhPZignPScpKTsNCgkJdGhpc1t0aGlzW2NvdW50XV0gPSBhcnJh
eVBhcmFtVG9rZW5zW2NvdW50XS5zdWJzdHJpbmcoYXJyYXlQYXJhbVRva2Vuc1tjb3VudF0uaW5k
ZXhPZignPScpICsgMSk7DQoJfQ0KDQoJcmV0dXJuIHRoaXM7DQp9DQoNCnZhciBnUGFyYW1zID0g
UGFyc2VQYXJhbXMgKGxvY2F0aW9uLnNlYXJjaCk7DQoNCnZhciBnX1BhZ2VQYXJhbVZhbHVlID0g
Z1BhcmFtc1sncGFnZSddOw0KaWYgKGdfUGFnZVBhcmFtVmFsdWUgIT0gbnVsbCAmJiANCglnX1Bh
Z2VQYXJhbVZhbHVlLmxlbmd0aCA+IDApDQp7DQoJdmFyIHBhZ2VJbmRleCA9IFBhZ2VJbmRleEZy
b21OYW1lIChnX1BhZ2VQYXJhbVZhbHVlKTsNCglpZiAocGFnZUluZGV4ID4gMCAmJiBwYWdlSW5k
ZXggPCBnX0ZpbGVMaXN0Lmxlbmd0aCkNCgl7DQoJCWdfQ3VyUGFnZUluZGV4ID0gcGFnZUluZGV4
Ow0KCX0NCn0NCmVsc2UNCnsNCglnX1BhZ2VQYXJhbVZhbHVlID0gbnVsbDsNCn0NCg0KdmFyIGdf
Rmlyc3RQYWdlVG9Mb2FkID0gZ19QYWdlUGFyYW1WYWx1ZTsNCg0KdmFyIGdfWm9vbVBhcmFtVmFs
dWUgPSBnUGFyYW1zWyd6b29tJ107DQppZiAoZ19ab29tUGFyYW1WYWx1ZSAhPSBudWxsICYmIGdf
Wm9vbVBhcmFtVmFsdWUubGVuZ3RoID4gMCkNCnsNCglnX1pvb21QYXJhbVZhbHVlID0gMS4wICog
Z19ab29tUGFyYW1WYWx1ZTsNCglpZiAoZ19ab29tUGFyYW1WYWx1ZSA+PSAxMCAmJiBnX1pvb21Q
YXJhbVZhbHVlIDw9IDUwMCkNCgl7DQoJCWdfY2FsbEJhY2tGdW5jdGlvbkFycmF5W2dfY2FsbEJh
Y2tGdW5jdGlvbkFycmF5Lmxlbmd0aF0gPSBmdW5jdGlvbiAoKSB7IGlmICh2aWV3TWdyICYmIHZp
ZXdNZ3IuWm9vbSkgeyB2aWV3TWdyLlpvb20oZ19ab29tUGFyYW1WYWx1ZSk7IH0gfTsNCgl9DQp9
DQoNCnZhciBnX1NoYXBlUGFyYW1WYWx1ZSA9IGdQYXJhbXNbJ3NoYXBlJ107DQppZiAoZ19TaGFw
ZVBhcmFtVmFsdWUgIT0gbnVsbCAmJiBnX1NoYXBlUGFyYW1WYWx1ZS5sZW5ndGggPiAwKQ0Kew0K
CWlmIChnX1BhZ2VQYXJhbVZhbHVlICE9IG51bGwgJiYgZ19QYWdlUGFyYW1WYWx1ZS5sZW5ndGgg
PiAwKQ0KCXsNCgkJZ19jYWxsQmFja0Z1bmN0aW9uQXJyYXlbZ19jYWxsQmFja0Z1bmN0aW9uQXJy
YXkubGVuZ3RoXSA9IGZ1bmN0aW9uICgpIHsgdmFyIHNoYXBlTm9kZSA9IEZpbmRTaGFwZVhNTEJ5
TmFtZSAoZ19QYWdlUGFyYW1WYWx1ZSwgZ19TaGFwZVBhcmFtVmFsdWUpOyBpZiAoc2hhcGVOb2Rl
KSB7IGZybVRvb2xiYXIuVHJlZVNlbGVjdCAoZ19GaWxlTGlzdFtnX0N1clBhZ2VJbmRleF0uUGFn
ZUlELCBzaGFwZU5vZGUuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0gKCJJRCIpLnRleHQpOyB9IH07
DQoJfQ0KCWVsc2UNCgl7DQoJCWdfU2hhcGVQYXJhbVZhbHVlID0gbnVsbDsNCgl9DQp9DQoNCnZh
ciBnX1NlYXJjaFBhcmFtVmFsdWUgPSBnUGFyYW1zWydzZWFyY2gnXTsNCmlmIChnX1NlYXJjaFBh
cmFtVmFsdWUgIT0gbnVsbCAmJiBnX1NlYXJjaFBhcmFtVmFsdWUubGVuZ3RoID4gMCkNCnsNCgln
X2NhbGxCYWNrRnVuY3Rpb25BcnJheVtnX2NhbGxCYWNrRnVuY3Rpb25BcnJheS5sZW5ndGhdID0g
ZnVuY3Rpb24gKCkgeyBpZiAoZnJtVG9vbGJhci50aGVGb3JtKSB7IGZybVRvb2xiYXIudGhlRm9y
bS5maW5kU3RyaW5nLnZhbHVlID0gZ19TZWFyY2hQYXJhbVZhbHVlOyB9IH07DQoJZ19jYWxsQmFj
a0Z1bmN0aW9uQXJyYXlbZ19jYWxsQmFja0Z1bmN0aW9uQXJyYXkubGVuZ3RoXSA9IGZ1bmN0aW9u
ICgpIHsgdmFyIGdvQnV0dG9uID0gZnJtVG9vbGJhci5kb2N1bWVudC5hbGwoJ0dvQnV0dG9uJyk7
IGlmKGdvQnV0dG9uKSB7IGdvQnV0dG9uLmNsaWNrKCk7IH0gfTsNCn0NCg0KDQp2YXIgc3RySExU
b29sdGlwVGV4dCA9ICJDbGljayB0byBmb2xsb3cgaHlwZXJsaW5rLiI7DQp2YXIgc3RyUHJvcHNU
b29sdGlwVGV4dCA9ICJDdHJsICsgQ2xpY2sgdG8gdmlldyBkZXRhaWxzLiI7DQoNCnZhciBzdHJG
b2N1c0hMVG9vbHRpcFRleHQgPSAiRW50ZXIgdG8gZm9sbG93IGh5cGVybGluay4iOw0KdmFyIHN0
ckZvY3VzUHJvcHNUb29sdGlwVGV4dCA9ICJDdHJsICsgRW50ZXIgdG8gdmlldyBkZXRhaWxzLiI7
DQoNCg0KZnVuY3Rpb24gVXBkYXRlVG9vbHRpcCAoZWxlbWVudCwgcGFnZUlELCBzaGFwZUlEKQ0K
ew0KCWlmIChpc1VwTGV2ZWwpDQoJew0KCQl2YXIgc3RySEwsIHN0clByb3BzOw0KCQ0KCQlpZihm
cm1EcmF3aW5nLmV2ZW50LnR5cGUgPT0gImZvY3VzIikNCgkJew0KCQkJc3RySEwgPSBzdHJGb2N1
c0hMVG9vbHRpcFRleHQ7DQoJCQlzdHJQcm9wcyA9IHN0ckZvY3VzUHJvcHNUb29sdGlwVGV4dDsN
CgkJfQ0KCQllbHNlDQoJCXsNCgkJCXN0ckhMID0gc3RySExUb29sdGlwVGV4dDsNCgkJCXN0clBy
b3BzID0gc3RyUHJvcHNUb29sdGlwVGV4dDsNCgkJfQ0KDQoJCXZhciBzdHJUb29sdGlwID0gIiI7
DQoJCWlmIChlbGVtZW50Lm9yaWdUaXRsZSkNCgkJew0KCQkJc3RyVG9vbHRpcCA9IGVsZW1lbnQu
b3JpZ1RpdGxlLnRvU3RyaW5nKCk7DQoJCX0NCgkJCQ0KCQl2YXIgc2hhcGVOb2RlID0gRmluZFNo
YXBlWE1MIChwYWdlSUQsIHNoYXBlSUQpOw0KDQoJCWlmKCBzaGFwZU5vZGUgIT0gbnVsbCApDQoJ
CXsNCgkJCXZhciBwcm9wQ29sbCA9IHNoYXBlTm9kZS5zZWxlY3ROb2RlcyAoIlByb3AiKTsNCgkJ
CWlmIChwcm9wQ29sbCAhPSBudWxsICYmIHByb3BDb2xsLmxlbmd0aCA+IDApDQoJCQl7DQoJCQkJ
aWYgKHN0clRvb2x0aXAubGVuZ3RoID4gMCkNCgkJCQl7DQoJCQkJCXN0clRvb2x0aXAgKz0gIlxu
IjsNCgkJCQl9IA0KCQkJCXN0clRvb2x0aXAgKz0gc3RyUHJvcHM7DQoJCQl9DQoJCX0NCg0KCQl2
YXIgaGxPYmogPSBHZXRITEFjdGlvbiAoc2hhcGVOb2RlLCBwYWdlSUQsIHNoYXBlSUQpOw0KCQlp
ZiAoaGxPYmogIT0gbnVsbCAmJiAoaGxPYmouRG9GdW5jdGlvbi5sZW5ndGggPiAwIHx8IGhsT2Jq
Lkh5cGVybGluay5sZW5ndGggPiAwKSkNCgkJew0KCQkJaWYgKHN0clRvb2x0aXAubGVuZ3RoID4g
MCkNCgkJCXsNCgkJCQlzdHJUb29sdGlwICs9ICJcbiI7DQoJCQl9CQ0KCQkJc3RyVG9vbHRpcCAr
PSBzdHJITDsNCgkJfQ0KDQoJCWVsZW1lbnQudGl0bGUgPSBzdHJUb29sdGlwOw0KCQlpZiAoZWxl
bWVudC5hbHQgIT0gbnVsbCkNCgkJew0KCQkJZWxlbWVudC5hbHQgPSBzdHJUb29sdGlwOw0KCQl9
DQoJfQ0KfQ0KDQoNCmZ1bmN0aW9uIEdldEhMQWN0aW9uIChzaGFwZU5vZGUsIHBhZ2VJRCwgc2hh
cGVJRCkNCnsNCgl2YXIgaGxPYmogPSBuZXcgSExPYmogKCIiLCAiIiwgIiIsIGZhbHNlKTsNCg0K
CWlmIChzaGFwZU5vZGUgIT0gbnVsbCkNCgl7DQoJCXZhciBobENvbGwgPSBzaGFwZU5vZGUuc2Vs
ZWN0Tm9kZXMgKCJTY3JhdGNoL0IvU29sdXRpb25YTUwvSExVUkw6SHlwZXJsaW5rcy9ITFVSTDpI
eXBlcmxpbmsiKTsNCg0KCQlpZiAoaGxDb2xsLmxlbmd0aCA+IDEpDQoJCXsNCgkJCWhsT2JqLkRv
RnVuY3Rpb24gPSAic2hvd01lbnUoIiArIHBhZ2VJRCArICIsICIgKyBzaGFwZUlEICsgIik7Ig0K
CQl9DQoJCWVsc2UgaWYgKGhsQ29sbC5sZW5ndGggPT0gMSkNCgkJew0KCQkJaGxPYmogPSBDcmVh
dGVITE9iaiAoaGxDb2xsLml0ZW0oMCkpOw0KCQl9DQoJfQ0KDQoJcmV0dXJuIGhsT2JqOw0KfQ0K
DQpmdW5jdGlvbiBITE9iaiAoc3RySHlwZXJsaW5rLCBzdHJEb0Z1bmN0aW9uLCBzdHJEZXNjLCBu
ZXdXaW5kb3cpIA0Kew0KCXRoaXMuSHlwZXJsaW5rID0gc3RySHlwZXJsaW5rOw0KCXRoaXMuRG9G
dW5jdGlvbiA9IHN0ckRvRnVuY3Rpb247DQoJdGhpcy5EZXNjID0gc3RyRGVzYzsNCgl0aGlzLk5l
d1dpbmRvdyA9IG5ld1dpbmRvdzsNCn0NCg0KZnVuY3Rpb24gY2xpY2tNZW51KCkNCnsNCgl2YXIg
ZSA9IHdpbmRvdy5mcm1EcmF3aW5nLmV2ZW50Ow0KCXZhciBtZW51ID0gZnJtRHJhd2luZy5kb2N1
bWVudC5hbGwoIm1lbnUxIikNCgkNCglpZiAobWVudSAhPSBudWxsICYmIG1lbnUuc3R5bGUuZGlz
cGxheSAhPSAibm9uZSIpDQoJew0KCQltZW51LnN0eWxlLmRpc3BsYXk9Im5vbmUiOw0KDQoJCWlm
IChlICYmIGUuc3JjRWxlbWVudCAmJiBlLnNyY0VsZW1lbnQuZG9GdW5jdGlvbiAhPSBudWxsKQ0K
CQl7DQoJCQlldmFsKGUuc3JjRWxlbWVudC5kb0Z1bmN0aW9uKTsNCgkJfQ0KCX0NCn0NCg0KZnVu
Y3Rpb24gdG9nZ2xlTWVudURpdihlbCwgaGlnaGxpZ2h0KSANCnsNCgl2YXIgZGl2RWwgPSBlbDsN
Cgl2YXIgYUVsID0gbnVsbDsNCg0KCXZhciBJRCA9IGVsLmlkLnN1YnN0cmluZyAoZ19ITE1lbnVF
bnRyeURpdi5sZW5ndGgsIGVsLmlkLmxlbmd0aCkgKiAxLjA7DQoJYUVsID0gZGl2RWwuYWxsKGdf
SExNZW51RW50cnkgKyBJRCk7DQoNCgl0b2dnbGVNZW51KGRpdkVsLCBhRWwsIGhpZ2hsaWdodCk7
DQp9DQoNCmZ1bmN0aW9uIHRvZ2dsZU1lbnVMaW5rKGVsLCBoaWdobGlnaHQpIA0Kew0KCXZhciBk
aXZFbCA9IG51bGw7DQoJdmFyIGFFbCA9IGVsOw0KDQoJdmFyIElEID0gZWwuaWQuc3Vic3RyaW5n
IChnX0hMTWVudUVudHJ5Lmxlbmd0aCwgZWwuaWQubGVuZ3RoKSAqIDEuMDsNCglkaXZFbCA9IGZy
bURyYXdpbmcuZG9jdW1lbnQuYWxsKGdfSExNZW51RW50cnlEaXYgKyBJRCk7DQoNCgl0b2dnbGVN
ZW51KGRpdkVsLCBhRWwsIGhpZ2hsaWdodCk7DQp9DQoNCmZ1bmN0aW9uIHRvZ2dsZU1lbnUoZGl2
RWwsIGFFbCwgaGlnaGxpZ2h0KQ0Kew0KCWlmIChoaWdobGlnaHQpDQoJew0KCSAgZGl2RWwuY2xh
c3NOYW1lPSJoaWdobGlnaHRJdGVtIjsNCgkgIGFFbC5jbGFzc05hbWU9ImhpZ2hsaWdodEl0ZW0i
Ow0KCX0gDQoJZWxzZSANCgl7DQoJICBkaXZFbC5jbGFzc05hbWU9Im1lbnVJdGVtIjsNCgkgIGFF
bC5jbGFzc05hbWU9Im1lbnVJdGVtIjsNCgl9DQp9DQoNCmZ1bmN0aW9uIHNob3dNZW51KHBhZ2VJ
RCwgc2hhcGVJRCkNCnsNCgl2YXIgc2hhcGVYTUwgPSBGaW5kU2hhcGVYTUwgKHBhZ2VJRCwgc2hh
cGVJRCk7DQoJaWYgKHNoYXBlWE1MICE9IG51bGwpDQoJew0KCQlDcmVhdGVITE1lbnUgKHNoYXBl
WE1MKTsNCgkJdmFyIG1lbnUgPSBmcm1EcmF3aW5nLmRvY3VtZW50LmFsbCgibWVudTEiKTsNCgkJ
aWYgKG1lbnUgIT0gbnVsbCkNCgkJew0KCQkJbWVudS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRl
biI7DQoJCQltZW51LnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsNCg0KCQkJdmFyIGUgPSB3aW5k
b3cuZnJtRHJhd2luZy5ldmVudDsNCgkJCXZhciBlbGVtID0gZS5zcmNFbGVtZW50Ow0KDQoJCQl2
YXIgY2xpZW50V2lkdGggPSBmcm1EcmF3aW5nLmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7DQoJ
CQl2YXIgY2xpZW50SGVpZ2h0ID0gZnJtRHJhd2luZy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdo
dDsNCg0KCQkJdmFyIG1lbnVXaWR0aCA9IG1lbnUuY2xpZW50V2lkdGg7DQoJCQl2YXIgbWVudUhl
aWdodCA9IG1lbnUuY2xpZW50SGVpZ2h0Ow0KDQoJCQl2YXIgbWVudUxlZnQgPSBlLng7DQoJCQl2
YXIgbWVudVRvcCA9IGUueTsNCgkJCQ0KCQkJdmFyIGRvYyA9IGZybURyYXdpbmcuZG9jdW1lbnQ7
DQoJCQl2YXIgaW1nID0gZG9jLmFsbCgiQ29udmVydGVkSW1hZ2UiKTsNCgkJCQ0KCQkJaWYoICht
ZW51TGVmdCArIGRvYy5ib2R5LnNjcm9sbExlZnQgPCBlbGVtLm9mZnNldExlZnQpIHx8IChtZW51
TGVmdCArIGRvYy5ib2R5LnNjcm9sbExlZnQgPiBlbGVtLm9mZnNldExlZnQgKyBlbGVtLm9mZnNl
dFdpZHRoICsgaW1nLm9mZnNldExlZnQpICkNCgkJCXsNCgkJCQltZW51TGVmdCA9IGVsZW0ub2Zm
c2V0TGVmdCArIGltZy5vZmZzZXRMZWZ0ICsgZWxlbS5vZmZzZXRXaWR0aC8yOw0KCQkJfQ0KCQkJ
DQoJCQlpZiggKG1lbnVUb3AgKyBkb2MuYm9keS5zY3JvbGxUb3AgPCBlbGVtLm9mZnNldFRvcCkg
fHwgKG1lbnVUb3AgKyBkb2MuYm9keS5zY3JvbGxUb3AgPiBlbGVtLm9mZnNldFRvcCArIGVsZW0u
b2Zmc2V0SGVpZ2h0ICsgaW1nLm9mZnNldFRvcCkgKQ0KCQkJew0KCQkJCW1lbnVUb3AgPSBlbGVt
Lm9mZnNldFRvcCArIGltZy5vZmZzZXRUb3AgKyBlbGVtLm9mZnNldEhlaWdodC8yOw0KCQkJfQ0K
DQoJCQl2YXIgc2Nyb2xsQmFyU2l6ZSA9IDIwOw0KCQkJaWYgKG1lbnVMZWZ0ICsgbWVudVdpZHRo
ID4gY2xpZW50V2lkdGggLSBzY3JvbGxCYXJTaXplKQ0KCQkJew0KCQkJCW1lbnVMZWZ0ID0gY2xp
ZW50V2lkdGggLSBtZW51V2lkdGggLSBzY3JvbGxCYXJTaXplOw0KCQkJfQ0KDQoJCQlpZiAobWVu
dVRvcCArIG1lbnVIZWlnaHQgPiBjbGllbnRIZWlnaHQgLSBzY3JvbGxCYXJTaXplKQ0KCQkJew0K
CQkJCW1lbnVUb3AgPSBjbGllbnRIZWlnaHQgLSBtZW51SGVpZ2h0IC0gc2Nyb2xsQmFyU2l6ZTsN
CgkJCX0NCg0KCQkJbWVudS5zdHlsZS5wb3NMZWZ0ID0gbWVudUxlZnQgKyBmcm1EcmF3aW5nLmRv
Y3VtZW50LmJvZHkuc2Nyb2xsTGVmdDsNCgkJCW1lbnUuc3R5bGUucG9zVG9wID0gbWVudVRvcCAr
IGZybURyYXdpbmcuZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7DQoJCQltZW51LnN0eWxlLnZpc2li
aWxpdHkgPSAidmlzaWJsZSI7DQoNCgkJCXZhciBmaXJzdExpbmsgPSBtZW51LmFsbChnX0hMTWVu
dUVudHJ5ICsgIjAiKTsNCgkJCWZpcnN0TGluay5mb2N1cyAoKTsNCgkJCQ0KCQkJaWYgKGUua2V5
Q29kZSA9PSAxMykNCgkJCXsNCgkJCQl0b2dnbGVNZW51TGluayhmaXJzdExpbmssIHRydWUpOw0K
CQkJfQ0KDQoJCQllLmNhbmNlbEJ1YmJsZSA9IHRydWU7DQoJCX0NCgl9DQp9DQoNCmZ1bmN0aW9u
IE1lbnVLZXlEb3duICgpDQp7DQoJdmFyIGUgPSB3aW5kb3cuZnJtRHJhd2luZy5ldmVudDsNCgl2
YXIgZWwgPSBlLnNyY0VsZW1lbnQ7DQoNCglpZiAoZS5rZXlDb2RlID09IDI3KQkvLyAyNyA9PSBF
U0MNCgl7DQoJCWNsaWNrTWVudSgpOw0KCQllLmNhbmNlbEJ1YmJsZSA9IHRydWU7DQoJCXJldHVy
bjsNCgl9DQoNCgl2YXIgY3VyU2VsSUQgPSBlbC5pZC5zdWJzdHJpbmcgKGdfSExNZW51RW50cnku
bGVuZ3RoLCBlbC5pZC5sZW5ndGgpICogMS4wOw0KCXZhciBuZXdTZWxJRCA9IC0xOw0KDQoJaWYg
KGUua2V5Q29kZSA9PSA0MCkJLy8gNDAgPT0gZG93biBhcnJvdw0KCXsNCgkJbmV3U2VsSUQgPSBj
dXJTZWxJRCArIDE7DQoJfQ0KCWVsc2UgaWYgKGUua2V5Q29kZSA9PSAzOCkgLy8gMzggPT0gdXAg
YXJyb3cNCgl7DQoJCW5ld1NlbElEID0gY3VyU2VsSUQgLSAxOw0KCX0NCg0KCXZhciBuZXdTZWxF
bnRyeSA9IGZybURyYXdpbmcuZG9jdW1lbnQuYWxsKGdfSExNZW51RW50cnkgKyBuZXdTZWxJRCk7
DQoNCglpZiAobmV3U2VsRW50cnkpDQoJew0KCQluZXdTZWxFbnRyeS5mb2N1cygpOw0KDQoJCXZh
ciBjdXJTZWxFbnRyeSA9IGZybURyYXdpbmcuZG9jdW1lbnQuYWxsKGdfSExNZW51RW50cnkgKyBj
dXJTZWxJRCk7DQoJCXRvZ2dsZU1lbnVMaW5rIChjdXJTZWxFbnRyeSwgZmFsc2UpOw0KCQl0b2dn
bGVNZW51TGluayAobmV3U2VsRW50cnksIHRydWUpOw0KCX0NCg0KCWUuY2FuY2VsQnViYmxlID0g
dHJ1ZTsNCn0NCg0KZnVuY3Rpb24gQ3JlYXRlSExNZW51IChzaGFwZU5vZGUpDQp7DQoJdmFyIHN0
ckhMTWVudUhUTUwgPSAiIjsNCg0KCWlmIChzaGFwZU5vZGUgIT0gbnVsbCkNCgl7DQoJCXZhciBo
bENvbGwgPSBzaGFwZU5vZGUuc2VsZWN0Tm9kZXMgKCJTY3JhdGNoL0IvU29sdXRpb25YTUwvSExV
Ukw6SHlwZXJsaW5rcy9ITFVSTDpIeXBlcmxpbmsiKTsNCg0KCQlzdHJITE1lbnVIVE1MID0gIjxk
aXYgY2xhc3M9J2lubmVyaGxNZW51Jz4iOw0KDQoJCXZhciBobENvdW50ID0gaGxDb2xsLmxlbmd0
aDsNCgkJZm9yICh2YXIgY291bnQgPSAwOyBjb3VudCA8IGhsQ291bnQ7IGNvdW50KyspDQoJCXsN
CgkJCXZhciBobE9iaiA9IENyZWF0ZUhMT2JqIChobENvbGwuaXRlbShjb3VudCkpOw0KCQkJaWYg
KGhsT2JqICE9IG51bGwpDQoJCQl7DQoJCQkJaWYgKGhsT2JqLkRlc2MubGVuZ3RoID4gMCkNCgkJ
CQl7DQoJCQkJCXN0ckhMTWVudUhUTUwgKz0gIjxkaXYgaWQ9JyIgKyAoZ19ITE1lbnVFbnRyeURp
diArIGNvdW50KSArICInIGNsYXNzPSdtZW51SXRlbScgb25tb3VzZW92ZXI9J3RvZ2dsZU1lbnVE
aXYodGhpcywgdHJ1ZSknIG9ubW91c2VvdXQ9J3RvZ2dsZU1lbnVEaXYodGhpcywgZmFsc2UpJyBv
bmNsaWNrPSciICsgKGdfSExNZW51RW50cnkgKyBjb3VudCkgKyAiLmNsaWNrKCknPiI7DQoJCQkJ
CXN0ckhMTWVudUhUTUwgKz0gIjxhIGhyZWY9IjsNCg0KCQkJCQlpZiAoaGxPYmouRG9GdW5jdGlv
bi5sZW5ndGggPiAwKQ0KCQkJCQl7DQoJCQkJCQlzdHJITE1lbnVIVE1MICs9ICInamF2YXNjcmlw
dDoiICsgaGxPYmouRG9GdW5jdGlvbiArICInIjsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsN
CgkJCQkJCXZhciB0YXJnZXRWYWwgPSAiX3RvcCI7DQoJCQkJCQlpZiAoaGxPYmouTmV3V2luZG93
KQ0KCQkJCQkJew0KCQkJCQkJCXRhcmdldFZhbCA9ICJfYmxhbmsiOw0KCQkJCQkJfQ0KCQkJCQkJ
c3RySExNZW51SFRNTCArPSAiJyIgKyBobE9iai5IeXBlcmxpbmsgKyAiJyB0YXJnZXQ9JyIgKyB0
YXJnZXRWYWwgKyAiJyI7DQoJCQkJCX0NCg0KCQkJCQlzdHJITE1lbnVIVE1MICs9ICIgY2xhc3M9
J21lbnVJdGVtJyBpZD0nIiArIChnX0hMTWVudUVudHJ5ICsgY291bnQpICsgIicgb25rZXlkb3du
PSdwYXJlbnQuTWVudUtleURvd24oKTsnIG9ubW91c2VvdmVyPSd0b2dnbGVNZW51TGluayh0aGlz
LCB0cnVlKScgb25tb3VzZW91dD0ndG9nZ2xlTWVudUxpbmsodGhpcywgZmFsc2UpJz4iOw0KCQkJ
CQlzdHJITE1lbnVIVE1MICs9IGhsT2JqLkRlc2MgKyAiPC9hPjwvZGl2PiI7DQoJCQkJfQ0KCQkJ
fQ0KCQl9DQoJCQ0KCQlzdHJITE1lbnVIVE1MICs9ICI8L2Rpdj4iOw0KCX0NCg0KCWZybURyYXdp
bmcubWVudTEuaW5uZXJIVE1MID0gc3RySExNZW51SFRNTDsNCn0NCg0KZnVuY3Rpb24gQ3JlYXRl
SExPYmogKGhsTm9kZSkNCnsNCgl2YXIgc3RyQWRkcmVzcyA9ICIiOw0KCXZhciBobE9iaiA9IG5l
dyBITE9iaiAoIiIsICIiLCAiIiwgZmFsc2UpOw0KDQoJaWYgKGhsTm9kZSAhPSBudWxsKQ0KCXsN
CgkJdmFyIGhsQWRkcmVzcyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpBZGRyZXNz
L3RleHRub2RlKCkiKTsNCgkJaWYgKGhsQWRkcmVzcyAhPSBudWxsICYmIGhsQWRkcmVzcy50ZXh0
Lmxlbmd0aCA+IDApDQoJCXsNCgkJCXZhciBhYnNvbHV0ZVVSTCA9IGhsTm9kZS5zZWxlY3RTaW5n
bGVOb2RlKCJITFVSTDpBYnNvbHV0ZVVSTC90ZXh0bm9kZSgpIik7DQoJCQl2YXIgc3RyQWJzVVJM
ID0gYWJzb2x1dGVVUkwudGV4dDsNCgkJCXZhciBzdHJBZGRyID0gaGxBZGRyZXNzLnRleHQ7DQoN
CgkJCWlmIChzdHJBYnNVUkwuaW5kZXhPZiAoZ19GaWxlUHJvdG9jb2wpID09IDApDQoJCQl7DQoJ
CQkJdmFyIHN0ckFic1BhdGggPSBzdHJBYnNVUkwuc3Vic3RyaW5nIChnX0ZpbGVQcm90b2NvbC5s
ZW5ndGgsIHN0ckFic1VSTC5sZW5ndGgpOw0KCQkJCXN0ckFic1BhdGgudG9Mb3dlckNhc2UgKCk7
DQoJCQkJc3RyQWRkci50b0xvd2VyQ2FzZSAoKTsNCgkJCQlpZiAoc3RyQWJzUGF0aCA9PSBzdHJB
ZGRyKQ0KCQkJCXsNCgkJCQkJc3RyQWRkcmVzcyA9IHN0ckFic1BhdGg7DQoJCQkJfQ0KCQkJCWVs
c2UNCgkJCQl7DQoJCQkJCXN0ckFkZHJlc3MgPSBzdHJBZGRyOw0KCQkJCQkNCgkJCQkJdmFyIGhs
U3ViQWRkcmVzcyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpTdWJBZGRyZXNzL3Rl
eHRub2RlKCkiKTsNCgkJCQkJaWYgKGhsU3ViQWRkcmVzcyAhPSBudWxsICYmIGhsU3ViQWRkcmVz
cy50ZXh0Lmxlbmd0aCA+IDApDQoJCQkJCXsNCgkJCQkJCXN0ckFkZHJlc3MgKz0gJyMnOw0KCQkJ
CQkJc3RyQWRkcmVzcyArPSBobFN1YkFkZHJlc3MudGV4dDsNCgkJCQkJfQ0KDQoJCQkJCXZhciBo
bEV4dHJhSW5mbyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpFeHRyYUluZm8vdGV4
dG5vZGUoKSIpOw0KCQkJCQlpZiAoaGxFeHRyYUluZm8gIT0gbnVsbCAmJiBobEV4dHJhSW5mby50
ZXh0Lmxlbmd0aCA+IDApDQoJCQkJCXsNCgkJCQkJCXN0ckFkZHJlc3MgKz0gJz8nOw0KCQkJCQkJ
c3RyQWRkcmVzcyArPSBobEV4dHJhSW5mby50ZXh0Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJ
ZWxzZQ0KCQkJew0KCQkJCXN0ckFkZHJlc3MgPSBzdHJBYnNVUkw7DQoJCQl9CQkNCg0KCQkJc3Ry
QWRkcmVzcyA9IEhUTUxFc2NhcGUgKHN0ckFkZHJlc3MpOw0KCQkJaGxPYmouSHlwZXJsaW5rICs9
IHN0ckFkZHJlc3M7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlobEFkZHJlc3MgPSBobE5vZGUuc2Vs
ZWN0U2luZ2xlTm9kZSgiSExVUkw6U3ViQWRkcmVzcy90ZXh0bm9kZSgpIik7DQoJCQlpZiAoaGxB
ZGRyZXNzICE9IG51bGwgJiYgaGxBZGRyZXNzLnRleHQubGVuZ3RoID4gMCkNCgkJCXsNCgkJCQlz
dHJBZGRyZXNzID0gaGxBZGRyZXNzLnRleHQ7DQoNCgkJCQl2YXIgcGFnZVNoYXBlU2VwID0gc3Ry
QWRkcmVzcy5sYXN0SW5kZXhPZiAoJy8nKTsNCgkJCQlpZiAocGFnZVNoYXBlU2VwID4gMCkNCgkJ
CQl7DQoJCQkJCWlmIChQYWdlSW5kZXhGcm9tTmFtZSAoc3RyQWRkcmVzcykgPCAwKQ0KCQkJCQl7
DQoJCQkJCQlzdHJBZGRyZXNzID0gdW5lc2NhcGUgKHN0ckFkZHJlc3MpOw0KCQkJCQkJaWYgKFBh
Z2VJbmRleEZyb21OYW1lIChzdHJBZGRyZXNzKSA8IDApDQoJCQkJCQl7DQoJCQkJCQkJc3RyQWRk
cmVzcyA9IHN0ckFkZHJlc3Muc3Vic3RyaW5nICgwLCBzdHJBZGRyZXNzLmxhc3RJbmRleE9mICgn
LycpKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCXZhciBwYWdlSW5kZXggPSBQYWdl
SW5kZXhGcm9tTmFtZSAoc3RyQWRkcmVzcyk7DQoNCgkJCQlobE9iai5Eb0Z1bmN0aW9uID0gIkdv
VG9QYWdlICgiICsgcGFnZUluZGV4ICsgIik7IjsNCgkJCQlzdHJBZGRyZXNzID0gSFRNTEVzY2Fw
ZSAoc3RyQWRkcmVzcyk7DQoJCQkJaGxPYmouRGVzYyA9IHN0ckFkZHJlc3M7DQoJCQl9DQoJCX0N
Cg0KCQlobERlc2MgPSBobE5vZGUuc2VsZWN0U2luZ2xlTm9kZSgiSExVUkw6RGVzY3JpcHRpb24v
dGV4dG5vZGUoKSIpOw0KCQlpZiAoaGxEZXNjICE9IG51bGwgJiYgaGxEZXNjLnRleHQubGVuZ3Ro
ID4gMCkNCgkJew0KCQkJaGxPYmouRGVzYyA9IEhUTUxFc2NhcGUgKGhsRGVzYy50ZXh0KTsNCgkJ
fQ0KCQllbHNlDQoJCXsNCgkJCWhsT2JqLkRlc2MgPSBzdHJBZGRyZXNzOw0KCQl9DQoJDQoJCXZh
ciBobE5ld1dpbmRvdyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpOZXdXaW5kb3cv
dGV4dG5vZGUoKSIpOw0KCQlpZiAoaGxOZXdXaW5kb3cgIT0gbnVsbCAmJiBobE5ld1dpbmRvdy50
ZXh0Lmxlbmd0aCA+IDApDQoJCXsNCgkJCWhsT2JqLk5ld1dpbmRvdyA9IChobE5ld1dpbmRvdy50
ZXh0ID09ICIxIik7DQoJCX0JCQ0KCX0NCg0KCXJldHVybiBobE9iajsNCn0NCg0KDQoJCTwvc2Ny
aXB0Pg0KCTwvaGVhZD4NCgkNCgk8ZnJhbWVzZXQgaWQ9ImZybXN0T3V0ZXIiIGNvbHM9IjIzNywq
IiB0aXRsZT0iTWlncmF0aW9uLWRjX2NsdXN0ZXIxIj4NCgkJPGZyYW1lIHNyYz0iTWlncmF0aW9u
LWRjX2NsdXN0ZXIxX2ZpbGVzL3Rvb2xiYXIuaHRtIiBuYW1lPSJmcm1Ub29sYmFyIiBpZD0iZnJt
VG9vbGJhciIgdGl0bGU9IlRoaXMgZnJhbWUgY29udGFpbnMgdG9vbHMgZm9yIG1hbmlwdWxhdGlu
ZyB5b3VyIGRyYXdpbmcuIiBmcmFtZWJvcmRlcj0iNiIgYm9yZGVyY29sb3I9IiM5OTk5OTkiIHNj
cm9sbGluZz0ibm8iIG1hcmdpbmhlaWdodD0iMCIgbWFyZ2lud2lkdGg9IjAiID4NCgkJPGZyYW1l
IHNyYz0iTWlncmF0aW9uLWRjX2NsdXN0ZXIxX2ZpbGVzL2dpZl8xLmh0bSIgbmFtZT0iZnJtRHJh
d2luZyIgdGl0bGU9IlRoaXMgZnJhbWUgY29udGFpbnMgdGhlIHBhZ2VzIG9mIHlvdXIgZHJhd2lu
Zy4iIG1hcmdpbmhlaWdodD0iMTAiIG1hcmdpbndpZHRoPSIxMCIgb25sb2FkPSJpZiAocGFyZW50
LmlzVXBMZXZlbCkgRnJhbWVQYWdlTG9hZGVkKCkiID4NCg0KCQk8bm9mcmFtZXM+DQoJCQk8Ym9k
eT4NCg0KCQkJCTxoMT5NaWdyYXRpb24tZGNfY2x1c3RlcjE8L2gxPg0KCQkJCTx1bD4NCgkJCQk8
bGk+PGEgaHJlZj0iTWlncmF0aW9uLWRjX2NsdXN0ZXIxX2ZpbGVzL2dpZl8xLmh0bSI+UGFnZS0x
PC9hPjwvbGk+Cg0KCQkJCTwvdWw+DQoJCQk8L2JvZHk+DQoJCTwvbm9mcmFtZXM+DQoJPC9mcmFt
ZXNldD4NCgkNCjwvaHRtbD4NCgo=

------_=_NextPart_001_01C88EE5.EB9DD028
Content-Type: text/html;
	name="Migration_Fabric_Cluster.htm"
Content-Transfer-Encoding: base64
Content-Description: Migration_Fabric_Cluster.htm
Content-Disposition: attachment;
	filename="Migration_Fabric_Cluster.htm"

PGh0bWw+DQoJPGhlYWQ+DQoJCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ii8+DQoJCTxtZXRhIG5hbWU9IlRpdGxlIiBjb250
ZW50PSIiLz4KCQk8bWV0YSBuYW1lPSJTdWJqZWN0IiBjb250ZW50PSIiLz4KCQk8bWV0YSBuYW1l
PSJDYXRlZ29yeSIgY29udGVudD0iIi8+CgkJPG1ldGEgbmFtZT0iS2V5d29yZHMiIGNvbnRlbnQ9
IiIvPgoJCTxtZXRhIG5hbWU9IkRlc2NyaXB0aW9uIiBjb250ZW50PSIiLz4KCQk8bWV0YSBuYW1l
PSJBdXRob3IiIGNvbnRlbnQ9Ik5ldHdvcmsgQWRtaW5pc3RyYXRvciIvPgoJCTxtZXRhIG5hbWU9
Ik1hbmFnZXIiIGNvbnRlbnQ9IiIvPgoJCTxtZXRhIG5hbWU9IkNvbXBhbnkiIGNvbnRlbnQ9Ik9O
U3RvciwgSW5jLiIvPgoNCgkJPHRpdGxlPk1pZ3JhdGlvbl9GYWJyaWNfQ2x1c3RlcjwvdGl0bGU+
DQoJCTxzY3JpcHQgc3JjPSJNaWdyYXRpb25fRmFicmljX0NsdXN0ZXJfZmlsZXMvZnJhbWVzZXQu
anMiIHR5cGU9InRleHQvanNjcmlwdCIgbGFuZ3VhZ2U9ImpzY3JpcHQiPjwvc2NyaXB0Pg0KCQk8
c2NyaXB0IHR5cGU9InRleHQvanNjcmlwdCIgbGFuZ3VhZ2U9ImpzY3JpcHQiID4NCg0KZnVuY3Rp
b24gRmlsZUVudHJ5IChwYWdlSW5kZXgsIHBhZ2VJRCwgcGFnZU5hbWUsIHByaUltYWdlLCBzZWNJ
bWFnZSkgDQp7DQoJdGhpcy5QYWdlSW5kZXggPSBwYWdlSW5kZXg7DQoJdGhpcy5QYWdlSUQJICA9
IHBhZ2VJRDsNCgl0aGlzLlBhZ2VOYW1lID0gcGFnZU5hbWU7DQoJdGhpcy5QcmlJbWFnZSA9IHBy
aUltYWdlOw0KCXRoaXMuU2VjSW1hZ2UgPSBzZWNJbWFnZTsNCn0NCg0KdmFyIHZpZXdNZ3IgPSBu
dWxsOw0KDQp2YXIgZ19GaWxlTGlzdCA9IG5ldyAgQXJyYXkoDQogbmV3IEZpbGVFbnRyeSAoMSwg
MCwgIlBhZ2UtMSIsICJ2bWxfMS5odG0iLCAiZ2lmXzEuaHRtIikKDQopOw0KDQp2YXIgZ19DdXJQ
YWdlSW5kZXggPSAwOw0KdmFyIGdfWm9vbUxvYWRlZCA9IGZhbHNlOw0KdmFyIGdfV2lkZ2V0c0xv
YWRlZCA9IGZhbHNlOw0KdmFyIGdfRmlsZVByb3RvY29sID0gImZpbGU6Ly8iOw0KDQp2YXIgZ19I
TE1lbnVFbnRyeSA9ICJtZW51RW50cnkiOw0KdmFyIGdfSExNZW51RW50cnlEaXYgPSAibWVudUVu
dHJ5RGl2IjsNCg0KdmFyIGdfTG9hZGluZ1dpZGdldHMgPSBmYWxzZTsNCg0KDQpmdW5jdGlvbiBD
Vmlld01ncihjb252ZXJ0ZWRJbWdJRCwgaGlnaGxpZ2h0RGl2SUQpDQp7DQoJdGhpcy5vblJlc2l6
ZSA9IG51bGw7DQoJdGhpcy5BcHBseVpvb20gPSBudWxsOw0KCXRoaXMuQ2hhbmdpbmdWaWV3ID0g
ZmFsc2U7DQoNCgl0aGlzLnB1dF9Mb2NhdGlvbiA9IFZpZXdNZ3JEZWZhdWx0RmluZDsNCgl0aGlz
Llpvb20gPSBWaWV3TWdyRGVmYXVsdFJlc2l6ZTsNCgl0aGlzLlBvc3Rab29tUHJvY2Vzc2luZyA9
IG51bGw7DQoJdGhpcy5zZXRWaWV3ID0gbnVsbDsNCgl0aGlzLlBvc3RTZXRWaWV3UHJvY2Vzc2lu
ZyA9IG51bGw7DQoJdGhpcy52aWV3Q2hhbmdlZCA9IG51bGw7DQoNCgl0aGlzLlN1cHBvcnRzRGV0
YWlscyA9IGZhbHNlOw0KCXRoaXMuU3VwcG9ydHNTZWFyY2ggPSBmYWxzZTsNCg0KCXRoaXMudmlz
QkJveExlZnQgPSAwLjA7DQoJdGhpcy52aXNCQm94UmlnaHQgPSAwLjA7DQoJdGhpcy52aXNCQm94
Qm90dG9tID0gMC4wOw0KCXRoaXMudmlzQkJveFRvcCA9IDAuMDsNCg0KCXRoaXMuaGlnaGxpZ2h0
RGl2ID0gbnVsbDsNCgl0aGlzLnN0ZXBXaWR0aCA9IDEwOw0KDQoJdGhpcy5pZCA9IGNvbnZlcnRl
ZEltZ0lEOw0KCXRoaXMuem9vbUZhY3RvciA9IC0xOw0KCXRoaXMuem9vbUxhc3QgPSAtMTsNCgl0
aGlzLm9yaWdXSCA9IDE7DQoJdGhpcy5vcmlnV2lkdGggPSAxMDA7CQ0KCXRoaXMuYXNwZWN0UmF0
aW8gPSAxOw0KDQoJdGhpcy5kb2NEcmF3aW5nID0gbnVsbDsNCgl2YXIgZG9jRHJhd2luZyA9IGZy
bURyYXdpbmcuZG9jdW1lbnQ7DQoJaWYoZG9jRHJhd2luZykNCgl7DQoJCXRoaXMuZG9jRHJhd2lu
ZyA9IGRvY0RyYXdpbmc7DQoJCXZhciBkb2NFbCA9IGRvY0RyYXdpbmcuYWxsKHRoaXMuaWQpOw0K
CQlpZiAoZG9jRWwpDQoJCXsNCgkJCXRoaXMucyA9IGRvY0VsLnN0eWxlOw0KCQkJdGhpcy5vcmln
V2lkdGggPSB0aGlzLnMucGl4ZWxXaWR0aDsNCgkJCXRoaXMub3JpZ1dIID0gdGhpcy5zLnBpeGVs
V2lkdGggLyB0aGlzLnMucGl4ZWxIZWlnaHQ7DQoJCX0NCgkJdGhpcy5oaWdobGlnaHREaXYgPSBk
b2NEcmF3aW5nLmFsbChoaWdobGlnaHREaXZJRCk7DQoJfQ0KDQoJdGhpcy5sb2FkUGFnZSA9IERl
ZlBhZ2VMb2FkOw0KCXRoaXMuZ2V0UE5aCT0gbnVsbDsNCn0NCg0KZnVuY3Rpb24gRGVmUGFnZUxv
YWQgKHBhZ2VJbmRleCkNCnsNCglpZiAocGFnZUluZGV4ID49IDApDQoJew0KCQl2YXIgY3VyUGF0
aCA9IGZybURyYXdpbmcubG9jYXRpb24uaHJlZjsNCgkJdmFyIGZpbGVEZWxpbSA9IGN1clBhdGgu
bGFzdEluZGV4T2YgKCcvJyk7DQoJCXZhciBuZXdQYXRoID0gY3VyUGF0aC5zdWJzdHJpbmcgKDAs
IGZpbGVEZWxpbSArIDEpOw0KCQluZXdQYXRoICs9IGdfRmlsZUxpc3RbcGFnZUluZGV4XS5QcmlJ
bWFnZTsNCgkJZnJtRHJhd2luZy5sb2NhdGlvbi5ocmVmID0gbmV3UGF0aDsNCg0KCQlTZXRQTlpE
aXNwbGF5IChwYWdlSW5kZXgpOw0KCX0NCn0NCg0KZnVuY3Rpb24gQ3VyUGFnZVVwZGF0ZSAocGFn
ZUluZGV4KQ0Kew0KCWlmIChwYWdlSW5kZXggPj0gMCkNCgl7DQoJCWdfQ3VyUGFnZUluZGV4ID0g
cGFnZUluZGV4Ow0KDQoJCVNldEN1clBhZ2VJbkdvdG8gKHBhZ2VJbmRleCk7DQoNCgkJdmFyIGRp
dkRldGFpbHMgPSBmcm1Ub29sYmFyLmRvY3VtZW50LmFsbCgiZGl2RGV0YWlscyIpOw0KCQlpZiAo
ZGl2RGV0YWlscykNCgkJew0KCQkJdmFyIGRpc3BsYXlTdGF0dXMgPSAiYmxvY2siOw0KCQkJaWYg
KCF2aWV3TWdyIHx8ICF2aWV3TWdyLlN1cHBvcnRzRGV0YWlscykNCgkJCXsNCgkJCQlkaXNwbGF5
U3RhdHVzID0gIm5vbmUiOw0KCQkJfQ0KDQoJCQlkaXZEZXRhaWxzLnN0eWxlLmRpc3BsYXkgPSBk
aXNwbGF5U3RhdHVzOw0KCQl9DQoNCgkJdmFyIGRpdlNlYXJjaCA9IGZybVRvb2xiYXIuZG9jdW1l
bnQuYWxsKCJkaXZTZWFyY2giKTsNCgkJaWYgKGRpdlNlYXJjaCkNCgkJew0KCQkJdmFyIGRpc3Bs
YXlTdGF0dXMgPSAiYmxvY2siOw0KCQkJaWYgKCF2aWV3TWdyIHx8ICF2aWV3TWdyLlN1cHBvcnRz
U2VhcmNoKQ0KCQkJew0KCQkJCWRpc3BsYXlTdGF0dXMgPSAibm9uZSI7DQoJCQl9DQoNCgkJCWRp
dlNlYXJjaC5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheVN0YXR1czsNCgkJfQ0KDQoJCVNldFBOWkRp
c3BsYXkgKHBhZ2VJbmRleCk7DQoNCgkJTG9hZFpvb20gKCk7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBG
cmFtZVBhZ2VMb2FkZWQgKCkNCnsNCglpZiAoaXNVcExldmVsICYmIHZpZXdNZ3IgPT0gbnVsbCkN
Cgl7DQoJCXZhciBjdXJQYXRoID0gZnJtRHJhd2luZy5sb2NhdGlvbi5ocmVmOw0KCQl2YXIgZmls
ZURlbGltID0gY3VyUGF0aC5sYXN0SW5kZXhPZiAoJy8nKTsNCgkJaWYgKGZpbGVEZWxpbSA+PSAw
KQ0KCQl7DQoJCQl2YXIgZmlsZU5hbWUgPSBjdXJQYXRoLnN1YnN0cmluZyAoZmlsZURlbGltICsg
MSwgY3VyUGF0aC5sZW5ndGgpOw0KCQkJdmFyIHBhZ2VJbmRleCA9IFBhZ2VJbmRleEZyb21GaWxl
TmFtZSAoZmlsZU5hbWUpOw0KCQkJU2V0Q3VyUGFnZUluR290byAocGFnZUluZGV4KTsNCgkJCVNl
dFBOWkRpc3BsYXkgKHBhZ2VJbmRleCk7DQoJCX0NCgl9DQp9DQoNCmZ1bmN0aW9uIExvYWRab29t
ICgpDQp7DQoJdmFyIHpvb21XaWRnZXQgPSBmcm1Ub29sYmFyLmlmcm1QTlo7DQoJaWYgKHpvb21X
aWRnZXQpDQoJew0KCQlpZiAoZ19ab29tTG9hZGVkKQ0KCQl7DQoJCQl6b29tV2lkZ2V0LmZpbmRD
b250ZW50KCk7DQoJCQlQYWdlTG9hZGVkRG9DYWxsYmFjayAoKTsNCgkJfQ0KCQllbHNlDQoJCXsN
CgkJCXdpbmRvdy5zZXRUaW1lb3V0KCJMb2FkWm9vbSgpIiwgNTAwKTsNCgkJfQ0KCX0NCgllbHNl
DQoJew0KCQlQYWdlTG9hZGVkRG9DYWxsYmFjayAoKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIFNldEN1
clBhZ2VJbkdvdG8gKHBhZ2VJbmRleCkNCnsNCgl2YXIgZ290b1BhZ2VTZWxlY3QgPSBmcm1Ub29s
YmFyLmRvY3VtZW50LmFsbCgiU2VsZWN0MSIpOw0KCWlmIChnb3RvUGFnZVNlbGVjdCAhPSBudWxs
KQ0KCXsNCgkJZ290b1BhZ2VTZWxlY3QudmFsdWUgPSBwYWdlSW5kZXg7DQoJfQ0KfQ0KDQpmdW5j
dGlvbiBTZXRQTlpEaXNwbGF5IChwYWdlSW5kZXgpDQp7DQoJdmFyIGRpdlBOWiA9IGZybVRvb2xi
YXIuZG9jdW1lbnQuYWxsKCJkaXZQTloiKTsNCglpZiAoZGl2UE5aKQ0KCXsNCgkJdmFyIGRpc3Bs
YXlTdGF0dXMgPSAiYmxvY2siOw0KCQlpZiAoZ19GaWxlTGlzdFtwYWdlSW5kZXhdLlBhZ2VJRCA8
IDApDQoJCXsNCgkJCWRpc3BsYXlTdGF0dXMgPSAibm9uZSI7DQoJCX0NCg0KCQlkaXZQTlouc3R5
bGUuZGlzcGxheSA9IGRpc3BsYXlTdGF0dXM7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBWaWV3TWdyRGVm
YXVsdEZpbmQoKQ0Kew0KCXJldHVybjsNCn0NCg0KZnVuY3Rpb24gVmlld01nckRlZmF1bHRSZXNp
emUoc2l6ZSkNCnsNCglyZXR1cm47DQp9DQoNCg0KDQpnX2NhbGxCYWNrRnVuY3Rpb25BcnJheSA9
IG5ldyBBcnJheSgpOw0KZnVuY3Rpb24gUGFnZUxvYWRlZERvQ2FsbGJhY2soKQ0Kew0KCWlmIChn
X1dpZGdldHNMb2FkZWQpCQ0KCXsNCgkJZm9yKCB2YXIgaT0wOyBpIDwgZ19jYWxsQmFja0Z1bmN0
aW9uQXJyYXkubGVuZ3RoOyBpKysgKQ0KCQl7DQoJCQlnX2NhbGxCYWNrRnVuY3Rpb25BcnJheVtp
XSgpOw0KCQl9DQoJCWdfY2FsbEJhY2tGdW5jdGlvbkFycmF5ID0gbmV3IEFycmF5KCk7DQoJfQ0K
CWVsc2UNCgl7DQoJCXdpbmRvdy5zZXRUaW1lb3V0KCJQYWdlTG9hZGVkRG9DYWxsYmFjaygpIiwg
NTAwKTsNCgl9DQp9DQoNCg0KZnVuY3Rpb24gUGFyc2VQYXJhbXMgKHN0clJhd1BhcmFtcykNCnsN
CglzdHJSYXdQYXJhbXMgPSBzdHJSYXdQYXJhbXMuc3Vic3RyaW5nKDEpOw0KDQoJdmFyIGFycmF5
UGFyYW1Ub2tlbnMgPSBzdHJSYXdQYXJhbXMuc3BsaXQoJyYnKTsNCglmb3IgKHZhciBjb3VudCA9
IDA7IGNvdW50IDwgYXJyYXlQYXJhbVRva2Vucy5sZW5ndGg7IGNvdW50KyspDQoJew0KCQlhcnJh
eVBhcmFtVG9rZW5zW2NvdW50XSA9IHVuZXNjYXBlKGFycmF5UGFyYW1Ub2tlbnNbY291bnRdKTsN
CgkJdGhpc1tjb3VudF0gPSBhcnJheVBhcmFtVG9rZW5zW2NvdW50XS5zdWJzdHJpbmcoMCwgYXJy
YXlQYXJhbVRva2Vuc1tjb3VudF0uaW5kZXhPZignPScpKTsNCgkJdGhpc1t0aGlzW2NvdW50XV0g
PSBhcnJheVBhcmFtVG9rZW5zW2NvdW50XS5zdWJzdHJpbmcoYXJyYXlQYXJhbVRva2Vuc1tjb3Vu
dF0uaW5kZXhPZignPScpICsgMSk7DQoJfQ0KDQoJcmV0dXJuIHRoaXM7DQp9DQoNCnZhciBnUGFy
YW1zID0gUGFyc2VQYXJhbXMgKGxvY2F0aW9uLnNlYXJjaCk7DQoNCnZhciBnX1BhZ2VQYXJhbVZh
bHVlID0gZ1BhcmFtc1sncGFnZSddOw0KaWYgKGdfUGFnZVBhcmFtVmFsdWUgIT0gbnVsbCAmJiAN
CglnX1BhZ2VQYXJhbVZhbHVlLmxlbmd0aCA+IDApDQp7DQoJdmFyIHBhZ2VJbmRleCA9IFBhZ2VJ
bmRleEZyb21OYW1lIChnX1BhZ2VQYXJhbVZhbHVlKTsNCglpZiAocGFnZUluZGV4ID4gMCAmJiBw
YWdlSW5kZXggPCBnX0ZpbGVMaXN0Lmxlbmd0aCkNCgl7DQoJCWdfQ3VyUGFnZUluZGV4ID0gcGFn
ZUluZGV4Ow0KCX0NCn0NCmVsc2UNCnsNCglnX1BhZ2VQYXJhbVZhbHVlID0gbnVsbDsNCn0NCg0K
dmFyIGdfRmlyc3RQYWdlVG9Mb2FkID0gZ19QYWdlUGFyYW1WYWx1ZTsNCg0KdmFyIGdfWm9vbVBh
cmFtVmFsdWUgPSBnUGFyYW1zWyd6b29tJ107DQppZiAoZ19ab29tUGFyYW1WYWx1ZSAhPSBudWxs
ICYmIGdfWm9vbVBhcmFtVmFsdWUubGVuZ3RoID4gMCkNCnsNCglnX1pvb21QYXJhbVZhbHVlID0g
MS4wICogZ19ab29tUGFyYW1WYWx1ZTsNCglpZiAoZ19ab29tUGFyYW1WYWx1ZSA+PSAxMCAmJiBn
X1pvb21QYXJhbVZhbHVlIDw9IDUwMCkNCgl7DQoJCWdfY2FsbEJhY2tGdW5jdGlvbkFycmF5W2df
Y2FsbEJhY2tGdW5jdGlvbkFycmF5Lmxlbmd0aF0gPSBmdW5jdGlvbiAoKSB7IGlmICh2aWV3TWdy
ICYmIHZpZXdNZ3IuWm9vbSkgeyB2aWV3TWdyLlpvb20oZ19ab29tUGFyYW1WYWx1ZSk7IH0gfTsN
Cgl9DQp9DQoNCnZhciBnX1NoYXBlUGFyYW1WYWx1ZSA9IGdQYXJhbXNbJ3NoYXBlJ107DQppZiAo
Z19TaGFwZVBhcmFtVmFsdWUgIT0gbnVsbCAmJiBnX1NoYXBlUGFyYW1WYWx1ZS5sZW5ndGggPiAw
KQ0Kew0KCWlmIChnX1BhZ2VQYXJhbVZhbHVlICE9IG51bGwgJiYgZ19QYWdlUGFyYW1WYWx1ZS5s
ZW5ndGggPiAwKQ0KCXsNCgkJZ19jYWxsQmFja0Z1bmN0aW9uQXJyYXlbZ19jYWxsQmFja0Z1bmN0
aW9uQXJyYXkubGVuZ3RoXSA9IGZ1bmN0aW9uICgpIHsgdmFyIHNoYXBlTm9kZSA9IEZpbmRTaGFw
ZVhNTEJ5TmFtZSAoZ19QYWdlUGFyYW1WYWx1ZSwgZ19TaGFwZVBhcmFtVmFsdWUpOyBpZiAoc2hh
cGVOb2RlKSB7IGZybVRvb2xiYXIuVHJlZVNlbGVjdCAoZ19GaWxlTGlzdFtnX0N1clBhZ2VJbmRl
eF0uUGFnZUlELCBzaGFwZU5vZGUuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0gKCJJRCIpLnRleHQp
OyB9IH07DQoJfQ0KCWVsc2UNCgl7DQoJCWdfU2hhcGVQYXJhbVZhbHVlID0gbnVsbDsNCgl9DQp9
DQoNCnZhciBnX1NlYXJjaFBhcmFtVmFsdWUgPSBnUGFyYW1zWydzZWFyY2gnXTsNCmlmIChnX1Nl
YXJjaFBhcmFtVmFsdWUgIT0gbnVsbCAmJiBnX1NlYXJjaFBhcmFtVmFsdWUubGVuZ3RoID4gMCkN
CnsNCglnX2NhbGxCYWNrRnVuY3Rpb25BcnJheVtnX2NhbGxCYWNrRnVuY3Rpb25BcnJheS5sZW5n
dGhdID0gZnVuY3Rpb24gKCkgeyBpZiAoZnJtVG9vbGJhci50aGVGb3JtKSB7IGZybVRvb2xiYXIu
dGhlRm9ybS5maW5kU3RyaW5nLnZhbHVlID0gZ19TZWFyY2hQYXJhbVZhbHVlOyB9IH07DQoJZ19j
YWxsQmFja0Z1bmN0aW9uQXJyYXlbZ19jYWxsQmFja0Z1bmN0aW9uQXJyYXkubGVuZ3RoXSA9IGZ1
bmN0aW9uICgpIHsgdmFyIGdvQnV0dG9uID0gZnJtVG9vbGJhci5kb2N1bWVudC5hbGwoJ0dvQnV0
dG9uJyk7IGlmKGdvQnV0dG9uKSB7IGdvQnV0dG9uLmNsaWNrKCk7IH0gfTsNCn0NCg0KDQp2YXIg
c3RySExUb29sdGlwVGV4dCA9ICJDbGljayB0byBmb2xsb3cgaHlwZXJsaW5rLiI7DQp2YXIgc3Ry
UHJvcHNUb29sdGlwVGV4dCA9ICJDdHJsICsgQ2xpY2sgdG8gdmlldyBkZXRhaWxzLiI7DQoNCnZh
ciBzdHJGb2N1c0hMVG9vbHRpcFRleHQgPSAiRW50ZXIgdG8gZm9sbG93IGh5cGVybGluay4iOw0K
dmFyIHN0ckZvY3VzUHJvcHNUb29sdGlwVGV4dCA9ICJDdHJsICsgRW50ZXIgdG8gdmlldyBkZXRh
aWxzLiI7DQoNCg0KZnVuY3Rpb24gVXBkYXRlVG9vbHRpcCAoZWxlbWVudCwgcGFnZUlELCBzaGFw
ZUlEKQ0Kew0KCWlmIChpc1VwTGV2ZWwpDQoJew0KCQl2YXIgc3RySEwsIHN0clByb3BzOw0KCQ0K
CQlpZihmcm1EcmF3aW5nLmV2ZW50LnR5cGUgPT0gImZvY3VzIikNCgkJew0KCQkJc3RySEwgPSBz
dHJGb2N1c0hMVG9vbHRpcFRleHQ7DQoJCQlzdHJQcm9wcyA9IHN0ckZvY3VzUHJvcHNUb29sdGlw
VGV4dDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXN0ckhMID0gc3RySExUb29sdGlwVGV4dDsNCgkJ
CXN0clByb3BzID0gc3RyUHJvcHNUb29sdGlwVGV4dDsNCgkJfQ0KDQoJCXZhciBzdHJUb29sdGlw
ID0gIiI7DQoJCWlmIChlbGVtZW50Lm9yaWdUaXRsZSkNCgkJew0KCQkJc3RyVG9vbHRpcCA9IGVs
ZW1lbnQub3JpZ1RpdGxlLnRvU3RyaW5nKCk7DQoJCX0NCgkJCQ0KCQl2YXIgc2hhcGVOb2RlID0g
RmluZFNoYXBlWE1MIChwYWdlSUQsIHNoYXBlSUQpOw0KDQoJCWlmKCBzaGFwZU5vZGUgIT0gbnVs
bCApDQoJCXsNCgkJCXZhciBwcm9wQ29sbCA9IHNoYXBlTm9kZS5zZWxlY3ROb2RlcyAoIlByb3Ai
KTsNCgkJCWlmIChwcm9wQ29sbCAhPSBudWxsICYmIHByb3BDb2xsLmxlbmd0aCA+IDApDQoJCQl7
DQoJCQkJaWYgKHN0clRvb2x0aXAubGVuZ3RoID4gMCkNCgkJCQl7DQoJCQkJCXN0clRvb2x0aXAg
Kz0gIlxuIjsNCgkJCQl9IA0KCQkJCXN0clRvb2x0aXAgKz0gc3RyUHJvcHM7DQoJCQl9DQoJCX0N
Cg0KCQl2YXIgaGxPYmogPSBHZXRITEFjdGlvbiAoc2hhcGVOb2RlLCBwYWdlSUQsIHNoYXBlSUQp
Ow0KCQlpZiAoaGxPYmogIT0gbnVsbCAmJiAoaGxPYmouRG9GdW5jdGlvbi5sZW5ndGggPiAwIHx8
IGhsT2JqLkh5cGVybGluay5sZW5ndGggPiAwKSkNCgkJew0KCQkJaWYgKHN0clRvb2x0aXAubGVu
Z3RoID4gMCkNCgkJCXsNCgkJCQlzdHJUb29sdGlwICs9ICJcbiI7DQoJCQl9CQ0KCQkJc3RyVG9v
bHRpcCArPSBzdHJITDsNCgkJfQ0KDQoJCWVsZW1lbnQudGl0bGUgPSBzdHJUb29sdGlwOw0KCQlp
ZiAoZWxlbWVudC5hbHQgIT0gbnVsbCkNCgkJew0KCQkJZWxlbWVudC5hbHQgPSBzdHJUb29sdGlw
Ow0KCQl9DQoJfQ0KfQ0KDQoNCmZ1bmN0aW9uIEdldEhMQWN0aW9uIChzaGFwZU5vZGUsIHBhZ2VJ
RCwgc2hhcGVJRCkNCnsNCgl2YXIgaGxPYmogPSBuZXcgSExPYmogKCIiLCAiIiwgIiIsIGZhbHNl
KTsNCg0KCWlmIChzaGFwZU5vZGUgIT0gbnVsbCkNCgl7DQoJCXZhciBobENvbGwgPSBzaGFwZU5v
ZGUuc2VsZWN0Tm9kZXMgKCJTY3JhdGNoL0IvU29sdXRpb25YTUwvSExVUkw6SHlwZXJsaW5rcy9I
TFVSTDpIeXBlcmxpbmsiKTsNCg0KCQlpZiAoaGxDb2xsLmxlbmd0aCA+IDEpDQoJCXsNCgkJCWhs
T2JqLkRvRnVuY3Rpb24gPSAic2hvd01lbnUoIiArIHBhZ2VJRCArICIsICIgKyBzaGFwZUlEICsg
Iik7Ig0KCQl9DQoJCWVsc2UgaWYgKGhsQ29sbC5sZW5ndGggPT0gMSkNCgkJew0KCQkJaGxPYmog
PSBDcmVhdGVITE9iaiAoaGxDb2xsLml0ZW0oMCkpOw0KCQl9DQoJfQ0KDQoJcmV0dXJuIGhsT2Jq
Ow0KfQ0KDQpmdW5jdGlvbiBITE9iaiAoc3RySHlwZXJsaW5rLCBzdHJEb0Z1bmN0aW9uLCBzdHJE
ZXNjLCBuZXdXaW5kb3cpIA0Kew0KCXRoaXMuSHlwZXJsaW5rID0gc3RySHlwZXJsaW5rOw0KCXRo
aXMuRG9GdW5jdGlvbiA9IHN0ckRvRnVuY3Rpb247DQoJdGhpcy5EZXNjID0gc3RyRGVzYzsNCgl0
aGlzLk5ld1dpbmRvdyA9IG5ld1dpbmRvdzsNCn0NCg0KZnVuY3Rpb24gY2xpY2tNZW51KCkNCnsN
Cgl2YXIgZSA9IHdpbmRvdy5mcm1EcmF3aW5nLmV2ZW50Ow0KCXZhciBtZW51ID0gZnJtRHJhd2lu
Zy5kb2N1bWVudC5hbGwoIm1lbnUxIikNCgkNCglpZiAobWVudSAhPSBudWxsICYmIG1lbnUuc3R5
bGUuZGlzcGxheSAhPSAibm9uZSIpDQoJew0KCQltZW51LnN0eWxlLmRpc3BsYXk9Im5vbmUiOw0K
DQoJCWlmIChlICYmIGUuc3JjRWxlbWVudCAmJiBlLnNyY0VsZW1lbnQuZG9GdW5jdGlvbiAhPSBu
dWxsKQ0KCQl7DQoJCQlldmFsKGUuc3JjRWxlbWVudC5kb0Z1bmN0aW9uKTsNCgkJfQ0KCX0NCn0N
Cg0KZnVuY3Rpb24gdG9nZ2xlTWVudURpdihlbCwgaGlnaGxpZ2h0KSANCnsNCgl2YXIgZGl2RWwg
PSBlbDsNCgl2YXIgYUVsID0gbnVsbDsNCg0KCXZhciBJRCA9IGVsLmlkLnN1YnN0cmluZyAoZ19I
TE1lbnVFbnRyeURpdi5sZW5ndGgsIGVsLmlkLmxlbmd0aCkgKiAxLjA7DQoJYUVsID0gZGl2RWwu
YWxsKGdfSExNZW51RW50cnkgKyBJRCk7DQoNCgl0b2dnbGVNZW51KGRpdkVsLCBhRWwsIGhpZ2hs
aWdodCk7DQp9DQoNCmZ1bmN0aW9uIHRvZ2dsZU1lbnVMaW5rKGVsLCBoaWdobGlnaHQpIA0Kew0K
CXZhciBkaXZFbCA9IG51bGw7DQoJdmFyIGFFbCA9IGVsOw0KDQoJdmFyIElEID0gZWwuaWQuc3Vi
c3RyaW5nIChnX0hMTWVudUVudHJ5Lmxlbmd0aCwgZWwuaWQubGVuZ3RoKSAqIDEuMDsNCglkaXZF
bCA9IGZybURyYXdpbmcuZG9jdW1lbnQuYWxsKGdfSExNZW51RW50cnlEaXYgKyBJRCk7DQoNCgl0
b2dnbGVNZW51KGRpdkVsLCBhRWwsIGhpZ2hsaWdodCk7DQp9DQoNCmZ1bmN0aW9uIHRvZ2dsZU1l
bnUoZGl2RWwsIGFFbCwgaGlnaGxpZ2h0KQ0Kew0KCWlmIChoaWdobGlnaHQpDQoJew0KCSAgZGl2
RWwuY2xhc3NOYW1lPSJoaWdobGlnaHRJdGVtIjsNCgkgIGFFbC5jbGFzc05hbWU9ImhpZ2hsaWdo
dEl0ZW0iOw0KCX0gDQoJZWxzZSANCgl7DQoJICBkaXZFbC5jbGFzc05hbWU9Im1lbnVJdGVtIjsN
CgkgIGFFbC5jbGFzc05hbWU9Im1lbnVJdGVtIjsNCgl9DQp9DQoNCmZ1bmN0aW9uIHNob3dNZW51
KHBhZ2VJRCwgc2hhcGVJRCkNCnsNCgl2YXIgc2hhcGVYTUwgPSBGaW5kU2hhcGVYTUwgKHBhZ2VJ
RCwgc2hhcGVJRCk7DQoJaWYgKHNoYXBlWE1MICE9IG51bGwpDQoJew0KCQlDcmVhdGVITE1lbnUg
KHNoYXBlWE1MKTsNCgkJdmFyIG1lbnUgPSBmcm1EcmF3aW5nLmRvY3VtZW50LmFsbCgibWVudTEi
KTsNCgkJaWYgKG1lbnUgIT0gbnVsbCkNCgkJew0KCQkJbWVudS5zdHlsZS52aXNpYmlsaXR5ID0g
ImhpZGRlbiI7DQoJCQltZW51LnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsNCg0KCQkJdmFyIGUg
PSB3aW5kb3cuZnJtRHJhd2luZy5ldmVudDsNCgkJCXZhciBlbGVtID0gZS5zcmNFbGVtZW50Ow0K
DQoJCQl2YXIgY2xpZW50V2lkdGggPSBmcm1EcmF3aW5nLmRvY3VtZW50LmJvZHkuY2xpZW50V2lk
dGg7DQoJCQl2YXIgY2xpZW50SGVpZ2h0ID0gZnJtRHJhd2luZy5kb2N1bWVudC5ib2R5LmNsaWVu
dEhlaWdodDsNCg0KCQkJdmFyIG1lbnVXaWR0aCA9IG1lbnUuY2xpZW50V2lkdGg7DQoJCQl2YXIg
bWVudUhlaWdodCA9IG1lbnUuY2xpZW50SGVpZ2h0Ow0KDQoJCQl2YXIgbWVudUxlZnQgPSBlLng7
DQoJCQl2YXIgbWVudVRvcCA9IGUueTsNCgkJCQ0KCQkJdmFyIGRvYyA9IGZybURyYXdpbmcuZG9j
dW1lbnQ7DQoJCQl2YXIgaW1nID0gZG9jLmFsbCgiQ29udmVydGVkSW1hZ2UiKTsNCgkJCQ0KCQkJ
aWYoIChtZW51TGVmdCArIGRvYy5ib2R5LnNjcm9sbExlZnQgPCBlbGVtLm9mZnNldExlZnQpIHx8
IChtZW51TGVmdCArIGRvYy5ib2R5LnNjcm9sbExlZnQgPiBlbGVtLm9mZnNldExlZnQgKyBlbGVt
Lm9mZnNldFdpZHRoICsgaW1nLm9mZnNldExlZnQpICkNCgkJCXsNCgkJCQltZW51TGVmdCA9IGVs
ZW0ub2Zmc2V0TGVmdCArIGltZy5vZmZzZXRMZWZ0ICsgZWxlbS5vZmZzZXRXaWR0aC8yOw0KCQkJ
fQ0KCQkJDQoJCQlpZiggKG1lbnVUb3AgKyBkb2MuYm9keS5zY3JvbGxUb3AgPCBlbGVtLm9mZnNl
dFRvcCkgfHwgKG1lbnVUb3AgKyBkb2MuYm9keS5zY3JvbGxUb3AgPiBlbGVtLm9mZnNldFRvcCAr
IGVsZW0ub2Zmc2V0SGVpZ2h0ICsgaW1nLm9mZnNldFRvcCkgKQ0KCQkJew0KCQkJCW1lbnVUb3Ag
PSBlbGVtLm9mZnNldFRvcCArIGltZy5vZmZzZXRUb3AgKyBlbGVtLm9mZnNldEhlaWdodC8yOw0K
CQkJfQ0KDQoJCQl2YXIgc2Nyb2xsQmFyU2l6ZSA9IDIwOw0KCQkJaWYgKG1lbnVMZWZ0ICsgbWVu
dVdpZHRoID4gY2xpZW50V2lkdGggLSBzY3JvbGxCYXJTaXplKQ0KCQkJew0KCQkJCW1lbnVMZWZ0
ID0gY2xpZW50V2lkdGggLSBtZW51V2lkdGggLSBzY3JvbGxCYXJTaXplOw0KCQkJfQ0KDQoJCQlp
ZiAobWVudVRvcCArIG1lbnVIZWlnaHQgPiBjbGllbnRIZWlnaHQgLSBzY3JvbGxCYXJTaXplKQ0K
CQkJew0KCQkJCW1lbnVUb3AgPSBjbGllbnRIZWlnaHQgLSBtZW51SGVpZ2h0IC0gc2Nyb2xsQmFy
U2l6ZTsNCgkJCX0NCg0KCQkJbWVudS5zdHlsZS5wb3NMZWZ0ID0gbWVudUxlZnQgKyBmcm1EcmF3
aW5nLmRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDsNCgkJCW1lbnUuc3R5bGUucG9zVG9wID0gbWVu
dVRvcCArIGZybURyYXdpbmcuZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7DQoJCQltZW51LnN0eWxl
LnZpc2liaWxpdHkgPSAidmlzaWJsZSI7DQoNCgkJCXZhciBmaXJzdExpbmsgPSBtZW51LmFsbChn
X0hMTWVudUVudHJ5ICsgIjAiKTsNCgkJCWZpcnN0TGluay5mb2N1cyAoKTsNCgkJCQ0KCQkJaWYg
KGUua2V5Q29kZSA9PSAxMykNCgkJCXsNCgkJCQl0b2dnbGVNZW51TGluayhmaXJzdExpbmssIHRy
dWUpOw0KCQkJfQ0KDQoJCQllLmNhbmNlbEJ1YmJsZSA9IHRydWU7DQoJCX0NCgl9DQp9DQoNCmZ1
bmN0aW9uIE1lbnVLZXlEb3duICgpDQp7DQoJdmFyIGUgPSB3aW5kb3cuZnJtRHJhd2luZy5ldmVu
dDsNCgl2YXIgZWwgPSBlLnNyY0VsZW1lbnQ7DQoNCglpZiAoZS5rZXlDb2RlID09IDI3KQkvLyAy
NyA9PSBFU0MNCgl7DQoJCWNsaWNrTWVudSgpOw0KCQllLmNhbmNlbEJ1YmJsZSA9IHRydWU7DQoJ
CXJldHVybjsNCgl9DQoNCgl2YXIgY3VyU2VsSUQgPSBlbC5pZC5zdWJzdHJpbmcgKGdfSExNZW51
RW50cnkubGVuZ3RoLCBlbC5pZC5sZW5ndGgpICogMS4wOw0KCXZhciBuZXdTZWxJRCA9IC0xOw0K
DQoJaWYgKGUua2V5Q29kZSA9PSA0MCkJLy8gNDAgPT0gZG93biBhcnJvdw0KCXsNCgkJbmV3U2Vs
SUQgPSBjdXJTZWxJRCArIDE7DQoJfQ0KCWVsc2UgaWYgKGUua2V5Q29kZSA9PSAzOCkgLy8gMzgg
PT0gdXAgYXJyb3cNCgl7DQoJCW5ld1NlbElEID0gY3VyU2VsSUQgLSAxOw0KCX0NCg0KCXZhciBu
ZXdTZWxFbnRyeSA9IGZybURyYXdpbmcuZG9jdW1lbnQuYWxsKGdfSExNZW51RW50cnkgKyBuZXdT
ZWxJRCk7DQoNCglpZiAobmV3U2VsRW50cnkpDQoJew0KCQluZXdTZWxFbnRyeS5mb2N1cygpOw0K
DQoJCXZhciBjdXJTZWxFbnRyeSA9IGZybURyYXdpbmcuZG9jdW1lbnQuYWxsKGdfSExNZW51RW50
cnkgKyBjdXJTZWxJRCk7DQoJCXRvZ2dsZU1lbnVMaW5rIChjdXJTZWxFbnRyeSwgZmFsc2UpOw0K
CQl0b2dnbGVNZW51TGluayAobmV3U2VsRW50cnksIHRydWUpOw0KCX0NCg0KCWUuY2FuY2VsQnVi
YmxlID0gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gQ3JlYXRlSExNZW51IChzaGFwZU5vZGUpDQp7DQoJ
dmFyIHN0ckhMTWVudUhUTUwgPSAiIjsNCg0KCWlmIChzaGFwZU5vZGUgIT0gbnVsbCkNCgl7DQoJ
CXZhciBobENvbGwgPSBzaGFwZU5vZGUuc2VsZWN0Tm9kZXMgKCJTY3JhdGNoL0IvU29sdXRpb25Y
TUwvSExVUkw6SHlwZXJsaW5rcy9ITFVSTDpIeXBlcmxpbmsiKTsNCg0KCQlzdHJITE1lbnVIVE1M
ID0gIjxkaXYgY2xhc3M9J2lubmVyaGxNZW51Jz4iOw0KDQoJCXZhciBobENvdW50ID0gaGxDb2xs
Lmxlbmd0aDsNCgkJZm9yICh2YXIgY291bnQgPSAwOyBjb3VudCA8IGhsQ291bnQ7IGNvdW50Kysp
DQoJCXsNCgkJCXZhciBobE9iaiA9IENyZWF0ZUhMT2JqIChobENvbGwuaXRlbShjb3VudCkpOw0K
CQkJaWYgKGhsT2JqICE9IG51bGwpDQoJCQl7DQoJCQkJaWYgKGhsT2JqLkRlc2MubGVuZ3RoID4g
MCkNCgkJCQl7DQoJCQkJCXN0ckhMTWVudUhUTUwgKz0gIjxkaXYgaWQ9JyIgKyAoZ19ITE1lbnVF
bnRyeURpdiArIGNvdW50KSArICInIGNsYXNzPSdtZW51SXRlbScgb25tb3VzZW92ZXI9J3RvZ2ds
ZU1lbnVEaXYodGhpcywgdHJ1ZSknIG9ubW91c2VvdXQ9J3RvZ2dsZU1lbnVEaXYodGhpcywgZmFs
c2UpJyBvbmNsaWNrPSciICsgKGdfSExNZW51RW50cnkgKyBjb3VudCkgKyAiLmNsaWNrKCknPiI7
DQoJCQkJCXN0ckhMTWVudUhUTUwgKz0gIjxhIGhyZWY9IjsNCg0KCQkJCQlpZiAoaGxPYmouRG9G
dW5jdGlvbi5sZW5ndGggPiAwKQ0KCQkJCQl7DQoJCQkJCQlzdHJITE1lbnVIVE1MICs9ICInamF2
YXNjcmlwdDoiICsgaGxPYmouRG9GdW5jdGlvbiArICInIjsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJ
CQkJCXsNCgkJCQkJCXZhciB0YXJnZXRWYWwgPSAiX3RvcCI7DQoJCQkJCQlpZiAoaGxPYmouTmV3
V2luZG93KQ0KCQkJCQkJew0KCQkJCQkJCXRhcmdldFZhbCA9ICJfYmxhbmsiOw0KCQkJCQkJfQ0K
CQkJCQkJc3RySExNZW51SFRNTCArPSAiJyIgKyBobE9iai5IeXBlcmxpbmsgKyAiJyB0YXJnZXQ9
JyIgKyB0YXJnZXRWYWwgKyAiJyI7DQoJCQkJCX0NCg0KCQkJCQlzdHJITE1lbnVIVE1MICs9ICIg
Y2xhc3M9J21lbnVJdGVtJyBpZD0nIiArIChnX0hMTWVudUVudHJ5ICsgY291bnQpICsgIicgb25r
ZXlkb3duPSdwYXJlbnQuTWVudUtleURvd24oKTsnIG9ubW91c2VvdmVyPSd0b2dnbGVNZW51TGlu
ayh0aGlzLCB0cnVlKScgb25tb3VzZW91dD0ndG9nZ2xlTWVudUxpbmsodGhpcywgZmFsc2UpJz4i
Ow0KCQkJCQlzdHJITE1lbnVIVE1MICs9IGhsT2JqLkRlc2MgKyAiPC9hPjwvZGl2PiI7DQoJCQkJ
fQ0KCQkJfQ0KCQl9DQoJCQ0KCQlzdHJITE1lbnVIVE1MICs9ICI8L2Rpdj4iOw0KCX0NCg0KCWZy
bURyYXdpbmcubWVudTEuaW5uZXJIVE1MID0gc3RySExNZW51SFRNTDsNCn0NCg0KZnVuY3Rpb24g
Q3JlYXRlSExPYmogKGhsTm9kZSkNCnsNCgl2YXIgc3RyQWRkcmVzcyA9ICIiOw0KCXZhciBobE9i
aiA9IG5ldyBITE9iaiAoIiIsICIiLCAiIiwgZmFsc2UpOw0KDQoJaWYgKGhsTm9kZSAhPSBudWxs
KQ0KCXsNCgkJdmFyIGhsQWRkcmVzcyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpB
ZGRyZXNzL3RleHRub2RlKCkiKTsNCgkJaWYgKGhsQWRkcmVzcyAhPSBudWxsICYmIGhsQWRkcmVz
cy50ZXh0Lmxlbmd0aCA+IDApDQoJCXsNCgkJCXZhciBhYnNvbHV0ZVVSTCA9IGhsTm9kZS5zZWxl
Y3RTaW5nbGVOb2RlKCJITFVSTDpBYnNvbHV0ZVVSTC90ZXh0bm9kZSgpIik7DQoJCQl2YXIgc3Ry
QWJzVVJMID0gYWJzb2x1dGVVUkwudGV4dDsNCgkJCXZhciBzdHJBZGRyID0gaGxBZGRyZXNzLnRl
eHQ7DQoNCgkJCWlmIChzdHJBYnNVUkwuaW5kZXhPZiAoZ19GaWxlUHJvdG9jb2wpID09IDApDQoJ
CQl7DQoJCQkJdmFyIHN0ckFic1BhdGggPSBzdHJBYnNVUkwuc3Vic3RyaW5nIChnX0ZpbGVQcm90
b2NvbC5sZW5ndGgsIHN0ckFic1VSTC5sZW5ndGgpOw0KCQkJCXN0ckFic1BhdGgudG9Mb3dlckNh
c2UgKCk7DQoJCQkJc3RyQWRkci50b0xvd2VyQ2FzZSAoKTsNCgkJCQlpZiAoc3RyQWJzUGF0aCA9
PSBzdHJBZGRyKQ0KCQkJCXsNCgkJCQkJc3RyQWRkcmVzcyA9IHN0ckFic1BhdGg7DQoJCQkJfQ0K
CQkJCWVsc2UNCgkJCQl7DQoJCQkJCXN0ckFkZHJlc3MgPSBzdHJBZGRyOw0KCQkJCQkNCgkJCQkJ
dmFyIGhsU3ViQWRkcmVzcyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpTdWJBZGRy
ZXNzL3RleHRub2RlKCkiKTsNCgkJCQkJaWYgKGhsU3ViQWRkcmVzcyAhPSBudWxsICYmIGhsU3Vi
QWRkcmVzcy50ZXh0Lmxlbmd0aCA+IDApDQoJCQkJCXsNCgkJCQkJCXN0ckFkZHJlc3MgKz0gJyMn
Ow0KCQkJCQkJc3RyQWRkcmVzcyArPSBobFN1YkFkZHJlc3MudGV4dDsNCgkJCQkJfQ0KDQoJCQkJ
CXZhciBobEV4dHJhSW5mbyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpFeHRyYUlu
Zm8vdGV4dG5vZGUoKSIpOw0KCQkJCQlpZiAoaGxFeHRyYUluZm8gIT0gbnVsbCAmJiBobEV4dHJh
SW5mby50ZXh0Lmxlbmd0aCA+IDApDQoJCQkJCXsNCgkJCQkJCXN0ckFkZHJlc3MgKz0gJz8nOw0K
CQkJCQkJc3RyQWRkcmVzcyArPSBobEV4dHJhSW5mby50ZXh0Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJ
fQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXN0ckFkZHJlc3MgPSBzdHJBYnNVUkw7DQoJCQl9CQkNCg0K
CQkJc3RyQWRkcmVzcyA9IEhUTUxFc2NhcGUgKHN0ckFkZHJlc3MpOw0KCQkJaGxPYmouSHlwZXJs
aW5rICs9IHN0ckFkZHJlc3M7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlobEFkZHJlc3MgPSBobE5v
ZGUuc2VsZWN0U2luZ2xlTm9kZSgiSExVUkw6U3ViQWRkcmVzcy90ZXh0bm9kZSgpIik7DQoJCQlp
ZiAoaGxBZGRyZXNzICE9IG51bGwgJiYgaGxBZGRyZXNzLnRleHQubGVuZ3RoID4gMCkNCgkJCXsN
CgkJCQlzdHJBZGRyZXNzID0gaGxBZGRyZXNzLnRleHQ7DQoNCgkJCQl2YXIgcGFnZVNoYXBlU2Vw
ID0gc3RyQWRkcmVzcy5sYXN0SW5kZXhPZiAoJy8nKTsNCgkJCQlpZiAocGFnZVNoYXBlU2VwID4g
MCkNCgkJCQl7DQoJCQkJCWlmIChQYWdlSW5kZXhGcm9tTmFtZSAoc3RyQWRkcmVzcykgPCAwKQ0K
CQkJCQl7DQoJCQkJCQlzdHJBZGRyZXNzID0gdW5lc2NhcGUgKHN0ckFkZHJlc3MpOw0KCQkJCQkJ
aWYgKFBhZ2VJbmRleEZyb21OYW1lIChzdHJBZGRyZXNzKSA8IDApDQoJCQkJCQl7DQoJCQkJCQkJ
c3RyQWRkcmVzcyA9IHN0ckFkZHJlc3Muc3Vic3RyaW5nICgwLCBzdHJBZGRyZXNzLmxhc3RJbmRl
eE9mICgnLycpKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCXZhciBwYWdlSW5kZXgg
PSBQYWdlSW5kZXhGcm9tTmFtZSAoc3RyQWRkcmVzcyk7DQoNCgkJCQlobE9iai5Eb0Z1bmN0aW9u
ID0gIkdvVG9QYWdlICgiICsgcGFnZUluZGV4ICsgIik7IjsNCgkJCQlzdHJBZGRyZXNzID0gSFRN
TEVzY2FwZSAoc3RyQWRkcmVzcyk7DQoJCQkJaGxPYmouRGVzYyA9IHN0ckFkZHJlc3M7DQoJCQl9
DQoJCX0NCg0KCQlobERlc2MgPSBobE5vZGUuc2VsZWN0U2luZ2xlTm9kZSgiSExVUkw6RGVzY3Jp
cHRpb24vdGV4dG5vZGUoKSIpOw0KCQlpZiAoaGxEZXNjICE9IG51bGwgJiYgaGxEZXNjLnRleHQu
bGVuZ3RoID4gMCkNCgkJew0KCQkJaGxPYmouRGVzYyA9IEhUTUxFc2NhcGUgKGhsRGVzYy50ZXh0
KTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCWhsT2JqLkRlc2MgPSBzdHJBZGRyZXNzOw0KCQl9DQoJ
DQoJCXZhciBobE5ld1dpbmRvdyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpOZXdX
aW5kb3cvdGV4dG5vZGUoKSIpOw0KCQlpZiAoaGxOZXdXaW5kb3cgIT0gbnVsbCAmJiBobE5ld1dp
bmRvdy50ZXh0Lmxlbmd0aCA+IDApDQoJCXsNCgkJCWhsT2JqLk5ld1dpbmRvdyA9IChobE5ld1dp
bmRvdy50ZXh0ID09ICIxIik7DQoJCX0JCQ0KCX0NCg0KCXJldHVybiBobE9iajsNCn0NCg0KDQoJ
CTwvc2NyaXB0Pg0KCTwvaGVhZD4NCgkNCgk8ZnJhbWVzZXQgaWQ9ImZybXN0T3V0ZXIiIGNvbHM9
IjIzNywqIiB0aXRsZT0iTWlncmF0aW9uX0ZhYnJpY19DbHVzdGVyIj4NCgkJPGZyYW1lIHNyYz0i
TWlncmF0aW9uX0ZhYnJpY19DbHVzdGVyX2ZpbGVzL3Rvb2xiYXIuaHRtIiBuYW1lPSJmcm1Ub29s
YmFyIiBpZD0iZnJtVG9vbGJhciIgdGl0bGU9IlRoaXMgZnJhbWUgY29udGFpbnMgdG9vbHMgZm9y
IG1hbmlwdWxhdGluZyB5b3VyIGRyYXdpbmcuIiBmcmFtZWJvcmRlcj0iNiIgYm9yZGVyY29sb3I9
IiM5OTk5OTkiIHNjcm9sbGluZz0ibm8iIG1hcmdpbmhlaWdodD0iMCIgbWFyZ2lud2lkdGg9IjAi
ID4NCgkJPGZyYW1lIHNyYz0iTWlncmF0aW9uX0ZhYnJpY19DbHVzdGVyX2ZpbGVzL2dpZl8xLmh0
bSIgbmFtZT0iZnJtRHJhd2luZyIgdGl0bGU9IlRoaXMgZnJhbWUgY29udGFpbnMgdGhlIHBhZ2Vz
IG9mIHlvdXIgZHJhd2luZy4iIG1hcmdpbmhlaWdodD0iMTAiIG1hcmdpbndpZHRoPSIxMCIgb25s
b2FkPSJpZiAocGFyZW50LmlzVXBMZXZlbCkgRnJhbWVQYWdlTG9hZGVkKCkiID4NCg0KCQk8bm9m
cmFtZXM+DQoJCQk8Ym9keT4NCg0KCQkJCTxoMT5NaWdyYXRpb25fRmFicmljX0NsdXN0ZXI8L2gx
Pg0KCQkJCTx1bD4NCgkJCQk8bGk+PGEgaHJlZj0iTWlncmF0aW9uX0ZhYnJpY19DbHVzdGVyX2Zp
bGVzL2dpZl8xLmh0bSI+UGFnZS0xPC9hPjwvbGk+Cg0KCQkJCTwvdWw+DQoJCQk8L2JvZHk+DQoJ
CTwvbm9mcmFtZXM+DQoJPC9mcmFtZXNldD4NCgkNCjwvaHRtbD4NCgo=

------_=_NextPart_001_01C88EE5.EB9DD028
Content-Type: text/html;
	name="Migration_Fabric_SN.htm"
Content-Transfer-Encoding: base64
Content-Description: Migration_Fabric_SN.htm
Content-Disposition: attachment;
	filename="Migration_Fabric_SN.htm"

PGh0bWw+DQoJPGhlYWQ+DQoJCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ii8+DQoJCTxtZXRhIG5hbWU9IlRpdGxlIiBjb250
ZW50PSIiLz4KCQk8bWV0YSBuYW1lPSJTdWJqZWN0IiBjb250ZW50PSIiLz4KCQk8bWV0YSBuYW1l
PSJDYXRlZ29yeSIgY29udGVudD0iIi8+CgkJPG1ldGEgbmFtZT0iS2V5d29yZHMiIGNvbnRlbnQ9
IiIvPgoJCTxtZXRhIG5hbWU9IkRlc2NyaXB0aW9uIiBjb250ZW50PSIiLz4KCQk8bWV0YSBuYW1l
PSJBdXRob3IiIGNvbnRlbnQ9Ik5ldHdvcmsgQWRtaW5pc3RyYXRvciIvPgoJCTxtZXRhIG5hbWU9
Ik1hbmFnZXIiIGNvbnRlbnQ9IiIvPgoJCTxtZXRhIG5hbWU9IkNvbXBhbnkiIGNvbnRlbnQ9Ik9O
U3RvciwgSW5jLiIvPgoNCgkJPHRpdGxlPk1pZ3JhdGlvbl9GYWJyaWNfU048L3RpdGxlPg0KCQk8
c2NyaXB0IHNyYz0iTWlncmF0aW9uX0ZhYnJpY19TTl9maWxlcy9mcmFtZXNldC5qcyIgdHlwZT0i
dGV4dC9qc2NyaXB0IiBsYW5ndWFnZT0ianNjcmlwdCI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgdHlw
ZT0idGV4dC9qc2NyaXB0IiBsYW5ndWFnZT0ianNjcmlwdCIgPg0KDQpmdW5jdGlvbiBGaWxlRW50
cnkgKHBhZ2VJbmRleCwgcGFnZUlELCBwYWdlTmFtZSwgcHJpSW1hZ2UsIHNlY0ltYWdlKSANCnsN
Cgl0aGlzLlBhZ2VJbmRleCA9IHBhZ2VJbmRleDsNCgl0aGlzLlBhZ2VJRAkgID0gcGFnZUlEOw0K
CXRoaXMuUGFnZU5hbWUgPSBwYWdlTmFtZTsNCgl0aGlzLlByaUltYWdlID0gcHJpSW1hZ2U7DQoJ
dGhpcy5TZWNJbWFnZSA9IHNlY0ltYWdlOw0KfQ0KDQp2YXIgdmlld01nciA9IG51bGw7DQoNCnZh
ciBnX0ZpbGVMaXN0ID0gbmV3ICBBcnJheSgNCiBuZXcgRmlsZUVudHJ5ICgxLCAwLCAiUGFnZS0x
IiwgInZtbF8xLmh0bSIsICJnaWZfMS5odG0iKQoNCik7DQoNCnZhciBnX0N1clBhZ2VJbmRleCA9
IDA7DQp2YXIgZ19ab29tTG9hZGVkID0gZmFsc2U7DQp2YXIgZ19XaWRnZXRzTG9hZGVkID0gZmFs
c2U7DQp2YXIgZ19GaWxlUHJvdG9jb2wgPSAiZmlsZTovLyI7DQoNCnZhciBnX0hMTWVudUVudHJ5
ID0gIm1lbnVFbnRyeSI7DQp2YXIgZ19ITE1lbnVFbnRyeURpdiA9ICJtZW51RW50cnlEaXYiOw0K
DQp2YXIgZ19Mb2FkaW5nV2lkZ2V0cyA9IGZhbHNlOw0KDQoNCmZ1bmN0aW9uIENWaWV3TWdyKGNv
bnZlcnRlZEltZ0lELCBoaWdobGlnaHREaXZJRCkNCnsNCgl0aGlzLm9uUmVzaXplID0gbnVsbDsN
Cgl0aGlzLkFwcGx5Wm9vbSA9IG51bGw7DQoJdGhpcy5DaGFuZ2luZ1ZpZXcgPSBmYWxzZTsNCg0K
CXRoaXMucHV0X0xvY2F0aW9uID0gVmlld01nckRlZmF1bHRGaW5kOw0KCXRoaXMuWm9vbSA9IFZp
ZXdNZ3JEZWZhdWx0UmVzaXplOw0KCXRoaXMuUG9zdFpvb21Qcm9jZXNzaW5nID0gbnVsbDsNCgl0
aGlzLnNldFZpZXcgPSBudWxsOw0KCXRoaXMuUG9zdFNldFZpZXdQcm9jZXNzaW5nID0gbnVsbDsN
Cgl0aGlzLnZpZXdDaGFuZ2VkID0gbnVsbDsNCg0KCXRoaXMuU3VwcG9ydHNEZXRhaWxzID0gZmFs
c2U7DQoJdGhpcy5TdXBwb3J0c1NlYXJjaCA9IGZhbHNlOw0KDQoJdGhpcy52aXNCQm94TGVmdCA9
IDAuMDsNCgl0aGlzLnZpc0JCb3hSaWdodCA9IDAuMDsNCgl0aGlzLnZpc0JCb3hCb3R0b20gPSAw
LjA7DQoJdGhpcy52aXNCQm94VG9wID0gMC4wOw0KDQoJdGhpcy5oaWdobGlnaHREaXYgPSBudWxs
Ow0KCXRoaXMuc3RlcFdpZHRoID0gMTA7DQoNCgl0aGlzLmlkID0gY29udmVydGVkSW1nSUQ7DQoJ
dGhpcy56b29tRmFjdG9yID0gLTE7DQoJdGhpcy56b29tTGFzdCA9IC0xOw0KCXRoaXMub3JpZ1dI
ID0gMTsNCgl0aGlzLm9yaWdXaWR0aCA9IDEwMDsJDQoJdGhpcy5hc3BlY3RSYXRpbyA9IDE7DQoN
Cgl0aGlzLmRvY0RyYXdpbmcgPSBudWxsOw0KCXZhciBkb2NEcmF3aW5nID0gZnJtRHJhd2luZy5k
b2N1bWVudDsNCglpZihkb2NEcmF3aW5nKQ0KCXsNCgkJdGhpcy5kb2NEcmF3aW5nID0gZG9jRHJh
d2luZzsNCgkJdmFyIGRvY0VsID0gZG9jRHJhd2luZy5hbGwodGhpcy5pZCk7DQoJCWlmIChkb2NF
bCkNCgkJew0KCQkJdGhpcy5zID0gZG9jRWwuc3R5bGU7DQoJCQl0aGlzLm9yaWdXaWR0aCA9IHRo
aXMucy5waXhlbFdpZHRoOw0KCQkJdGhpcy5vcmlnV0ggPSB0aGlzLnMucGl4ZWxXaWR0aCAvIHRo
aXMucy5waXhlbEhlaWdodDsNCgkJfQ0KCQl0aGlzLmhpZ2hsaWdodERpdiA9IGRvY0RyYXdpbmcu
YWxsKGhpZ2hsaWdodERpdklEKTsNCgl9DQoNCgl0aGlzLmxvYWRQYWdlID0gRGVmUGFnZUxvYWQ7
DQoJdGhpcy5nZXRQTloJPSBudWxsOw0KfQ0KDQpmdW5jdGlvbiBEZWZQYWdlTG9hZCAocGFnZUlu
ZGV4KQ0Kew0KCWlmIChwYWdlSW5kZXggPj0gMCkNCgl7DQoJCXZhciBjdXJQYXRoID0gZnJtRHJh
d2luZy5sb2NhdGlvbi5ocmVmOw0KCQl2YXIgZmlsZURlbGltID0gY3VyUGF0aC5sYXN0SW5kZXhP
ZiAoJy8nKTsNCgkJdmFyIG5ld1BhdGggPSBjdXJQYXRoLnN1YnN0cmluZyAoMCwgZmlsZURlbGlt
ICsgMSk7DQoJCW5ld1BhdGggKz0gZ19GaWxlTGlzdFtwYWdlSW5kZXhdLlByaUltYWdlOw0KCQlm
cm1EcmF3aW5nLmxvY2F0aW9uLmhyZWYgPSBuZXdQYXRoOw0KDQoJCVNldFBOWkRpc3BsYXkgKHBh
Z2VJbmRleCk7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBDdXJQYWdlVXBkYXRlIChwYWdlSW5kZXgpDQp7
DQoJaWYgKHBhZ2VJbmRleCA+PSAwKQ0KCXsNCgkJZ19DdXJQYWdlSW5kZXggPSBwYWdlSW5kZXg7
DQoNCgkJU2V0Q3VyUGFnZUluR290byAocGFnZUluZGV4KTsNCg0KCQl2YXIgZGl2RGV0YWlscyA9
IGZybVRvb2xiYXIuZG9jdW1lbnQuYWxsKCJkaXZEZXRhaWxzIik7DQoJCWlmIChkaXZEZXRhaWxz
KQ0KCQl7DQoJCQl2YXIgZGlzcGxheVN0YXR1cyA9ICJibG9jayI7DQoJCQlpZiAoIXZpZXdNZ3Ig
fHwgIXZpZXdNZ3IuU3VwcG9ydHNEZXRhaWxzKQ0KCQkJew0KCQkJCWRpc3BsYXlTdGF0dXMgPSAi
bm9uZSI7DQoJCQl9DQoNCgkJCWRpdkRldGFpbHMuc3R5bGUuZGlzcGxheSA9IGRpc3BsYXlTdGF0
dXM7DQoJCX0NCg0KCQl2YXIgZGl2U2VhcmNoID0gZnJtVG9vbGJhci5kb2N1bWVudC5hbGwoImRp
dlNlYXJjaCIpOw0KCQlpZiAoZGl2U2VhcmNoKQ0KCQl7DQoJCQl2YXIgZGlzcGxheVN0YXR1cyA9
ICJibG9jayI7DQoJCQlpZiAoIXZpZXdNZ3IgfHwgIXZpZXdNZ3IuU3VwcG9ydHNTZWFyY2gpDQoJ
CQl7DQoJCQkJZGlzcGxheVN0YXR1cyA9ICJub25lIjsNCgkJCX0NCg0KCQkJZGl2U2VhcmNoLnN0
eWxlLmRpc3BsYXkgPSBkaXNwbGF5U3RhdHVzOw0KCQl9DQoNCgkJU2V0UE5aRGlzcGxheSAocGFn
ZUluZGV4KTsNCg0KCQlMb2FkWm9vbSAoKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIEZyYW1lUGFnZUxv
YWRlZCAoKQ0Kew0KCWlmIChpc1VwTGV2ZWwgJiYgdmlld01nciA9PSBudWxsKQ0KCXsNCgkJdmFy
IGN1clBhdGggPSBmcm1EcmF3aW5nLmxvY2F0aW9uLmhyZWY7DQoJCXZhciBmaWxlRGVsaW0gPSBj
dXJQYXRoLmxhc3RJbmRleE9mICgnLycpOw0KCQlpZiAoZmlsZURlbGltID49IDApDQoJCXsNCgkJ
CXZhciBmaWxlTmFtZSA9IGN1clBhdGguc3Vic3RyaW5nIChmaWxlRGVsaW0gKyAxLCBjdXJQYXRo
Lmxlbmd0aCk7DQoJCQl2YXIgcGFnZUluZGV4ID0gUGFnZUluZGV4RnJvbUZpbGVOYW1lIChmaWxl
TmFtZSk7DQoJCQlTZXRDdXJQYWdlSW5Hb3RvIChwYWdlSW5kZXgpOw0KCQkJU2V0UE5aRGlzcGxh
eSAocGFnZUluZGV4KTsNCgkJfQ0KCX0NCn0NCg0KZnVuY3Rpb24gTG9hZFpvb20gKCkNCnsNCgl2
YXIgem9vbVdpZGdldCA9IGZybVRvb2xiYXIuaWZybVBOWjsNCglpZiAoem9vbVdpZGdldCkNCgl7
DQoJCWlmIChnX1pvb21Mb2FkZWQpDQoJCXsNCgkJCXpvb21XaWRnZXQuZmluZENvbnRlbnQoKTsN
CgkJCVBhZ2VMb2FkZWREb0NhbGxiYWNrICgpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJd2luZG93
LnNldFRpbWVvdXQoIkxvYWRab29tKCkiLCA1MDApOw0KCQl9DQoJfQ0KCWVsc2UNCgl7DQoJCVBh
Z2VMb2FkZWREb0NhbGxiYWNrICgpOw0KCX0NCn0NCg0KZnVuY3Rpb24gU2V0Q3VyUGFnZUluR290
byAocGFnZUluZGV4KQ0Kew0KCXZhciBnb3RvUGFnZVNlbGVjdCA9IGZybVRvb2xiYXIuZG9jdW1l
bnQuYWxsKCJTZWxlY3QxIik7DQoJaWYgKGdvdG9QYWdlU2VsZWN0ICE9IG51bGwpDQoJew0KCQln
b3RvUGFnZVNlbGVjdC52YWx1ZSA9IHBhZ2VJbmRleDsNCgl9DQp9DQoNCmZ1bmN0aW9uIFNldFBO
WkRpc3BsYXkgKHBhZ2VJbmRleCkNCnsNCgl2YXIgZGl2UE5aID0gZnJtVG9vbGJhci5kb2N1bWVu
dC5hbGwoImRpdlBOWiIpOw0KCWlmIChkaXZQTlopDQoJew0KCQl2YXIgZGlzcGxheVN0YXR1cyA9
ICJibG9jayI7DQoJCWlmIChnX0ZpbGVMaXN0W3BhZ2VJbmRleF0uUGFnZUlEIDwgMCkNCgkJew0K
CQkJZGlzcGxheVN0YXR1cyA9ICJub25lIjsNCgkJfQ0KDQoJCWRpdlBOWi5zdHlsZS5kaXNwbGF5
ID0gZGlzcGxheVN0YXR1czsNCgl9DQp9DQoNCmZ1bmN0aW9uIFZpZXdNZ3JEZWZhdWx0RmluZCgp
DQp7DQoJcmV0dXJuOw0KfQ0KDQpmdW5jdGlvbiBWaWV3TWdyRGVmYXVsdFJlc2l6ZShzaXplKQ0K
ew0KCXJldHVybjsNCn0NCg0KDQoNCmdfY2FsbEJhY2tGdW5jdGlvbkFycmF5ID0gbmV3IEFycmF5
KCk7DQpmdW5jdGlvbiBQYWdlTG9hZGVkRG9DYWxsYmFjaygpDQp7DQoJaWYgKGdfV2lkZ2V0c0xv
YWRlZCkJDQoJew0KCQlmb3IoIHZhciBpPTA7IGkgPCBnX2NhbGxCYWNrRnVuY3Rpb25BcnJheS5s
ZW5ndGg7IGkrKyApDQoJCXsNCgkJCWdfY2FsbEJhY2tGdW5jdGlvbkFycmF5W2ldKCk7DQoJCX0N
CgkJZ19jYWxsQmFja0Z1bmN0aW9uQXJyYXkgPSBuZXcgQXJyYXkoKTsNCgl9DQoJZWxzZQ0KCXsN
CgkJd2luZG93LnNldFRpbWVvdXQoIlBhZ2VMb2FkZWREb0NhbGxiYWNrKCkiLCA1MDApOw0KCX0N
Cn0NCg0KDQpmdW5jdGlvbiBQYXJzZVBhcmFtcyAoc3RyUmF3UGFyYW1zKQ0Kew0KCXN0clJhd1Bh
cmFtcyA9IHN0clJhd1BhcmFtcy5zdWJzdHJpbmcoMSk7DQoNCgl2YXIgYXJyYXlQYXJhbVRva2Vu
cyA9IHN0clJhd1BhcmFtcy5zcGxpdCgnJicpOw0KCWZvciAodmFyIGNvdW50ID0gMDsgY291bnQg
PCBhcnJheVBhcmFtVG9rZW5zLmxlbmd0aDsgY291bnQrKykNCgl7DQoJCWFycmF5UGFyYW1Ub2tl
bnNbY291bnRdID0gdW5lc2NhcGUoYXJyYXlQYXJhbVRva2Vuc1tjb3VudF0pOw0KCQl0aGlzW2Nv
dW50XSA9IGFycmF5UGFyYW1Ub2tlbnNbY291bnRdLnN1YnN0cmluZygwLCBhcnJheVBhcmFtVG9r
ZW5zW2NvdW50XS5pbmRleE9mKCc9JykpOw0KCQl0aGlzW3RoaXNbY291bnRdXSA9IGFycmF5UGFy
YW1Ub2tlbnNbY291bnRdLnN1YnN0cmluZyhhcnJheVBhcmFtVG9rZW5zW2NvdW50XS5pbmRleE9m
KCc9JykgKyAxKTsNCgl9DQoNCglyZXR1cm4gdGhpczsNCn0NCg0KdmFyIGdQYXJhbXMgPSBQYXJz
ZVBhcmFtcyAobG9jYXRpb24uc2VhcmNoKTsNCg0KdmFyIGdfUGFnZVBhcmFtVmFsdWUgPSBnUGFy
YW1zWydwYWdlJ107DQppZiAoZ19QYWdlUGFyYW1WYWx1ZSAhPSBudWxsICYmIA0KCWdfUGFnZVBh
cmFtVmFsdWUubGVuZ3RoID4gMCkNCnsNCgl2YXIgcGFnZUluZGV4ID0gUGFnZUluZGV4RnJvbU5h
bWUgKGdfUGFnZVBhcmFtVmFsdWUpOw0KCWlmIChwYWdlSW5kZXggPiAwICYmIHBhZ2VJbmRleCA8
IGdfRmlsZUxpc3QubGVuZ3RoKQ0KCXsNCgkJZ19DdXJQYWdlSW5kZXggPSBwYWdlSW5kZXg7DQoJ
fQ0KfQ0KZWxzZQ0Kew0KCWdfUGFnZVBhcmFtVmFsdWUgPSBudWxsOw0KfQ0KDQp2YXIgZ19GaXJz
dFBhZ2VUb0xvYWQgPSBnX1BhZ2VQYXJhbVZhbHVlOw0KDQp2YXIgZ19ab29tUGFyYW1WYWx1ZSA9
IGdQYXJhbXNbJ3pvb20nXTsNCmlmIChnX1pvb21QYXJhbVZhbHVlICE9IG51bGwgJiYgZ19ab29t
UGFyYW1WYWx1ZS5sZW5ndGggPiAwKQ0Kew0KCWdfWm9vbVBhcmFtVmFsdWUgPSAxLjAgKiBnX1pv
b21QYXJhbVZhbHVlOw0KCWlmIChnX1pvb21QYXJhbVZhbHVlID49IDEwICYmIGdfWm9vbVBhcmFt
VmFsdWUgPD0gNTAwKQ0KCXsNCgkJZ19jYWxsQmFja0Z1bmN0aW9uQXJyYXlbZ19jYWxsQmFja0Z1
bmN0aW9uQXJyYXkubGVuZ3RoXSA9IGZ1bmN0aW9uICgpIHsgaWYgKHZpZXdNZ3IgJiYgdmlld01n
ci5ab29tKSB7IHZpZXdNZ3IuWm9vbShnX1pvb21QYXJhbVZhbHVlKTsgfSB9Ow0KCX0NCn0NCg0K
dmFyIGdfU2hhcGVQYXJhbVZhbHVlID0gZ1BhcmFtc1snc2hhcGUnXTsNCmlmIChnX1NoYXBlUGFy
YW1WYWx1ZSAhPSBudWxsICYmIGdfU2hhcGVQYXJhbVZhbHVlLmxlbmd0aCA+IDApDQp7DQoJaWYg
KGdfUGFnZVBhcmFtVmFsdWUgIT0gbnVsbCAmJiBnX1BhZ2VQYXJhbVZhbHVlLmxlbmd0aCA+IDAp
DQoJew0KCQlnX2NhbGxCYWNrRnVuY3Rpb25BcnJheVtnX2NhbGxCYWNrRnVuY3Rpb25BcnJheS5s
ZW5ndGhdID0gZnVuY3Rpb24gKCkgeyB2YXIgc2hhcGVOb2RlID0gRmluZFNoYXBlWE1MQnlOYW1l
IChnX1BhZ2VQYXJhbVZhbHVlLCBnX1NoYXBlUGFyYW1WYWx1ZSk7IGlmIChzaGFwZU5vZGUpIHsg
ZnJtVG9vbGJhci5UcmVlU2VsZWN0IChnX0ZpbGVMaXN0W2dfQ3VyUGFnZUluZGV4XS5QYWdlSUQs
IHNoYXBlTm9kZS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSAoIklEIikudGV4dCk7IH0gfTsNCgl9
DQoJZWxzZQ0KCXsNCgkJZ19TaGFwZVBhcmFtVmFsdWUgPSBudWxsOw0KCX0NCn0NCg0KdmFyIGdf
U2VhcmNoUGFyYW1WYWx1ZSA9IGdQYXJhbXNbJ3NlYXJjaCddOw0KaWYgKGdfU2VhcmNoUGFyYW1W
YWx1ZSAhPSBudWxsICYmIGdfU2VhcmNoUGFyYW1WYWx1ZS5sZW5ndGggPiAwKQ0Kew0KCWdfY2Fs
bEJhY2tGdW5jdGlvbkFycmF5W2dfY2FsbEJhY2tGdW5jdGlvbkFycmF5Lmxlbmd0aF0gPSBmdW5j
dGlvbiAoKSB7IGlmIChmcm1Ub29sYmFyLnRoZUZvcm0pIHsgZnJtVG9vbGJhci50aGVGb3JtLmZp
bmRTdHJpbmcudmFsdWUgPSBnX1NlYXJjaFBhcmFtVmFsdWU7IH0gfTsNCglnX2NhbGxCYWNrRnVu
Y3Rpb25BcnJheVtnX2NhbGxCYWNrRnVuY3Rpb25BcnJheS5sZW5ndGhdID0gZnVuY3Rpb24gKCkg
eyB2YXIgZ29CdXR0b24gPSBmcm1Ub29sYmFyLmRvY3VtZW50LmFsbCgnR29CdXR0b24nKTsgaWYo
Z29CdXR0b24pIHsgZ29CdXR0b24uY2xpY2soKTsgfSB9Ow0KfQ0KDQoNCnZhciBzdHJITFRvb2x0
aXBUZXh0ID0gIkNsaWNrIHRvIGZvbGxvdyBoeXBlcmxpbmsuIjsNCnZhciBzdHJQcm9wc1Rvb2x0
aXBUZXh0ID0gIkN0cmwgKyBDbGljayB0byB2aWV3IGRldGFpbHMuIjsNCg0KdmFyIHN0ckZvY3Vz
SExUb29sdGlwVGV4dCA9ICJFbnRlciB0byBmb2xsb3cgaHlwZXJsaW5rLiI7DQp2YXIgc3RyRm9j
dXNQcm9wc1Rvb2x0aXBUZXh0ID0gIkN0cmwgKyBFbnRlciB0byB2aWV3IGRldGFpbHMuIjsNCg0K
DQpmdW5jdGlvbiBVcGRhdGVUb29sdGlwIChlbGVtZW50LCBwYWdlSUQsIHNoYXBlSUQpDQp7DQoJ
aWYgKGlzVXBMZXZlbCkNCgl7DQoJCXZhciBzdHJITCwgc3RyUHJvcHM7DQoJDQoJCWlmKGZybURy
YXdpbmcuZXZlbnQudHlwZSA9PSAiZm9jdXMiKQ0KCQl7DQoJCQlzdHJITCA9IHN0ckZvY3VzSExU
b29sdGlwVGV4dDsNCgkJCXN0clByb3BzID0gc3RyRm9jdXNQcm9wc1Rvb2x0aXBUZXh0Ow0KCQl9
DQoJCWVsc2UNCgkJew0KCQkJc3RySEwgPSBzdHJITFRvb2x0aXBUZXh0Ow0KCQkJc3RyUHJvcHMg
PSBzdHJQcm9wc1Rvb2x0aXBUZXh0Ow0KCQl9DQoNCgkJdmFyIHN0clRvb2x0aXAgPSAiIjsNCgkJ
aWYgKGVsZW1lbnQub3JpZ1RpdGxlKQ0KCQl7DQoJCQlzdHJUb29sdGlwID0gZWxlbWVudC5vcmln
VGl0bGUudG9TdHJpbmcoKTsNCgkJfQ0KCQkJDQoJCXZhciBzaGFwZU5vZGUgPSBGaW5kU2hhcGVY
TUwgKHBhZ2VJRCwgc2hhcGVJRCk7DQoNCgkJaWYoIHNoYXBlTm9kZSAhPSBudWxsICkNCgkJew0K
CQkJdmFyIHByb3BDb2xsID0gc2hhcGVOb2RlLnNlbGVjdE5vZGVzICgiUHJvcCIpOw0KCQkJaWYg
KHByb3BDb2xsICE9IG51bGwgJiYgcHJvcENvbGwubGVuZ3RoID4gMCkNCgkJCXsNCgkJCQlpZiAo
c3RyVG9vbHRpcC5sZW5ndGggPiAwKQ0KCQkJCXsNCgkJCQkJc3RyVG9vbHRpcCArPSAiXG4iOw0K
CQkJCX0gDQoJCQkJc3RyVG9vbHRpcCArPSBzdHJQcm9wczsNCgkJCX0NCgkJfQ0KDQoJCXZhciBo
bE9iaiA9IEdldEhMQWN0aW9uIChzaGFwZU5vZGUsIHBhZ2VJRCwgc2hhcGVJRCk7DQoJCWlmICho
bE9iaiAhPSBudWxsICYmIChobE9iai5Eb0Z1bmN0aW9uLmxlbmd0aCA+IDAgfHwgaGxPYmouSHlw
ZXJsaW5rLmxlbmd0aCA+IDApKQ0KCQl7DQoJCQlpZiAoc3RyVG9vbHRpcC5sZW5ndGggPiAwKQ0K
CQkJew0KCQkJCXN0clRvb2x0aXAgKz0gIlxuIjsNCgkJCX0JDQoJCQlzdHJUb29sdGlwICs9IHN0
ckhMOw0KCQl9DQoNCgkJZWxlbWVudC50aXRsZSA9IHN0clRvb2x0aXA7DQoJCWlmIChlbGVtZW50
LmFsdCAhPSBudWxsKQ0KCQl7DQoJCQllbGVtZW50LmFsdCA9IHN0clRvb2x0aXA7DQoJCX0NCgl9
DQp9DQoNCg0KZnVuY3Rpb24gR2V0SExBY3Rpb24gKHNoYXBlTm9kZSwgcGFnZUlELCBzaGFwZUlE
KQ0Kew0KCXZhciBobE9iaiA9IG5ldyBITE9iaiAoIiIsICIiLCAiIiwgZmFsc2UpOw0KDQoJaWYg
KHNoYXBlTm9kZSAhPSBudWxsKQ0KCXsNCgkJdmFyIGhsQ29sbCA9IHNoYXBlTm9kZS5zZWxlY3RO
b2RlcyAoIlNjcmF0Y2gvQi9Tb2x1dGlvblhNTC9ITFVSTDpIeXBlcmxpbmtzL0hMVVJMOkh5cGVy
bGluayIpOw0KDQoJCWlmIChobENvbGwubGVuZ3RoID4gMSkNCgkJew0KCQkJaGxPYmouRG9GdW5j
dGlvbiA9ICJzaG93TWVudSgiICsgcGFnZUlEICsgIiwgIiArIHNoYXBlSUQgKyAiKTsiDQoJCX0N
CgkJZWxzZSBpZiAoaGxDb2xsLmxlbmd0aCA9PSAxKQ0KCQl7DQoJCQlobE9iaiA9IENyZWF0ZUhM
T2JqIChobENvbGwuaXRlbSgwKSk7DQoJCX0NCgl9DQoNCglyZXR1cm4gaGxPYmo7DQp9DQoNCmZ1
bmN0aW9uIEhMT2JqIChzdHJIeXBlcmxpbmssIHN0ckRvRnVuY3Rpb24sIHN0ckRlc2MsIG5ld1dp
bmRvdykgDQp7DQoJdGhpcy5IeXBlcmxpbmsgPSBzdHJIeXBlcmxpbms7DQoJdGhpcy5Eb0Z1bmN0
aW9uID0gc3RyRG9GdW5jdGlvbjsNCgl0aGlzLkRlc2MgPSBzdHJEZXNjOw0KCXRoaXMuTmV3V2lu
ZG93ID0gbmV3V2luZG93Ow0KfQ0KDQpmdW5jdGlvbiBjbGlja01lbnUoKQ0Kew0KCXZhciBlID0g
d2luZG93LmZybURyYXdpbmcuZXZlbnQ7DQoJdmFyIG1lbnUgPSBmcm1EcmF3aW5nLmRvY3VtZW50
LmFsbCgibWVudTEiKQ0KCQ0KCWlmIChtZW51ICE9IG51bGwgJiYgbWVudS5zdHlsZS5kaXNwbGF5
ICE9ICJub25lIikNCgl7DQoJCW1lbnUuc3R5bGUuZGlzcGxheT0ibm9uZSI7DQoNCgkJaWYgKGUg
JiYgZS5zcmNFbGVtZW50ICYmIGUuc3JjRWxlbWVudC5kb0Z1bmN0aW9uICE9IG51bGwpDQoJCXsN
CgkJCWV2YWwoZS5zcmNFbGVtZW50LmRvRnVuY3Rpb24pOw0KCQl9DQoJfQ0KfQ0KDQpmdW5jdGlv
biB0b2dnbGVNZW51RGl2KGVsLCBoaWdobGlnaHQpIA0Kew0KCXZhciBkaXZFbCA9IGVsOw0KCXZh
ciBhRWwgPSBudWxsOw0KDQoJdmFyIElEID0gZWwuaWQuc3Vic3RyaW5nIChnX0hMTWVudUVudHJ5
RGl2Lmxlbmd0aCwgZWwuaWQubGVuZ3RoKSAqIDEuMDsNCglhRWwgPSBkaXZFbC5hbGwoZ19ITE1l
bnVFbnRyeSArIElEKTsNCg0KCXRvZ2dsZU1lbnUoZGl2RWwsIGFFbCwgaGlnaGxpZ2h0KTsNCn0N
Cg0KZnVuY3Rpb24gdG9nZ2xlTWVudUxpbmsoZWwsIGhpZ2hsaWdodCkgDQp7DQoJdmFyIGRpdkVs
ID0gbnVsbDsNCgl2YXIgYUVsID0gZWw7DQoNCgl2YXIgSUQgPSBlbC5pZC5zdWJzdHJpbmcgKGdf
SExNZW51RW50cnkubGVuZ3RoLCBlbC5pZC5sZW5ndGgpICogMS4wOw0KCWRpdkVsID0gZnJtRHJh
d2luZy5kb2N1bWVudC5hbGwoZ19ITE1lbnVFbnRyeURpdiArIElEKTsNCg0KCXRvZ2dsZU1lbnUo
ZGl2RWwsIGFFbCwgaGlnaGxpZ2h0KTsNCn0NCg0KZnVuY3Rpb24gdG9nZ2xlTWVudShkaXZFbCwg
YUVsLCBoaWdobGlnaHQpDQp7DQoJaWYgKGhpZ2hsaWdodCkNCgl7DQoJICBkaXZFbC5jbGFzc05h
bWU9ImhpZ2hsaWdodEl0ZW0iOw0KCSAgYUVsLmNsYXNzTmFtZT0iaGlnaGxpZ2h0SXRlbSI7DQoJ
fSANCgllbHNlIA0KCXsNCgkgIGRpdkVsLmNsYXNzTmFtZT0ibWVudUl0ZW0iOw0KCSAgYUVsLmNs
YXNzTmFtZT0ibWVudUl0ZW0iOw0KCX0NCn0NCg0KZnVuY3Rpb24gc2hvd01lbnUocGFnZUlELCBz
aGFwZUlEKQ0Kew0KCXZhciBzaGFwZVhNTCA9IEZpbmRTaGFwZVhNTCAocGFnZUlELCBzaGFwZUlE
KTsNCglpZiAoc2hhcGVYTUwgIT0gbnVsbCkNCgl7DQoJCUNyZWF0ZUhMTWVudSAoc2hhcGVYTUwp
Ow0KCQl2YXIgbWVudSA9IGZybURyYXdpbmcuZG9jdW1lbnQuYWxsKCJtZW51MSIpOw0KCQlpZiAo
bWVudSAhPSBudWxsKQ0KCQl7DQoJCQltZW51LnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsN
CgkJCW1lbnUuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUiOw0KDQoJCQl2YXIgZSA9IHdpbmRvdy5m
cm1EcmF3aW5nLmV2ZW50Ow0KCQkJdmFyIGVsZW0gPSBlLnNyY0VsZW1lbnQ7DQoNCgkJCXZhciBj
bGllbnRXaWR0aCA9IGZybURyYXdpbmcuZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDsNCgkJCXZh
ciBjbGllbnRIZWlnaHQgPSBmcm1EcmF3aW5nLmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0Ow0K
DQoJCQl2YXIgbWVudVdpZHRoID0gbWVudS5jbGllbnRXaWR0aDsNCgkJCXZhciBtZW51SGVpZ2h0
ID0gbWVudS5jbGllbnRIZWlnaHQ7DQoNCgkJCXZhciBtZW51TGVmdCA9IGUueDsNCgkJCXZhciBt
ZW51VG9wID0gZS55Ow0KCQkJDQoJCQl2YXIgZG9jID0gZnJtRHJhd2luZy5kb2N1bWVudDsNCgkJ
CXZhciBpbWcgPSBkb2MuYWxsKCJDb252ZXJ0ZWRJbWFnZSIpOw0KCQkJDQoJCQlpZiggKG1lbnVM
ZWZ0ICsgZG9jLmJvZHkuc2Nyb2xsTGVmdCA8IGVsZW0ub2Zmc2V0TGVmdCkgfHwgKG1lbnVMZWZ0
ICsgZG9jLmJvZHkuc2Nyb2xsTGVmdCA+IGVsZW0ub2Zmc2V0TGVmdCArIGVsZW0ub2Zmc2V0V2lk
dGggKyBpbWcub2Zmc2V0TGVmdCkgKQ0KCQkJew0KCQkJCW1lbnVMZWZ0ID0gZWxlbS5vZmZzZXRM
ZWZ0ICsgaW1nLm9mZnNldExlZnQgKyBlbGVtLm9mZnNldFdpZHRoLzI7DQoJCQl9DQoJCQkNCgkJ
CWlmKCAobWVudVRvcCArIGRvYy5ib2R5LnNjcm9sbFRvcCA8IGVsZW0ub2Zmc2V0VG9wKSB8fCAo
bWVudVRvcCArIGRvYy5ib2R5LnNjcm9sbFRvcCA+IGVsZW0ub2Zmc2V0VG9wICsgZWxlbS5vZmZz
ZXRIZWlnaHQgKyBpbWcub2Zmc2V0VG9wKSApDQoJCQl7DQoJCQkJbWVudVRvcCA9IGVsZW0ub2Zm
c2V0VG9wICsgaW1nLm9mZnNldFRvcCArIGVsZW0ub2Zmc2V0SGVpZ2h0LzI7DQoJCQl9DQoNCgkJ
CXZhciBzY3JvbGxCYXJTaXplID0gMjA7DQoJCQlpZiAobWVudUxlZnQgKyBtZW51V2lkdGggPiBj
bGllbnRXaWR0aCAtIHNjcm9sbEJhclNpemUpDQoJCQl7DQoJCQkJbWVudUxlZnQgPSBjbGllbnRX
aWR0aCAtIG1lbnVXaWR0aCAtIHNjcm9sbEJhclNpemU7DQoJCQl9DQoNCgkJCWlmIChtZW51VG9w
ICsgbWVudUhlaWdodCA+IGNsaWVudEhlaWdodCAtIHNjcm9sbEJhclNpemUpDQoJCQl7DQoJCQkJ
bWVudVRvcCA9IGNsaWVudEhlaWdodCAtIG1lbnVIZWlnaHQgLSBzY3JvbGxCYXJTaXplOw0KCQkJ
fQ0KDQoJCQltZW51LnN0eWxlLnBvc0xlZnQgPSBtZW51TGVmdCArIGZybURyYXdpbmcuZG9jdW1l
bnQuYm9keS5zY3JvbGxMZWZ0Ow0KCQkJbWVudS5zdHlsZS5wb3NUb3AgPSBtZW51VG9wICsgZnJt
RHJhd2luZy5kb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsNCgkJCW1lbnUuc3R5bGUudmlzaWJpbGl0
eSA9ICJ2aXNpYmxlIjsNCg0KCQkJdmFyIGZpcnN0TGluayA9IG1lbnUuYWxsKGdfSExNZW51RW50
cnkgKyAiMCIpOw0KCQkJZmlyc3RMaW5rLmZvY3VzICgpOw0KCQkJDQoJCQlpZiAoZS5rZXlDb2Rl
ID09IDEzKQ0KCQkJew0KCQkJCXRvZ2dsZU1lbnVMaW5rKGZpcnN0TGluaywgdHJ1ZSk7DQoJCQl9
DQoNCgkJCWUuY2FuY2VsQnViYmxlID0gdHJ1ZTsNCgkJfQ0KCX0NCn0NCg0KZnVuY3Rpb24gTWVu
dUtleURvd24gKCkNCnsNCgl2YXIgZSA9IHdpbmRvdy5mcm1EcmF3aW5nLmV2ZW50Ow0KCXZhciBl
bCA9IGUuc3JjRWxlbWVudDsNCg0KCWlmIChlLmtleUNvZGUgPT0gMjcpCS8vIDI3ID09IEVTQw0K
CXsNCgkJY2xpY2tNZW51KCk7DQoJCWUuY2FuY2VsQnViYmxlID0gdHJ1ZTsNCgkJcmV0dXJuOw0K
CX0NCg0KCXZhciBjdXJTZWxJRCA9IGVsLmlkLnN1YnN0cmluZyAoZ19ITE1lbnVFbnRyeS5sZW5n
dGgsIGVsLmlkLmxlbmd0aCkgKiAxLjA7DQoJdmFyIG5ld1NlbElEID0gLTE7DQoNCglpZiAoZS5r
ZXlDb2RlID09IDQwKQkvLyA0MCA9PSBkb3duIGFycm93DQoJew0KCQluZXdTZWxJRCA9IGN1clNl
bElEICsgMTsNCgl9DQoJZWxzZSBpZiAoZS5rZXlDb2RlID09IDM4KSAvLyAzOCA9PSB1cCBhcnJv
dw0KCXsNCgkJbmV3U2VsSUQgPSBjdXJTZWxJRCAtIDE7DQoJfQ0KDQoJdmFyIG5ld1NlbEVudHJ5
ID0gZnJtRHJhd2luZy5kb2N1bWVudC5hbGwoZ19ITE1lbnVFbnRyeSArIG5ld1NlbElEKTsNCg0K
CWlmIChuZXdTZWxFbnRyeSkNCgl7DQoJCW5ld1NlbEVudHJ5LmZvY3VzKCk7DQoNCgkJdmFyIGN1
clNlbEVudHJ5ID0gZnJtRHJhd2luZy5kb2N1bWVudC5hbGwoZ19ITE1lbnVFbnRyeSArIGN1clNl
bElEKTsNCgkJdG9nZ2xlTWVudUxpbmsgKGN1clNlbEVudHJ5LCBmYWxzZSk7DQoJCXRvZ2dsZU1l
bnVMaW5rIChuZXdTZWxFbnRyeSwgdHJ1ZSk7DQoJfQ0KDQoJZS5jYW5jZWxCdWJibGUgPSB0cnVl
Ow0KfQ0KDQpmdW5jdGlvbiBDcmVhdGVITE1lbnUgKHNoYXBlTm9kZSkNCnsNCgl2YXIgc3RySExN
ZW51SFRNTCA9ICIiOw0KDQoJaWYgKHNoYXBlTm9kZSAhPSBudWxsKQ0KCXsNCgkJdmFyIGhsQ29s
bCA9IHNoYXBlTm9kZS5zZWxlY3ROb2RlcyAoIlNjcmF0Y2gvQi9Tb2x1dGlvblhNTC9ITFVSTDpI
eXBlcmxpbmtzL0hMVVJMOkh5cGVybGluayIpOw0KDQoJCXN0ckhMTWVudUhUTUwgPSAiPGRpdiBj
bGFzcz0naW5uZXJobE1lbnUnPiI7DQoNCgkJdmFyIGhsQ291bnQgPSBobENvbGwubGVuZ3RoOw0K
CQlmb3IgKHZhciBjb3VudCA9IDA7IGNvdW50IDwgaGxDb3VudDsgY291bnQrKykNCgkJew0KCQkJ
dmFyIGhsT2JqID0gQ3JlYXRlSExPYmogKGhsQ29sbC5pdGVtKGNvdW50KSk7DQoJCQlpZiAoaGxP
YmogIT0gbnVsbCkNCgkJCXsNCgkJCQlpZiAoaGxPYmouRGVzYy5sZW5ndGggPiAwKQ0KCQkJCXsN
CgkJCQkJc3RySExNZW51SFRNTCArPSAiPGRpdiBpZD0nIiArIChnX0hMTWVudUVudHJ5RGl2ICsg
Y291bnQpICsgIicgY2xhc3M9J21lbnVJdGVtJyBvbm1vdXNlb3Zlcj0ndG9nZ2xlTWVudURpdih0
aGlzLCB0cnVlKScgb25tb3VzZW91dD0ndG9nZ2xlTWVudURpdih0aGlzLCBmYWxzZSknIG9uY2xp
Y2s9JyIgKyAoZ19ITE1lbnVFbnRyeSArIGNvdW50KSArICIuY2xpY2soKSc+IjsNCgkJCQkJc3Ry
SExNZW51SFRNTCArPSAiPGEgaHJlZj0iOw0KDQoJCQkJCWlmIChobE9iai5Eb0Z1bmN0aW9uLmxl
bmd0aCA+IDApDQoJCQkJCXsNCgkJCQkJCXN0ckhMTWVudUhUTUwgKz0gIidqYXZhc2NyaXB0OiIg
KyBobE9iai5Eb0Z1bmN0aW9uICsgIiciOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJ
CQkJdmFyIHRhcmdldFZhbCA9ICJfdG9wIjsNCgkJCQkJCWlmIChobE9iai5OZXdXaW5kb3cpDQoJ
CQkJCQl7DQoJCQkJCQkJdGFyZ2V0VmFsID0gIl9ibGFuayI7DQoJCQkJCQl9DQoJCQkJCQlzdHJI
TE1lbnVIVE1MICs9ICInIiArIGhsT2JqLkh5cGVybGluayArICInIHRhcmdldD0nIiArIHRhcmdl
dFZhbCArICInIjsNCgkJCQkJfQ0KDQoJCQkJCXN0ckhMTWVudUhUTUwgKz0gIiBjbGFzcz0nbWVu
dUl0ZW0nIGlkPSciICsgKGdfSExNZW51RW50cnkgKyBjb3VudCkgKyAiJyBvbmtleWRvd249J3Bh
cmVudC5NZW51S2V5RG93bigpOycgb25tb3VzZW92ZXI9J3RvZ2dsZU1lbnVMaW5rKHRoaXMsIHRy
dWUpJyBvbm1vdXNlb3V0PSd0b2dnbGVNZW51TGluayh0aGlzLCBmYWxzZSknPiI7DQoJCQkJCXN0
ckhMTWVudUhUTUwgKz0gaGxPYmouRGVzYyArICI8L2E+PC9kaXY+IjsNCgkJCQl9DQoJCQl9DQoJ
CX0NCgkJDQoJCXN0ckhMTWVudUhUTUwgKz0gIjwvZGl2PiI7DQoJfQ0KDQoJZnJtRHJhd2luZy5t
ZW51MS5pbm5lckhUTUwgPSBzdHJITE1lbnVIVE1MOw0KfQ0KDQpmdW5jdGlvbiBDcmVhdGVITE9i
aiAoaGxOb2RlKQ0Kew0KCXZhciBzdHJBZGRyZXNzID0gIiI7DQoJdmFyIGhsT2JqID0gbmV3IEhM
T2JqICgiIiwgIiIsICIiLCBmYWxzZSk7DQoNCglpZiAoaGxOb2RlICE9IG51bGwpDQoJew0KCQl2
YXIgaGxBZGRyZXNzID0gaGxOb2RlLnNlbGVjdFNpbmdsZU5vZGUoIkhMVVJMOkFkZHJlc3MvdGV4
dG5vZGUoKSIpOw0KCQlpZiAoaGxBZGRyZXNzICE9IG51bGwgJiYgaGxBZGRyZXNzLnRleHQubGVu
Z3RoID4gMCkNCgkJew0KCQkJdmFyIGFic29sdXRlVVJMID0gaGxOb2RlLnNlbGVjdFNpbmdsZU5v
ZGUoIkhMVVJMOkFic29sdXRlVVJML3RleHRub2RlKCkiKTsNCgkJCXZhciBzdHJBYnNVUkwgPSBh
YnNvbHV0ZVVSTC50ZXh0Ow0KCQkJdmFyIHN0ckFkZHIgPSBobEFkZHJlc3MudGV4dDsNCg0KCQkJ
aWYgKHN0ckFic1VSTC5pbmRleE9mIChnX0ZpbGVQcm90b2NvbCkgPT0gMCkNCgkJCXsNCgkJCQl2
YXIgc3RyQWJzUGF0aCA9IHN0ckFic1VSTC5zdWJzdHJpbmcgKGdfRmlsZVByb3RvY29sLmxlbmd0
aCwgc3RyQWJzVVJMLmxlbmd0aCk7DQoJCQkJc3RyQWJzUGF0aC50b0xvd2VyQ2FzZSAoKTsNCgkJ
CQlzdHJBZGRyLnRvTG93ZXJDYXNlICgpOw0KCQkJCWlmIChzdHJBYnNQYXRoID09IHN0ckFkZHIp
DQoJCQkJew0KCQkJCQlzdHJBZGRyZXNzID0gc3RyQWJzUGF0aDsNCgkJCQl9DQoJCQkJZWxzZQ0K
CQkJCXsNCgkJCQkJc3RyQWRkcmVzcyA9IHN0ckFkZHI7DQoJCQkJCQ0KCQkJCQl2YXIgaGxTdWJB
ZGRyZXNzID0gaGxOb2RlLnNlbGVjdFNpbmdsZU5vZGUoIkhMVVJMOlN1YkFkZHJlc3MvdGV4dG5v
ZGUoKSIpOw0KCQkJCQlpZiAoaGxTdWJBZGRyZXNzICE9IG51bGwgJiYgaGxTdWJBZGRyZXNzLnRl
eHQubGVuZ3RoID4gMCkNCgkJCQkJew0KCQkJCQkJc3RyQWRkcmVzcyArPSAnIyc7DQoJCQkJCQlz
dHJBZGRyZXNzICs9IGhsU3ViQWRkcmVzcy50ZXh0Ow0KCQkJCQl9DQoNCgkJCQkJdmFyIGhsRXh0
cmFJbmZvID0gaGxOb2RlLnNlbGVjdFNpbmdsZU5vZGUoIkhMVVJMOkV4dHJhSW5mby90ZXh0bm9k
ZSgpIik7DQoJCQkJCWlmIChobEV4dHJhSW5mbyAhPSBudWxsICYmIGhsRXh0cmFJbmZvLnRleHQu
bGVuZ3RoID4gMCkNCgkJCQkJew0KCQkJCQkJc3RyQWRkcmVzcyArPSAnPyc7DQoJCQkJCQlzdHJB
ZGRyZXNzICs9IGhsRXh0cmFJbmZvLnRleHQ7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQllbHNl
DQoJCQl7DQoJCQkJc3RyQWRkcmVzcyA9IHN0ckFic1VSTDsNCgkJCX0JCQ0KDQoJCQlzdHJBZGRy
ZXNzID0gSFRNTEVzY2FwZSAoc3RyQWRkcmVzcyk7DQoJCQlobE9iai5IeXBlcmxpbmsgKz0gc3Ry
QWRkcmVzczsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCWhsQWRkcmVzcyA9IGhsTm9kZS5zZWxlY3RT
aW5nbGVOb2RlKCJITFVSTDpTdWJBZGRyZXNzL3RleHRub2RlKCkiKTsNCgkJCWlmIChobEFkZHJl
c3MgIT0gbnVsbCAmJiBobEFkZHJlc3MudGV4dC5sZW5ndGggPiAwKQ0KCQkJew0KCQkJCXN0ckFk
ZHJlc3MgPSBobEFkZHJlc3MudGV4dDsNCg0KCQkJCXZhciBwYWdlU2hhcGVTZXAgPSBzdHJBZGRy
ZXNzLmxhc3RJbmRleE9mICgnLycpOw0KCQkJCWlmIChwYWdlU2hhcGVTZXAgPiAwKQ0KCQkJCXsN
CgkJCQkJaWYgKFBhZ2VJbmRleEZyb21OYW1lIChzdHJBZGRyZXNzKSA8IDApDQoJCQkJCXsNCgkJ
CQkJCXN0ckFkZHJlc3MgPSB1bmVzY2FwZSAoc3RyQWRkcmVzcyk7DQoJCQkJCQlpZiAoUGFnZUlu
ZGV4RnJvbU5hbWUgKHN0ckFkZHJlc3MpIDwgMCkNCgkJCQkJCXsNCgkJCQkJCQlzdHJBZGRyZXNz
ID0gc3RyQWRkcmVzcy5zdWJzdHJpbmcgKDAsIHN0ckFkZHJlc3MubGFzdEluZGV4T2YgKCcvJykp
Ow0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJdmFyIHBhZ2VJbmRleCA9IFBhZ2VJbmRl
eEZyb21OYW1lIChzdHJBZGRyZXNzKTsNCg0KCQkJCWhsT2JqLkRvRnVuY3Rpb24gPSAiR29Ub1Bh
Z2UgKCIgKyBwYWdlSW5kZXggKyAiKTsiOw0KCQkJCXN0ckFkZHJlc3MgPSBIVE1MRXNjYXBlIChz
dHJBZGRyZXNzKTsNCgkJCQlobE9iai5EZXNjID0gc3RyQWRkcmVzczsNCgkJCX0NCgkJfQ0KDQoJ
CWhsRGVzYyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpEZXNjcmlwdGlvbi90ZXh0
bm9kZSgpIik7DQoJCWlmIChobERlc2MgIT0gbnVsbCAmJiBobERlc2MudGV4dC5sZW5ndGggPiAw
KQ0KCQl7DQoJCQlobE9iai5EZXNjID0gSFRNTEVzY2FwZSAoaGxEZXNjLnRleHQpOw0KCQl9DQoJ
CWVsc2UNCgkJew0KCQkJaGxPYmouRGVzYyA9IHN0ckFkZHJlc3M7DQoJCX0NCgkNCgkJdmFyIGhs
TmV3V2luZG93ID0gaGxOb2RlLnNlbGVjdFNpbmdsZU5vZGUoIkhMVVJMOk5ld1dpbmRvdy90ZXh0
bm9kZSgpIik7DQoJCWlmIChobE5ld1dpbmRvdyAhPSBudWxsICYmIGhsTmV3V2luZG93LnRleHQu
bGVuZ3RoID4gMCkNCgkJew0KCQkJaGxPYmouTmV3V2luZG93ID0gKGhsTmV3V2luZG93LnRleHQg
PT0gIjEiKTsNCgkJfQkJDQoJfQ0KDQoJcmV0dXJuIGhsT2JqOw0KfQ0KDQoNCgkJPC9zY3JpcHQ+
DQoJPC9oZWFkPg0KCQ0KCTxmcmFtZXNldCBpZD0iZnJtc3RPdXRlciIgY29scz0iMjM3LCoiIHRp
dGxlPSJNaWdyYXRpb25fRmFicmljX1NOIj4NCgkJPGZyYW1lIHNyYz0iTWlncmF0aW9uX0ZhYnJp
Y19TTl9maWxlcy90b29sYmFyLmh0bSIgbmFtZT0iZnJtVG9vbGJhciIgaWQ9ImZybVRvb2xiYXIi
IHRpdGxlPSJUaGlzIGZyYW1lIGNvbnRhaW5zIHRvb2xzIGZvciBtYW5pcHVsYXRpbmcgeW91ciBk
cmF3aW5nLiIgZnJhbWVib3JkZXI9IjYiIGJvcmRlcmNvbG9yPSIjOTk5OTk5IiBzY3JvbGxpbmc9
Im5vIiBtYXJnaW5oZWlnaHQ9IjAiIG1hcmdpbndpZHRoPSIwIiA+DQoJCTxmcmFtZSBzcmM9Ik1p
Z3JhdGlvbl9GYWJyaWNfU05fZmlsZXMvZ2lmXzEuaHRtIiBuYW1lPSJmcm1EcmF3aW5nIiB0aXRs
ZT0iVGhpcyBmcmFtZSBjb250YWlucyB0aGUgcGFnZXMgb2YgeW91ciBkcmF3aW5nLiIgbWFyZ2lu
aGVpZ2h0PSIxMCIgbWFyZ2lud2lkdGg9IjEwIiBvbmxvYWQ9ImlmIChwYXJlbnQuaXNVcExldmVs
KSBGcmFtZVBhZ2VMb2FkZWQoKSIgPg0KDQoJCTxub2ZyYW1lcz4NCgkJCTxib2R5Pg0KDQoJCQkJ
PGgxPk1pZ3JhdGlvbl9GYWJyaWNfU048L2gxPg0KCQkJCTx1bD4NCgkJCQk8bGk+PGEgaHJlZj0i
TWlncmF0aW9uX0ZhYnJpY19TTl9maWxlcy9naWZfMS5odG0iPlBhZ2UtMTwvYT48L2xpPgoNCgkJ
CQk8L3VsPg0KCQkJPC9ib2R5Pg0KCQk8L25vZnJhbWVzPg0KCTwvZnJhbWVzZXQ+DQoJDQo8L2h0
bWw+DQoK

------_=_NextPart_001_01C88EE5.EB9DD028
Content-Type: text/html;
	name="Migration-dc1.htm"
Content-Transfer-Encoding: base64
Content-Description: Migration-dc1.htm
Content-Disposition: attachment;
	filename="Migration-dc1.htm"

PGh0bWw+DQoJPGhlYWQ+DQoJCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ii8+DQoJCTxtZXRhIG5hbWU9IlRpdGxlIiBjb250
ZW50PSIiLz4KCQk8bWV0YSBuYW1lPSJTdWJqZWN0IiBjb250ZW50PSIiLz4KCQk8bWV0YSBuYW1l
PSJDYXRlZ29yeSIgY29udGVudD0iIi8+CgkJPG1ldGEgbmFtZT0iS2V5d29yZHMiIGNvbnRlbnQ9
IiIvPgoJCTxtZXRhIG5hbWU9IkRlc2NyaXB0aW9uIiBjb250ZW50PSIiLz4KCQk8bWV0YSBuYW1l
PSJBdXRob3IiIGNvbnRlbnQ9Ik5ldHdvcmsgQWRtaW5pc3RyYXRvciIvPgoJCTxtZXRhIG5hbWU9
Ik1hbmFnZXIiIGNvbnRlbnQ9IiIvPgoJCTxtZXRhIG5hbWU9IkNvbXBhbnkiIGNvbnRlbnQ9Ik9O
U3RvciwgSW5jLiIvPgoNCgkJPHRpdGxlPk1pZ3JhdGlvbi1kYzE8L3RpdGxlPg0KCQk8c2NyaXB0
IHNyYz0iTWlncmF0aW9uLWRjMV9maWxlcy9mcmFtZXNldC5qcyIgdHlwZT0idGV4dC9qc2NyaXB0
IiBsYW5ndWFnZT0ianNjcmlwdCI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qc2Ny
aXB0IiBsYW5ndWFnZT0ianNjcmlwdCIgPg0KDQpmdW5jdGlvbiBGaWxlRW50cnkgKHBhZ2VJbmRl
eCwgcGFnZUlELCBwYWdlTmFtZSwgcHJpSW1hZ2UsIHNlY0ltYWdlKSANCnsNCgl0aGlzLlBhZ2VJ
bmRleCA9IHBhZ2VJbmRleDsNCgl0aGlzLlBhZ2VJRAkgID0gcGFnZUlEOw0KCXRoaXMuUGFnZU5h
bWUgPSBwYWdlTmFtZTsNCgl0aGlzLlByaUltYWdlID0gcHJpSW1hZ2U7DQoJdGhpcy5TZWNJbWFn
ZSA9IHNlY0ltYWdlOw0KfQ0KDQp2YXIgdmlld01nciA9IG51bGw7DQoNCnZhciBnX0ZpbGVMaXN0
ID0gbmV3ICBBcnJheSgNCiBuZXcgRmlsZUVudHJ5ICgxLCAwLCAiUGFnZS0xIiwgInZtbF8xLmh0
bSIsICJnaWZfMS5odG0iKQoNCik7DQoNCnZhciBnX0N1clBhZ2VJbmRleCA9IDA7DQp2YXIgZ19a
b29tTG9hZGVkID0gZmFsc2U7DQp2YXIgZ19XaWRnZXRzTG9hZGVkID0gZmFsc2U7DQp2YXIgZ19G
aWxlUHJvdG9jb2wgPSAiZmlsZTovLyI7DQoNCnZhciBnX0hMTWVudUVudHJ5ID0gIm1lbnVFbnRy
eSI7DQp2YXIgZ19ITE1lbnVFbnRyeURpdiA9ICJtZW51RW50cnlEaXYiOw0KDQp2YXIgZ19Mb2Fk
aW5nV2lkZ2V0cyA9IGZhbHNlOw0KDQoNCmZ1bmN0aW9uIENWaWV3TWdyKGNvbnZlcnRlZEltZ0lE
LCBoaWdobGlnaHREaXZJRCkNCnsNCgl0aGlzLm9uUmVzaXplID0gbnVsbDsNCgl0aGlzLkFwcGx5
Wm9vbSA9IG51bGw7DQoJdGhpcy5DaGFuZ2luZ1ZpZXcgPSBmYWxzZTsNCg0KCXRoaXMucHV0X0xv
Y2F0aW9uID0gVmlld01nckRlZmF1bHRGaW5kOw0KCXRoaXMuWm9vbSA9IFZpZXdNZ3JEZWZhdWx0
UmVzaXplOw0KCXRoaXMuUG9zdFpvb21Qcm9jZXNzaW5nID0gbnVsbDsNCgl0aGlzLnNldFZpZXcg
PSBudWxsOw0KCXRoaXMuUG9zdFNldFZpZXdQcm9jZXNzaW5nID0gbnVsbDsNCgl0aGlzLnZpZXdD
aGFuZ2VkID0gbnVsbDsNCg0KCXRoaXMuU3VwcG9ydHNEZXRhaWxzID0gZmFsc2U7DQoJdGhpcy5T
dXBwb3J0c1NlYXJjaCA9IGZhbHNlOw0KDQoJdGhpcy52aXNCQm94TGVmdCA9IDAuMDsNCgl0aGlz
LnZpc0JCb3hSaWdodCA9IDAuMDsNCgl0aGlzLnZpc0JCb3hCb3R0b20gPSAwLjA7DQoJdGhpcy52
aXNCQm94VG9wID0gMC4wOw0KDQoJdGhpcy5oaWdobGlnaHREaXYgPSBudWxsOw0KCXRoaXMuc3Rl
cFdpZHRoID0gMTA7DQoNCgl0aGlzLmlkID0gY29udmVydGVkSW1nSUQ7DQoJdGhpcy56b29tRmFj
dG9yID0gLTE7DQoJdGhpcy56b29tTGFzdCA9IC0xOw0KCXRoaXMub3JpZ1dIID0gMTsNCgl0aGlz
Lm9yaWdXaWR0aCA9IDEwMDsJDQoJdGhpcy5hc3BlY3RSYXRpbyA9IDE7DQoNCgl0aGlzLmRvY0Ry
YXdpbmcgPSBudWxsOw0KCXZhciBkb2NEcmF3aW5nID0gZnJtRHJhd2luZy5kb2N1bWVudDsNCglp
Zihkb2NEcmF3aW5nKQ0KCXsNCgkJdGhpcy5kb2NEcmF3aW5nID0gZG9jRHJhd2luZzsNCgkJdmFy
IGRvY0VsID0gZG9jRHJhd2luZy5hbGwodGhpcy5pZCk7DQoJCWlmIChkb2NFbCkNCgkJew0KCQkJ
dGhpcy5zID0gZG9jRWwuc3R5bGU7DQoJCQl0aGlzLm9yaWdXaWR0aCA9IHRoaXMucy5waXhlbFdp
ZHRoOw0KCQkJdGhpcy5vcmlnV0ggPSB0aGlzLnMucGl4ZWxXaWR0aCAvIHRoaXMucy5waXhlbEhl
aWdodDsNCgkJfQ0KCQl0aGlzLmhpZ2hsaWdodERpdiA9IGRvY0RyYXdpbmcuYWxsKGhpZ2hsaWdo
dERpdklEKTsNCgl9DQoNCgl0aGlzLmxvYWRQYWdlID0gRGVmUGFnZUxvYWQ7DQoJdGhpcy5nZXRQ
TloJPSBudWxsOw0KfQ0KDQpmdW5jdGlvbiBEZWZQYWdlTG9hZCAocGFnZUluZGV4KQ0Kew0KCWlm
IChwYWdlSW5kZXggPj0gMCkNCgl7DQoJCXZhciBjdXJQYXRoID0gZnJtRHJhd2luZy5sb2NhdGlv
bi5ocmVmOw0KCQl2YXIgZmlsZURlbGltID0gY3VyUGF0aC5sYXN0SW5kZXhPZiAoJy8nKTsNCgkJ
dmFyIG5ld1BhdGggPSBjdXJQYXRoLnN1YnN0cmluZyAoMCwgZmlsZURlbGltICsgMSk7DQoJCW5l
d1BhdGggKz0gZ19GaWxlTGlzdFtwYWdlSW5kZXhdLlByaUltYWdlOw0KCQlmcm1EcmF3aW5nLmxv
Y2F0aW9uLmhyZWYgPSBuZXdQYXRoOw0KDQoJCVNldFBOWkRpc3BsYXkgKHBhZ2VJbmRleCk7DQoJ
fQ0KfQ0KDQpmdW5jdGlvbiBDdXJQYWdlVXBkYXRlIChwYWdlSW5kZXgpDQp7DQoJaWYgKHBhZ2VJ
bmRleCA+PSAwKQ0KCXsNCgkJZ19DdXJQYWdlSW5kZXggPSBwYWdlSW5kZXg7DQoNCgkJU2V0Q3Vy
UGFnZUluR290byAocGFnZUluZGV4KTsNCg0KCQl2YXIgZGl2RGV0YWlscyA9IGZybVRvb2xiYXIu
ZG9jdW1lbnQuYWxsKCJkaXZEZXRhaWxzIik7DQoJCWlmIChkaXZEZXRhaWxzKQ0KCQl7DQoJCQl2
YXIgZGlzcGxheVN0YXR1cyA9ICJibG9jayI7DQoJCQlpZiAoIXZpZXdNZ3IgfHwgIXZpZXdNZ3Iu
U3VwcG9ydHNEZXRhaWxzKQ0KCQkJew0KCQkJCWRpc3BsYXlTdGF0dXMgPSAibm9uZSI7DQoJCQl9
DQoNCgkJCWRpdkRldGFpbHMuc3R5bGUuZGlzcGxheSA9IGRpc3BsYXlTdGF0dXM7DQoJCX0NCg0K
CQl2YXIgZGl2U2VhcmNoID0gZnJtVG9vbGJhci5kb2N1bWVudC5hbGwoImRpdlNlYXJjaCIpOw0K
CQlpZiAoZGl2U2VhcmNoKQ0KCQl7DQoJCQl2YXIgZGlzcGxheVN0YXR1cyA9ICJibG9jayI7DQoJ
CQlpZiAoIXZpZXdNZ3IgfHwgIXZpZXdNZ3IuU3VwcG9ydHNTZWFyY2gpDQoJCQl7DQoJCQkJZGlz
cGxheVN0YXR1cyA9ICJub25lIjsNCgkJCX0NCg0KCQkJZGl2U2VhcmNoLnN0eWxlLmRpc3BsYXkg
PSBkaXNwbGF5U3RhdHVzOw0KCQl9DQoNCgkJU2V0UE5aRGlzcGxheSAocGFnZUluZGV4KTsNCg0K
CQlMb2FkWm9vbSAoKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIEZyYW1lUGFnZUxvYWRlZCAoKQ0Kew0K
CWlmIChpc1VwTGV2ZWwgJiYgdmlld01nciA9PSBudWxsKQ0KCXsNCgkJdmFyIGN1clBhdGggPSBm
cm1EcmF3aW5nLmxvY2F0aW9uLmhyZWY7DQoJCXZhciBmaWxlRGVsaW0gPSBjdXJQYXRoLmxhc3RJ
bmRleE9mICgnLycpOw0KCQlpZiAoZmlsZURlbGltID49IDApDQoJCXsNCgkJCXZhciBmaWxlTmFt
ZSA9IGN1clBhdGguc3Vic3RyaW5nIChmaWxlRGVsaW0gKyAxLCBjdXJQYXRoLmxlbmd0aCk7DQoJ
CQl2YXIgcGFnZUluZGV4ID0gUGFnZUluZGV4RnJvbUZpbGVOYW1lIChmaWxlTmFtZSk7DQoJCQlT
ZXRDdXJQYWdlSW5Hb3RvIChwYWdlSW5kZXgpOw0KCQkJU2V0UE5aRGlzcGxheSAocGFnZUluZGV4
KTsNCgkJfQ0KCX0NCn0NCg0KZnVuY3Rpb24gTG9hZFpvb20gKCkNCnsNCgl2YXIgem9vbVdpZGdl
dCA9IGZybVRvb2xiYXIuaWZybVBOWjsNCglpZiAoem9vbVdpZGdldCkNCgl7DQoJCWlmIChnX1pv
b21Mb2FkZWQpDQoJCXsNCgkJCXpvb21XaWRnZXQuZmluZENvbnRlbnQoKTsNCgkJCVBhZ2VMb2Fk
ZWREb0NhbGxiYWNrICgpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJd2luZG93LnNldFRpbWVvdXQo
IkxvYWRab29tKCkiLCA1MDApOw0KCQl9DQoJfQ0KCWVsc2UNCgl7DQoJCVBhZ2VMb2FkZWREb0Nh
bGxiYWNrICgpOw0KCX0NCn0NCg0KZnVuY3Rpb24gU2V0Q3VyUGFnZUluR290byAocGFnZUluZGV4
KQ0Kew0KCXZhciBnb3RvUGFnZVNlbGVjdCA9IGZybVRvb2xiYXIuZG9jdW1lbnQuYWxsKCJTZWxl
Y3QxIik7DQoJaWYgKGdvdG9QYWdlU2VsZWN0ICE9IG51bGwpDQoJew0KCQlnb3RvUGFnZVNlbGVj
dC52YWx1ZSA9IHBhZ2VJbmRleDsNCgl9DQp9DQoNCmZ1bmN0aW9uIFNldFBOWkRpc3BsYXkgKHBh
Z2VJbmRleCkNCnsNCgl2YXIgZGl2UE5aID0gZnJtVG9vbGJhci5kb2N1bWVudC5hbGwoImRpdlBO
WiIpOw0KCWlmIChkaXZQTlopDQoJew0KCQl2YXIgZGlzcGxheVN0YXR1cyA9ICJibG9jayI7DQoJ
CWlmIChnX0ZpbGVMaXN0W3BhZ2VJbmRleF0uUGFnZUlEIDwgMCkNCgkJew0KCQkJZGlzcGxheVN0
YXR1cyA9ICJub25lIjsNCgkJfQ0KDQoJCWRpdlBOWi5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheVN0
YXR1czsNCgl9DQp9DQoNCmZ1bmN0aW9uIFZpZXdNZ3JEZWZhdWx0RmluZCgpDQp7DQoJcmV0dXJu
Ow0KfQ0KDQpmdW5jdGlvbiBWaWV3TWdyRGVmYXVsdFJlc2l6ZShzaXplKQ0Kew0KCXJldHVybjsN
Cn0NCg0KDQoNCmdfY2FsbEJhY2tGdW5jdGlvbkFycmF5ID0gbmV3IEFycmF5KCk7DQpmdW5jdGlv
biBQYWdlTG9hZGVkRG9DYWxsYmFjaygpDQp7DQoJaWYgKGdfV2lkZ2V0c0xvYWRlZCkJDQoJew0K
CQlmb3IoIHZhciBpPTA7IGkgPCBnX2NhbGxCYWNrRnVuY3Rpb25BcnJheS5sZW5ndGg7IGkrKyAp
DQoJCXsNCgkJCWdfY2FsbEJhY2tGdW5jdGlvbkFycmF5W2ldKCk7DQoJCX0NCgkJZ19jYWxsQmFj
a0Z1bmN0aW9uQXJyYXkgPSBuZXcgQXJyYXkoKTsNCgl9DQoJZWxzZQ0KCXsNCgkJd2luZG93LnNl
dFRpbWVvdXQoIlBhZ2VMb2FkZWREb0NhbGxiYWNrKCkiLCA1MDApOw0KCX0NCn0NCg0KDQpmdW5j
dGlvbiBQYXJzZVBhcmFtcyAoc3RyUmF3UGFyYW1zKQ0Kew0KCXN0clJhd1BhcmFtcyA9IHN0clJh
d1BhcmFtcy5zdWJzdHJpbmcoMSk7DQoNCgl2YXIgYXJyYXlQYXJhbVRva2VucyA9IHN0clJhd1Bh
cmFtcy5zcGxpdCgnJicpOw0KCWZvciAodmFyIGNvdW50ID0gMDsgY291bnQgPCBhcnJheVBhcmFt
VG9rZW5zLmxlbmd0aDsgY291bnQrKykNCgl7DQoJCWFycmF5UGFyYW1Ub2tlbnNbY291bnRdID0g
dW5lc2NhcGUoYXJyYXlQYXJhbVRva2Vuc1tjb3VudF0pOw0KCQl0aGlzW2NvdW50XSA9IGFycmF5
UGFyYW1Ub2tlbnNbY291bnRdLnN1YnN0cmluZygwLCBhcnJheVBhcmFtVG9rZW5zW2NvdW50XS5p
bmRleE9mKCc9JykpOw0KCQl0aGlzW3RoaXNbY291bnRdXSA9IGFycmF5UGFyYW1Ub2tlbnNbY291
bnRdLnN1YnN0cmluZyhhcnJheVBhcmFtVG9rZW5zW2NvdW50XS5pbmRleE9mKCc9JykgKyAxKTsN
Cgl9DQoNCglyZXR1cm4gdGhpczsNCn0NCg0KdmFyIGdQYXJhbXMgPSBQYXJzZVBhcmFtcyAobG9j
YXRpb24uc2VhcmNoKTsNCg0KdmFyIGdfUGFnZVBhcmFtVmFsdWUgPSBnUGFyYW1zWydwYWdlJ107
DQppZiAoZ19QYWdlUGFyYW1WYWx1ZSAhPSBudWxsICYmIA0KCWdfUGFnZVBhcmFtVmFsdWUubGVu
Z3RoID4gMCkNCnsNCgl2YXIgcGFnZUluZGV4ID0gUGFnZUluZGV4RnJvbU5hbWUgKGdfUGFnZVBh
cmFtVmFsdWUpOw0KCWlmIChwYWdlSW5kZXggPiAwICYmIHBhZ2VJbmRleCA8IGdfRmlsZUxpc3Qu
bGVuZ3RoKQ0KCXsNCgkJZ19DdXJQYWdlSW5kZXggPSBwYWdlSW5kZXg7DQoJfQ0KfQ0KZWxzZQ0K
ew0KCWdfUGFnZVBhcmFtVmFsdWUgPSBudWxsOw0KfQ0KDQp2YXIgZ19GaXJzdFBhZ2VUb0xvYWQg
PSBnX1BhZ2VQYXJhbVZhbHVlOw0KDQp2YXIgZ19ab29tUGFyYW1WYWx1ZSA9IGdQYXJhbXNbJ3pv
b20nXTsNCmlmIChnX1pvb21QYXJhbVZhbHVlICE9IG51bGwgJiYgZ19ab29tUGFyYW1WYWx1ZS5s
ZW5ndGggPiAwKQ0Kew0KCWdfWm9vbVBhcmFtVmFsdWUgPSAxLjAgKiBnX1pvb21QYXJhbVZhbHVl
Ow0KCWlmIChnX1pvb21QYXJhbVZhbHVlID49IDEwICYmIGdfWm9vbVBhcmFtVmFsdWUgPD0gNTAw
KQ0KCXsNCgkJZ19jYWxsQmFja0Z1bmN0aW9uQXJyYXlbZ19jYWxsQmFja0Z1bmN0aW9uQXJyYXku
bGVuZ3RoXSA9IGZ1bmN0aW9uICgpIHsgaWYgKHZpZXdNZ3IgJiYgdmlld01nci5ab29tKSB7IHZp
ZXdNZ3IuWm9vbShnX1pvb21QYXJhbVZhbHVlKTsgfSB9Ow0KCX0NCn0NCg0KdmFyIGdfU2hhcGVQ
YXJhbVZhbHVlID0gZ1BhcmFtc1snc2hhcGUnXTsNCmlmIChnX1NoYXBlUGFyYW1WYWx1ZSAhPSBu
dWxsICYmIGdfU2hhcGVQYXJhbVZhbHVlLmxlbmd0aCA+IDApDQp7DQoJaWYgKGdfUGFnZVBhcmFt
VmFsdWUgIT0gbnVsbCAmJiBnX1BhZ2VQYXJhbVZhbHVlLmxlbmd0aCA+IDApDQoJew0KCQlnX2Nh
bGxCYWNrRnVuY3Rpb25BcnJheVtnX2NhbGxCYWNrRnVuY3Rpb25BcnJheS5sZW5ndGhdID0gZnVu
Y3Rpb24gKCkgeyB2YXIgc2hhcGVOb2RlID0gRmluZFNoYXBlWE1MQnlOYW1lIChnX1BhZ2VQYXJh
bVZhbHVlLCBnX1NoYXBlUGFyYW1WYWx1ZSk7IGlmIChzaGFwZU5vZGUpIHsgZnJtVG9vbGJhci5U
cmVlU2VsZWN0IChnX0ZpbGVMaXN0W2dfQ3VyUGFnZUluZGV4XS5QYWdlSUQsIHNoYXBlTm9kZS5h
dHRyaWJ1dGVzLmdldE5hbWVkSXRlbSAoIklEIikudGV4dCk7IH0gfTsNCgl9DQoJZWxzZQ0KCXsN
CgkJZ19TaGFwZVBhcmFtVmFsdWUgPSBudWxsOw0KCX0NCn0NCg0KdmFyIGdfU2VhcmNoUGFyYW1W
YWx1ZSA9IGdQYXJhbXNbJ3NlYXJjaCddOw0KaWYgKGdfU2VhcmNoUGFyYW1WYWx1ZSAhPSBudWxs
ICYmIGdfU2VhcmNoUGFyYW1WYWx1ZS5sZW5ndGggPiAwKQ0Kew0KCWdfY2FsbEJhY2tGdW5jdGlv
bkFycmF5W2dfY2FsbEJhY2tGdW5jdGlvbkFycmF5Lmxlbmd0aF0gPSBmdW5jdGlvbiAoKSB7IGlm
IChmcm1Ub29sYmFyLnRoZUZvcm0pIHsgZnJtVG9vbGJhci50aGVGb3JtLmZpbmRTdHJpbmcudmFs
dWUgPSBnX1NlYXJjaFBhcmFtVmFsdWU7IH0gfTsNCglnX2NhbGxCYWNrRnVuY3Rpb25BcnJheVtn
X2NhbGxCYWNrRnVuY3Rpb25BcnJheS5sZW5ndGhdID0gZnVuY3Rpb24gKCkgeyB2YXIgZ29CdXR0
b24gPSBmcm1Ub29sYmFyLmRvY3VtZW50LmFsbCgnR29CdXR0b24nKTsgaWYoZ29CdXR0b24pIHsg
Z29CdXR0b24uY2xpY2soKTsgfSB9Ow0KfQ0KDQoNCnZhciBzdHJITFRvb2x0aXBUZXh0ID0gIkNs
aWNrIHRvIGZvbGxvdyBoeXBlcmxpbmsuIjsNCnZhciBzdHJQcm9wc1Rvb2x0aXBUZXh0ID0gIkN0
cmwgKyBDbGljayB0byB2aWV3IGRldGFpbHMuIjsNCg0KdmFyIHN0ckZvY3VzSExUb29sdGlwVGV4
dCA9ICJFbnRlciB0byBmb2xsb3cgaHlwZXJsaW5rLiI7DQp2YXIgc3RyRm9jdXNQcm9wc1Rvb2x0
aXBUZXh0ID0gIkN0cmwgKyBFbnRlciB0byB2aWV3IGRldGFpbHMuIjsNCg0KDQpmdW5jdGlvbiBV
cGRhdGVUb29sdGlwIChlbGVtZW50LCBwYWdlSUQsIHNoYXBlSUQpDQp7DQoJaWYgKGlzVXBMZXZl
bCkNCgl7DQoJCXZhciBzdHJITCwgc3RyUHJvcHM7DQoJDQoJCWlmKGZybURyYXdpbmcuZXZlbnQu
dHlwZSA9PSAiZm9jdXMiKQ0KCQl7DQoJCQlzdHJITCA9IHN0ckZvY3VzSExUb29sdGlwVGV4dDsN
CgkJCXN0clByb3BzID0gc3RyRm9jdXNQcm9wc1Rvb2x0aXBUZXh0Ow0KCQl9DQoJCWVsc2UNCgkJ
ew0KCQkJc3RySEwgPSBzdHJITFRvb2x0aXBUZXh0Ow0KCQkJc3RyUHJvcHMgPSBzdHJQcm9wc1Rv
b2x0aXBUZXh0Ow0KCQl9DQoNCgkJdmFyIHN0clRvb2x0aXAgPSAiIjsNCgkJaWYgKGVsZW1lbnQu
b3JpZ1RpdGxlKQ0KCQl7DQoJCQlzdHJUb29sdGlwID0gZWxlbWVudC5vcmlnVGl0bGUudG9TdHJp
bmcoKTsNCgkJfQ0KCQkJDQoJCXZhciBzaGFwZU5vZGUgPSBGaW5kU2hhcGVYTUwgKHBhZ2VJRCwg
c2hhcGVJRCk7DQoNCgkJaWYoIHNoYXBlTm9kZSAhPSBudWxsICkNCgkJew0KCQkJdmFyIHByb3BD
b2xsID0gc2hhcGVOb2RlLnNlbGVjdE5vZGVzICgiUHJvcCIpOw0KCQkJaWYgKHByb3BDb2xsICE9
IG51bGwgJiYgcHJvcENvbGwubGVuZ3RoID4gMCkNCgkJCXsNCgkJCQlpZiAoc3RyVG9vbHRpcC5s
ZW5ndGggPiAwKQ0KCQkJCXsNCgkJCQkJc3RyVG9vbHRpcCArPSAiXG4iOw0KCQkJCX0gDQoJCQkJ
c3RyVG9vbHRpcCArPSBzdHJQcm9wczsNCgkJCX0NCgkJfQ0KDQoJCXZhciBobE9iaiA9IEdldEhM
QWN0aW9uIChzaGFwZU5vZGUsIHBhZ2VJRCwgc2hhcGVJRCk7DQoJCWlmIChobE9iaiAhPSBudWxs
ICYmIChobE9iai5Eb0Z1bmN0aW9uLmxlbmd0aCA+IDAgfHwgaGxPYmouSHlwZXJsaW5rLmxlbmd0
aCA+IDApKQ0KCQl7DQoJCQlpZiAoc3RyVG9vbHRpcC5sZW5ndGggPiAwKQ0KCQkJew0KCQkJCXN0
clRvb2x0aXAgKz0gIlxuIjsNCgkJCX0JDQoJCQlzdHJUb29sdGlwICs9IHN0ckhMOw0KCQl9DQoN
CgkJZWxlbWVudC50aXRsZSA9IHN0clRvb2x0aXA7DQoJCWlmIChlbGVtZW50LmFsdCAhPSBudWxs
KQ0KCQl7DQoJCQllbGVtZW50LmFsdCA9IHN0clRvb2x0aXA7DQoJCX0NCgl9DQp9DQoNCg0KZnVu
Y3Rpb24gR2V0SExBY3Rpb24gKHNoYXBlTm9kZSwgcGFnZUlELCBzaGFwZUlEKQ0Kew0KCXZhciBo
bE9iaiA9IG5ldyBITE9iaiAoIiIsICIiLCAiIiwgZmFsc2UpOw0KDQoJaWYgKHNoYXBlTm9kZSAh
PSBudWxsKQ0KCXsNCgkJdmFyIGhsQ29sbCA9IHNoYXBlTm9kZS5zZWxlY3ROb2RlcyAoIlNjcmF0
Y2gvQi9Tb2x1dGlvblhNTC9ITFVSTDpIeXBlcmxpbmtzL0hMVVJMOkh5cGVybGluayIpOw0KDQoJ
CWlmIChobENvbGwubGVuZ3RoID4gMSkNCgkJew0KCQkJaGxPYmouRG9GdW5jdGlvbiA9ICJzaG93
TWVudSgiICsgcGFnZUlEICsgIiwgIiArIHNoYXBlSUQgKyAiKTsiDQoJCX0NCgkJZWxzZSBpZiAo
aGxDb2xsLmxlbmd0aCA9PSAxKQ0KCQl7DQoJCQlobE9iaiA9IENyZWF0ZUhMT2JqIChobENvbGwu
aXRlbSgwKSk7DQoJCX0NCgl9DQoNCglyZXR1cm4gaGxPYmo7DQp9DQoNCmZ1bmN0aW9uIEhMT2Jq
IChzdHJIeXBlcmxpbmssIHN0ckRvRnVuY3Rpb24sIHN0ckRlc2MsIG5ld1dpbmRvdykgDQp7DQoJ
dGhpcy5IeXBlcmxpbmsgPSBzdHJIeXBlcmxpbms7DQoJdGhpcy5Eb0Z1bmN0aW9uID0gc3RyRG9G
dW5jdGlvbjsNCgl0aGlzLkRlc2MgPSBzdHJEZXNjOw0KCXRoaXMuTmV3V2luZG93ID0gbmV3V2lu
ZG93Ow0KfQ0KDQpmdW5jdGlvbiBjbGlja01lbnUoKQ0Kew0KCXZhciBlID0gd2luZG93LmZybURy
YXdpbmcuZXZlbnQ7DQoJdmFyIG1lbnUgPSBmcm1EcmF3aW5nLmRvY3VtZW50LmFsbCgibWVudTEi
KQ0KCQ0KCWlmIChtZW51ICE9IG51bGwgJiYgbWVudS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIikN
Cgl7DQoJCW1lbnUuc3R5bGUuZGlzcGxheT0ibm9uZSI7DQoNCgkJaWYgKGUgJiYgZS5zcmNFbGVt
ZW50ICYmIGUuc3JjRWxlbWVudC5kb0Z1bmN0aW9uICE9IG51bGwpDQoJCXsNCgkJCWV2YWwoZS5z
cmNFbGVtZW50LmRvRnVuY3Rpb24pOw0KCQl9DQoJfQ0KfQ0KDQpmdW5jdGlvbiB0b2dnbGVNZW51
RGl2KGVsLCBoaWdobGlnaHQpIA0Kew0KCXZhciBkaXZFbCA9IGVsOw0KCXZhciBhRWwgPSBudWxs
Ow0KDQoJdmFyIElEID0gZWwuaWQuc3Vic3RyaW5nIChnX0hMTWVudUVudHJ5RGl2Lmxlbmd0aCwg
ZWwuaWQubGVuZ3RoKSAqIDEuMDsNCglhRWwgPSBkaXZFbC5hbGwoZ19ITE1lbnVFbnRyeSArIElE
KTsNCg0KCXRvZ2dsZU1lbnUoZGl2RWwsIGFFbCwgaGlnaGxpZ2h0KTsNCn0NCg0KZnVuY3Rpb24g
dG9nZ2xlTWVudUxpbmsoZWwsIGhpZ2hsaWdodCkgDQp7DQoJdmFyIGRpdkVsID0gbnVsbDsNCgl2
YXIgYUVsID0gZWw7DQoNCgl2YXIgSUQgPSBlbC5pZC5zdWJzdHJpbmcgKGdfSExNZW51RW50cnku
bGVuZ3RoLCBlbC5pZC5sZW5ndGgpICogMS4wOw0KCWRpdkVsID0gZnJtRHJhd2luZy5kb2N1bWVu
dC5hbGwoZ19ITE1lbnVFbnRyeURpdiArIElEKTsNCg0KCXRvZ2dsZU1lbnUoZGl2RWwsIGFFbCwg
aGlnaGxpZ2h0KTsNCn0NCg0KZnVuY3Rpb24gdG9nZ2xlTWVudShkaXZFbCwgYUVsLCBoaWdobGln
aHQpDQp7DQoJaWYgKGhpZ2hsaWdodCkNCgl7DQoJICBkaXZFbC5jbGFzc05hbWU9ImhpZ2hsaWdo
dEl0ZW0iOw0KCSAgYUVsLmNsYXNzTmFtZT0iaGlnaGxpZ2h0SXRlbSI7DQoJfSANCgllbHNlIA0K
CXsNCgkgIGRpdkVsLmNsYXNzTmFtZT0ibWVudUl0ZW0iOw0KCSAgYUVsLmNsYXNzTmFtZT0ibWVu
dUl0ZW0iOw0KCX0NCn0NCg0KZnVuY3Rpb24gc2hvd01lbnUocGFnZUlELCBzaGFwZUlEKQ0Kew0K
CXZhciBzaGFwZVhNTCA9IEZpbmRTaGFwZVhNTCAocGFnZUlELCBzaGFwZUlEKTsNCglpZiAoc2hh
cGVYTUwgIT0gbnVsbCkNCgl7DQoJCUNyZWF0ZUhMTWVudSAoc2hhcGVYTUwpOw0KCQl2YXIgbWVu
dSA9IGZybURyYXdpbmcuZG9jdW1lbnQuYWxsKCJtZW51MSIpOw0KCQlpZiAobWVudSAhPSBudWxs
KQ0KCQl7DQoJCQltZW51LnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsNCgkJCW1lbnUuc3R5
bGUuZGlzcGxheSA9ICJpbmxpbmUiOw0KDQoJCQl2YXIgZSA9IHdpbmRvdy5mcm1EcmF3aW5nLmV2
ZW50Ow0KCQkJdmFyIGVsZW0gPSBlLnNyY0VsZW1lbnQ7DQoNCgkJCXZhciBjbGllbnRXaWR0aCA9
IGZybURyYXdpbmcuZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDsNCgkJCXZhciBjbGllbnRIZWln
aHQgPSBmcm1EcmF3aW5nLmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0Ow0KDQoJCQl2YXIgbWVu
dVdpZHRoID0gbWVudS5jbGllbnRXaWR0aDsNCgkJCXZhciBtZW51SGVpZ2h0ID0gbWVudS5jbGll
bnRIZWlnaHQ7DQoNCgkJCXZhciBtZW51TGVmdCA9IGUueDsNCgkJCXZhciBtZW51VG9wID0gZS55
Ow0KCQkJDQoJCQl2YXIgZG9jID0gZnJtRHJhd2luZy5kb2N1bWVudDsNCgkJCXZhciBpbWcgPSBk
b2MuYWxsKCJDb252ZXJ0ZWRJbWFnZSIpOw0KCQkJDQoJCQlpZiggKG1lbnVMZWZ0ICsgZG9jLmJv
ZHkuc2Nyb2xsTGVmdCA8IGVsZW0ub2Zmc2V0TGVmdCkgfHwgKG1lbnVMZWZ0ICsgZG9jLmJvZHku
c2Nyb2xsTGVmdCA+IGVsZW0ub2Zmc2V0TGVmdCArIGVsZW0ub2Zmc2V0V2lkdGggKyBpbWcub2Zm
c2V0TGVmdCkgKQ0KCQkJew0KCQkJCW1lbnVMZWZ0ID0gZWxlbS5vZmZzZXRMZWZ0ICsgaW1nLm9m
ZnNldExlZnQgKyBlbGVtLm9mZnNldFdpZHRoLzI7DQoJCQl9DQoJCQkNCgkJCWlmKCAobWVudVRv
cCArIGRvYy5ib2R5LnNjcm9sbFRvcCA8IGVsZW0ub2Zmc2V0VG9wKSB8fCAobWVudVRvcCArIGRv
Yy5ib2R5LnNjcm9sbFRvcCA+IGVsZW0ub2Zmc2V0VG9wICsgZWxlbS5vZmZzZXRIZWlnaHQgKyBp
bWcub2Zmc2V0VG9wKSApDQoJCQl7DQoJCQkJbWVudVRvcCA9IGVsZW0ub2Zmc2V0VG9wICsgaW1n
Lm9mZnNldFRvcCArIGVsZW0ub2Zmc2V0SGVpZ2h0LzI7DQoJCQl9DQoNCgkJCXZhciBzY3JvbGxC
YXJTaXplID0gMjA7DQoJCQlpZiAobWVudUxlZnQgKyBtZW51V2lkdGggPiBjbGllbnRXaWR0aCAt
IHNjcm9sbEJhclNpemUpDQoJCQl7DQoJCQkJbWVudUxlZnQgPSBjbGllbnRXaWR0aCAtIG1lbnVX
aWR0aCAtIHNjcm9sbEJhclNpemU7DQoJCQl9DQoNCgkJCWlmIChtZW51VG9wICsgbWVudUhlaWdo
dCA+IGNsaWVudEhlaWdodCAtIHNjcm9sbEJhclNpemUpDQoJCQl7DQoJCQkJbWVudVRvcCA9IGNs
aWVudEhlaWdodCAtIG1lbnVIZWlnaHQgLSBzY3JvbGxCYXJTaXplOw0KCQkJfQ0KDQoJCQltZW51
LnN0eWxlLnBvc0xlZnQgPSBtZW51TGVmdCArIGZybURyYXdpbmcuZG9jdW1lbnQuYm9keS5zY3Jv
bGxMZWZ0Ow0KCQkJbWVudS5zdHlsZS5wb3NUb3AgPSBtZW51VG9wICsgZnJtRHJhd2luZy5kb2N1
bWVudC5ib2R5LnNjcm9sbFRvcDsNCgkJCW1lbnUuc3R5bGUudmlzaWJpbGl0eSA9ICJ2aXNpYmxl
IjsNCg0KCQkJdmFyIGZpcnN0TGluayA9IG1lbnUuYWxsKGdfSExNZW51RW50cnkgKyAiMCIpOw0K
CQkJZmlyc3RMaW5rLmZvY3VzICgpOw0KCQkJDQoJCQlpZiAoZS5rZXlDb2RlID09IDEzKQ0KCQkJ
ew0KCQkJCXRvZ2dsZU1lbnVMaW5rKGZpcnN0TGluaywgdHJ1ZSk7DQoJCQl9DQoNCgkJCWUuY2Fu
Y2VsQnViYmxlID0gdHJ1ZTsNCgkJfQ0KCX0NCn0NCg0KZnVuY3Rpb24gTWVudUtleURvd24gKCkN
CnsNCgl2YXIgZSA9IHdpbmRvdy5mcm1EcmF3aW5nLmV2ZW50Ow0KCXZhciBlbCA9IGUuc3JjRWxl
bWVudDsNCg0KCWlmIChlLmtleUNvZGUgPT0gMjcpCS8vIDI3ID09IEVTQw0KCXsNCgkJY2xpY2tN
ZW51KCk7DQoJCWUuY2FuY2VsQnViYmxlID0gdHJ1ZTsNCgkJcmV0dXJuOw0KCX0NCg0KCXZhciBj
dXJTZWxJRCA9IGVsLmlkLnN1YnN0cmluZyAoZ19ITE1lbnVFbnRyeS5sZW5ndGgsIGVsLmlkLmxl
bmd0aCkgKiAxLjA7DQoJdmFyIG5ld1NlbElEID0gLTE7DQoNCglpZiAoZS5rZXlDb2RlID09IDQw
KQkvLyA0MCA9PSBkb3duIGFycm93DQoJew0KCQluZXdTZWxJRCA9IGN1clNlbElEICsgMTsNCgl9
DQoJZWxzZSBpZiAoZS5rZXlDb2RlID09IDM4KSAvLyAzOCA9PSB1cCBhcnJvdw0KCXsNCgkJbmV3
U2VsSUQgPSBjdXJTZWxJRCAtIDE7DQoJfQ0KDQoJdmFyIG5ld1NlbEVudHJ5ID0gZnJtRHJhd2lu
Zy5kb2N1bWVudC5hbGwoZ19ITE1lbnVFbnRyeSArIG5ld1NlbElEKTsNCg0KCWlmIChuZXdTZWxF
bnRyeSkNCgl7DQoJCW5ld1NlbEVudHJ5LmZvY3VzKCk7DQoNCgkJdmFyIGN1clNlbEVudHJ5ID0g
ZnJtRHJhd2luZy5kb2N1bWVudC5hbGwoZ19ITE1lbnVFbnRyeSArIGN1clNlbElEKTsNCgkJdG9n
Z2xlTWVudUxpbmsgKGN1clNlbEVudHJ5LCBmYWxzZSk7DQoJCXRvZ2dsZU1lbnVMaW5rIChuZXdT
ZWxFbnRyeSwgdHJ1ZSk7DQoJfQ0KDQoJZS5jYW5jZWxCdWJibGUgPSB0cnVlOw0KfQ0KDQpmdW5j
dGlvbiBDcmVhdGVITE1lbnUgKHNoYXBlTm9kZSkNCnsNCgl2YXIgc3RySExNZW51SFRNTCA9ICIi
Ow0KDQoJaWYgKHNoYXBlTm9kZSAhPSBudWxsKQ0KCXsNCgkJdmFyIGhsQ29sbCA9IHNoYXBlTm9k
ZS5zZWxlY3ROb2RlcyAoIlNjcmF0Y2gvQi9Tb2x1dGlvblhNTC9ITFVSTDpIeXBlcmxpbmtzL0hM
VVJMOkh5cGVybGluayIpOw0KDQoJCXN0ckhMTWVudUhUTUwgPSAiPGRpdiBjbGFzcz0naW5uZXJo
bE1lbnUnPiI7DQoNCgkJdmFyIGhsQ291bnQgPSBobENvbGwubGVuZ3RoOw0KCQlmb3IgKHZhciBj
b3VudCA9IDA7IGNvdW50IDwgaGxDb3VudDsgY291bnQrKykNCgkJew0KCQkJdmFyIGhsT2JqID0g
Q3JlYXRlSExPYmogKGhsQ29sbC5pdGVtKGNvdW50KSk7DQoJCQlpZiAoaGxPYmogIT0gbnVsbCkN
CgkJCXsNCgkJCQlpZiAoaGxPYmouRGVzYy5sZW5ndGggPiAwKQ0KCQkJCXsNCgkJCQkJc3RySExN
ZW51SFRNTCArPSAiPGRpdiBpZD0nIiArIChnX0hMTWVudUVudHJ5RGl2ICsgY291bnQpICsgIicg
Y2xhc3M9J21lbnVJdGVtJyBvbm1vdXNlb3Zlcj0ndG9nZ2xlTWVudURpdih0aGlzLCB0cnVlKScg
b25tb3VzZW91dD0ndG9nZ2xlTWVudURpdih0aGlzLCBmYWxzZSknIG9uY2xpY2s9JyIgKyAoZ19I
TE1lbnVFbnRyeSArIGNvdW50KSArICIuY2xpY2soKSc+IjsNCgkJCQkJc3RySExNZW51SFRNTCAr
PSAiPGEgaHJlZj0iOw0KDQoJCQkJCWlmIChobE9iai5Eb0Z1bmN0aW9uLmxlbmd0aCA+IDApDQoJ
CQkJCXsNCgkJCQkJCXN0ckhMTWVudUhUTUwgKz0gIidqYXZhc2NyaXB0OiIgKyBobE9iai5Eb0Z1
bmN0aW9uICsgIiciOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJdmFyIHRhcmdl
dFZhbCA9ICJfdG9wIjsNCgkJCQkJCWlmIChobE9iai5OZXdXaW5kb3cpDQoJCQkJCQl7DQoJCQkJ
CQkJdGFyZ2V0VmFsID0gIl9ibGFuayI7DQoJCQkJCQl9DQoJCQkJCQlzdHJITE1lbnVIVE1MICs9
ICInIiArIGhsT2JqLkh5cGVybGluayArICInIHRhcmdldD0nIiArIHRhcmdldFZhbCArICInIjsN
CgkJCQkJfQ0KDQoJCQkJCXN0ckhMTWVudUhUTUwgKz0gIiBjbGFzcz0nbWVudUl0ZW0nIGlkPSci
ICsgKGdfSExNZW51RW50cnkgKyBjb3VudCkgKyAiJyBvbmtleWRvd249J3BhcmVudC5NZW51S2V5
RG93bigpOycgb25tb3VzZW92ZXI9J3RvZ2dsZU1lbnVMaW5rKHRoaXMsIHRydWUpJyBvbm1vdXNl
b3V0PSd0b2dnbGVNZW51TGluayh0aGlzLCBmYWxzZSknPiI7DQoJCQkJCXN0ckhMTWVudUhUTUwg
Kz0gaGxPYmouRGVzYyArICI8L2E+PC9kaXY+IjsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCXN0
ckhMTWVudUhUTUwgKz0gIjwvZGl2PiI7DQoJfQ0KDQoJZnJtRHJhd2luZy5tZW51MS5pbm5lckhU
TUwgPSBzdHJITE1lbnVIVE1MOw0KfQ0KDQpmdW5jdGlvbiBDcmVhdGVITE9iaiAoaGxOb2RlKQ0K
ew0KCXZhciBzdHJBZGRyZXNzID0gIiI7DQoJdmFyIGhsT2JqID0gbmV3IEhMT2JqICgiIiwgIiIs
ICIiLCBmYWxzZSk7DQoNCglpZiAoaGxOb2RlICE9IG51bGwpDQoJew0KCQl2YXIgaGxBZGRyZXNz
ID0gaGxOb2RlLnNlbGVjdFNpbmdsZU5vZGUoIkhMVVJMOkFkZHJlc3MvdGV4dG5vZGUoKSIpOw0K
CQlpZiAoaGxBZGRyZXNzICE9IG51bGwgJiYgaGxBZGRyZXNzLnRleHQubGVuZ3RoID4gMCkNCgkJ
ew0KCQkJdmFyIGFic29sdXRlVVJMID0gaGxOb2RlLnNlbGVjdFNpbmdsZU5vZGUoIkhMVVJMOkFi
c29sdXRlVVJML3RleHRub2RlKCkiKTsNCgkJCXZhciBzdHJBYnNVUkwgPSBhYnNvbHV0ZVVSTC50
ZXh0Ow0KCQkJdmFyIHN0ckFkZHIgPSBobEFkZHJlc3MudGV4dDsNCg0KCQkJaWYgKHN0ckFic1VS
TC5pbmRleE9mIChnX0ZpbGVQcm90b2NvbCkgPT0gMCkNCgkJCXsNCgkJCQl2YXIgc3RyQWJzUGF0
aCA9IHN0ckFic1VSTC5zdWJzdHJpbmcgKGdfRmlsZVByb3RvY29sLmxlbmd0aCwgc3RyQWJzVVJM
Lmxlbmd0aCk7DQoJCQkJc3RyQWJzUGF0aC50b0xvd2VyQ2FzZSAoKTsNCgkJCQlzdHJBZGRyLnRv
TG93ZXJDYXNlICgpOw0KCQkJCWlmIChzdHJBYnNQYXRoID09IHN0ckFkZHIpDQoJCQkJew0KCQkJ
CQlzdHJBZGRyZXNzID0gc3RyQWJzUGF0aDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJ
c3RyQWRkcmVzcyA9IHN0ckFkZHI7DQoJCQkJCQ0KCQkJCQl2YXIgaGxTdWJBZGRyZXNzID0gaGxO
b2RlLnNlbGVjdFNpbmdsZU5vZGUoIkhMVVJMOlN1YkFkZHJlc3MvdGV4dG5vZGUoKSIpOw0KCQkJ
CQlpZiAoaGxTdWJBZGRyZXNzICE9IG51bGwgJiYgaGxTdWJBZGRyZXNzLnRleHQubGVuZ3RoID4g
MCkNCgkJCQkJew0KCQkJCQkJc3RyQWRkcmVzcyArPSAnIyc7DQoJCQkJCQlzdHJBZGRyZXNzICs9
IGhsU3ViQWRkcmVzcy50ZXh0Ow0KCQkJCQl9DQoNCgkJCQkJdmFyIGhsRXh0cmFJbmZvID0gaGxO
b2RlLnNlbGVjdFNpbmdsZU5vZGUoIkhMVVJMOkV4dHJhSW5mby90ZXh0bm9kZSgpIik7DQoJCQkJ
CWlmIChobEV4dHJhSW5mbyAhPSBudWxsICYmIGhsRXh0cmFJbmZvLnRleHQubGVuZ3RoID4gMCkN
CgkJCQkJew0KCQkJCQkJc3RyQWRkcmVzcyArPSAnPyc7DQoJCQkJCQlzdHJBZGRyZXNzICs9IGhs
RXh0cmFJbmZvLnRleHQ7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJ
c3RyQWRkcmVzcyA9IHN0ckFic1VSTDsNCgkJCX0JCQ0KDQoJCQlzdHJBZGRyZXNzID0gSFRNTEVz
Y2FwZSAoc3RyQWRkcmVzcyk7DQoJCQlobE9iai5IeXBlcmxpbmsgKz0gc3RyQWRkcmVzczsNCgkJ
fQ0KCQllbHNlDQoJCXsNCgkJCWhsQWRkcmVzcyA9IGhsTm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJI
TFVSTDpTdWJBZGRyZXNzL3RleHRub2RlKCkiKTsNCgkJCWlmIChobEFkZHJlc3MgIT0gbnVsbCAm
JiBobEFkZHJlc3MudGV4dC5sZW5ndGggPiAwKQ0KCQkJew0KCQkJCXN0ckFkZHJlc3MgPSBobEFk
ZHJlc3MudGV4dDsNCg0KCQkJCXZhciBwYWdlU2hhcGVTZXAgPSBzdHJBZGRyZXNzLmxhc3RJbmRl
eE9mICgnLycpOw0KCQkJCWlmIChwYWdlU2hhcGVTZXAgPiAwKQ0KCQkJCXsNCgkJCQkJaWYgKFBh
Z2VJbmRleEZyb21OYW1lIChzdHJBZGRyZXNzKSA8IDApDQoJCQkJCXsNCgkJCQkJCXN0ckFkZHJl
c3MgPSB1bmVzY2FwZSAoc3RyQWRkcmVzcyk7DQoJCQkJCQlpZiAoUGFnZUluZGV4RnJvbU5hbWUg
KHN0ckFkZHJlc3MpIDwgMCkNCgkJCQkJCXsNCgkJCQkJCQlzdHJBZGRyZXNzID0gc3RyQWRkcmVz
cy5zdWJzdHJpbmcgKDAsIHN0ckFkZHJlc3MubGFzdEluZGV4T2YgKCcvJykpOw0KCQkJCQkJfQ0K
CQkJCQl9DQoJCQkJfQ0KDQoJCQkJdmFyIHBhZ2VJbmRleCA9IFBhZ2VJbmRleEZyb21OYW1lIChz
dHJBZGRyZXNzKTsNCg0KCQkJCWhsT2JqLkRvRnVuY3Rpb24gPSAiR29Ub1BhZ2UgKCIgKyBwYWdl
SW5kZXggKyAiKTsiOw0KCQkJCXN0ckFkZHJlc3MgPSBIVE1MRXNjYXBlIChzdHJBZGRyZXNzKTsN
CgkJCQlobE9iai5EZXNjID0gc3RyQWRkcmVzczsNCgkJCX0NCgkJfQ0KDQoJCWhsRGVzYyA9IGhs
Tm9kZS5zZWxlY3RTaW5nbGVOb2RlKCJITFVSTDpEZXNjcmlwdGlvbi90ZXh0bm9kZSgpIik7DQoJ
CWlmIChobERlc2MgIT0gbnVsbCAmJiBobERlc2MudGV4dC5sZW5ndGggPiAwKQ0KCQl7DQoJCQlo
bE9iai5EZXNjID0gSFRNTEVzY2FwZSAoaGxEZXNjLnRleHQpOw0KCQl9DQoJCWVsc2UNCgkJew0K
CQkJaGxPYmouRGVzYyA9IHN0ckFkZHJlc3M7DQoJCX0NCgkNCgkJdmFyIGhsTmV3V2luZG93ID0g
aGxOb2RlLnNlbGVjdFNpbmdsZU5vZGUoIkhMVVJMOk5ld1dpbmRvdy90ZXh0bm9kZSgpIik7DQoJ
CWlmIChobE5ld1dpbmRvdyAhPSBudWxsICYmIGhsTmV3V2luZG93LnRleHQubGVuZ3RoID4gMCkN
CgkJew0KCQkJaGxPYmouTmV3V2luZG93ID0gKGhsTmV3V2luZG93LnRleHQgPT0gIjEiKTsNCgkJ
fQkJDQoJfQ0KDQoJcmV0dXJuIGhsT2JqOw0KfQ0KDQoNCgkJPC9zY3JpcHQ+DQoJPC9oZWFkPg0K
CQ0KCTxmcmFtZXNldCBpZD0iZnJtc3RPdXRlciIgY29scz0iMjM3LCoiIHRpdGxlPSJNaWdyYXRp
b24tZGMxIj4NCgkJPGZyYW1lIHNyYz0iTWlncmF0aW9uLWRjMV9maWxlcy90b29sYmFyLmh0bSIg
bmFtZT0iZnJtVG9vbGJhciIgaWQ9ImZybVRvb2xiYXIiIHRpdGxlPSJUaGlzIGZyYW1lIGNvbnRh
aW5zIHRvb2xzIGZvciBtYW5pcHVsYXRpbmcgeW91ciBkcmF3aW5nLiIgZnJhbWVib3JkZXI9IjYi
IGJvcmRlcmNvbG9yPSIjOTk5OTk5IiBzY3JvbGxpbmc9Im5vIiBtYXJnaW5oZWlnaHQ9IjAiIG1h
cmdpbndpZHRoPSIwIiA+DQoJCTxmcmFtZSBzcmM9Ik1pZ3JhdGlvbi1kYzFfZmlsZXMvZ2lmXzEu
aHRtIiBuYW1lPSJmcm1EcmF3aW5nIiB0aXRsZT0iVGhpcyBmcmFtZSBjb250YWlucyB0aGUgcGFn
ZXMgb2YgeW91ciBkcmF3aW5nLiIgbWFyZ2luaGVpZ2h0PSIxMCIgbWFyZ2lud2lkdGg9IjEwIiBv
bmxvYWQ9ImlmIChwYXJlbnQuaXNVcExldmVsKSBGcmFtZVBhZ2VMb2FkZWQoKSIgPg0KDQoJCTxu
b2ZyYW1lcz4NCgkJCTxib2R5Pg0KDQoJCQkJPGgxPk1pZ3JhdGlvbi1kYzE8L2gxPg0KCQkJCTx1
bD4NCgkJCQk8bGk+PGEgaHJlZj0iTWlncmF0aW9uLWRjMV9maWxlcy9naWZfMS5odG0iPlBhZ2Ut
MTwvYT48L2xpPgoNCgkJCQk8L3VsPg0KCQkJPC9ib2R5Pg0KCQk8L25vZnJhbWVzPg0KCTwvZnJh
bWVzZXQ+DQoJDQo8L2h0bWw+DQoK

------_=_NextPart_001_01C88EE5.EB9DD028--
