-
Notifications
You must be signed in to change notification settings - Fork 6
/
fafsa-uuid-search.html
163 lines (140 loc) · 49.9 KB
/
fafsa-uuid-search.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en" dir="ltr"><head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>FAFSA UUID Search – 2024-25 FAFSA</title>
<!-- load 'https://cdn.jsdelivr.net/npm/[email protected]/build/pure-min.css' inline -->
<link rel="stylesheet" href="data:text/css;base64,aHRtbCB7IGxpbmUtaGVpZ2h0OiAxLjE1OyB0ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB9CmJvZHkgeyBtYXJnaW46IDBweDsgfQptYWluIHsgZGlzcGxheTogYmxvY2s7IH0KaDEgeyBmb250LXNpemU6IDJlbTsgbWFyZ2luOiAwLjY3ZW0gMHB4OyB9CmhyIHsgYm94LXNpemluZzogY29udGVudC1ib3g7IGhlaWdodDogMHB4OyBvdmVyZmxvdzogdmlzaWJsZTsgfQpwcmUgeyBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMWVtOyB9CmEgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQphYmJyW3RpdGxlXSB7IGJvcmRlci1ib3R0b206IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgfQpiLCBzdHJvbmcgeyBmb250LXdlaWdodDogYm9sZGVyOyB9CmNvZGUsIGtiZCwgc2FtcCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAxZW07IH0Kc21hbGwgeyBmb250LXNpemU6IDgwJTsgfQpzdWIsIHN1cCB7IGZvbnQtc2l6ZTogNzUlOyBsaW5lLWhlaWdodDogMDsgcG9zaXRpb246IHJlbGF0aXZlOyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IH0Kc3ViIHsgYm90dG9tOiAtMC4yNWVtOyB9CnN1cCB7IHRvcDogLTAuNWVtOyB9CmltZyB7IGJvcmRlci1zdHlsZTogbm9uZTsgfQpidXR0b24sIGlucHV0LCBvcHRncm91cCwgc2VsZWN0LCB0ZXh0YXJlYSB7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IDEwMCU7IGxpbmUtaGVpZ2h0OiAxLjE1OyBtYXJnaW46IDBweDsgfQpidXR0b24sIGlucHV0IHsgb3ZlcmZsb3c6IHZpc2libGU7IH0KYnV0dG9uLCBzZWxlY3QgeyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgfQpbdHlwZT0iYnV0dG9uIl0sIFt0eXBlPSJyZXNldCJdLCBbdHlwZT0ic3VibWl0Il0sIGJ1dHRvbiB7IGFwcGVhcmFuY2U6IGJ1dHRvbjsgfQpmaWVsZHNldCB7IHBhZGRpbmc6IDAuMzVlbSAwLjc1ZW0gMC42MjVlbTsgfQpsZWdlbmQgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBjb2xvcjogaW5oZXJpdDsgZGlzcGxheTogdGFibGU7IG1heC13aWR0aDogMTAwJTsgcGFkZGluZzogMHB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyB9CnByb2dyZXNzIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9CnRleHRhcmVhIHsgb3ZlcmZsb3c6IGF1dG87IH0KW3R5cGU9ImNoZWNrYm94Il0sIFt0eXBlPSJyYWRpbyJdIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgcGFkZGluZzogMHB4OyB9Clt0eXBlPSJudW1iZXIiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwgW3R5cGU9Im51bWJlciJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHsgaGVpZ2h0OiBhdXRvOyB9Clt0eXBlPSJzZWFyY2giXSB7IGFwcGVhcmFuY2U6IHRleHRmaWVsZDsgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IH0KW3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsgYXBwZWFyYW5jZTogbm9uZTsgfQo6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHsgYXBwZWFyYW5jZTogYnV0dG9uOyBmb250OiBpbmhlcml0OyB9CmRldGFpbHMgeyBkaXNwbGF5OiBibG9jazsgfQpzdW1tYXJ5IHsgZGlzcGxheTogbGlzdC1pdGVtOyB9CnRlbXBsYXRlIHsgZGlzcGxheTogbm9uZTsgfQpbaGlkZGVuXSB7IGRpc3BsYXk6IG5vbmU7IH0KaHRtbCB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyB9Ci5oaWRkZW4sIFtoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5wdXJlLWltZyB7IG1heC13aWR0aDogMTAwJTsgaGVpZ2h0OiBhdXRvOyBkaXNwbGF5OiBibG9jazsgfQoucHVyZS1nIHsgZGlzcGxheTogZmxleDsgZmxleC1mbG93OiB3cmFwOyBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OyB9Ci5wdXJlLXUgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KLnB1cmUtdS0xLCAucHVyZS11LTEtMSwgLnB1cmUtdS0xLTEyLCAucHVyZS11LTEtMiwgLnB1cmUtdS0xLTI0LCAucHVyZS11LTEtMywgLnB1cmUtdS0xLTQsIC5wdXJlLXUtMS01LCAucHVyZS11LTEtNiwgLnB1cmUtdS0xLTgsIC5wdXJlLXUtMTAtMjQsIC5wdXJlLXUtMTEtMTIsIC5wdXJlLXUtMTEtMjQsIC5wdXJlLXUtMTItMjQsIC5wdXJlLXUtMTMtMjQsIC5wdXJlLXUtMTQtMjQsIC5wdXJlLXUtMTUtMjQsIC5wdXJlLXUtMTYtMjQsIC5wdXJlLXUtMTctMjQsIC5wdXJlLXUtMTgtMjQsIC5wdXJlLXUtMTktMjQsIC5wdXJlLXUtMi0yNCwgLnB1cmUtdS0yLTMsIC5wdXJlLXUtMi01LCAucHVyZS11LTIwLTI0LCAucHVyZS11LTIxLTI0LCAucHVyZS11LTIyLTI0LCAucHVyZS11LTIzLTI0LCAucHVyZS11LTI0LTI0LCAucHVyZS11LTMtMjQsIC5wdXJlLXUtMy00LCAucHVyZS11LTMtNSwgLnB1cmUtdS0zLTgsIC5wdXJlLXUtNC0yNCwgLnB1cmUtdS00LTUsIC5wdXJlLXUtNS0xMiwgLnB1cmUtdS01LTI0LCAucHVyZS11LTUtNSwgLnB1cmUtdS01LTYsIC5wdXJlLXUtNS04LCAucHVyZS11LTYtMjQsIC5wdXJlLXUtNy0xMiwgLnB1cmUtdS03LTI0LCAucHVyZS11LTctOCwgLnB1cmUtdS04LTI0LCAucHVyZS11LTktMjQgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IHdvcmQtc3BhY2luZzogbm9ybWFsOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LXJlbmRlcmluZzogYXV0bzsgfQoucHVyZS11LTEtMjQgeyB3aWR0aDogNC4xNjY3JTsgfQoucHVyZS11LTEtMTIsIC5wdXJlLXUtMi0yNCB7IHdpZHRoOiA4LjMzMzMlOyB9Ci5wdXJlLXUtMS04LCAucHVyZS11LTMtMjQgeyB3aWR0aDogMTIuNSU7IH0KLnB1cmUtdS0xLTYsIC5wdXJlLXUtNC0yNCB7IHdpZHRoOiAxNi42NjY3JTsgfQoucHVyZS11LTEtNSB7IHdpZHRoOiAyMCU7IH0KLnB1cmUtdS01LTI0IHsgd2lkdGg6IDIwLjgzMzMlOyB9Ci5wdXJlLXUtMS00LCAucHVyZS11LTYtMjQgeyB3aWR0aDogMjUlOyB9Ci5wdXJlLXUtNy0yNCB7IHdpZHRoOiAyOS4xNjY3JTsgfQoucHVyZS11LTEtMywgLnB1cmUtdS04LTI0IHsgd2lkdGg6IDMzLjMzMzMlOyB9Ci5wdXJlLXUtMy04LCAucHVyZS11LTktMjQgeyB3aWR0aDogMzcuNSU7IH0KLnB1cmUtdS0yLTUgeyB3aWR0aDogNDAlOyB9Ci5wdXJlLXUtMTAtMjQsIC5wdXJlLXUtNS0xMiB7IHdpZHRoOiA0MS42NjY3JTsgfQoucHVyZS11LTExLTI0IHsgd2lkdGg6IDQ1LjgzMzMlOyB9Ci5wdXJlLXUtMS0yLCAucHVyZS11LTEyLTI0IHsgd2lkdGg6IDUwJTsgfQoucHVyZS11LTEzLTI0IHsgd2lkdGg6IDU0LjE2NjclOyB9Ci5wdXJlLXUtMTQtMjQsIC5wdXJlLXUtNy0xMiB7IHdpZHRoOiA1OC4zMzMzJTsgfQoucHVyZS11LTMtNSB7IHdpZHRoOiA2MCU7IH0KLnB1cmUtdS0xNS0yNCwgLnB1cmUtdS01LTggeyB3aWR0aDogNjIuNSU7IH0KLnB1cmUtdS0xNi0yNCwgLnB1cmUtdS0yLTMgeyB3aWR0aDogNjYuNjY2NyU7IH0KLnB1cmUtdS0xNy0yNCB7IHdpZHRoOiA3MC44MzMzJTsgfQoucHVyZS11LTE4LTI0LCAucHVyZS11LTMtNCB7IHdpZHRoOiA3NSU7IH0KLnB1cmUtdS0xOS0yNCB7IHdpZHRoOiA3OS4xNjY3JTsgfQoucHVyZS11LTQtNSB7IHdpZHRoOiA4MCU7IH0KLnB1cmUtdS0yMC0yNCwgLnB1cmUtdS01LTYgeyB3aWR0aDogODMuMzMzMyU7IH0KLnB1cmUtdS0yMS0yNCwgLnB1cmUtdS03LTggeyB3aWR0aDogODcuNSU7IH0KLnB1cmUtdS0xMS0xMiwgLnB1cmUtdS0yMi0yNCB7IHdpZHRoOiA5MS42NjY3JTsgfQoucHVyZS11LTIzLTI0IHsgd2lkdGg6IDk1LjgzMzMlOyB9Ci5wdXJlLXUtMSwgLnB1cmUtdS0xLTEsIC5wdXJlLXUtMjQtMjQsIC5wdXJlLXUtNS01IHsgd2lkdGg6IDEwMCU7IH0KLnB1cmUtYnV0dG9uIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBsaW5lLWhlaWdodDogbm9ybWFsOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGN1cnNvcjogcG9pbnRlcjsgLXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7IHVzZXItc2VsZWN0OiBub25lOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9Ci5wdXJlLWJ1dHRvbi1ncm91cCB7IGxldHRlci1zcGFjaW5nOiAtMC4zMWVtOyB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVzcGVlZDsgfQoucHVyZS1idXR0b24tZ3JvdXAgLnB1cmUtYnV0dG9uIHsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgd29yZC1zcGFjaW5nOiBub3JtYWw7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtcmVuZGVyaW5nOiBhdXRvOyB9Ci5wdXJlLWJ1dHRvbiB7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IDEwMCU7IHBhZGRpbmc6IDAuNWVtIDFlbTsgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsgYm9yZGVyOiBub25lIHRyYW5zcGFyZW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjMwLCAyMzAsIDIzMCk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLXJhZGl1czogMnB4OyB9Ci5wdXJlLWJ1dHRvbi1ob3ZlciwgLnB1cmUtYnV0dG9uOmZvY3VzLCAucHVyZS1idXR0b246aG92ZXIgeyBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4wNSkgNDAlLCByZ2JhKDAsIDAsIDAsIDAuMSkpOyB9Ci5wdXJlLWJ1dHRvbjpmb2N1cyB7IG91dGxpbmU6IDBweDsgfQoucHVyZS1idXR0b24tYWN0aXZlLCAucHVyZS1idXR0b246YWN0aXZlIHsgYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjE1KSAwcHggMHB4IDBweCAxcHggaW5zZXQsIHJnYmEoMCwgMCwgMCwgMC4yKSAwcHggMHB4IDZweCBpbnNldDsgYm9yZGVyLWNvbG9yOiByZ2IoMCwgMCwgMCk7IH0KLnB1cmUtYnV0dG9uLWRpc2FibGVkLCAucHVyZS1idXR0b24tZGlzYWJsZWQ6YWN0aXZlLCAucHVyZS1idXR0b24tZGlzYWJsZWQ6Zm9jdXMsIC5wdXJlLWJ1dHRvbi1kaXNhYmxlZDpob3ZlciwgLnB1cmUtYnV0dG9uW2Rpc2FibGVkXSB7IGJvcmRlcjogbm9uZTsgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgb3BhY2l0eTogMC40OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyBib3gtc2hhZG93OiBub25lOyBwb2ludGVyLWV2ZW50czogbm9uZTsgfQoucHVyZS1idXR0b24taGlkZGVuIHsgZGlzcGxheTogbm9uZTsgfQoucHVyZS1idXR0b24tcHJpbWFyeSwgLnB1cmUtYnV0dG9uLXNlbGVjdGVkLCBhLnB1cmUtYnV0dG9uLXByaW1hcnksIGEucHVyZS1idXR0b24tc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgMTIwLCAyMzEpOyBjb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyB9Ci5wdXJlLWJ1dHRvbi1ncm91cCAucHVyZS1idXR0b24geyBtYXJnaW46IDBweDsgYm9yZGVyLXJhZGl1czogMHB4OyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMik7IH0KLnB1cmUtYnV0dG9uLWdyb3VwIC5wdXJlLWJ1dHRvbjpmaXJzdC1jaGlsZCB7IGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OyB9Ci5wdXJlLWJ1dHRvbi1ncm91cCAucHVyZS1idXR0b246bGFzdC1jaGlsZCB7IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7IGJvcmRlci1yaWdodDogbm9uZTsgfQoucHVyZS1mb3JtIGlucHV0W3R5cGU9ImNvbG9yIl0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0iZGF0ZSJdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0iZGF0ZXRpbWUiXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJlbWFpbCJdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9Im1vbnRoIl0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0ibnVtYmVyIl0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0icGFzc3dvcmQiXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJzZWFyY2giXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJ0ZWwiXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJ0ZXh0Il0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0idGltZSJdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9InVybCJdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9IndlZWsiXSwgLnB1cmUtZm9ybSBzZWxlY3QsIC5wdXJlLWZvcm0gdGV4dGFyZWEgeyBwYWRkaW5nOiAwLjVlbSAwLjZlbTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjA0LCAyMDQsIDIwNCk7IGJveC1zaGFkb3c6IHJnYigyMjEsIDIyMSwgMjIxKSAwcHggMXB4IDNweCBpbnNldDsgYm9yZGVyLXJhZGl1czogNHB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9Ci5wdXJlLWZvcm0gaW5wdXQ6bm90KFt0eXBlXSkgeyBwYWRkaW5nOiAwLjVlbSAwLjZlbTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjA0LCAyMDQsIDIwNCk7IGJveC1zaGFkb3c6IHJnYigyMjEsIDIyMSwgMjIxKSAwcHggMXB4IDNweCBpbnNldDsgYm9yZGVyLXJhZGl1czogNHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9Ci5wdXJlLWZvcm0gaW5wdXRbdHlwZT0iY29sb3IiXSB7IHBhZGRpbmc6IDAuMmVtIDAuNWVtOyB9Ci5wdXJlLWZvcm0gaW5wdXRbdHlwZT0iY29sb3IiXTpmb2N1cywgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJkYXRlIl06Zm9jdXMsIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXTpmb2N1cywgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJkYXRldGltZSJdOmZvY3VzLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9ImVtYWlsIl06Zm9jdXMsIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0ibW9udGgiXTpmb2N1cywgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJudW1iZXIiXTpmb2N1cywgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmZvY3VzLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9InNlYXJjaCJdOmZvY3VzLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9InRlbCJdOmZvY3VzLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9InRleHQiXTpmb2N1cywgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJ0aW1lIl06Zm9jdXMsIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0idXJsIl06Zm9jdXMsIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0id2VlayJdOmZvY3VzLCAucHVyZS1mb3JtIHNlbGVjdDpmb2N1cywgLnB1cmUtZm9ybSB0ZXh0YXJlYTpmb2N1cyB7IG91dGxpbmU6IDBweDsgYm9yZGVyLWNvbG9yOiByZ2IoMTgsIDE1OSwgMjM0KTsgfQoucHVyZS1mb3JtIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzIHsgb3V0bGluZTogMHB4OyBib3JkZXItY29sb3I6IHJnYigxOCwgMTU5LCAyMzQpOyB9Ci5wdXJlLWZvcm0gaW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1cywgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJmaWxlIl06Zm9jdXMsIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0icmFkaW8iXTpmb2N1cyB7IG91dGxpbmU6IHJnYigxOCwgMTU5LCAyMzQpIGF1dG8gMXB4OyB9Ci5wdXJlLWZvcm0gLnB1cmUtY2hlY2tib3gsIC5wdXJlLWZvcm0gLnB1cmUtcmFkaW8geyBtYXJnaW46IDAuNWVtIDBweDsgZGlzcGxheTogYmxvY2s7IH0KLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJjb2xvciJdW2Rpc2FibGVkXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJkYXRlIl1bZGlzYWJsZWRdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl1bZGlzYWJsZWRdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9ImRhdGV0aW1lIl1bZGlzYWJsZWRdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9ImVtYWlsIl1bZGlzYWJsZWRdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9Im1vbnRoIl1bZGlzYWJsZWRdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9Im51bWJlciJdW2Rpc2FibGVkXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJwYXNzd29yZCJdW2Rpc2FibGVkXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJzZWFyY2giXVtkaXNhYmxlZF0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0idGVsIl1bZGlzYWJsZWRdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9InRleHQiXVtkaXNhYmxlZF0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0idGltZSJdW2Rpc2FibGVkXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJ1cmwiXVtkaXNhYmxlZF0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0id2VlayJdW2Rpc2FibGVkXSwgLnB1cmUtZm9ybSBzZWxlY3RbZGlzYWJsZWRdLCAucHVyZS1mb3JtIHRleHRhcmVhW2Rpc2FibGVkXSB7IGN1cnNvcjogbm90LWFsbG93ZWQ7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMzQsIDIzNywgMjM3KTsgY29sb3I6IHJnYigyMDIsIDIxMCwgMjExKTsgfQoucHVyZS1mb3JtIGlucHV0Om5vdChbdHlwZV0pW2Rpc2FibGVkXSB7IGN1cnNvcjogbm90LWFsbG93ZWQ7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMzQsIDIzNywgMjM3KTsgY29sb3I6IHJnYigyMDIsIDIxMCwgMjExKTsgfQoucHVyZS1mb3JtIGlucHV0W3JlYWRvbmx5XSwgLnB1cmUtZm9ybSBzZWxlY3RbcmVhZG9ubHldLCAucHVyZS1mb3JtIHRleHRhcmVhW3JlYWRvbmx5XSB7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMzgsIDIzOCwgMjM4KTsgY29sb3I6IHJnYigxMTksIDExOSwgMTE5KTsgYm9yZGVyLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IH0KLnB1cmUtZm9ybSBpbnB1dDpmb2N1czppbnZhbGlkLCAucHVyZS1mb3JtIHNlbGVjdDpmb2N1czppbnZhbGlkLCAucHVyZS1mb3JtIHRleHRhcmVhOmZvY3VzOmludmFsaWQgeyBjb2xvcjogcmdiKDE4NSwgNzQsIDcyKTsgYm9yZGVyLWNvbG9yOiByZ2IoMjMzLCA1MCwgNDUpOyB9Ci5wdXJlLWZvcm0gaW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1czppbnZhbGlkOmZvY3VzLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9ImZpbGUiXTpmb2N1czppbnZhbGlkOmZvY3VzLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9InJhZGlvIl06Zm9jdXM6aW52YWxpZDpmb2N1cyB7IG91dGxpbmUtY29sb3I6IHJnYigyMzMsIDUwLCA0NSk7IH0KLnB1cmUtZm9ybSBzZWxlY3QgeyBoZWlnaHQ6IDIuMjVlbTsgYm9yZGVyOiAxcHggc29saWQgcmdiKDIwNCwgMjA0LCAyMDQpOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7IH0KLnB1cmUtZm9ybSBzZWxlY3RbbXVsdGlwbGVdIHsgaGVpZ2h0OiBhdXRvOyB9Ci5wdXJlLWZvcm0gbGFiZWwgeyBtYXJnaW46IDAuNWVtIDBweCAwLjJlbTsgfQoucHVyZS1mb3JtIGZpZWxkc2V0IHsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDAuMzVlbSAwcHggMC43NWVtOyBib3JkZXI6IDBweDsgfQoucHVyZS1mb3JtIGxlZ2VuZCB7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgcGFkZGluZzogMC4zZW0gMHB4OyBtYXJnaW4tYm90dG9tOiAwLjNlbTsgY29sb3I6IHJnYig1MSwgNTEsIDUxKTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigyMjksIDIyOSwgMjI5KTsgfQoucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT0iY29sb3IiXSwgLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9ImRhdGUiXSwgLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0sIC5wdXJlLWZvcm0tc3RhY2tlZCBpbnB1dFt0eXBlPSJkYXRldGltZSJdLCAucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT0iZW1haWwiXSwgLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9ImZpbGUiXSwgLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9Im1vbnRoIl0sIC5wdXJlLWZvcm0tc3RhY2tlZCBpbnB1dFt0eXBlPSJudW1iZXIiXSwgLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9InBhc3N3b3JkIl0sIC5wdXJlLWZvcm0tc3RhY2tlZCBpbnB1dFt0eXBlPSJzZWFyY2giXSwgLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9InRlbCJdLCAucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT0idGV4dCJdLCAucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT0idGltZSJdLCAucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT0idXJsIl0sIC5wdXJlLWZvcm0tc3RhY2tlZCBpbnB1dFt0eXBlPSJ3ZWVrIl0sIC5wdXJlLWZvcm0tc3RhY2tlZCBsYWJlbCwgLnB1cmUtZm9ybS1zdGFja2VkIHNlbGVjdCwgLnB1cmUtZm9ybS1zdGFja2VkIHRleHRhcmVhIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMC4yNWVtIDBweDsgfQoucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXQ6bm90KFt0eXBlXSkgeyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAwLjI1ZW0gMHB4OyB9Ci5wdXJlLWZvcm0tYWxpZ25lZCBpbnB1dCwgLnB1cmUtZm9ybS1hbGlnbmVkIHNlbGVjdCwgLnB1cmUtZm9ybS1hbGlnbmVkIHRleHRhcmVhLCAucHVyZS1mb3JtLW1lc3NhZ2UtaW5saW5lIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9Ci5wdXJlLWZvcm0tYWxpZ25lZCB0ZXh0YXJlYSB7IHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KLnB1cmUtZm9ybS1hbGlnbmVkIC5wdXJlLWNvbnRyb2wtZ3JvdXAgeyBtYXJnaW4tYm90dG9tOiAwLjVlbTsgfQoucHVyZS1mb3JtLWFsaWduZWQgLnB1cmUtY29udHJvbC1ncm91cCBsYWJlbCB7IHRleHQtYWxpZ246IHJpZ2h0OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IHdpZHRoOiAxMGVtOyBtYXJnaW46IDBweCAxZW0gMHB4IDBweDsgfQoucHVyZS1mb3JtLWFsaWduZWQgLnB1cmUtY29udHJvbHMgeyBtYXJnaW46IDEuNWVtIDBweCAwcHggMTFlbTsgfQoucHVyZS1mb3JtIC5wdXJlLWlucHV0LXJvdW5kZWQsIC5wdXJlLWZvcm0gaW5wdXQucHVyZS1pbnB1dC1yb3VuZGVkIHsgYm9yZGVyLXJhZGl1czogMmVtOyBwYWRkaW5nOiAwLjVlbSAxZW07IH0KLnB1cmUtZm9ybSAucHVyZS1ncm91cCBmaWVsZHNldCB7IG1hcmdpbi1ib3R0b206IDEwcHg7IH0KLnB1cmUtZm9ybSAucHVyZS1ncm91cCBpbnB1dCwgLnB1cmUtZm9ybSAucHVyZS1ncm91cCB0ZXh0YXJlYSB7IGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAxMHB4OyBtYXJnaW46IDBweCAwcHggLTFweDsgYm9yZGVyLXJhZGl1czogMHB4OyBwb3NpdGlvbjogcmVsYXRpdmU7IHRvcDogLTFweDsgfQoucHVyZS1mb3JtIC5wdXJlLWdyb3VwIGlucHV0OmZvY3VzLCAucHVyZS1mb3JtIC5wdXJlLWdyb3VwIHRleHRhcmVhOmZvY3VzIHsgei1pbmRleDogMzsgfQoucHVyZS1mb3JtIC5wdXJlLWdyb3VwIGlucHV0OmZpcnN0LWNoaWxkLCAucHVyZS1mb3JtIC5wdXJlLWdyb3VwIHRleHRhcmVhOmZpcnN0LWNoaWxkIHsgdG9wOiAxcHg7IGJvcmRlci1yYWRpdXM6IDRweCA0cHggMHB4IDBweDsgbWFyZ2luOiAwcHg7IH0KLnB1cmUtZm9ybSAucHVyZS1ncm91cCBpbnB1dDpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkLCAucHVyZS1mb3JtIC5wdXJlLWdyb3VwIHRleHRhcmVhOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQgeyB0b3A6IDFweDsgYm9yZGVyLXJhZGl1czogNHB4OyBtYXJnaW46IDBweDsgfQoucHVyZS1mb3JtIC5wdXJlLWdyb3VwIGlucHV0Omxhc3QtY2hpbGQsIC5wdXJlLWZvcm0gLnB1cmUtZ3JvdXAgdGV4dGFyZWE6bGFzdC1jaGlsZCB7IHRvcDogLTJweDsgYm9yZGVyLXJhZGl1czogMHB4IDBweCA0cHggNHB4OyBtYXJnaW46IDBweDsgfQoucHVyZS1mb3JtIC5wdXJlLWdyb3VwIGJ1dHRvbiB7IG1hcmdpbjogMC4zNWVtIDBweDsgfQoucHVyZS1mb3JtIC5wdXJlLWlucHV0LTEgeyB3aWR0aDogMTAwJTsgfQoucHVyZS1mb3JtIC5wdXJlLWlucHV0LTMtNCB7IHdpZHRoOiA3NSU7IH0KLnB1cmUtZm9ybSAucHVyZS1pbnB1dC0yLTMgeyB3aWR0aDogNjYlOyB9Ci5wdXJlLWZvcm0gLnB1cmUtaW5wdXQtMS0yIHsgd2lkdGg6IDUwJTsgfQoucHVyZS1mb3JtIC5wdXJlLWlucHV0LTEtMyB7IHdpZHRoOiAzMyU7IH0KLnB1cmUtZm9ybSAucHVyZS1pbnB1dC0xLTQgeyB3aWR0aDogMjUlOyB9Ci5wdXJlLWZvcm0tbWVzc2FnZS1pbmxpbmUgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctbGVmdDogMC4zZW07IGNvbG9yOiByZ2IoMTAyLCAxMDIsIDEwMik7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGZvbnQtc2l6ZTogMC44NzVlbTsgfQoucHVyZS1mb3JtLW1lc3NhZ2UgeyBkaXNwbGF5OiBibG9jazsgY29sb3I6IHJnYigxMDIsIDEwMiwgMTAyKTsgZm9udC1zaXplOiAwLjg3NWVtOyB9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpIHsKICAucHVyZS1mb3JtIGJ1dHRvblt0eXBlPSJzdWJtaXQiXSB7IG1hcmdpbjogMC43ZW0gMHB4IDBweDsgfQogIC5wdXJlLWZvcm0gaW5wdXQ6bm90KFt0eXBlXSksIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0iY29sb3IiXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJkYXRlIl0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJkYXRldGltZSJdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9ImVtYWlsIl0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0ibW9udGgiXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJudW1iZXIiXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJwYXNzd29yZCJdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9InNlYXJjaCJdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9InRlbCJdLCAucHVyZS1mb3JtIGlucHV0W3R5cGU9InRleHQiXSwgLnB1cmUtZm9ybSBpbnB1dFt0eXBlPSJ0aW1lIl0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0idXJsIl0sIC5wdXJlLWZvcm0gaW5wdXRbdHlwZT0id2VlayJdLCAucHVyZS1mb3JtIGxhYmVsIHsgbWFyZ2luLWJvdHRvbTogMC4zZW07IGRpc3BsYXk6IGJsb2NrOyB9CiAgLnB1cmUtZ3JvdXAgaW5wdXQ6bm90KFt0eXBlXSksIC5wdXJlLWdyb3VwIGlucHV0W3R5cGU9ImNvbG9yIl0sIC5wdXJlLWdyb3VwIGlucHV0W3R5cGU9ImRhdGUiXSwgLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSwgLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT0iZGF0ZXRpbWUiXSwgLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT0iZW1haWwiXSwgLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT0ibW9udGgiXSwgLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT0ibnVtYmVyIl0sIC5wdXJlLWdyb3VwIGlucHV0W3R5cGU9InBhc3N3b3JkIl0sIC5wdXJlLWdyb3VwIGlucHV0W3R5cGU9InNlYXJjaCJdLCAucHVyZS1ncm91cCBpbnB1dFt0eXBlPSJ0ZWwiXSwgLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT0idGV4dCJdLCAucHVyZS1ncm91cCBpbnB1dFt0eXBlPSJ0aW1lIl0sIC5wdXJlLWdyb3VwIGlucHV0W3R5cGU9InVybCJdLCAucHVyZS1ncm91cCBpbnB1dFt0eXBlPSJ3ZWVrIl0geyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KICAucHVyZS1mb3JtLWFsaWduZWQgLnB1cmUtY29udHJvbC1ncm91cCBsYWJlbCB7IG1hcmdpbi1ib3R0b206IDAuM2VtOyB0ZXh0LWFsaWduOiBsZWZ0OyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7IH0KICAucHVyZS1mb3JtLWFsaWduZWQgLnB1cmUtY29udHJvbHMgeyBtYXJnaW46IDEuNWVtIDBweCAwcHg7IH0KICAucHVyZS1mb3JtLW1lc3NhZ2UsIC5wdXJlLWZvcm0tbWVzc2FnZS1pbmxpbmUgeyBkaXNwbGF5OiBibG9jazsgZm9udC1zaXplOiAwLjc1ZW07IHBhZGRpbmc6IDAuMmVtIDBweCAwLjhlbTsgfQp9Ci5wdXJlLW1lbnUgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9Ci5wdXJlLW1lbnUtZml4ZWQgeyBwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDBweDsgdG9wOiAwcHg7IHotaW5kZXg6IDM7IH0KLnB1cmUtbWVudS1pdGVtLCAucHVyZS1tZW51LWxpc3QgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0KLnB1cmUtbWVudS1saXN0IHsgbGlzdC1zdHlsZTogbm9uZTsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweDsgfQoucHVyZS1tZW51LWl0ZW0geyBwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4OyBoZWlnaHQ6IDEwMCU7IH0KLnB1cmUtbWVudS1oZWFkaW5nLCAucHVyZS1tZW51LWxpbmsgeyBkaXNwbGF5OiBibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9Ci5wdXJlLW1lbnUtaG9yaXpvbnRhbCB7IHdpZHRoOiAxMDAlOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9Ci5wdXJlLW1lbnUtaG9yaXpvbnRhbCAucHVyZS1tZW51LWxpc3QgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0KLnB1cmUtbWVudS1ob3Jpem9udGFsIC5wdXJlLW1lbnUtaGVhZGluZywgLnB1cmUtbWVudS1ob3Jpem9udGFsIC5wdXJlLW1lbnUtaXRlbSwgLnB1cmUtbWVudS1ob3Jpem9udGFsIC5wdXJlLW1lbnUtc2VwYXJhdG9yIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9Ci5wdXJlLW1lbnUtaXRlbSAucHVyZS1tZW51LWl0ZW0geyBkaXNwbGF5OiBibG9jazsgfQoucHVyZS1tZW51LWNoaWxkcmVuIHsgZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMDAlOyB0b3A6IDBweDsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweDsgei1pbmRleDogMzsgfQoucHVyZS1tZW51LWhvcml6b250YWwgLnB1cmUtbWVudS1jaGlsZHJlbiB7IGxlZnQ6IDBweDsgdG9wOiBhdXRvOyB3aWR0aDogaW5oZXJpdDsgfQoucHVyZS1tZW51LWFjdGl2ZSA+IC5wdXJlLW1lbnUtY2hpbGRyZW4sIC5wdXJlLW1lbnUtYWxsb3ctaG92ZXI6aG92ZXIgPiAucHVyZS1tZW51LWNoaWxkcmVuIHsgZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgfQoucHVyZS1tZW51LWhhcy1jaGlsZHJlbiA+IC5wdXJlLW1lbnUtbGluazo6YWZ0ZXIgeyBwYWRkaW5nLWxlZnQ6IDAuNWVtOyBjb250ZW50OiAi4pa4IjsgZm9udC1zaXplOiBzbWFsbDsgfQoucHVyZS1tZW51LWhvcml6b250YWwgLnB1cmUtbWVudS1oYXMtY2hpbGRyZW4gPiAucHVyZS1tZW51LWxpbms6OmFmdGVyIHsgY29udGVudDogIuKWviI7IH0KLnB1cmUtbWVudS1zY3JvbGxhYmxlIHsgb3ZlcmZsb3c6IGhpZGRlbiBzY3JvbGw7IH0KLnB1cmUtbWVudS1zY3JvbGxhYmxlIC5wdXJlLW1lbnUtbGlzdCB7IGRpc3BsYXk6IGJsb2NrOyB9Ci5wdXJlLW1lbnUtaG9yaXpvbnRhbC5wdXJlLW1lbnUtc2Nyb2xsYWJsZSAucHVyZS1tZW51LWxpc3QgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0KLnB1cmUtbWVudS1ob3Jpem9udGFsLnB1cmUtbWVudS1zY3JvbGxhYmxlIHsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGF1dG8gaGlkZGVuOyBwYWRkaW5nOiAwLjVlbSAwcHg7IH0KLnB1cmUtbWVudS1ob3Jpem9udGFsIC5wdXJlLW1lbnUtY2hpbGRyZW4gLnB1cmUtbWVudS1zZXBhcmF0b3IsIC5wdXJlLW1lbnUtc2VwYXJhdG9yIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBoZWlnaHQ6IDFweDsgbWFyZ2luOiAwLjNlbSAwcHg7IH0KLnB1cmUtbWVudS1ob3Jpem9udGFsIC5wdXJlLW1lbnUtc2VwYXJhdG9yIHsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxLjNlbTsgbWFyZ2luOiAwcHggMC4zZW07IH0KLnB1cmUtbWVudS1ob3Jpem9udGFsIC5wdXJlLW1lbnUtY2hpbGRyZW4gLnB1cmUtbWVudS1zZXBhcmF0b3IgeyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IGF1dG87IH0KLnB1cmUtbWVudS1oZWFkaW5nIHsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgY29sb3I6IHJnYig4NiwgOTMsIDEwMCk7IH0KLnB1cmUtbWVudS1saW5rIHsgY29sb3I6IHJnYigxMTksIDExOSwgMTE5KTsgfQoucHVyZS1tZW51LWNoaWxkcmVuIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyB9Ci5wdXJlLW1lbnUtaGVhZGluZywgLnB1cmUtbWVudS1saW5rIHsgcGFkZGluZzogMC41ZW0gMWVtOyB9Ci5wdXJlLW1lbnUtZGlzYWJsZWQgeyBvcGFjaXR5OiAwLjU7IH0KLnB1cmUtbWVudS1kaXNhYmxlZCAucHVyZS1tZW51LWxpbms6aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgY3Vyc29yOiBkZWZhdWx0OyB9Ci5wdXJlLW1lbnUtYWN0aXZlID4gLnB1cmUtbWVudS1saW5rLCAucHVyZS1tZW51LWxpbms6Zm9jdXMsIC5wdXJlLW1lbnUtbGluazpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMzgsIDIzOCwgMjM4KTsgfQoucHVyZS1tZW51LXNlbGVjdGVkID4gLnB1cmUtbWVudS1saW5rLCAucHVyZS1tZW51LXNlbGVjdGVkID4gLnB1cmUtbWVudS1saW5rOnZpc2l0ZWQgeyBjb2xvcjogcmdiKDAsIDAsIDApOyB9Ci5wdXJlLXRhYmxlIHsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgYm9yZGVyLXNwYWNpbmc6IDBweDsgZW1wdHktY2VsbHM6IHNob3c7IGJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDMsIDIwMywgMjAzKTsgfQoucHVyZS10YWJsZSBjYXB0aW9uIHsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9udDogaXRhbGljIDg1JSAvIDEgYXJpYWwsIHNhbnMtc2VyaWY7IHBhZGRpbmc6IDFlbSAwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgfQoucHVyZS10YWJsZSB0ZCwgLnB1cmUtdGFibGUgdGggeyBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYigyMDMsIDIwMywgMjAzKTsgYm9yZGVyLXRvcC13aWR0aDogMHB4OyBib3JkZXItcmlnaHQtd2lkdGg6IDBweDsgYm9yZGVyLWJvdHRvbS13aWR0aDogMHB4OyBmb250LXNpemU6IGluaGVyaXQ7IG1hcmdpbjogMHB4OyBvdmVyZmxvdzogdmlzaWJsZTsgcGFkZGluZzogMC41ZW0gMWVtOyB9Ci5wdXJlLXRhYmxlIHRoZWFkIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIyNCwgMjI0LCAyMjQpOyBjb2xvcjogcmdiKDAsIDAsIDApOyB0ZXh0LWFsaWduOiBsZWZ0OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyB9Ci5wdXJlLXRhYmxlIHRkIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KLnB1cmUtdGFibGUtb2RkIHRkIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MiwgMjQyLCAyNDIpOyB9Ci5wdXJlLXRhYmxlLXN0cmlwZWQgdHI6bnRoLWNoaWxkKDJuLTEpIHRkIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MiwgMjQyLCAyNDIpOyB9Ci5wdXJlLXRhYmxlLWJvcmRlcmVkIHRkIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigyMDMsIDIwMywgMjAzKTsgfQoucHVyZS10YWJsZS1ib3JkZXJlZCB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0ZCB7IGJvcmRlci1ib3R0b20td2lkdGg6IDBweDsgfQoucHVyZS10YWJsZS1ob3Jpem9udGFsIHRkLCAucHVyZS10YWJsZS1ob3Jpem9udGFsIHRoIHsgYm9yZGVyLXdpZHRoOiAwcHggMHB4IDFweDsgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7IGJvcmRlci1ib3R0b20tY29sb3I6IHJnYigyMDMsIDIwMywgMjAzKTsgfQoucHVyZS10YWJsZS1ob3Jpem9udGFsIHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRkIHsgYm9yZGVyLWJvdHRvbS13aWR0aDogMHB4OyB9" crossorigin="anonymous" />
<style>
:not(:defined) { display:none }
body { padding: 2rem; }
h1 { margin-top: 0; padding-top: 0; }
header {
--header-color: #e8e8e8;
display: flex;
gap: 2rem;
position: sticky;
top: 0;
padding-bottom: 0.5rem;
background-color: white;
&>aside {
display: flex;
gap: 0.5rem;
border-bottom: 2px solid var(--header-color);
&>h3 {
margin: 0;
text-align: center;
writing-mode: vertical-rl;
text-orientation: sideways;
background-color: var(--header-color);
padding: 0.5rem;
transform: rotate(-0.5turn);
}
}
}
label { margin-bottom: 0.5rem; }
.flex { display: flex; gap: 2rem; }
.flex-row { display: flex; flex-direction: row; gap: 2rem; }
.flex-col { display: flex; flex-direction: column; gap: 2rem; }
.hint-caution { color: orange; }
.hint-ready { color: green; }
.search-result-match { color: darkblue; }
.search-result-nomatch { color: darkgrey; }
.search-result-potentially-affected { color: darkred; }
.search-result-unaffected { color: darkgreen; }
.pure-form label {
margin-block: 0.5rem;
}
html:not([data-status]) {
.status-loading { display: none!important; }
.status-some { display: none!important; }
.status-ready { display: none!important; }
}
html[data-status] {
.status-start { display: none!important; }
}
html[data-status='loading'] {
.status-ready { display: none!important; }
}
html[data-status='ready'] {
.status-loading { display: none!important; }
}
table { table-layout: fixed; width: 55rem; }
th.col-uuid {}
th.col-status {}
tbody tr.empty-content:first-child { text-align: center; }
tbody tr.empty-content:not(:first-child) { display: none!important; }
tbody tr.search-result:first-child {
animation: newResult 1s;
}
@keyframes newResult {
from {
background-color: yellow;
}
}
</style>
</head>
<body>
<h1>FAFSA UUID Search Tool</h1>
<header>
<aside style="width: 18rem;">
<h3>Input</h3>
<div class="status-start flex-col" style="gap: 1rem">
<label>
<h4>Select CSV provided by FSA containing FAFSA UUIDs:</h4>
<input type="file" accept=".csv, text/csv" onchange="fafsa_uuid_model.evt_load_csv_of_fafsa_uuids(this.files[0])" />
</label>
</div>
<div id="progress_tgt" class="status-some">
<div><strong>
<span class="status-loading hint-caution">Loading</span>
<span class="status-ready hint-ready">Ready</span>
</strong></div>
<progress class="status-loading" aria-label="Loading FAFSA UUID file…"></progress>
<div>Loaded <span name="uuid_count">?</span> rows</div>
<div class="status-some">Using list of <strong name="semantic">?</strong></div>
</div>
</aside>
<aside class="status-some" style="width: 35rem;">
<h3>Search</h3>
<div>
<form class="pure-form" onsubmit="fafsa_uuid_model.evt_search_form(event)">
<input placeholder="FAFSA UUID" name="uuid_search" size="36" type="text" class="pure-input-rounded" onchange="fafsa_uuid_model.evt_input(event)" />
<button type="submit" class="pure-button">Search</button>
</form>
<details style="margin-block: 0.5rem;">
<summary><h4 style="display:inline-block; margin: 0.5rem 0; ">
Compare against your CSV of FAFSA UUIDS
</h4></summary>
<form class="pure-form pure-form-stacked" onsubmit="fafsa_uuid_model.evt_bulk_search_form(event)">
<input required="" name="bulk_query_file_src" type="file" accept=".txt, .csv, text/csv, text/plain" />
<label>
When returning a matched CSV:
<select name="matching_lines">
<option value="column" checked="">Keep all lines and add a status column</option>
<option value="keep lines">Keep lines that match</option>
<option value="remove lines">Remove lines that match</option>
</select>
</label>
<button type="submit" class="pure-button">Run bulk search</button>
<output id="bulk_search_result"></output>
</form>
</details>
</div>
</aside>
</header>
<table class="pure-table status-some">
<thead>
<tr>
<th class="col-uuid">FAFSA UUID</th>
<th class="col-status">Status</th>
</tr>
</thead>
<tbody id="search_result_tbody">
<tr class="empty-content"><td colspan="2"><i>Please search for a FAFSA UUID</i></td></tr>
</tbody>
</table>
<div class="status-start">
</div>
<!--load './js/uuid-lookup.js' inline -->
<script type="module" src="data:text/javascript;base64,YXN5bmMgZnVuY3Rpb24gKiBhaXRlcl9zdHJlYW0oc3RyZWFtLCBub19kZWZhdWx0KSB7CiAgLy8gYWRhcHRlciBmb3IgUmVhZGFibGVTdHJlYW0gd2hpbGUgYXN5bmNJdGVyYXRvciBpcyBmaW5hbGl6ZWQKICBpZiAoIW5vX2RlZmF1bHQgJiYgc3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkKICAgIHJldHVybiB5aWVsZCAqIHN0cmVhbQoKICBsZXQgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpOwogIHRyeSB7CiAgICBmb3IoOzspIHsKICAgICAgbGV0IHIgPSBhd2FpdCByZWFkZXIucmVhZCgpOwogICAgICBpZiAoci5kb25lKQogICAgICAgIHJldHVybiByLnZhbHVlCiAgICAgIHlpZWxkIHIudmFsdWU7CiAgICB9CiAgfSBmaW5hbGx5IHsKICAgIHJlYWRlci5yZWxlYXNlTG9jaygpOwogIH0KfQoKYXN5bmMgZnVuY3Rpb24gKiBhaXRlcl9yeF9zcGxpdChyeF9zcGxpdCwgYWl0ZXJfdXRmOCkgewogIGxldCBidWYgPSAnJywgdXRmOCA9IG5ldyBUZXh0RGVjb2RlcigndXRmOCcpOwogIGZvciBhd2FpdCAobGV0IHN6IG9mIGFpdGVyX3V0ZjgpIHsKICAgIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIHN6KQogICAgICBzeiA9IHV0ZjguZGVjb2RlKHN6KTsKCiAgICBsZXQgcGFydHMgPSAoYnVmICsgc3opLnNwbGl0KHJ4X3NwbGl0KTsKICAgIGJ1ZiA9IHBhcnRzLnBvcCgpOyAvLyBsYXN0IGVsZW1lbnQgbWF5IGJlIHBhcnRpYWwKICAgIHlpZWxkICogcGFydHM7IC8vIHlpZWxkIGJhdGNoIG9mIGxpbmVzCiAgfQoKICBpZiAoYnVmKSB5aWVsZCBidWY7IC8vIHlpZWxkIGxhc3QgZWxlbWVudCwgaWYgYW55Cn0KCmNvbnN0IGFpdGVyX2xpbmVzID0gYWl0ZXJfdXRmOCA9PgogIGFpdGVyX3J4X3NwbGl0KC9ccj9cbi8sIGFpdGVyX3V0ZjgpOwoKY29uc3QgYWl0ZXJfc3RyZWFtX2xpbmVzID0gc3RyZWFtID0+CiAgYWl0ZXJfbGluZXMoYWl0ZXJfc3RyZWFtKHN0cmVhbSkpOwoKY29uc3QgdD10PT50LGU9dD0+dD8ucmVwbGFjZSgvXy9nLCItIiksbj10PT4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10LHI9dD0+bih0KSYmU3ltYm9sLml0ZXJhdG9yIGluIHQscz10PT5uKHQpJiYhdC5ub2RlVHlwZSYmIXQudG9ET00mJiFyKHQpLGk9KHQsZT0iIik9Pih0LnRleHRDb250ZW50PWUsdCksbyQxPXQ9PmkodCwiIiksbD0odCxlLG4pPT5uPyh0W25dPWUsdCk6T2JqZWN0LmFzc2lnbih0LGUpLGE9dChjdXN0b21FbGVtZW50cyksYyQxPSh0LC4uLmUpPT4odC5hZGRFdmVudExpc3RlbmVyKC4uLmUpLHQpLHU9KHQsZSk9PiIiPT0oZT10LmdldEF0dHJpYnV0ZShlKSl8fGUsZD0odCxlKT0+dC5oYXNBdHRyaWJ1dGUoZSksXz0odCxlLHIpPT4obnVsbD09cnx8ITE9PT1yP3QucmVtb3ZlQXR0cmlidXRlKGUpOm4ocik9PXtzdHlsZToxfVtlXT9sKHRbZV0scik6dC5zZXRBdHRyaWJ1dGUoZSwhMD09PXI/IiI6ciksMSksZj10KHtnZXQodCxuLHIpe2xldCBzPXRbbl07cmV0dXJuIHZvaWQgMD09PXMmJi9bYS16XS8udGVzdChuKSYmKHJbbl09cz10LmJpbmQobnVsbCxlKG4pKSksc319KSxtPSh0LGU9dCk9Pih7X19wcm90b19fOm5ldyBQcm94eSh0LGYpLC4uLmV9KSx3PXQoe2dldDooeyQ6dCxfOm59LHIpPT5yLnRyaW0mJih1KHQsZShyKSk/P3UodCxyKT8/bj8uW3JdKSxoYXM6KHskOnR9LG4pPT5uLnRyaW0mJihkKHQsZShuKSl8fGQodCxuKSksc2V0Oih7JDp0fSxuLHIpPT5fKHQsZShuKSxyKSxkZWxldGVQcm9wZXJ0eTooeyQ6dH0sbik9Pl8odCxlKG4pKSxvd25LZXlzOnQ9PkFycmF5LmZyb20odC4kLmdldEF0dHJpYnV0ZU5hbWVzKCksKGU9PntyZXR1cm4gbj1lLGU9bj8ucmVwbGFjZSgvLS9nLCJfIiksdFtlXT8/PWU7dmFyIG47fSkpfSkseT0odCxlKT0+bmV3IFByb3h5KHskOnQsXzplfSx3KSxnPXQ9PmNsYXNzIGV4dGVuZHMgdHtnZXQgX25zXygpe3JldHVybiB5KHRoaXMsdGhpcy5jb25zdHJ1Y3Rvci5fbnNfKX19O2NvbnN0IHY9QS5zeW09U3ltYm9sLmZvcigiaW1tX3JhZiIpO2xldCB4PTAsJD1uZXcgTWFwO2Z1bmN0aW9uIEEodCxlKXtyZXR1cm4gbnVsbD09dHx8JC5oYXModCl8fCQuc2V0KHQsZSksMD09PXgmJih4PW5ldyBQcm9taXNlKHJlcXVlc3RBbmltYXRpb25GcmFtZSkudGhlbihNKSkseH1mdW5jdGlvbiBNKCl7bGV0IHQ9Wy4uLiQuZW50cmllcygpXTskPW5ldyBNYXAseD0wLHQubWFwKFApO31hc3luYyBmdW5jdGlvbiBQKFt0LGVdKXt0W2F3YWl0IHZdKEEsZSk7fWNvbnN0IE49KHQsZT1kb2N1bWVudCk9PmUucXVlcnlTZWxlY3RvckFsbCh0KSxSPSh0LFtuLHJdLHMsaSk9PigiJCI9PT0ocz1uWzBdKT8oaS56fHw9W10pLnB1c2gocik6Ij0iPT09cz9sKHQscixuLnNwbGl0KCI9IilbMV0pOiJAIj09PXM/ci5jYWxsP3IodCxuKTpyW24uc2xpY2UoMSl8fCJhcHBlbmQiXSh0KTowPT1zP3Q9cjpyPy5jYWxsP2MkMSh0LG4scixyLm9wdCk6Xyh0LGUobiksciksdCk7ZnVuY3Rpb24gRih0LC4uLmUpe2xldCBuPWVbMF07cmV0dXJuIHModCk/dD0obj10KVswXTpzKG4pP2VbMF09bnVsbDpuPW51bGwsbnVsbCE9dCYmKG51bGwhPW4mJigobj1PYmplY3QuZW50cmllcyhuKSkucmVkdWNlKFIsdCksdC5wcmVwZW5kKC4uLlcobi56KSkpLHQuYXBwZW5kKC4uLlcoZSkpKSx0fWNvbnN0IEw9KHQsLi4uZSk9PkYobyQxKHQpLC4uLmUpO2Z1bmN0aW9uKlcodCl7Zm9yKGxldCBlIG9mIHR8fFtdKW51bGwhPWUmJihlPWUudG9ET00/LihlKT8/ZS52YWx1ZU9mKGUpLHIoZSk/eWllbGQqVyhlKTp5aWVsZCBlLm5vZGVUeXBlP2U6IiIrZSk7fWZ1bmN0aW9uIEkodCxlKXtlPXskOiJodG1sIixodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwuLi5lfTtsZXQgbj0obiwuLi5yKT0+RihuLm5vZGVUeXBlP246KChuLHIpPT4oKHI9bi5zcGxpdCgiOiIpKVsxXT9bcixuXT1yOnI9MCx0LmNyZWF0ZUVsZW1lbnROUyhlW3J8fGUuJF0sbikpKShuKSwuLi5yKTtyZXR1cm4gbi5mcmFnbWVudD0oLi4uZSk9PkYodC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbnVsbCwuLi5lKSxuLnRleHQ9ZT0+dC5jcmVhdGVUZXh0Tm9kZShlKSxuLnRhZz1ufWNvbnN0IEs9SShkb2N1bWVudCksWT1tKEspLEI9SShkb2N1bWVudCx7JDoic3ZnIn0pO20oQik7Y29uc3QgSj10PT4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKCI8IURPQ1RZUEUgaHRtbD4iK3QsInRleHQvaHRtbCIpO2Z1bmN0aW9uIFEoKXt2YXIgdD1uZXcgV2Vha01hcCxlPUooIjxzdHlsZT4iKS5oZWFkLmxhc3RDaGlsZCxuPWUuc3R5bGUscj10PT4oZS5zdHlsZT10LGkoZSx0KSkscz10PT4obi5zZXRQcm9wZXJ0eSgiLS12Iix0KSx0JiZuLmdldFByb3BlcnR5VmFsdWUoIi0tdiIpKTtyZXR1cm4gZnVuY3Rpb24oZSwuLi5uKXt2YXIgaSxvLGw9dC5nZXQobz1lKTtpZihudWxsPT1sKXt2YXJ7c3R5bGU6W2FdLHNoZWV0Ontjc3NSdWxlczpbY119fT1yKGUudHJpbT9lOmUuam9pbigidmFyKC0teik7IikpO3IoIiIpLHQuc2V0KGUsbD1hfHxjPzE6MCk7fWlmKCFsKXRocm93IFN5bnRheEVycm9yKCJpbW1fY3NzIGludmFsaWQgdGVtcGxhdGUiKTtpZighby50cmltKXtmb3IoaT0wLG89IiI7aTxlLmxlbmd0aDtpKyspbys9ZVtpXStzKG5baV0pO3MoIiIpO31yZXR1cm4gb319USgpO2NvbnN0IGl0PSh0LGUpPT4hMD09PWVbMF0/KGUuc2hpZnQoKSx0KTpjbGFzcyBleHRlbmRzIHR7fSxhdD0odCwuLi5lKT0+KHQ9aXQodCxlKSxsKHQucHJvdG90eXBlLGVbMF0pLGwodCxlWzFdKSk7YXN5bmMgZnVuY3Rpb24gY3QodCxuLC4uLnIpe2ZvcihsZXQgdCBvZiByKXQmJmF3YWl0IHQudHJpbSYmYS53aGVuRGVmaW5lZCh0KTtyZXR1cm4gYS5kZWZpbmUoZShuKSx0LG4ub3B0aW9ucyksdH1mdW5jdGlvbiB1dCh0LC4uLm4pe3JldHVybiAodD1pdCh0LG4pKS5vYnNlcnZlZEF0dHJpYnV0ZXM9bi5mbGF0KDkpLm1hcChlKS5jb25jYXQodC5vYnNlcnZlZEF0dHJpYnV0ZXN8fFtdKSx0fWNsYXNzIGR0IGV4dGVuZHMgSFRNTEVsZW1lbnR7c3RhdGljIHdpdGgoLi4udCl7cmV0dXJuIGF0KHRoaXMsLi4udCl9c3RhdGljIG9ic2VydmUoLi4udCl7cmV0dXJuIHV0KHRoaXMsLi4udCl9c3RhdGljIGRlZmluZSguLi50KXtyZXR1cm4gY3QodGhpcywuLi50KSx0aGlzfXN0YXRpYyBfd2NfKHQsZSl7cmV0dXJuIHRoaXMud2l0aCh7X3djXzooZSxuLHIpPT50W25dPy4oZSxyKX0sZSYme2FkYXB0OmV9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX3djXyh0aGlzLCJjIik7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fd2NfKHRoaXMsIiIpO31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxlLG4peyExIT09dGhpc1siXiIrdF0/LihlLG4sdCkmJnRoaXMuX3djXyh0aGlzLCJhYyIsW3QsZSxuXSk7fX1jbGFzcyBfdCBleHRlbmRzKGcoZHQpKXtzdGF0aWMgZG9tKHQsZSxuKXtyZXR1cm4gZSYmKG49ey4uLm4sLi4uIm9iamVjdCI9PXR5cGVvZiBlP2U6dGhpcy5hZGFwdChlKX0pLHQudHJpbSYmKHQ9W3RdKSx0aGlzLndpdGgobikuZGVmaW5lKC4uLnQpfX1jb25zdCBodD10PT4odC5jb250ZW50fHx0KS5jbG9uZU5vZGUoITApO2R0Ll93Y18oe2M6dD0+ZnQodCx0LmdldEF0dHJpYnV0ZSgicXVlcnkiKSl9KTtjb25zdCBmdD0odCxlLG49dC5vd25lckRvY3VtZW50KT0+KHQuYXBwZW5kKC4uLkFycmF5LmZyb20oTihlLG4pLGh0KSksdCk7X3QuX3djXyh7Yzp0PT50LnVwZGF0ZT8uKHQuX25zXyx0KX0sKHQ9Pih7dXBkYXRlOnR9KSkpO2NsYXNzIEV0IGV4dGVuZHMoX3QuX3djXyh7Yzp0PT50Ll9yZW5kZXJfKCEwKSxhYzoodCxlKT0+dC5fcmVmcmVzaF8oKSwiIjp0PT50Ll9zdG9wXygpLHI6YXN5bmMgdD0+KGF3YWl0IHQpLl9yZW5kZXJfKCl9LCh0PT4oe3JlbmRlcjp0fSkpKSl7c3RhdGljIGVsZW0odCxlLG4pe3JldHVybiB0aGlzLmRvbSh0LGUse190Z3RfOnQ9PnQuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIiwuLi5ufSl9KX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faW5pdF90Z3RfKHRoaXMuX3RndF8pLGwodGhpcyx0aGlzLl9iaW5kXyh0aGlzKSksdGhpcy5pbml0Py4oLi4udGhpcy5fel8pO31faW5pdF90Z3RfKHQ9dGhpcyl7dD10Lm5vZGVUeXBlP3Q6dCh0aGlzKTtsZXQgZT1bdGhpcy5fbnNfLHRoaXMsdCwtMV07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X3RndF86e2dldDooKT0+ZVsyXSxzZXQ6dD0+e3QucGFyZW50Tm9kZXx8ZVsyXS5hcHBlbmQodCksZVsyXT10O319LF96Xzp7dmFsdWU6ZX19KTt9X3JlbmRlcl8odCl7bGV0IGUsbj10aGlzLl96XyxyPXQmJnRoaXMucmVuZGVyMHx8dGhpcy5yZW5kZXIkfHx0aGlzLnJlbmRlcjt0JiYodGhpcy5yZW5kZXIwPXRoaXMucmVuZGVyMCQpLG5bM109MCxlPXI/LmFwcGx5KHRoaXMsbiksdGhpcy5fc2hvd18oZSk7fV9zdG9wXygpe3RoaXMuX3pfWzNdPTE7bGV0IHQ9dGhpcy5yZW5kZXIkO3QmJihkZWxldGUgdGhpcy5yZW5kZXIkLHQuc3RvcCYmdC5zdG9wKCkpO31fc2hvd18odCxlKXtsZXRbbl09dHlwZW9mIHQscj10aGlzLl90Z3RfO3JldHVybiAiYiI9PW4/dCYmdGhpcy5fcmVmcmVzaF8oKTpudWxsPT10PyJvIj09biYmbyQxKHIpOnQudGhlbj8uKGU/dGhpcy5fYWRkXzp0aGlzLl9zaG93Xyl8fChlP3I6byQxKHIpKS5hcHBlbmQoLi4uVyhbdF0pKX1fYmluZF8odCl7bGV0e193Y186ZSxfel86bn09dCxyPXQuX3Nob3dfLmJpbmQodCk7cmV0dXJuIHtfc2hvd186cixfYWRkXzp0PT5yKHQsMSksX3JlZnJlc2hfOnI9PnI/LnRoZW4/Lih0Ll9yZWZyZXNoXyl8fChuWzNdfHw9ZSh0LCJyIikpfX19Q3QoRXQpO2Z1bmN0aW9uIEN0KHQpe2lmKHRbQS5zeW1dKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e3JhZih0KXtyZXR1cm4gQSh0fHx0aGlzKX1fcmVuZGVyXyh0KXtBKHRoaXMsdCk7fVtBLnN5bV0odCxlKXtzdXBlci5fcmVuZGVyXyhlKTt9fX0KCmNvbnN0IG89KGUsdCk9PmMoZSxVUkwuY3JlYXRlT2JqZWN0VVJMKHQpKSxjPShlLHQpPT5PYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSx7ZG93bmxvYWQ6ZSxocmVmOnR9KTsKCmZ1bmN0aW9uIGNyZWF0ZV91dWlkX3RyaWUocGFyZW50KSB7DQogICAgbGV0IGRlcHRoID0gcGFyZW50ID8gMStwYXJlbnQuZGVwdGggOiAwOw0KICAgIGxldCBpZHgwID0gX3V1aWRfb2Zmc2V0c1tkZXB0aF07DQogICAgbGV0IHNoYXJlZCA9IHBhcmVudD8uc2hhcmVkID8/IHtuX211bHRpOiAwfTsNCg0KICAgIGxldCBub2RlID0ge19fcHJvdG9fXzogX3V1aWRfdHJpZV9wcm90bywNCiAgICAgICAgbjowLCBkZXB0aCwgZGI6IG5ldyBNYXAoKSwgc2hhcmVkLA0KICAgICAgICBrZXlfZm9yOiB1dWlkID0+ICh1dWlkLnV1aWQgPz8gdXVpZCkuc2xpY2UoaWR4MCwgNCArIGlkeDApLA0KICAgIH07DQoNCiAgICBpZiAoZGVwdGggPiAoc2hhcmVkLm1heD8uZGVwdGggPz8gLTEpKQ0KICAgICAgICBzaGFyZWQubWF4ID0ge2RlcHRoLCBub2RlfTsNCiAgICByZXR1cm4gbm9kZQ0KfQ0KDQpjb25zdCBfdXVpZF9vZmZzZXRzID0gWzAsIDQsIDksIDE0LCAxOSwgMjQsIDI4LCAzMl07DQpjb25zdCBfdXVpZF90cmllX3Byb3RvID0gew0KICAgIGxvb2t1cCh1dWlkX3NlYXJjaCwgcmVzdWx0X3BhdGgpIHsNCiAgICAgICAgbGV0IGtleSA9IHRoaXMua2V5X2Zvcih1dWlkX3NlYXJjaCk7DQogICAgICAgIGxldCB0aXAgPSB0aGlzLmRiLmdldChrZXkpOw0KDQogICAgICAgIGlmICghdGlwIHx8IHRpcC51dWlkKSB7DQogICAgICAgICAgICBsZXQgZnVsbF9tYXRjaCA9IHV1aWRfc2VhcmNoID09IHRpcD8udXVpZDsNCiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGxhc3Qgc3RvcCB3aGVuOg0KICAgICAgICAgICAgLy8gKiB1bmRlZmluZWQgZW50cnkNCiAgICAgICAgICAgIC8vICogaXMgc2luZ2xlLWxlYWYgdHJpZSBlbnRyeSAoaGFzIHV1aWQpDQogICAgICAgICAgICBpZiAoIXJlc3VsdF9wYXRoKQ0KICAgICAgICAgICAgICAgIHJldHVybiBmdWxsX21hdGNoICYmIHRpcA0KDQogICAgICAgICAgICByZXN1bHRfcGF0aC5wdXNoKHtrZXksIHRpcCwgZnVsbF9tYXRjaCwgdXVpZF9zZWFyY2h9KTsNCiAgICAgICAgICAgIHJldHVybiByZXN1bHRfcGF0aA0KDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAvLyBpZiB0cmFja2luZyBwYXRoLCBhZGQgdGhpcyBzdGVwDQogICAgICAgICAgICByZXN1bHRfcGF0aD8ucHVzaCh7a2V5LCB0aXB9KTsNCg0KICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgaXMgYSBtdWx0aS1sZWFmIGVudHJ5OyByZWN1cnNlIGZyb20gZGVlcGVyIHRyaWUgbm9kZQ0KICAgICAgICAgICAgcmV0dXJuIHRpcC5sb29rdXAodXVpZF9zZWFyY2gsIHJlc3VsdF9wYXRoKQ0KICAgICAgICB9DQogICAgfSwNCg0KICAgIGFkZF9yZWNvcmQocmVjKSB7DQogICAgICAgIGxldCBrZXkgPSB0aGlzLmtleV9mb3IocmVjLnV1aWQpOw0KICAgICAgICBsZXQgdGlwID0gdGhpcy5kYi5nZXQoa2V5KTsNCiAgICAgICAgdGhpcy5uKys7DQoNCiAgICAgICAgaWYgKCF0aXApIHsNCiAgICAgICAgICAgIC8vIGZpcnN0IGVudHJ5IGF0IHRoaXMga2V5LA0KICAgICAgICAgICAgLy8gYWRkIHNpbmd1bGFyIGxlYWYgbm9kZQ0KICAgICAgICAgICAgdGhpcy5kYi5zZXQoa2V5LCByZWMpOw0KICAgICAgICAgICAgcmV0dXJuIHJlYw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRpcC51dWlkKSB7DQogICAgICAgICAgICAvLyBzaW5ndWxhciBsZWFmIG5vZGUNCiAgICAgICAgICAgIGlmICh0aXAudXVpZCA9PSByZWMudXVpZCkNCiAgICAgICAgICAgICAgICByZXR1cm4gdGlwIC8vIGR1cGxpY2F0ZSBlbnRyeQ0KDQogICAgICAgICAgICAvLyBzZWNvbmQgZW50cnkgYXQgdGhpcyBrZXksDQogICAgICAgICAgICAvLyB0cmFuc2Zvcm0gaW50byBtdWx0aS1lbnRyeSBub2RlDQogICAgICAgICAgICBsZXQgbm9kZSA9IGNyZWF0ZV91dWlkX3RyaWUodGhpcyk7DQogICAgICAgICAgICBub2RlLmFkZF9yZWNvcmQodGlwKTsNCiAgICAgICAgICAgIHRoaXMuZGIuc2V0KGtleSwgbm9kZSk7DQogICAgICAgICAgICB0aGlzLnNoYXJlZC5uX211bHRpKys7DQogICAgICAgICAgICByZXR1cm4gbm9kZS5hZGRfcmVjb3JkKHJlYykNCg0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgLy8gbXVsdGktbGVhZiBub2RlOyBhZGQgdG8gdGhlIGRlZXBlciB0cmllIG5vZGUNCiAgICAgICAgICAgIHJldHVybiB0aXAuYWRkX3JlY29yZChyZWMpDQogICAgICAgIH0NCiAgICB9LA0KfTsKCmNvbnN0IGZhZnNhX3V1aWRfbW9kZWwgPSB7DQogICAgaGlzdG9yeTogbmV3IE1hcCgpLA0KDQogICAgc2VhcmNoKHV1aWRfc2VhcmNoKSB7DQogICAgICAgIGxldCBlbF9zZWFyY2hfcmVzdWx0ID0gdGhpcy5oaXN0b3J5LmdldCh1dWlkX3NlYXJjaCk7DQogICAgICAgIGlmIChudWxsID09IGVsX3NlYXJjaF9yZXN1bHQpIHsNCiAgICAgICAgICAgIGxldCBlbF9zdGF0dXMgPSBZLnRkKCk7DQogICAgICAgICAgICBlbF9zZWFyY2hfcmVzdWx0ID0gWS50cigNCiAgICAgICAgICAgICAgICB7Y2xhc3M6ICdzZWFyY2gtcmVzdWx0J30sDQogICAgICAgICAgICAgICAgWS50ZChgJHt1dWlkX3NlYXJjaH1gKSwNCiAgICAgICAgICAgICAgICBlbF9zdGF0dXMpOw0KICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnNldCh1dWlkX3NlYXJjaCwgZWxfc2VhcmNoX3Jlc3VsdCk7DQoNCiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZV9zdGF0dXModXVpZF9zZWFyY2gsIGVsX3N0YXR1cyk7DQogICAgICAgIH0NCg0KICAgICAgICB3aW5kb3cuc2VhcmNoX3Jlc3VsdF90Ym9keS5wcmVwZW5kKGVsX3NlYXJjaF9yZXN1bHQpOw0KICAgIH0sDQoNCiAgICBfZGV0YWlsX2J5X3NlbWFudGljOiB7DQogICAgICAgIHBvdGVudGlhbGx5X2FmZmVjdGVkOiB7DQogICAgICAgICAgICBsYWJlbDogJ3BvdGVudGlhbGx5IGFmZmVjdGVkIGFwcGxpY2F0aW9ucycsDQogICAgICAgICAgICBtc2dfbWF0Y2g6ICdQb3RlbnRpYWxseSBhZmZlY3RlZCcsDQogICAgICAgICAgICBtc2dfYWJzZW50OiAnVW5hZmZlY3RlZCcsDQogICAgICAgICAgICByZW5kZXJfbWF0Y2goZWxfc3RhdHVzKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIEwoZWxfc3RhdHVzLCB7Y2xhc3M6J3NlYXJjaC1yZXN1bHQtcG90ZW50aWFsbHktYWZmZWN0ZWQnfSwgdGhpcy5tc2dfbWF0Y2gpIH0sDQogICAgICAgICAgICByZW5kZXJfYWJzZW50KGVsX3N0YXR1cykgew0KICAgICAgICAgICAgICAgIHJldHVybiBMKGVsX3N0YXR1cywge2NsYXNzOidzZWFyY2gtcmVzdWx0LXVuYWZmZWN0ZWQnfSwgdGhpcy5tc2dfYWJzZW50KSB9LA0KICAgICAgICB9LA0KICAgICAgICB1bmFmZmVjdGVkOiB7DQogICAgICAgICAgICBsYWJlbDogJ3VuYWZmZWN0ZWQgYXBwbGljYXRpb25zJywNCiAgICAgICAgICAgIG1zZ19tYXRjaDogJ1VuYWZmZWN0ZWQnLA0KICAgICAgICAgICAgbXNnX2Fic2VudDogJ1BvdGVudGlhbGx5IGFmZmVjdGVkJywNCiAgICAgICAgICAgIHJlbmRlcl9tYXRjaChlbF9zdGF0dXMpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gTChlbF9zdGF0dXMsIHtjbGFzczonc2VhcmNoLXJlc3VsdC11bmFmZmVjdGVkJ30sIHRoaXMubXNnX21hdGNoKSB9LA0KICAgICAgICAgICAgcmVuZGVyX2Fic2VudChlbF9zdGF0dXMpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gTChlbF9zdGF0dXMsIHtjbGFzczonc2VhcmNoLXJlc3VsdC1wb3RlbnRpYWxseS1hZmZlY3RlZCd9LCB0aGlzLm1zZ19hYnNlbnQpIH0sDQogICAgICAgIH0sDQogICAgICAgIG5ldXRyYWw6IHsNCiAgICAgICAgICAgIGxhYmVsOiAndW5rbm93biBzZW1hbnRpY3MnLA0KICAgICAgICAgICAgbXNnX21hdGNoOiAnUHJlc2VudCcsDQogICAgICAgICAgICBtc2dfYWJzZW50OiAnTm90IHByZXNlbnQnLA0KICAgICAgICAgICAgcmVuZGVyX21hdGNoKGVsX3N0YXR1cykgew0KICAgICAgICAgICAgICAgIHJldHVybiBMKGVsX3N0YXR1cywge2NsYXNzOidzZWFyY2gtcmVzdWx0LW1hdGNoJ30sIHRoaXMubXNnX21hdGNoKSB9LA0KICAgICAgICAgICAgcmVuZGVyX2Fic2VudChlbF9zdGF0dXMpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gTChlbF9zdGF0dXMsIHtjbGFzczonc2VhcmNoLXJlc3VsdC1ub21hdGNoJ30sIHRoaXMubXNnX2Fic2VudCkgfSwNCiAgICAgICAgfQ0KICAgIH0sDQogICAgYXN5bmMgX3VwZGF0ZV9zdGF0dXModXVpZF9zZWFyY2gsIGVsX3N0YXR1cykgew0KICAgICAgICBmb3IoOyB0cnVlOyBhd2FpdCBBKCkpIHsNCiAgICAgICAgICAgIGxldCBtYXRjaF9mb3VuZCA9IHRoaXMudXVpZF90cmllLmxvb2t1cCh1dWlkX3NlYXJjaCk7DQoNCiAgICAgICAgICAgIGlmIChtYXRjaF9mb3VuZCkNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VtYW50aWMucmVuZGVyX21hdGNoKGVsX3N0YXR1cykNCiAgICAgICAgICAgIGVsc2UgaWYgKCdyZWFkeScgPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQuc3RhdHVzKQ0KICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZW1hbnRpYy5yZW5kZXJfYWJzZW50KGVsX3N0YXR1cykNCiAgICAgICAgICAgIGVsc2UgaWYgKCFlbF9zdGF0dXMuY2xhc3NOYW1lKQ0KICAgICAgICAgICAgICAgIEwoZWxfc3RhdHVzLCB7Y2xhc3M6J2hpbnQtY2F1dGlvbid9LCBZLmkoJyhzZWFyY2hpbmcpJykpOw0KICAgICAgICB9DQogICAgfSwNCg0KICAgIGNsZWFyKCkgew0KICAgICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgTWFwKCk7DQogICAgICAgIEwod2luZG93LnNlYXJjaF9yZXN1bHRfdGJvZHkpOw0KICAgIH0sDQoNCiAgICByZWZyZXNoKCkgew0KICAgICAgICBsZXQgcHJldl9zZWFyY2hlcyA9IHRoaXMuaGlzdG9yeS5rZXlzKCk7DQogICAgICAgIHRoaXMuY2xlYXIoKTsNCg0KICAgICAgICBmb3IgKGxldCB1dWlkIG9mIHByZXZfc2VhcmNoZXMpDQogICAgICAgICAgICB0aGlzLnNlYXJjaCh1dWlkKTsNCiAgICB9LA0KDQogICAgYXN5bmMgZXZ0X2J1bGtfc2VhcmNoX2Zvcm0oZXZ0KSB7DQogICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBjb25zdCB7bWF0Y2hpbmdfbGluZXMsIGJ1bGtfcXVlcnlfZmlsZV9zcmN9ID0gT2JqZWN0LmZyb21FbnRyaWVzKG5ldyBGb3JtRGF0YShldnQudGFyZ2V0KSk7DQogICAgICAgIA0KICAgICAgICAvLyBVc2UgY29uc3RhbnRzIHRvIGtlZXAgc3BlZWR5IHBlcmZvcm1hbmNlIGFuZCByZWFkYWJsZSBjb2RlDQogICAgICAgIGNvbnN0IF9jX2tlZXBfbGluZXMgPSAvXmtlZXAvaS50ZXN0KG1hdGNoaW5nX2xpbmVzKTsNCiAgICAgICAgY29uc3QgX2NfcmVtb3ZlX2xpbmVzID0gL15yZW1vdmUvaS50ZXN0KG1hdGNoaW5nX2xpbmVzKTsNCiAgICAgICAgY29uc3QgX2NfYWRkX2NvbHVtbiA9IC9jb2x1bW4vaS50ZXN0KG1hdGNoaW5nX2xpbmVzKTsNCg0KDQogICAgICAgIGNvbnN0IHV1aWRfdHJpZSA9IHRoaXMudXVpZF90cmllLCBzZW1hbnRpYyA9IHRoaXMuX3NlbWFudGljOw0KICAgICAgICBsZXQgcmVzdWx0X2xpbmVzID0gW107DQogICAgICAgIGZvciBhd2FpdCAobGV0IFt1dWlkX3NlYXJjaCwgbG5fcXVlcnksIGxpbmVfbm9dIG9mIHRoaXMuX2FpdGVyX2J1bGtfcXVlcnlfbGluZXMoYnVsa19xdWVyeV9maWxlX3NyYy5zdHJlYW0oKSkpIHsNCiAgICAgICAgICAgIGlmICghdXVpZF9zZWFyY2ggJiYgMT49bGluZV9ubykgew0KICAgICAgICAgICAgICAgIC8vIExpa2VseSBoZWFkZXIgbGluZSwga2VlcCBpdA0KICAgICAgICAgICAgICAgIGlmIChfY19hZGRfY29sdW1uKQ0KICAgICAgICAgICAgICAgICAgICByZXN1bHRfbGluZXMucHVzaCgnRkFGU0EgVVVJRCBTZWFyY2ggUmVzdWx0LCcpOw0KICAgICAgICAgICAgICAgIHJlc3VsdF9saW5lcy5wdXNoKGxuX3F1ZXJ5LCAnXHJcbicpOw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxldCBtYXRjaCA9IHV1aWRfdHJpZS5sb29rdXAodXVpZF9zZWFyY2gpOw0KICAgICAgICAgICAgaWYgKF9jX2FkZF9jb2x1bW4pIHsNCiAgICAgICAgICAgICAgICBsZXQgbXNnID0gbWF0Y2gNCiAgICAgICAgICAgICAgICAgICAgPyBzZW1hbnRpYy5tc2dfbWF0Y2gNCiAgICAgICAgICAgICAgICAgICAgOiBzZW1hbnRpYy5tc2dfYWJzZW50Ow0KICAgICAgICAgICAgICAgIHJlc3VsdF9saW5lcy5wdXNoKGAiJHttc2d9Iiwke2xuX3F1ZXJ5fVxyXG5gKTsNCg0KICAgICAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggJiYgX2Nfa2VlcF9saW5lcykgfHwgKCFtYXRjaCAmJiBfY19yZW1vdmVfbGluZXMpKSB7DQogICAgICAgICAgICAgICAgcmVzdWx0X2xpbmVzLnB1c2gobG5fcXVlcnksICdcclxuJyk7DQogICAgICAgICAgICB9IA0KDQogICAgICAgICAgICB0aGlzLnNlYXJjaCh1dWlkX3NlYXJjaCk7IC8vIGFsc28gdXBkYXRlIHRoZSBVSQ0KICAgICAgICAgICAgaWYgKDAgPT0gKGxpbmVfbm8gJSAxMDAwKSkNCiAgICAgICAgICAgICAgICBhd2FpdCBBKCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIHsNCiAgICAgICAgICAgIGxldCB7bmFtZSwgdHlwZX0gPSBidWxrX3F1ZXJ5X2ZpbGVfc3JjOw0KICAgICAgICAgICAgbmFtZSA9IGBCdWxrIHNlYXJjaCAke21hdGNoaW5nX2xpbmVzfSAtIEZBRlNBIFVVSUQgLSAke25hbWV9YDsNCg0KICAgICAgICAgICAgbGV0IGRvd25sb2FkX2xpbmsgPSBGKG8obmFtZSwgbmV3IEJsb2IocmVzdWx0X2xpbmVzLCB7dHlwZX0pKSwgbmFtZSk7DQogICAgICAgICAgICBMKHdpbmRvdy5idWxrX3NlYXJjaF9yZXN1bHQsIGRvd25sb2FkX2xpbmspOw0KICAgICAgICB9DQogICAgfSwNCiAgICBhc3luYyAqIF9haXRlcl9idWxrX3F1ZXJ5X2xpbmVzKGZpbGVfc3RyZWFtKSB7DQogICAgICAgIGNvbnN0IHJ4X3V1aWQgPSAvXihbNSJdPykoWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KS87DQogICAgICAgIGxldCBsaW5lX25vPTA7DQogICAgICAgIGZvciBhd2FpdCAobGV0IGxuX3F1ZXJ5IG9mIGFpdGVyX3N0cmVhbV9saW5lcyhmaWxlX3N0cmVhbSkpIHsNCiAgICAgICAgICAgIGxldCBbLHByZWZpeCx1dWlkXSA9IHJ4X3V1aWQuZXhlYyhsbl9xdWVyeSkgfHwgW107DQogICAgICAgICAgICAvLyBpZiAodXVpZCAmJiAnNScgPT0gcHJlZml4KSAvLyBhcHBlYXJzIHRvIGJlIGFuIElTSVIgZmlsZQ0KICAgICAgICAgICAgLy8gaWYgKHV1aWQgJiYgJyInID09IHByZWZpeCkgLy8gYXBwZWFycyB0byBiZSBhIGxlYWRpbmcgcXVvdGUgb2YgQ1NWIGZpbGUNCiAgICAgICAgICAgIHlpZWxkIFt1dWlkLCBsbl9xdWVyeSwgKytsaW5lX25vXTsNCiAgICAgICAgfQ0KICAgIH0sDQoNCiAgICBldnRfc2VhcmNoX2Zvcm0oZXZ0KSB7DQogICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBsZXQgZnJtID0gbmV3IEZvcm1EYXRhKGV2dC50YXJnZXQpOw0KICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2goZnJtLmdldCgndXVpZF9zZWFyY2gnKSkNCiAgICB9LA0KDQogICAgZXZ0X2lucHV0KGV2dCkgew0KICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2goZXZ0LnRhcmdldC52YWx1ZSkNCiAgICB9LA0KDQogICAgYXN5bmMgZXZ0X2xvYWRfY3N2X29mX2ZhZnNhX3V1aWRzKGZpbGUpIHsNCiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZF9jc3Zfb2ZfZmFmc2FfdXVpZHMoDQogICAgICAgICAgICBhaXRlcl9zdHJlYW1fbGluZXMoIGZpbGUuc3RyZWFtKCkgKSApDQogICAgfSwNCg0KICAgIGFzeW5jIGxvYWRfY3N2X29mX2ZhZnNhX3V1aWRzKGFpdGVyX2xpbmVzKSB7DQogICAgICAgIHRoaXMuY2xlYXIoKTsNCiAgICAgICAgbGV0IHN0YXR1c190YXJnZXQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldDsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIC8vIERldGVybWluZSBGQUZTQSBVVUlEIHNlbWFudGljIGZyb20gQ1NWIGhlYWRlciBsaW5lDQogICAgICAgICAgICBsZXQge3ZhbHVlOiBsbl9oZWFkZXJ9ID0gYXdhaXQgYWl0ZXJfbGluZXMubmV4dCgpOw0KICAgICAgICAgICAgY29uc29sZS5sb2coJ0NTViBoZWFkZXI6ICVvJywgbG5faGVhZGVyKTsNCiAgICAgICAgICAgIHRoaXMuX2RldGVybWluZV9jc3Zfc2VtYW50aWMobG5faGVhZGVyKTsNCg0KICAgICAgICAgICAgdGhpcy51dWlkX3RyaWUgPSB3aW5kb3cudXVpZF90cmllID0gY3JlYXRlX3V1aWRfdHJpZSgpOw0KDQogICAgICAgICAgICBsZXQgdHMwID0gbmV3IERhdGUoKTsNCiAgICAgICAgICAgIHN0YXR1c190YXJnZXQuc3RhdHVzID0gJ2xvYWRpbmcnOw0KICAgICAgICAgICAgZm9yIGF3YWl0IChsZXQgbiBvZiB0aGlzLl9haXRlcl9sb2FkX2Nzdl9vZl91dWlkcyhhaXRlcl9saW5lcykpDQogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbG9hZF9wcm9ncmVzc191cGRhdGUodHMwLCB1dWlkX3RyaWUpOw0KICAgICAgICAgICAgYXdhaXQgdGhpcy5fbG9hZF9wcm9ncmVzc191cGRhdGUodHMwLCB1dWlkX3RyaWUpOw0KDQogICAgICAgICAgICBzdGF0dXNfdGFyZ2V0LnN0YXR1cyA9ICdyZWFkeSc7DQogICAgICAgICAgICByZXR1cm4gdXVpZF90cmllDQogICAgICAgIH0gY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgc3RhdHVzX3RhcmdldC5zdGF0dXMgPSAnZXJyb3InOw0KICAgICAgICAgICAgdGhyb3cgZXJyDQogICAgICAgIH0NCiAgICB9LA0KDQogICAgX2RldGVybWluZV9jc3Zfc2VtYW50aWMobG5faGVhZGVyKSB7DQogICAgICAgIGlmIChsbl9oZWFkZXIubWF0Y2goL14oRkFGU0FfVVVJRF9QT1RFTlRJQUxMWV9BRkZFQ1RFRHxGQUZTQV9VVUlEX0FGRkVDVEVEKVxiL2kpKSB7DQogICAgICAgICAgICB0aGlzLnNlbWFudGljID0gJ3BvdGVudGlhbGx5X2FmZmVjdGVkJzsNCiAgICAgICAgICAgIHRoaXMuX3NlbWFudGljID0gdGhpcy5fZGV0YWlsX2J5X3NlbWFudGljLnBvdGVudGlhbGx5X2FmZmVjdGVkOw0KICAgICAgICB9IGVsc2UgaWYgKGxuX2hlYWRlci5tYXRjaCgvXihGQUZTQV9VVUlEX1VOQUZGRUNURUR8RkFGU0FfVVVJRClcYi9pKSkgew0KICAgICAgICAgICAgdGhpcy5zZW1hbnRpYyA9ICd1bmFmZmVjdGVkJzsNCiAgICAgICAgICAgIHRoaXMuX3NlbWFudGljID0gdGhpcy5fZGV0YWlsX2J5X3NlbWFudGljLnVuYWZmZWN0ZWQ7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLnNlbWFudGljID0gJ25ldXRyYWwnOw0KICAgICAgICAgICAgdGhpcy5fc2VtYW50aWMgPSB0aGlzLl9kZXRhaWxfYnlfc2VtYW50aWMubmV1dHJhbDsNCiAgICAgICAgfQ0KICAgICAgICB3aW5kb3cucHJvZ3Jlc3NfdGd0LnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPXNlbWFudGljXScpLnRleHRDb250ZW50ID0gYCR7dGhpcy5fc2VtYW50aWMubGFiZWx9YDsNCiAgICAgICAgd2luZG93LnNlYXJjaF9yZXN1bHRfdGJvZHkucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdzZW1hbnRpYy0nK3RoaXMuc2VtYW50aWMpOw0KICAgICAgICBjb25zb2xlLmxvZygnRkFGU0EgVVVJRCBzZW1hbnRpYzogJW8nLCB0aGlzLnNlbWFudGljKTsNCiAgICAgICAgcmV0dXJuIHRoaXMuc2VtYW50aWMNCiAgICB9LA0KDQogICAgYXN5bmMgX2xvYWRfcHJvZ3Jlc3NfdXBkYXRlKHRzMCwgdXVpZF90cmllKSB7DQogICAgICAgIHdpbmRvdy5wcm9ncmVzc190Z3QucXVlcnlTZWxlY3RvcignW25hbWU9dXVpZF9jb3VudF0nKS50ZXh0Q29udGVudCA9IGAke3V1aWRfdHJpZS5ufWA7DQogICAgICAgIGF3YWl0IEEoKTsNCiAgICB9LA0KDQogICAgX25fcmVwb3J0X2JhdGNoOiA1MDAwLA0KICAgIGFzeW5jICogX2FpdGVyX2xvYWRfY3N2X29mX3V1aWRzKGFpdGVyX2xpbmVzKSB7DQogICAgICAgIGxldCBuX2JhdGNoID0gdGhpcy5fbl9yZXBvcnRfYmF0Y2g7DQogICAgICAgIGxldCBuID0gbl9iYXRjaCA/PyA1MDAwOw0KICAgICAgICBsZXQgdXVpZF90cmllID0gdGhpcy51dWlkX3RyaWU7DQogICAgICAgIGZvciBhd2FpdCAobGV0IGxuIG9mIGFpdGVyX2xpbmVzKSB7DQogICAgICAgICAgICBsZXQgdXVpZCA9IGxuLnNwbGl0KCcsJylbMF0ucmVwbGFjZUFsbCgnIicsICcnKTsNCiAgICAgICAgICAgIHV1aWRfdHJpZS5hZGRfcmVjb3JkKHt1dWlkfSk7DQoNCiAgICAgICAgICAgIGlmICgwID49IC0tbikgew0KICAgICAgICAgICAgICAgIC8vIHlpZWxkIHRvIFVJIHRocmVhZCBhZnRlciBhIGJhdGNoDQogICAgICAgICAgICAgICAgeWllbGQgbiA9IG5fYmF0Y2g7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBjb25zb2xlLmxvZygnRG9uZSBsb2FkaW5nIEZBRlNBIFVVSURzJywgdXVpZF90cmllLnNoYXJlZCwge3V1aWRfdHJpZX0sICk7DQogICAgfQ0KfTsNCndpbmRvdy5mYWZzYV91dWlkX21vZGVsID0gZmFmc2FfdXVpZF9tb2RlbDsK"></script>
</body></html>