@next2d/core 2.6.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +11 -11
- package/src/renderer.worker.inline.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next2d/core",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.1",
|
|
4
4
|
"description": "Next2D Core Package",
|
|
5
5
|
"author": "Toshiyuki Ienaga<ienaga@next2d.app> (https://github.com/ienaga/)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,15 +24,15 @@
|
|
|
24
24
|
"url": "git+https://github.com/Next2D/Player.git"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@next2d/core": "2.6.
|
|
28
|
-
"@next2d/display": "2.6.
|
|
29
|
-
"@next2d/events": "2.6.
|
|
30
|
-
"@next2d/filters": "2.6.
|
|
31
|
-
"@next2d/geom": "2.6.
|
|
32
|
-
"@next2d/media": "2.6.
|
|
33
|
-
"@next2d/net": "2.6.
|
|
34
|
-
"@next2d/text": "2.6.
|
|
35
|
-
"@next2d/ui": "2.6.
|
|
36
|
-
"@next2d/render-queue": "2.6.
|
|
27
|
+
"@next2d/core": "2.6.1",
|
|
28
|
+
"@next2d/display": "2.6.1",
|
|
29
|
+
"@next2d/events": "2.6.1",
|
|
30
|
+
"@next2d/filters": "2.6.1",
|
|
31
|
+
"@next2d/geom": "2.6.1",
|
|
32
|
+
"@next2d/media": "2.6.1",
|
|
33
|
+
"@next2d/net": "2.6.1",
|
|
34
|
+
"@next2d/text": "2.6.1",
|
|
35
|
+
"@next2d/ui": "2.6.1",
|
|
36
|
+
"@next2d/render-queue": "2.6.1"
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const workerInlineUrl = 'data:application/javascript;base64,bGV0IGU9MjA0ODtsZXQgdD00O2xldCBuO2xldCByO2NvbnN0IGE9KGUsdCxuLHI9bnVsbCk9Pntjb25zdCBhPStlO3JldHVybiBpc05hTihhKSYmbnVsbCE9PXI/cjpNYXRoLm1pbihNYXRoLm1heCh0LGlzTmFOKGEpPzA6YSksbil9LG89W10scz0oLi4uZSk9Pntjb25zdCB0PW8ucG9wKCl8fFtdO3JldHVybiBlLmxlbmd0aCYmdC5wdXNoKC4uLmUpLHR9LGk9KGU9bnVsbCk9PntlJiYoZS5sZW5ndGgmJihlLmxlbmd0aD0wKSxvLnB1c2goZSkpfSxjPWU9PihlLS0sZXw9ZT4+MSxlfD1lPj4yLGV8PWU+PjQsZXw9ZT4+OCxlfD1lPj4xNiwrK2UpLGw9W10sdT0oZT0wLHQ9MCxuPTAscj0wKT0+e2NvbnN0IGE9bC5wb3AoKXx8bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gYVswXT1lLGFbMV09dCxhWzJdPW4sYVszXT1yLGF9LGg9ZT0+e2wucHVzaChlKX0sYj1bXSxkPShlPTAsdD0wLG49MCxyPTAsYT0wLG89MCxzPTAsaT0wLGM9MCk9Pntjb25zdCBsPWIucG9wKCl8fG5ldyBGbG9hdDMyQXJyYXkoOSk7cmV0dXJuIGxbMF09ZSxsWzFdPXQsbFsyXT1uLGxbM109cixsWzRdPWEsbFs1XT1vLGxbNl09cyxsWzddPWksbFs4XT1jLGx9LGY9W10sbT0oZT0wLHQ9MCxuPTAscj0wLGE9MCxvPTApPT57Y29uc3Qgcz1mLnBvcCgpfHxuZXcgRmxvYXQzMkFycmF5KDYpO3JldHVybiBzWzBdPWUsc1sxXT10LHNbMl09bixzWzNdPXIsc1s0XT1hLHNbNV09byxzfSx2PWU9PntmLnB1c2goZSl9LF89ZT0+e2NvbnN0IHQ9MS8oZVswXSplWzRdLWVbM10qZVsxXSksbj1lWzNdKmVbN10tZVs0XSplWzZdLHI9ZVsxXSplWzZdLWVbMF0qZVs3XTtyZXR1cm4gZChlWzRdKnQsMC1lWzFdKnQsMCwwLWVbM10qdCxlWzBdKnQsMCxuKnQscip0LDEpfTtsZXQgcD0wLGc9MDtjb25zdCB4PSgpPT5wLEU9KCk9Pmc7bGV0IEE9MTtjb25zdCB5PSgpPT5BLFQ9cygpLFI9cygpLE09KGU9ITEpPT57Y29uc3QgdD1lPzQ6MTA7cmV0dXJuIFQubGVuZ3RoPHQmJihULmxlbmd0aD0wKSxULmxlbmd0aCYmKFIucHVzaChULnNsaWNlKDApKSxULmxlbmd0aD0wKSxSfSx3PShlLHQsbik9PntULnB1c2goZSx0LG4pfSxGPShlLHQpPT57Y29uc3Qgbj1ULmxlbmd0aCxyPStUW24tM10sYT0rVFtuLTJdO3JldHVybiBlPT09ciYmdD09PWF9LCQ9KGUsdCk9PntULmxlbmd0aD9GKGUsdCl8fCgoKGU9ITEpPT57Y29uc3QgdD1lPzQ6MTA7VC5sZW5ndGg8dHx8Ui5wdXNoKFQuc2xpY2UoMCkpLFQubGVuZ3RoPTB9KSgpLHcoZSx0LCExKSk6dyhlLHQsITEpfSxPPShlLHQsbixyKT0+e1QubGVuZ3RofHwkKDAsMCksRihuLHIpfHwodyhlLHQsITApLHcobixyLCExKSl9LFM9bmV3IEZsb2F0MzJBcnJheSgzMiksaz0oZSx0LG4scixhLG8scyxpLGMsbCk9Pntjb25zdCB1PS4xMjUqKGUrMyoobithKStzKSxoPS4xMjUqKHQrMyoocitvKStpKSxiPS4xMjUqKHMrYS1uLWUpLGQ9LjEyNSooaStvLXItdCk7U1tjXT1lLFNbYysxXT10LFNbYysyXT0uNSooZStuKSxTW2MrM109LjUqKHQrciksU1tjKzRdPXUtYixTW2MrNV09aC1kLFNbYys2XT11LFNbYys3XT1oLFNbbF09dSxTW2wrMV09aCxTW2wrMl09dStiLFNbbCszXT1oK2QsU1tsKzRdPS41KihhK3MpLFNbbCs1XT0uNSoobytpKSxTW2wrNl09cyxTW2wrN109aX0sQz0oZSx0LG4scixhLG8scyxpLGMpPT57Y29uc3QgbD0uMTI1KihlKzMqKG4rYSkrcyksdT0uMTI1Kih0KzMqKHIrbykraSk7U1tjXT0uMjUqZSsuNzUqbixTW2MrMV09LjI1KnQrLjc1KnIsU1tjKzJdPWwsU1tjKzNdPXUsU1tjKzRdPS43NSphKy4yNSpzLFNbYys1XT0uNzUqbysuMjUqaSxTW2MrNl09cyxTW2MrN109aX0sUD0oZSx0LG4scixhLG8pPT57aWYoVC5sZW5ndGh8fCQoMCwwKSxGKGEsbykpcmV0dXJuO2NvbnN0IHM9VC5sZW5ndGgsaT0oKGUsdCxuLHIsYSxvLHMsaSk9PihrKGUsdCxuLHIsYSxvLHMsaSwwLDE2KSxrKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSwwLDgpLGsoU1sxNl0sU1sxN10sU1sxOF0sU1sxOV0sU1syMF0sU1syMV0sU1syMl0sU1syM10sMTYsMjQpLEMoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDApLEMoU1s4XSxTWzldLFNbMTBdLFNbMTFdLFNbMTJdLFNbMTNdLFNbMTRdLFNbMTVdLDgpLEMoU1sxNl0sU1sxN10sU1sxOF0sU1sxOV0sU1syMF0sU1syMV0sU1syMl0sU1syM10sMTYpLEMoU1syNF0sU1syNV0sU1syNl0sU1syN10sU1syOF0sU1syOV0sU1szMF0sU1szMV0sMjQpLFMpKSgrVFtzLTNdLCtUW3MtMl0sZSx0LG4scixhLG8pO2ZvcihsZXQgZT0wOzMyPmU7KU8oaVtlKytdLGlbZSsrXSxpW2UrK10saVtlKytdKX0sQj1bXSxJPWU9PntsZXQgdD0tMSxuPUIubGVuZ3RoO2Zvcig7TWF0aC5hYnMobi10KT4xOyl7Y29uc3Qgcj1NYXRoLmZsb29yKChuK3QpLzIpO2U8PUJbcl0uYXJlYT9uPXI6dD1yfXJldHVybiBufSxMPWU9PntuLmRlbGV0ZVRleHR1cmUoZS5yZXNvdXJjZSl9LFU9W10sTj1bXTtsZXQgRDtsZXQgaj1udWxsO2xldCBYPW51bGw7bGV0IHo9bnVsbDtjb25zdCBWPWU9Pnt6PWV9LFc9KCk9Pno7bGV0IEc9ITE7Y29uc3QgWT1lPT57Rz1lfSxxPSgpPT5HO2xldCBLPW51bGwsSD1udWxsLFo9bnVsbCxRPW51bGw7Y29uc3QgSj0oKT0+SCxlZT0oZSx0PSEwKT0+e3ZhciByO2UubXNhYT8oKGU9PntpZihCLmluZGV4T2YoZSk+LTEpcmV0dXJuO2NvbnN0IHQ9SShlLmFyZWEpO2UuZGlydHk9ITAsQi5zcGxpY2UodCwwLGUpfSkoZS5jb2xvciksZS5jb2xvcj1udWxsLGUuc3RlbmNpbD1udWxsKToodCYmTChlLnRleHR1cmUpLGUudGV4dHVyZT1udWxsLHI9ZS5zdGVuY2lsLFUuaW5kZXhPZihyKT4tMXx8KFUubGVuZ3RoPjEwP24uZGVsZXRlUmVuZGVyYnVmZmVyKHIucmVzb3VyY2UpOihyLmRpcnR5PSEwLFUucHVzaChyKSkpLGUuc3RlbmNpbD1udWxsKSxOLnB1c2goZSl9O2xldCB0ZT0wO2NvbnN0IG5lPWU9PntpZighQi5sZW5ndGgpcmV0dXJuKCgpPT57Y29uc3QgZT17aWQ6MCxyZXNvdXJjZTpuLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHdpZHRoOjAsaGVpZ2h0OjAsYXJlYTowLGRpcnR5OiExfTtyZXR1cm57cmVzb3VyY2U6bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxzdGVuY2lsOmUsd2lkdGg6MCxoZWlnaHQ6MCxhcmVhOjAsZGlydHk6ITF9fSkoKTtjb25zdCB0PUkoZSk7aWYodDxCLmxlbmd0aCl7Y29uc3QgZT1CW3RdO3JldHVybiBCLnNwbGljZSh0LDEpLGV9Y29uc3Qgcj1CLnNoaWZ0KCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJ0aGUgY29sb3IgYnVmZmVyIGlzIHZvaWQuIik7cmV0dXJuIHJ9O2xldCByZT0wO2NvbnN0IGFlPShlLHQpPT57aWYoIVUubGVuZ3RoKXJldHVybntpZDpyZSsrLHJlc291cmNlOm4uY3JlYXRlUmVuZGVyYnVmZmVyKCksd2lkdGg6MCxoZWlnaHQ6MCxhcmVhOjAsZGlydHk6ITF9O2ZvcihsZXQgbj0wO248VS5sZW5ndGg7KytuKXtjb25zdCByPVVbbl07aWYoci53aWR0aD09PWUmJnIuaGVpZ2h0PT09dClyZXR1cm4gVS5zcGxpY2UobiwxKSxyfXJldHVybiBVLnNoaWZ0KCl9O2xldCBvZT0wO2NvbnN0IHNlPShlLHQpPT4oe2lkOm9lKysscmVzb3VyY2U6bi5jcmVhdGVUZXh0dXJlKCksd2lkdGg6ZSxoZWlnaHQ6dCxhcmVhOmUqdCxzbW9vdGg6ITF9KTtsZXQgaWU9LTE7Y29uc3QgY2U9ZT0+e2llPWV9LGxlPVtudWxsLG51bGwsbnVsbF0sdWU9KGUsdCxyPSExKT0+e2NvbnN0IGE9c2UoZSx0KTtyZXR1cm4oKGUsdD0hMSk9PntpZSE9PW4uVEVYVFVSRTAmJihjZShuLlRFWFRVUkUwKSxuLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMCkpLGxlWzBdPWUsbi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsZS5yZXNvdXJjZSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUix0P24uTElORUFSOm4uTkVBUkVTVCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUix0P24uTElORUFSOm4uTkVBUkVTVCksbi50ZXhTdG9yYWdlMkQobi5URVhUVVJFXzJELDEsbi5SR0JBOCxlLndpZHRoLGUuaGVpZ2h0KX0pKGEsciksYX0saGU9KGUscixhPSExKT0+e2NvbnN0IG89Ti5sZW5ndGg/Ti5zaGlmdCgpOntpZDp0ZSsrLHdpZHRoOjAsaGVpZ2h0OjAsY2xpcExldmVsOjAsbXNhYTohMSxtYXNrOiExLGNvbG9yOm51bGwsdGV4dHVyZTpudWxsLHN0ZW5jaWw6bnVsbH07cmV0dXJuIG8ud2lkdGg9ZSxvLmhlaWdodD1yLGE/KG8ubXNhYT0hMCxvLnRleHR1cmU9bnVsbCxvLmNvbG9yPSgoZSxyKT0+e2U9TWF0aC5tYXgoMjU2LGMoZSkpLHI9TWF0aC5tYXgoMjU2LGMocikpO2NvbnN0IGE9bmUoZSpyKTtyZXR1cm4oYS53aWR0aDxlfHxhLmhlaWdodDxyKSYmKGU9TWF0aC5tYXgoZSxhLndpZHRoKSxyPU1hdGgubWF4KHIsYS5oZWlnaHQpLGEud2lkdGg9ZSxhLmhlaWdodD1yLGEuYXJlYT1lKnIsbi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLGEucmVzb3VyY2UpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKG4uUkVOREVSQlVGRkVSLHQsbi5SR0JBOCxlLHIpLG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixhLnN0ZW5jaWwucmVzb3VyY2UpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKG4uUkVOREVSQlVGRkVSLHQsbi5TVEVOQ0lMX0lOREVYOCxlLHIpKSxhLmRpcnR5PSEwLGF9KShlLHIpLG8uc3RlbmNpbD1vLmNvbG9yLnN0ZW5jaWwpOihvLm1zYWE9ITEsby50ZXh0dXJlPXVlKGUsciksby5jb2xvcj1udWxsLG8uc3RlbmNpbD0oKGUsdCk9Pntjb25zdCByPWFlKGUsdCk7cmV0dXJuIHIud2lkdGg9PT1lJiZyLmhlaWdodD09PXR8fChyLndpZHRoPWUsci5oZWlnaHQ9dCxyLmFyZWE9ZSp0LHIuZGlydHk9ITEsbi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHIucmVzb3VyY2UpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlNURU5DSUxfSU5ERVg4LGUsdCkpLHJ9KShlLHIpKSxvLm1hc2s9ITEsby5jbGlwTGV2ZWw9MCxvfTtsZXQgYmU9MDtjb25zdCBkZT1lPT57YmU9ZX0sZmU9KCk9PmJlLG1lPVtdLHZlPSgpPT57dmFyIHQ7cmV0dXJuIGJlIGluIG1lfHwodD1oZShlLGUsITApLG1lW2JlXT10KSxtZVtiZV19LF9lPVtdO2xldCBwZT1udWxsO2NvbnN0IGdlPSgpPT4ocGV8fChwZT0oKCk9Pntjb25zdCB0PXNlKGUsZSk7cmV0dXJuIG4uYWN0aXZlVGV4dHVyZShuLlRFWFRVUkUzKSxuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx0LnJlc291cmNlKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTkVBUkVTVCksbi50ZXhTdG9yYWdlMkQobi5URVhUVVJFXzJELDEsbi5SR0JBOCx0LndpZHRoLHQuaGVpZ2h0KSxuLmFjdGl2ZVRleHR1cmUoLTEhPT1pZT9pZTpuLlRFWFRVUkUwKSx0fSkoKSkscGUpLHhlPVtdLEVlPWU9PihlIGluIHhlfHwoeGVbZV09bmV3IEZsb2F0MzJBcnJheShbTnVtYmVyLk1BWF9WQUxVRSxOdW1iZXIuTUFYX1ZBTFVFLC1OdW1iZXIuTUFYX1ZBTFVFLC1OdW1iZXIuTUFYX1ZBTFVFXSkpLHhlW2VdKSxBZT1bXSx5ZT1lPT4oZSBpbiBBZXx8KEFlW2VdPW5ldyBGbG9hdDMyQXJyYXkoW051bWJlci5NQVhfVkFMVUUsTnVtYmVyLk1BWF9WQUxVRSwtTnVtYmVyLk1BWF9WQUxVRSwtTnVtYmVyLk1BWF9WQUxVRV0pKSxBZVtlXSk7bGV0IFRlPTA7Y29uc3QgUmU9ZT0+e1RlPWV9LE1lPSgpPT5UZSx3ZT0oKT0+e19lLmxlbmd0aD0wLGRlKDApO2NvbnN0IGU9bWU7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZWUoZVt0XSk7ZS5sZW5ndGg9MH0sRmU9KGUsdCxyLGE9ITApPT57aWYoZS5jbGVhckFycmF5c0luc3RhbmNlZCgpLGUuJHN0YWNrQXR0YWNobWVudE9iamVjdC5sZW5ndGgpZm9yKGxldCB0PTA7dDxlLiRzdGFja0F0dGFjaG1lbnRPYmplY3QubGVuZ3RoOysrdCl7Y29uc3Qgbj1lLiRzdGFja0F0dGFjaG1lbnRPYmplY3RbdF07biYmZWUobil9ZWxzZSBlLiRtYWluQXR0YWNobWVudE9iamVjdCYmZWUoZS4kbWFpbkF0dGFjaG1lbnRPYmplY3QpO2EmJndlKCksVihudWxsKSxxKCkmJihZKCExKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLG51bGwpKSxlLiRtYWluQXR0YWNobWVudE9iamVjdD1oZSh0LHIsITApLGUuYmluZChlLiRtYWluQXR0YWNobWVudE9iamVjdCl9LCRlPShlLHQscj1udWxsLGE9ITEpPT57LTEhPT1pZSYmdD09PWllfHwoY2UodCksbi5hY3RpdmVUZXh0dXJlKHQpKTtjb25zdCBvPWxlW2VdO251bGwhPT1vJiZudWxsIT09ciYmby5pZD09PXIuaWR8fHI9PT1vfHwobGVbZV09cixuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxyP3IucmVzb3VyY2U6bnVsbCksciYmci5zbW9vdGghPT1hJiYoci5zbW9vdGg9YSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLGE/bi5MSU5FQVI6bi5ORUFSRVNUKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLGE/bi5MSU5FQVI6bi5ORUFSRVNUKSkpfSxPZT0oZSx0PSExKT0+eyRlKDIsbi5URVhUVVJFMixudWxsKSwkZSgxLG4uVEVYVFVSRTEsbnVsbCksJGUoMCxuLlRFWFRVUkUwLGUsdCl9LFNlPSgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2lmKCFlKXJldHVybjtjb25zdCB0PWUuY2xpcExldmVsO2xldCBhPTA7Zm9yKGxldCBlPTA7ZTx0OysrZSlhfD0oMTw8dC1lKS0xO24uc3RlbmNpbE1hc2soMjU1KSxuLnN0ZW5jaWxGdW5jKG4uRVFVQUwsMjU1JmEsYSksbi5zdGVuY2lsT3Aobi5LRUVQLG4uS0VFUCxuLktFRVApLG4uY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxuLmRpc2FibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCl9O2xldCBrZT0hMTtjb25zdCBDZT1lPT57a2U9ZX0sUGU9KCk9PmtlLEJlPW5ldyBNYXAsSWU9bmV3IE1hcCxMZT0oZSx0KT0+e2NvbnN0IHI9VygpO2lmKHImJnQuaWQ9PT1yLmlkKXJldHVybjt2YXIgYSxvOyhlPT57VihlKSxxKCl8fChZKCEwKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLEQpKSxlLm1zYWE/KG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixlLmNvbG9yLnJlc291cmNlKSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKG4uRlJBTUVCVUZGRVIsbi5DT0xPUl9BVFRBQ0hNRU5UMCxuLlJFTkRFUkJVRkZFUixlLmNvbG9yLnJlc291cmNlKSk6KE9lKGUudGV4dHVyZSksbi5mcmFtZWJ1ZmZlclRleHR1cmUyRChuLkZSQU1FQlVGRkVSLG4uQ09MT1JfQVRUQUNITUVOVDAsbi5URVhUVVJFXzJELGUudGV4dHVyZS5yZXNvdXJjZSwwKSksbi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLGUuc3RlbmNpbC5yZXNvdXJjZSksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihuLkZSQU1FQlVGRkVSLG4uU1RFTkNJTF9BVFRBQ0hNRU5ULG4uUkVOREVSQlVGRkVSLGUuc3RlbmNpbC5yZXNvdXJjZSl9KSh0KSxyJiZyLndpZHRoPT09dC53aWR0aCYmci5oZWlnaHQ9PT10LmhlaWdodHx8KGE9dC53aWR0aCxvPXQuaGVpZ2h0LHA9YSxnPW8sbi52aWV3cG9ydCgwLDAsdC53aWR0aCx0LmhlaWdodCkpO2NvbnN0IHM9dC5tc2FhP3QuY29sb3I6dC5zdGVuY2lsO3ZhciBpO3MuZGlydHkmJihzLmRpcnR5PSExLGUuY2xlYXJSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSksIShpPXQubWFzaykmJlBlKCk/KENlKCExKSxuLmRpc2FibGUobi5TVEVOQ0lMX1RFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCkpOmkmJiFQZSgpJiYoQ2UoITApLG4uZW5hYmxlKG4uU1RFTkNJTF9URVNUKSxTZSgpKX0sVWU9ZT0+e2lmKCFlLiRzdGFjay5sZW5ndGgpcmV0dXJuO2NvbnN0IHQ9ZS4kc3RhY2sucG9wKCk7dmFyIG47ZS4kbWF0cml4WzBdPXRbMF0sZS4kbWF0cml4WzFdPXRbMV0sZS4kbWF0cml4WzNdPXRbM10sZS4kbWF0cml4WzRdPXRbNF0sZS4kbWF0cml4WzZdPXRbNl0sZS4kbWF0cml4WzddPXRbN10sbj10LGIucHVzaChuKX0sTmU9KGUsdCxyLGEpPT57bi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihlLHQscisxLGErMSksbi5jbGVhcihuLkNPTE9SX0JVRkZFUl9CSVR8bi5TVEVOQ0lMX0JVRkZFUl9CSVQpLG4uc2Npc3NvcihlLHQscixhKX0sRGU9KGUsdCxuLHIsYSxvLHMsaSxjLGwsdSxoLGIpPT57Y29uc3QgZD1lLmxlbmd0aC01O2ZvcihsZXQgZj0zO2Y8ZDtmKz0zKXtsZXQgZD0xNypuO2VbZisyXT8odFtkKytdPWVbZi0zXSx0W2QrK109ZVtmLTJdLHRbZCsrXT0wLHRbZCsrXT0wLHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2ZdLHRbZCsrXT1lW2YrMV0sdFtkKytdPS41LHRbZCsrXT0wLHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2YrM10sdFtkKytdPWVbZis0XSx0W2QrK109MSx0W2QrK109MSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109byx0W2QrK109cyx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCk6ZVtmKzVdPyh0W2QrK109ZVswXSx0W2QrK109ZVsxXSx0W2QrK109LjUsdFtkKytdPS41LHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2ZdLHRbZCsrXT1lW2YrMV0sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109byx0W2QrK109cyx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmKzZdLHRbZCsrXT1lW2YrN10sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109byx0W2QrK109cyx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCk6KHRbZCsrXT1lWzBdLHRbZCsrXT1lWzFdLHRbZCsrXT0uNSx0W2QrK109LjUsdFtkKytdPWwsdFtkKytdPXUsdFtkKytdPWgsdFtkKytdPWIsdFtkKytdPXIsdFtkKytdPWEsdFtkKytdPTAsdFtkKytdPW8sdFtkKytdPXMsdFtkKytdPTAsdFtkKytdPWksdFtkKytdPWMsdFtkKytdPTAsdFtkKytdPWVbZl0sdFtkKytdPWVbZisxXSx0W2QrK109LjUsdFtkKytdPS41LHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2YrM10sdFtkKytdPWVbZis0XSx0W2QrK109LjUsdFtkKytdPS41LHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wKSxuKz0zfXJldHVybiBufSxqZT0oZSx0PSJmaWxsIik9Pntjb25zdCBuPSJmaWxsIj09PXQ/ci4kZmlsbFN0eWxlOnIuJHN0cm9rZVN0eWxlLGE9blswXSxvPW5bMV0scz1uWzJdLGk9blszXSxjPXIuJG1hdHJpeCxsPXgoKSx1PUUoKSxoPWNbMF0vbCxiPWNbM10vbCxkPWNbNl0vbCxmPWNbMV0vdSxtPWNbNF0vdSx2PWNbN10vdTtsZXQgXz0wO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7Kyt0KV8rPTUxKihlW3RdLmxlbmd0aC8zLTIpO2NvbnN0IHA9bmV3IEZsb2F0MzJBcnJheShfKTtsZXQgZz0wO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7Kyt0KWc9RGUoZVt0XSxwLGcsaCxmLGIsbSxkLHYsYSxvLHMsaSk7cmV0dXJue2J1ZmZlcjpwLGluZGV4Q291bnQ6Z319O2xldCBYZT1uZXcgRmxvYXQzMkFycmF5KDEyOCksemU9MDtjb25zdCBWZT1lPT57Y29uc3QgdD1lLmxlbmd0aCt6ZTtpZih0PlhlLmxlbmd0aCl7Y29uc3Qgcj1uZXcgRmxvYXQzMkFycmF5KChuPXQsbi0tLG58PW4+PjEsbnw9bj4+MixufD1uPj40LG58PW4+Pjgsbnw9bj4+MTYsKytuKSk7ci5zZXQoWGUpLHIuc2V0KGUsemUpLFhlPXJ9ZWxzZSBYZS5zZXQoZSx6ZSk7dmFyIG47emUrPWUubGVuZ3RofSxXZT1bXSxHZT1bXSxZZT0oKT0+e0dlLmxlbmd0aD0wLHplPTAsV2UubGVuZ3RoPTB9LHFlPVtdLEtlPShlLHQsbik9Pntjb25zdCByPXt4OnQueC1lLngseTp0LnktZS55fSxhPSgoZSx0LG4pPT57Y29uc3Qgcj1NYXRoLnNxcnQoZSplK3QqdCk7cmV0dXJue3g6LXQvcipuLHk6ZS9yKm59fSkoci54LHIueSxuKSxvPXt4OmUueCthLngseTplLnkrYS55fSxzPXt4OnQueCthLngseTp0LnkrYS55fSxpPXt4OmUueC1hLngseTplLnktYS55fSxjPXt4OnQueC1hLngseTp0LnktYS55fTtyZXR1cm5bby54LG8ueSwhMSxzLngscy55LCExLGMueCxjLnksITEsaS54LGkueSwhMSxvLngsby55LCExXX0sSGU9KGUsdCxuKT0+KHt4OmUueCsodC54LWUueCkqbix5OmUueSsodC55LWUueSkqbn0pLFplPShlLHQsbixyPS41KT0+e2NvbnN0IGE9SGUoZSx0LHIpLG89SGUodCxuLHIpLHM9SGUoYSxvLHIpO3JldHVybltbZSxhLHNdLFtzLG8sbl1dfSxRZT0oZSx0LG4scik9Pih7eDooMS1lKSoqMip0LngrMiooMS1lKSplKm4ueCtlKioyKnIueCx5OigxLWUpKioyKnQueSsyKigxLWUpKmUqbi55K2UqKjIqci55fSksSmU9KGUsdCxuLHIpPT4oe3g6MiooMS1lKSoobi54LXQueCkrMiplKihyLngtbi54KSx5OjIqKDEtZSkqKG4ueS10LnkpKzIqZSooci55LW4ueSl9KSxldD1lPT57Y29uc3QgdD1NYXRoLnNxcnQoZS54KmUueCtlLnkqZS55KTtyZXR1cm4gMD09PXQ/e3g6MCx5OjB9Ont4OmUueC90LHk6ZS55L3R9fSx0dD0oZSx0LG4scik9Pntjb25zdCBhPVswLC41LDFdLG89W107Zm9yKGxldCBzPTA7czxhLmxlbmd0aDsrK3Mpe2NvbnN0IGk9YVtzXSxjPVFlKGksZSx0LG4pLGw9SmUoaSxlLHQsbiksdT1ldCh7eDotbC55LHk6bC54fSk7by5wdXNoKHt4OmMueCt1Lngqcix5OmMueSt1Lnkqcn0pfXJldHVybiBvfSxudD0oZSx0LG4scik9Pntjb25zdCBhPSgoZSx0LG4scj00KT0+e2xldCBhPVtbZSx0LG5dXTtmb3IobGV0IGU9MDtlPHI7KytlKXtjb25zdCBlPVtdO2ZvcihsZXQgdD0wO3Q8YS5sZW5ndGg7Kyt0KXtjb25zdCBuPWFbdF07aWYoIW4pY29udGludWU7Y29uc3Qgcj1aZShuWzBdLG5bMV0sblsyXSwuNSk7ZS5wdXNoKHJbMF0sclsxXSl9YT1lfXJldHVybiBhfSkoZSx0LG4sNSksbz1bXSxzPVtdO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7KytlKXtjb25zdFt0LG4saV09YVtlXTtvLnB1c2godHQodCxuLGksK3IpKSxzLnB1c2godHQodCxuLGksLXIpKX1jb25zdCBpPW9bMF1bMF0sYz1baS54LGkueSwhMV07Zm9yKGxldCBlPTA7ZTxvLmxlbmd0aDsrK2Upe2NvbnN0IHQ9b1tlXTtjLnB1c2godFsxXS54LHRbMV0ueSwhMCx0WzJdLngsdFsyXS55LCExKX1jb25zdCBsPVsuLi5zXS5yZXZlcnNlKCk7Zm9yKGxldCBlPTA7ZTxsLmxlbmd0aDsrK2Upe2NvbnN0W3QsbixyXT1sW2VdO2xbZV09W3Isbix0XX1jb25zdCB1PWxbMF1bMF07Yy5wdXNoKHUueCx1LnksITEpO2ZvcihsZXQgZT0wO2U8bC5sZW5ndGg7KytlKXtjb25zdCB0PWxbZV07Yy5wdXNoKHRbMV0ueCx0WzFdLnksITAsdFsyXS54LHRbMl0ueSwhMSl9cmV0dXJuIGN9LHJ0PShlLHQsbixyKT0+e2NvbnN0IGE9W107Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKz0zKXtpZihyW28rMl0pY29udGludWU7Y29uc3Qgcz1yW29dLGk9cltvKzFdO01hdGguc3FydChNYXRoLnBvdyhzLWUsMikrTWF0aC5wb3coaS10LDIpKT09PW4mJmEucHVzaChzLGkpfXJldHVybiBhfSxhdD1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSxvdD0oZSx0KT0+e2F0LmJlZ2luUGF0aCgpLGF0Lm1vdmVUbyh0WzBdLHRbMV0pO2ZvcihsZXQgZT0zO2U8dC5sZW5ndGg7ZSs9Myl0W2UrMl0/KGF0LnF1YWRyYXRpY0N1cnZlVG8odFtlXSx0W2UrMV0sdFtlKzNdLHRbZSs0XSksZSs9Myk6YXQubGluZVRvKHRbZV0sdFtlKzFdKTthdC5jbG9zZVBhdGgoKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrPTIpe2NvbnN0IG49ZVt0XSxyPWVbdCsxXTtpZighYXQuaXNQb2ludEluUGF0aChuLHIpKXJldHVybltuLHJdfXJldHVybiBudWxsfSxzdD0oZSx0LG4scixhPSExKT0+e2NvbnN0IG89YT8wOnIubGVuZ3RoLTEscz1hP3IubGVuZ3RoLTE6ci5sZW5ndGgtMixpPXJ0KGUsdCxuLHJbb10pLGM9cnQoZSx0LG4scltzXSksbD1vdChpLHJbc10pO2lmKCFsKXJldHVybjtjb25zdCB1PW90KGMscltvXSk7aWYoIXUpcmV0dXJuO2NvbnN0IGg9TWF0aC5hdGFuMihsWzFdLXQsbFswXS1lKTtsZXQgYj1NYXRoLmF0YW4yKHVbMV0tdCx1WzBdLWUpLWg7Yj5NYXRoLlBJP2ItPTIqTWF0aC5QSTpiPC1NYXRoLlBJJiYoYis9MipNYXRoLlBJKTtjb25zdCBkPWIvOCxmPVtlLHQsITFdO2ZvcihsZXQgcj0wO3I8PTg7cisrKXtjb25zdCBhPWgrcipkLG89ZStuKk1hdGguY29zKGEpLHM9dCtuKk1hdGguc2luKGEpO2YucHVzaChvLHMsITEpfXIuc3BsaWNlKC0xLDAsZil9LGl0PShlLHQsbixyLGE9ITEpPT57Y29uc3Qgbz1hPzA6ci5sZW5ndGgtMSxzPWE/ci5sZW5ndGgtMTpyLmxlbmd0aC0yLGk9cnQoZSx0LG4scltvXSksYz1ydChlLHQsbixyW3NdKTtpZihpWzBdPT09Y1swXSYmaVsxXT09PWNbMV18fGlbMF09PT1jWzJdJiZpWzFdPT09Y1szXSlyZXR1cm47Y29uc3QgbD1vdChpLHJbc10pO2lmKCFsKXJldHVybjtjb25zdCB1PW90KGMscltvXSk7dSYmci5zcGxpY2UoLTEsMCxbZSx0LCExLGxbMF0sbFsxXSwhMSx1WzBdLHVbMV0sITEsZSx0LCExXSl9LGN0PShlLHQsbixyLGEsbz0hMSk9Pntjb25zdCBzPW8/MDphLmxlbmd0aC0xLGk9bz9hLmxlbmd0aC0xOmEubGVuZ3RoLTIsYz1ydChlLngsZS55LHIsYVtzXSksbD1ydChlLngsZS55LHIsYVtpXSk7aWYoY1swXT09PWxbMF0mJmNbMV09PT1sWzFdfHxjWzBdPT09bFsyXSYmY1sxXT09PWxbM10pcmV0dXJuO2NvbnN0IHU9b3QoYyxhW2ldKTtpZighdSlyZXR1cm47Y29uc3QgaD1vdChsLGFbc10pO2lmKCFoKXJldHVybjtjb25zdCBiPXQueC1lLngsZD10LnktZS55LGY9TWF0aC5oeXBvdChiLGQpLG09e3g6Yi9mLHk6ZC9mfSx2PW4ueC1lLngsXz1uLnktZS55LHA9TWF0aC5oeXBvdCh2LF8pLGc9e3g6di9wLHk6Xy9wfSx4PW0ueCxFPW0ueSxBPWcueCx5PWcueSxUPXgqeS1FKkE7MD09PVQmJmEuc3BsaWNlKC0xLDAsW2UueCxlLnksITEsdVswXSx1WzFdLCExLGhbMF0saFsxXSwhMV0pO2NvbnN0IFI9KChoWzBdLXVbMF0pKnktKGhbMV0tdVsxXSkqQSkvVCxNPXVbMF0rUip4LHc9dVsxXStSKkU7YS5zcGxpY2UoLTEsMCxbZS54LGUueSwhMSx1WzBdLHVbMV0sITEsTSx3LCExLGUueCxlLnksITEsaFswXSxoWzFdLCExLE0sdywhMV0pfSxsdD0oZSx0KT0+e2NvbnN0IG49e3g6ZVswXSx5OmVbMV19LGE9e3g6MCx5OjB9LG89e3g6MCx5OjB9LHM9e3g6MCx5OjB9LGk9W107Zm9yKGxldCBjPTM7YzxlLmxlbmd0aDtjKz0zKXtjb25zdCBsPWVbY10sdT1lW2MrMV07aWYoZVtjKzJdKWEueD1sLGEueT11O2Vsc2V7aWYoby54PWwsby55PXUsZVtjLTFdP2kucHVzaChudChuLGEsbyx0KSk6aS5wdXNoKEtlKG4sbyx0KSksaS5sZW5ndGg+MSlzd2l0Y2goci5qb2ludHMpe2Nhc2UgMDppdChuLngsbi55LHQsaSk7YnJlYWs7Y2FzZSAxOnMueD1lW2MtNl0scy55PWVbYy01XSxjdChuLG8scyx0LGkpO2JyZWFrO2Nhc2UgMjpzdChuLngsbi55LHQsaSl9bi54PW8ueCxuLnk9by55fX1pZihlWzBdPT09ZVtlLmxlbmd0aC0zXSYmZVsxXT09PWVbZS5sZW5ndGgtMl0pc3dpdGNoKHIuam9pbnRzKXtjYXNlIDA6aXQobi54LG4ueSx0LGksITApO2JyZWFrO2Nhc2UgMTpuLng9ZVswXSxuLnk9ZVsxXSxvLng9ZVszXSxvLnk9ZVs0XSxzLng9ZVtlLmxlbmd0aC02XSxzLnk9ZVtlLmxlbmd0aC01XSxjdChuLG8scyx0LGksITApO2JyZWFrO2Nhc2UgMjpzdChuLngsbi55LHQsaSwhMCl9ZWxzZSBzd2l0Y2goci5jYXBzKXtjYXNlIDE6KChlLHQsbik9Pntmb3IobGV0IHI9MDtyPDI7KytyKXtsZXQgYT0wLG89MCxzPTAsaT0wOzA9PT1yPyhhPWVbMF0sbz1lWzFdLHM9ZVszXSxpPWVbNF0pOihhPWVbZS5sZW5ndGgtM10sbz1lW2UubGVuZ3RoLTJdLHM9ZVtlLmxlbmd0aC02XSxpPWVbZS5sZW5ndGgtNV0pO2NvbnN0IGM9cy1hLGw9aS1vLHU9TWF0aC5hdGFuMihsLGMpLGg9dStNYXRoLlBJLzIsYj11LU1hdGguUEkvMixkPTE2LGY9KGItaCkvZCxtPVtdO2ZvcihsZXQgZT0wO2U8PWQ7ZSsrKXtjb25zdCBuPWIrZiplLHI9YSt0Kk1hdGguY29zKG4pLHM9byt0Kk1hdGguc2luKG4pO20ucHVzaChyLHMsITEpfTA9PT1yP24udW5zaGlmdChtKTpuLnB1c2gobSl9fSkoZSx0LGkpO2JyZWFrO2Nhc2UgMjooKGUsdCxuKT0+e2ZvcihsZXQgcj0wO3I8MjsrK3Ipe2xldCBhPTAsbz0wLHM9MCxpPTA7MD09PXI/KGE9ZVswXSxvPWVbMV0scz1lWzNdLGk9ZVs0XSk6KGE9ZVtlLmxlbmd0aC0zXSxvPWVbZS5sZW5ndGgtMl0scz1lW2UubGVuZ3RoLTZdLGk9ZVtlLmxlbmd0aC01XSk7Y29uc3QgYz0tKHMtYSksbD0tKGktbyksdT1NYXRoLnNxcnQoYypjK2wqbCk7aWYoMD09PXUpY29udGludWU7Y29uc3QgaD1jL3UsYj1sL3UsZD1hK3QqaCxmPW8rdCpiLG09LWIsdj1bZCt0KmgrdCptLGYrdCpiK3QqaCwhMSxkK3QqaC10Km0sZit0KmItdCpoLCExLGQtdCpoLXQqbSxmLXQqYi10KmgsITEsZCt0KmgrdCptLGYrdCpiK3QqaCwhMSxkLXQqaC10Km0sZi10KmItdCpoLCExLGQtdCpoK3QqbSxmLXQqYit0KmgsITFdOzA9PT1yP24udW5zaGlmdCh2KTpuLnB1c2godil9fSkoZSx0LGkpfXJldHVybiBpfSx1dD1lPT57Y29uc3QgdD1yLnRoaWNrbmVzcy8yLG49W107Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3Ipe2NvbnN0IGE9bHQoZVtyXSx0KTtuLnB1c2goLi4uYSl9cmV0dXJuIGplKG4sInN0cm9rZSIpfSxodD1uZXcgTWFwLGJ0PSgpPT57aHQuY2xlYXIoKX0sZHQ9KCk9Pih7aWQ6Y3J5cHRvLnJhbmRvbVVVSUQoKSxyZXNvdXJjZTpuLmNyZWF0ZVZlcnRleEFycmF5KCksdmVydGV4QnVmZmVyOm4uY3JlYXRlQnVmZmVyKCksdmVydGV4TGVuZ3RoOjB9KTtsZXQgZnQ7Y29uc3QgbXQ9ZT0+e2Z0JiZmdC5pZD09PWUuaWR8fChmdD1lLG4uYmluZFZlcnRleEFycmF5KGUucmVzb3VyY2UpKX0sdnQ9W10sX3Q9bmV3IEZsb2F0MzJBcnJheShbMCwwLDAsMSwxLDAsMSwxXSk7bGV0IHB0O2xldCBndDtsZXQgeHQ7Y29uc3QgRXQ9KCk9Pih4dHx8KHh0PSgoKT0+e2NvbnN0IGU9ZHQoKTttdChlKSxuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsZS52ZXJ0ZXhCdWZmZXIpO2NvbnN0IHQ9bmV3IEZsb2F0MzJBcnJheShbMCwwLDEsMCwwLDEsMSwxLDAsMSwxLDBdKTtyZXR1cm4gbi5idWZmZXJEYXRhKG4uQVJSQVlfQlVGRkVSLHQsbi5TVEFUSUNfRFJBVyksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwyLG4uRkxPQVQsITEsMCwwKSxlfSkoKSkseHQpLEF0PSgpPT57Y29uc3QgZT0oKCk9PntpZih2dC5sZW5ndGgpcmV0dXJuIHZ0LnBvcCgpO2NvbnN0IGU9ZHQoKTtyZXR1cm4gbXQoZSksbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGUudmVydGV4QnVmZmVyKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgyKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDMpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoNCksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSg1KSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwyLG4uRkxPQVQsITEsNjgsMCksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsMixuLkZMT0FULCExLDY4LDgpLG4udmVydGV4QXR0cmliUG9pbnRlcigyLDQsbi5GTE9BVCwhMSw2OCwxNiksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDMsMyxuLkZMT0FULCExLDY4LDMyKSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoNCwzLG4uRkxPQVQsITEsNjgsNDQpLG4udmVydGV4QXR0cmliUG9pbnRlcig1LDMsbi5GTE9BVCwhMSw2OCw1NiksZX0pKCk7bXQoZSk7Y29uc3QgdD1YZSxyPXplO3JldHVybiBuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsZS52ZXJ0ZXhCdWZmZXIpLGUudmVydGV4TGVuZ3RoPHQubGVuZ3RoJiYoZS52ZXJ0ZXhMZW5ndGg9Yyh0Lmxlbmd0aCksbi5idWZmZXJEYXRhKG4uQVJSQVlfQlVGRkVSLDQqZS52ZXJ0ZXhMZW5ndGgsbi5EWU5BTUlDX0RSQVcpKSxuLmJ1ZmZlclN1YkRhdGEobi5BUlJBWV9CVUZGRVIsMCx0LnN1YmFycmF5KDAscikpLGV9LHl0PWU9Pnt2dC5pbmRleE9mKGUpPi0xfHx2dC5wdXNoKGUpfTtsZXQgVHQ9MDtsZXQgUnQ9LTE7Y2xhc3MgTXR7Y29uc3RydWN0b3IoZSx0LHI9ITEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHByb2dyYW1PYmplY3QiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiXyR1bmlmb3JtTWFwIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5fJHByb2dyYW1PYmplY3Q9KChlLHQpPT57Y29uc3Qgcj1uLmNyZWF0ZVByb2dyYW0oKSxhPW4uY3JlYXRlU2hhZGVyKG4uVkVSVEVYX1NIQURFUik7bi5zaGFkZXJTb3VyY2UoYSxlKSxuLmNvbXBpbGVTaGFkZXIoYSk7Y29uc3Qgbz1uLmNyZWF0ZVNoYWRlcihuLkZSQUdNRU5UX1NIQURFUik7cmV0dXJuIG4uc2hhZGVyU291cmNlKG8sdCksbi5jb21waWxlU2hhZGVyKG8pLG4uYXR0YWNoU2hhZGVyKHIsYSksbi5hdHRhY2hTaGFkZXIocixvKSxuLmxpbmtQcm9ncmFtKHIpLG4uZGV0YWNoU2hhZGVyKHIsYSksbi5kZXRhY2hTaGFkZXIocixvKSxuLmRlbGV0ZVNoYWRlcihhKSxuLmRlbGV0ZVNoYWRlcihvKSx7aWQ6VHQrKyxyZXNvdXJjZTpyfX0pKGUsdCksdGhpcy5fJHVuaWZvcm1NYXA9bmV3IE1hcCwoKGUsdCxyPSExKT0+e2NvbnN0IGE9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsbi5BQ1RJVkVfVU5JRk9STVMpO2ZvcihsZXQgbz0wO288YTsrK28pe2NvbnN0IGE9bi5nZXRBY3RpdmVVbmlmb3JtKGUsbykscz1hLm5hbWUuZW5kc1dpdGgoIlswXSIpP2EubmFtZS5zbGljZSgwLC0zKTphLm5hbWUsaT1uLmdldFVuaWZvcm1Mb2NhdGlvbihlLHMpO2lmKGEudHlwZT09PW4uU0FNUExFUl8yRCYmMT09PWEuc2l6ZSYmIXIpY29udGludWU7Y29uc3QgYz17fTtzd2l0Y2goYS50eXBlKXtjYXNlIG4uRkxPQVRfVkVDNDpjLm1ldGhvZD1uLnVuaWZvcm00ZnYuYmluZChuLGkpLGMuYXJyYXk9bmV3IEZsb2F0MzJBcnJheSg0KmEuc2l6ZSksYy5hc3NpZ249LTE7YnJlYWs7Y2FzZSBuLklOVF9WRUM0OmMubWV0aG9kPW4udW5pZm9ybTRpdi5iaW5kKG4saSksYy5hcnJheT1uZXcgSW50MzJBcnJheSg0KmEuc2l6ZSksYy5hc3NpZ249LTE7YnJlYWs7Y2FzZSBuLlNBTVBMRVJfMkQ6Yy5tZXRob2Q9cj9uLnVuaWZvcm0xaS5iaW5kKG4saSwzKTpuLnVuaWZvcm0xaXYuYmluZChuLGkpLGMuYXJyYXk9bmV3IEludDMyQXJyYXkoYS5zaXplKSxjLmFzc2lnbj0xO2JyZWFrO2Nhc2Ugbi5GTE9BVDpjYXNlIG4uRkxPQVRfVkVDMjpjYXNlIG4uRkxPQVRfVkVDMzpjYXNlIG4uRkxPQVRfTUFUMjpjYXNlIG4uRkxPQVRfTUFUMzpjYXNlIG4uRkxPQVRfTUFUNDpjYXNlIG4uSU5UOmNhc2Ugbi5JTlRfVkVDMjpjYXNlIG4uSU5UX1ZFQzM6ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVzZSBnbC5GTE9BVF9WRUM0IG9yIGdsLklOVF9WRUM0IGluc3RlYWQiKX10LnNldChzLGMpfX0pKHRoaXMuXyRwcm9ncmFtT2JqZWN0LnJlc291cmNlLHRoaXMuXyR1bmlmb3JtTWFwLHIpfXVzZVByb2dyYW0oKXt2YXIgZTtlPXRoaXMuXyRwcm9ncmFtT2JqZWN0LFJ0IT09ZS5pZCYmKFJ0PWUuaWQsbi51c2VQcm9ncmFtKGUucmVzb3VyY2UpKX1iaW5kVW5pZm9ybSgpeyhlPT57Zm9yKGNvbnN0IHQgb2YgZS52YWx1ZXMoKSl2b2lkIDAhPT10Lm1ldGhvZCYmdm9pZCAwIT09dC5hc3NpZ24mJih0LmFzc2lnbjwwP3QubWV0aG9kKHQuYXJyYXkpOnQuYXNzaWduPjAmJih0LmFzc2lnbi0tLHQubWV0aG9kKHQuYXJyYXkpKSl9KSh0aGlzLl8kdW5pZm9ybU1hcCl9Z2V0IGhpZ2hwKCl7cmV0dXJuIHRoaXMuXyR1bmlmb3JtTWFwLmdldCgidV9oaWdocCIpLmFycmF5fWdldCBtZWRpdW1wKCl7cmV0dXJuIHRoaXMuXyR1bmlmb3JtTWFwLmdldCgidV9tZWRpdW1wIikuYXJyYXl9Z2V0IHRleHR1cmVzKCl7cmV0dXJuIHRoaXMuXyR1bmlmb3JtTWFwLmdldCgidV90ZXh0dXJlcyIpLmFycmF5fX1jb25zdCB3dD1uZXcgTWFwLEZ0PShlLHQsbixyKT0+e2NvbnN0IGE9bj8ibGF5b3V0IChsb2NhdGlvbiA9IDEpIGluIHZlYzIgYV9iZXppZXI7IjoiIixvPW4/Im91dCB2ZWMyIHZfYmV6aWVyOyI6dD8ib3V0IHZlYzIgdl91djsiOiIiLHM9bj8idl9iZXppZXIgPSBhX2JlemllcjsiOnQ/IlxuICAgIG1hdDMgdXZfbWF0cml4ID0gbWF0MyhcbiAgICAgICAgdV9oaWdocFswXS54eXosXG4gICAgICAgIHVfaGlnaHBbMV0ueHl6LFxuICAgICAgICB1X2hpZ2hwWzJdLnh5elxuICAgICk7XG4gICAgbWF0MyBpbnZlcnNlX21hdHJpeCA9IG1hdDMoXG4gICAgICAgIHVfaGlnaHBbM10ueHl6LFxuICAgICAgICB1X2hpZ2hwWzRdLnh5eixcbiAgICAgICAgdmVjMyh1X2hpZ2hwWzJdLncsIHVfaGlnaHBbM10udywgdV9oaWdocFs0XS53KVxuICAgICk7XG4gICAgdl91diA9IChpbnZlcnNlX21hdHJpeCAqIHV2X21hdHJpeCAqIHZlYzMoYV92ZXJ0ZXgsIDEuMCkpLnh5OyI6IiIsaT1yPyhlPT5gXG52ZWMyIGFwcGx5TWF0cml4KGluIHZlYzIgdmVydGV4KSB7XG4gICAgbWF0MyBwYXJlbnRfbWF0cml4ID0gbWF0MyhcbiAgICAgICAgdV9oaWdocFske2V9XS54eXosXG4gICAgICAgIHVfaGlnaHBbJHtlKzF9XS54eXosXG4gICAgICAgIHVfaGlnaHBbJHtlKzJ9XS54eXpcbiAgICApO1xuICAgIG1hdDMgYW5jZXN0b3JfbWF0cml4ID0gbWF0MyhcbiAgICAgICAgdV9oaWdocFske2UrM31dLnh5eixcbiAgICAgICAgdV9oaWdocFske2UrNH1dLnh5eixcbiAgICAgICAgdV9oaWdocFske2UrNX1dLnh5elxuICAgICk7XG5cbiAgICB2ZWMyIHBhcmVudF9vZmZzZXQgPSB2ZWMyKHVfaGlnaHBbJHtlKzJ9XS53LCB1X2hpZ2hwWyR7ZSszfV0udyk7XG4gICAgdmVjMiBwYXJlbnRfc2l6ZSAgID0gdmVjMih1X2hpZ2hwWyR7ZSs0fV0udywgdV9oaWdocFske2UrNX1dLncpO1xuICAgIHZlYzQgZ3JpZF9taW4gPSB1X2hpZ2hwWyR7ZSs2fV07XG4gICAgdmVjNCBncmlkX21heCA9IHVfaGlnaHBbJHtlKzd9XTtcbiAgICBcbiAgICB2ZWMyIHBvc2l0aW9uID0gKHBhcmVudF9tYXRyaXggKiB2ZWMzKHZlcnRleCwgMS4wKSkueHk7XG4gICAgcG9zaXRpb24gPSAocG9zaXRpb24gLSBwYXJlbnRfb2Zmc2V0KSAvIHBhcmVudF9zaXplO1xuXG4gICAgdmVjNCBnYSA9IGdyaWRfbWluO1xuICAgIHZlYzQgZ2IgPSBncmlkX21heCAgLSBncmlkX21pbjtcbiAgICB2ZWM0IGdjID0gdmVjNCgxLjApIC0gZ3JpZF9tYXg7XG5cbiAgICB2ZWMyIHBhID0gcG9zaXRpb247XG4gICAgdmVjMiBwYiA9IHBvc2l0aW9uIC0gZ3JpZF9taW4uc3Q7XG4gICAgdmVjMiBwYyA9IHBvc2l0aW9uIC0gZ3JpZF9tYXguc3Q7XG5cbiAgICBwb3NpdGlvbiA9IChnYS5wcSAvIGdhLnN0KSAqIG1pbihwYSwgZ2Euc3QpXG4gICAgICAgICAgICAgICAgKyAoZ2IucHEgLyBnYi5zdCkgKiBjbGFtcChwYiwgdmVjMigwLjApLCBnYi5zdClcbiAgICAgICAgICAgICAgICArIChnYy5wcSAvIGdjLnN0KSAqIG1heCh2ZWMyKDAuMCksIHBjKTtcblxuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKiBwYXJlbnRfc2l6ZSArIHBhcmVudF9vZmZzZXQ7XG4gICAgcG9zaXRpb24gPSAoYW5jZXN0b3JfbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMS4wKSkueHk7XG5cbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgdmVjMih1X2hpZ2hwWyR7ZSs4fV0ueCwgdV9oaWdocFske2UrOH1dLnkpO1xuICAgIHJldHVybiBwb3NpdGlvbiAvIHZlYzIodV9oaWdocFswXS53LCB1X2hpZ2hwWzFdLncpO1xufWApKHQ/NTowKToiXG52ZWMyIGFwcGx5TWF0cml4KGluIHZlYzIgdmVydGV4KSB7XG4gICAgbWF0MyBtYXRyaXggPSBtYXQzKGFfbWF0cml4MCwgYV9tYXRyaXgxLCBhX21hdHJpeDIpO1xuICAgIHJldHVybiAobWF0cml4ICogdmVjMyh2ZXJ0ZXgsIDEuMCkpLnh5O1xufSI7cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcbiR7YX1cbiR7bj8iIjoibGF5b3V0IChsb2NhdGlvbiA9IDIpIGluIHZlYzQgYV9jb2xvcjsifVxuJHtyPyIiOiJsYXlvdXQgKGxvY2F0aW9uID0gMykgaW4gdmVjMyBhX21hdHJpeDA7XG5sYXlvdXQgKGxvY2F0aW9uID0gNCkgaW4gdmVjMyBhX21hdHJpeDE7XG5sYXlvdXQgKGxvY2F0aW9uID0gNSkgaW4gdmVjMyBhX21hdHJpeDI7In1cblxuJHtlPjE/YHVuaWZvcm0gdmVjNCB1X2hpZ2hwWyR7ZX1dO2A6IiJ9XG4ke299XG4ke24/IiI6Im91dCB2ZWM0IHZfY29sb3I7In1cbiR7aX1cblxudm9pZCBtYWluKCkge1xuICAgICR7bj8iIjoidl9jb2xvciA9IGFfY29sb3I7In1cbiAgICAke3N9XG4gICAgdmVjMiBwb3MgPSBhcHBseU1hdHJpeChhX3ZlcnRleCk7XG4gICAgcG9zID0gcG9zICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MueCwgLXBvcy55LCAwLjAsIDEuMCk7XG59YH0sJHQ9ZT0+e2NvbnN0IHQ9Im0iKyhlPyJ5IjoibiIpO2lmKHd0Lmhhcyh0KSlyZXR1cm4gd3QuZ2V0KHQpO2NvbnN0IG49bmV3IE10KEZ0KGU/OTowLCExLCEwLGUpLCIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG5pbiB2ZWMyIHZfYmV6aWVyO1xub3V0IHZlYzQgb19jb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgcHggPSBkRmR4KHZfYmV6aWVyKTtcbiAgICB2ZWMyIHB5ID0gZEZkeSh2X2Jlemllcik7XG5cbiAgICB2ZWMyIGYgPSAoMi4wICogdl9iZXppZXIueCkgKiB2ZWMyKHB4LngsIHB5LngpIC0gdmVjMihweC55LCBweS55KTtcbiAgICBmbG9hdCBhbHBoYSA9IDAuNSAtICh2X2Jlemllci54ICogdl9iZXppZXIueCAtIHZfYmV6aWVyLnkpIC8gbGVuZ3RoKGYpO1xuXG4gICAgaWYgKGFscGhhID4gMC4wKSB7XG4gICAgICAgIG9fY29sb3IgPSB2ZWM0KG1pbihhbHBoYSwgMS4wKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGlzY2FyZDtcbiAgICB9ICAgIFxufSIpO3JldHVybiB3dC5zZXQodCxuKSxufSxPdD0oZSx0KT0+e2NvbnN0IG49ZS5oaWdocDtuWzBdPXRbMF0sblsxXT10WzFdLG5bMl09MCxuWzRdPXRbMl0sbls1XT10WzNdLG5bNl09MCxuWzhdPXRbNF0sbls5XT10WzVdLG5bMTBdPTEsblsxMl09dFs2XSxuWzEzXT10WzddLG5bMTRdPTAsblsxNl09dFs4XSxuWzE3XT10WzldLG5bMThdPTAsblsyMF09dFsxMF0sblsyMV09dFsxMV0sblsyMl09MSxuWzNdPXgoKSxuWzddPUUoKSxuWzExXT10WzEyXSxuWzE1XT10WzEzXSxuWzE5XT10WzE0XSxuWzIzXT10WzE1XSxuWzI0XT10WzE2XSxuWzI1XT10WzE3XSxuWzI2XT10WzE4XSxuWzI3XT10WzE5XSxuWzI4XT10WzIwXSxuWzI5XT10WzIxXSxuWzMwXT10WzIyXSxuWzMxXT10WzIzXSxuWzMyXT10WzI0XSxuWzMzXT10WzI1XX07bGV0IFN0PSJub3JtYWwiO2NvbnN0IGt0PWU9PntTdD1lfSxDdD0oKT0+U3Q7bGV0IFB0PTYwMDtjb25zdCBCdD1lPT57UHQ9ZX0sSXQ9KCk9PlB0LEx0PSgpPT57NjEzIT09SXQoKSYmKEJ0KDYxMyksbi5ibGVuZEZ1bmMobi5PTkUsbi5PTkVfTUlOVVNfU1JDX0FMUEhBKSl9LFV0PShlLHQscixhKT0+e2UudXNlUHJvZ3JhbSgpLGUuYmluZFVuaWZvcm0oKSxMdCgpLG10KHQpLG4uZHJhd0FycmF5cyhuLlRSSUFOR0xFUyxyLGEpfSxOdD0oKT0+e2NvbnN0IGU9InJtbm4iO2lmKHd0LmhhcyhlKSlyZXR1cm4gd3QuZ2V0KGUpO2NvbnN0IHQ9bmV3IE10KCIjdmVyc2lvbiAzMDAgZXNcbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xudm9pZCBtYWluKCkge1xuICAgIHZlYzIgcG9zID0gYV92ZXJ0ZXggKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcy54LCAtcG9zLnksIDAuMCwgMS4wKTtcbn0iLCIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xub3V0IHZlYzQgb19jb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgICBvX2NvbG9yID0gdmVjNCgxLjApO1xufSIpO3JldHVybiB3dC5zZXQoZSx0KSx0fSxEdD0oKT0+e2NvbnN0IGU9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtpZighZSlyZXR1cm47Y29uc3QgdD0xPDxlLmNsaXBMZXZlbC0xO24uc3RlbmNpbE1hc2sofnQtMSksbi5zdGVuY2lsRnVuYyhuLkxFUVVBTCx0LDI1NSksbi5zdGVuY2lsT3Aobi5aRVJPLG4uUkVQTEFDRSxuLlJFUExBQ0UpLFV0KE50KCksRXQoKSwwLDYpLG4uc3RlbmNpbE1hc2soMTw8ZS5jbGlwTGV2ZWwpLG4uc3RlbmNpbEZ1bmMobi5BTFdBWVMsMCwyNTUpLG4uc3RlbmNpbE9wKG4uUkVQTEFDRSxuLlJFUExBQ0Usbi5SRVBMQUNFKSxVdChOdCgpLEV0KCksMCw2KSxuLnN0ZW5jaWxNYXNrKDI1NSksbi5zdGVuY2lsT3Aobi5aRVJPLG4uSU5WRVJULG4uSU5WRVJUKX07Y2xhc3MganR7Y29uc3RydWN0b3IoZSx0LG4scixhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaW5kZXgiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywieCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ5Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInciLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZWZ0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJpZ2h0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInVzZWQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmluZGV4PWUsdGhpcy54PXQsdGhpcy55PW4sdGhpcy53PXIsdGhpcy5oPWEsdGhpcy5sZWZ0PW51bGwsdGhpcy5yaWdodD1udWxsLHRoaXMudXNlZD0hMX1pbnNlcnQoZSx0KXtyZXR1cm4oKGUsdCxuKT0+e2lmKGUudXNlZCl7Y29uc3Qgcj1lLmxlZnQ/Lmluc2VydCh0LG4pO3JldHVybiByfHxlLnJpZ2h0Py5pbnNlcnQodCxuKXx8bnVsbH1pZih0PmUud3x8bj5lLmgpcmV0dXJuIG51bGw7aWYodD09PWUudyYmbj09PWUuaClyZXR1cm4gZS51c2VkPSEwLGU7Y29uc3Qgcj1lLnctdCxhPWUuaC1uO3JldHVybiByPmE/KGUubGVmdD1lLmNyZWF0ZShlLmluZGV4LGUueCxlLnksdCxuKSxlLnJpZ2h0PWUuY3JlYXRlKGUuaW5kZXgsZS54K3QrMSxlLnksci0xLGUuaCkpOihlLmxlZnQ9ZS5jcmVhdGUoZS5pbmRleCxlLngsZS55LGUudyxuKSxlLnJpZ2h0PWUuY3JlYXRlKGUuaW5kZXgsZS54LGUueStuKzEsZS53LGEtMSkpLGUudXNlZD0hMCxlLmxlZnQuaW5zZXJ0KHQsbil9KSh0aGlzLGUsdCl9ZGlzcG9zZShlLHQsbixyKXtyZXR1cm4oKGUsdCxuLHIsYSk9PmUubGVmdD8uZGlzcG9zZSh0LG4scixhKT8oZS5sZWZ0LnVzZWR8fGUucmlnaHQ/LnVzZWR8fChlLmxlZnQ9ZS5yaWdodD1udWxsLGUudXNlZD0hMSksITApOmUucmlnaHQ/LmRpc3Bvc2UodCxuLHIsYSk/KGUucmlnaHQudXNlZHx8ZS5sZWZ0Py51c2VkfHwoZS5sZWZ0PWUucmlnaHQ9bnVsbCxlLnVzZWQ9ITEpLCEwKTp0PT09ZS54JiZuPT09ZS55JiZyPT09ZS53JiZhPT09ZS5oJiYoZS51c2VkPSExLCEwKSkodGhpcyxlLHQsbixyKX1jcmVhdGUoZSx0LG4scixhKXtyZXR1cm4gbmV3IGp0KGUsdCxuLHIsYSl9fWNsYXNzIFh0e2NvbnN0cnVjdG9yKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiXyRyb290Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5fJHJvb3Q9bmV3IGp0KGUsMCwwLHQsbil9aW5zZXJ0KGUsdCl7cmV0dXJuIHRoaXMuXyRyb290Lmluc2VydChlLHQpfWRpc3Bvc2UoZSx0LG4scil7cmV0dXJuIHRoaXMuXyRyb290LmRpc3Bvc2UoZSx0LG4scil9fWNvbnN0IHp0PSh0LG4pPT57Y29uc3Qgcj1mZSgpO19lW3JdfHwoX2Vbcl09bmV3IFh0KHIsZSxlKSk7Y29uc3QgYT1fZVtyXS5pbnNlcnQodCxuKTtyZXR1cm4gYXx8KGRlKHIrMSksenQodCxuKSl9LFZ0PWU9PmBcbiAgICB2ZWM0IG11bCA9IHVfbWVkaXVtcFske2V9XTtcbiAgICB2ZWM0IGFkZCA9IHVfbWVkaXVtcFske2UrMX1dO1xuXG4gICAgaWYgKG11bC54ICE9IDEuMCB8fCBtdWwueSAhPSAxLjAgfHwgbXVsLnogIT0gMS4wIHx8IG11bC53ICE9IDEuMFxuICAgICAgICB8fCBhZGQueCAhPSAwLjAgfHwgYWRkLnkgIT0gMC4wIHx8IGFkZC56ICE9IDAuMFxuICAgICkge1xuICAgICAgICBzcmMucmdiIC89IG1heCgwLjAwMDEsIHNyYy5hKTtcbiAgICAgICAgc3JjID0gY2xhbXAoc3JjICogbXVsICsgYWRkLCAwLjAsIDEuMCk7XG4gICAgICAgIHNyYy5yZ2IgKj0gc3JjLmE7XG4gICAgfVxuYCxXdD1lPT5gI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xuJHtlPyJ1bmlmb3JtIHZlYzQgdV9tZWRpdW1wWzJdOyI6IiJ9XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWM0IHNyYyA9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkKTtcbiAgICAke2U/VnQoMCk6IiJ9XG4gICAgb19jb2xvciA9IHNyYztcbn1gO2NvbnN0IEd0PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5idWZmZXI9bmV3IEZsb2F0MzJBcnJheSgyNTYpLHRoaXMub2Zmc2V0PTB9cHVzaCguLi5lKXt0aGlzLmJ1ZmZlci5sZW5ndGg8dGhpcy5vZmZzZXQrZS5sZW5ndGgmJnRoaXMucmVzaXplKGUubGVuZ3RoKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLmJ1ZmZlclt0aGlzLm9mZnNldCsrXT1lW3RdfXNldChlKXt0aGlzLmJ1ZmZlci5sZW5ndGg8dGhpcy5vZmZzZXQrZS5sZW5ndGgmJnRoaXMucmVzaXplKGUubGVuZ3RoKSx0aGlzLmJ1ZmZlci5zZXQoZSx0aGlzLm9mZnNldCksdGhpcy5vZmZzZXQrPWUubGVuZ3RofXJlc2l6ZShlKXtjb25zdCB0PW5ldyBGbG9hdDMyQXJyYXkoKG49dGhpcy5vZmZzZXQrZSxuLS0sbnw9bj4+MSxufD1uPj4yLG58PW4+PjQsbnw9bj4+OCxufD1uPj4xNiwrK24pKTt2YXIgbjt0aGlzLmJ1ZmZlci5sZW5ndGgmJnQuc2V0KHRoaXMuYnVmZmVyKSx0aGlzLmJ1ZmZlcj10fX07Y2xhc3MgWXQgZXh0ZW5kcyBNdHtjb25zdHJ1Y3RvcihlLHQsbj0hMCl7c3VwZXIoZSx0LG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjb3VudCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuY291bnQ9MH1jbGVhcigpe3RoaXMuY291bnQ9R3Qub2Zmc2V0PTB9fWNvbnN0IHF0PW5ldyBNYXAsS3Q9KCk9PntpZihxdC5oYXMoImkiKSlyZXR1cm4gcXQuZ2V0KCJpIik7Y29uc3QgZT1uZXcgWXQoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcbmxheW91dCAobG9jYXRpb24gPSAxKSBpbiB2ZWM0IGFfcmVjdDtcbmxheW91dCAobG9jYXRpb24gPSAyKSBpbiB2ZWM0IGFfc2l6ZTtcbmxheW91dCAobG9jYXRpb24gPSAzKSBpbiB2ZWMyIGFfb2Zmc2V0O1xubGF5b3V0IChsb2NhdGlvbiA9IDQpIGluIHZlYzQgYV9tYXRyaXg7XG5sYXlvdXQgKGxvY2F0aW9uID0gNSkgaW4gdmVjNCBhX211bDtcbmxheW91dCAobG9jYXRpb24gPSA2KSBpbiB2ZWM0IGFfYWRkO1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xub3V0IHZlYzQgdl9tdWw7XG5vdXQgdmVjNCB2X2FkZDtcblxudm9pZCBtYWluKCkge1xuICAgIHZfY29vcmQgPSBhX3ZlcnRleCAqIGFfcmVjdC56dyArIGFfcmVjdC54eTtcbiAgICB2X211bCA9IGFfbXVsO1xuICAgIHZfYWRkID0gYV9hZGQ7XG5cbiAgICB2ZWMyIHBvc2l0aW9uID0gdmVjMihhX3ZlcnRleC54LCAxLjAgLSBhX3ZlcnRleC55KTtcbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICogYV9zaXplLnh5O1xuXG4gICAgbWF0MyBtYXRyaXggPSBtYXQzKFxuICAgICAgICBhX21hdHJpeC54LCBhX21hdHJpeC55LCAwLjAsXG4gICAgICAgIGFfbWF0cml4LnosIGFfbWF0cml4LncsIDAuMCxcbiAgICAgICAgYV9vZmZzZXQueCwgYV9vZmZzZXQueSwgMS4wXG4gICAgKTtcblxuICAgIHBvc2l0aW9uID0gKG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEuMCkpLnh5O1xuICAgIHBvc2l0aW9uIC89IGFfc2l6ZS56dztcblxuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLngsIC1wb3NpdGlvbi55LCAwLjAsIDEuMCk7XG59IiwiI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xuXG5pbiB2ZWM0IHZfbXVsO1xuaW4gdmVjNCB2X2FkZDtcbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWM0IHNyYyA9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkKTtcblxuICAgIGlmICh2X211bC54ICE9IDEuMCB8fCB2X211bC55ICE9IDEuMCB8fCB2X211bC56ICE9IDEuMCB8fCB2X211bC53ICE9IDEuMFxuICAgICAgICB8fCB2X2FkZC54ICE9IDAuMCB8fCB2X2FkZC55ICE9IDAuMCB8fCB2X2FkZC56ICE9IDAuMFxuICAgICkge1xuICAgICAgICBzcmMucmdiIC89IG1heCgwLjAwMDEsIHNyYy5hKTtcbiAgICAgICAgc3JjID0gY2xhbXAoc3JjICogdl9tdWwgKyB2X2FkZCwgMC4wLCAxLjApO1xuICAgICAgICBzcmMucmdiICo9IHNyYy5hO1xuICAgIH1cblxuICAgIG9fY29sb3IgPSBzcmM7XG59Iik7cmV0dXJuIHF0LnNldCgiaSIsZSksZX0sSHQ9KGUsdCk9Pntjb25zdCBuPWBpJHtlfXlgO2lmKHF0LmhhcyhuKSlyZXR1cm4gcXQuZ2V0KG4pO2NvbnN0IHI9bmV3IE10KCIjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG5cbm91dCB2ZWMyIHZfY29vcmQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXg7XG5cbiAgICB2ZWMyIHBvc2l0aW9uID0gYV92ZXJ0ZXggKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7XG59IiwoZT0+e2xldCB0O3N3aXRjaChlKXtjYXNlInN1YnRyYWN0Ijp0PSJcbnZlYzQgYmxlbmQgKGluIHZlYzQgc3JjLCBpbiB2ZWM0IGRzdCkge1xuICAgIGlmIChzcmMuYSA9PSAwLjApIHsgcmV0dXJuIGRzdDsgfVxuICAgIGlmIChkc3QuYSA9PSAwLjApIHsgcmV0dXJuIHNyYzsgfVxuXG4gICAgdmVjNCBhID0gc3JjIC0gc3JjICogZHN0LmE7XG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG5cbiAgICBzcmMucmdiIC89IHNyYy5hO1xuICAgIGRzdC5yZ2IgLz0gZHN0LmE7XG5cbiAgICB2ZWM0IGMgPSB2ZWM0KGRzdC5yZ2IgLSBzcmMucmdiLCBzcmMuYSAqIGRzdC5hKTtcbiAgICBjLnJnYiAqPSBjLmE7XG5cbiAgICByZXR1cm4gYSArIGIgKyBjO1xufSI7YnJlYWs7Y2FzZSJtdWx0aXBseSI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICB2ZWM0IGEgPSBzcmMgLSBzcmMgKiBkc3QuYTtcbiAgICB2ZWM0IGIgPSBkc3QgLSBkc3QgKiBzcmMuYTtcbiAgICB2ZWM0IGMgPSBzcmMgKiBkc3Q7XG5cbiAgICByZXR1cm4gYSArIGIgKyBjO1xufSI7YnJlYWs7Y2FzZSJsaWdodGVuIjp0PSJcbnZlYzQgYmxlbmQgKGluIHZlYzQgc3JjLCBpbiB2ZWM0IGRzdCkge1xuICAgIGlmIChzcmMuYSA9PSAwLjApIHsgcmV0dXJuIGRzdDsgfVxuICAgIGlmIChkc3QuYSA9PSAwLjApIHsgcmV0dXJuIHNyYzsgfVxuXG4gICAgdmVjNCBhID0gc3JjIC0gc3JjICogZHN0LmE7XG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG5cbiAgICBzcmMucmdiIC89IHNyYy5hO1xuICAgIGRzdC5yZ2IgLz0gZHN0LmE7XG5cbiAgICB2ZWM0IGMgPSB2ZWM0KG1peChzcmMucmdiLCBkc3QucmdiLCBzdGVwKHNyYy5yZ2IsIGRzdC5yZ2IpKSwgc3JjLmEgKiBkc3QuYSk7XG4gICAgYy5yZ2IgKj0gYy5hO1xuXG4gICAgcmV0dXJuIGEgKyBiICsgYztcbn0iO2JyZWFrO2Nhc2UiZGFya2VuIjp0PSJcbnZlYzQgYmxlbmQgKGluIHZlYzQgc3JjLCBpbiB2ZWM0IGRzdCkge1xuICAgIGlmIChzcmMuYSA9PSAwLjApIHsgcmV0dXJuIGRzdDsgfVxuICAgIGlmIChkc3QuYSA9PSAwLjApIHsgcmV0dXJuIHNyYzsgfVxuXG4gICAgdmVjNCBhID0gc3JjIC0gc3JjICogZHN0LmE7XG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG5cbiAgICBzcmMucmdiIC89IHNyYy5hO1xuICAgIGRzdC5yZ2IgLz0gZHN0LmE7XG5cbiAgICB2ZWM0IGMgPSB2ZWM0KG1peChzcmMucmdiLCBkc3QucmdiLCBzdGVwKGRzdC5yZ2IsIHNyYy5yZ2IpKSwgc3JjLmEgKiBkc3QuYSk7XG4gICAgYy5yZ2IgKj0gYy5hO1xuXG4gICAgcmV0dXJuIGEgKyBiICsgYztcbn0iO2JyZWFrO2Nhc2Uib3ZlcmxheSI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBtdWwgPSBzcmMgKiBkc3Q7XG4gICAgdmVjMyBjMSA9IDIuMCAqIG11bC5yZ2I7XG4gICAgdmVjMyBjMiA9IDIuMCAqIChzcmMucmdiICsgZHN0LnJnYiAtIG11bC5yZ2IpIC0gMS4wO1xuICAgIHZlYzQgYyA9IHZlYzQobWl4KGMxLCBjMiwgc3RlcCh2ZWMzKDAuNSksIGRzdC5yZ2IpKSwgbXVsLmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlImhhcmRsaWdodCI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBtdWwgPSBzcmMgKiBkc3Q7XG4gICAgdmVjMyBjMSA9IDIuMCAqIG11bC5yZ2I7XG4gICAgdmVjMyBjMiA9IDIuMCAqIChzcmMucmdiICsgZHN0LnJnYiAtIG11bC5yZ2IpIC0gMS4wO1xuICAgIHZlYzQgYyA9IHZlYzQobWl4KGMxLCBjMiwgc3RlcCh2ZWMzKDAuNSksIHNyYy5yZ2IpKSwgbXVsLmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlImRpZmZlcmVuY2UiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgaWYgKHNyYy5hID09IDAuMCkgeyByZXR1cm4gZHN0OyB9XG4gICAgaWYgKGRzdC5hID09IDAuMCkgeyByZXR1cm4gc3JjOyB9XG5cbiAgICB2ZWM0IGEgPSBzcmMgLSBzcmMgKiBkc3QuYTtcbiAgICB2ZWM0IGIgPSBkc3QgLSBkc3QgKiBzcmMuYTtcblxuICAgIHNyYy5yZ2IgLz0gc3JjLmE7XG4gICAgZHN0LnJnYiAvPSBkc3QuYTtcblxuICAgIHZlYzQgYyA9IHZlYzQoYWJzKHNyYy5yZ2IgLSBkc3QucmdiKSwgc3JjLmEgKiBkc3QuYSk7XG4gICAgYy5yZ2IgKj0gYy5hO1xuXG4gICAgcmV0dXJuIGEgKyBiICsgYztcbn0iO2JyZWFrO2Nhc2UiaW52ZXJ0Ijp0PSJcbnZlYzQgYmxlbmQgKGluIHZlYzQgc3JjLCBpbiB2ZWM0IGRzdCkge1xuICAgIGlmIChzcmMuYSA9PSAwLjApIHsgcmV0dXJuIGRzdDsgfVxuICAgIGlmIChkc3QuYSA9PSAwLjApIHsgcmV0dXJuIHNyYzsgfVxuXG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG4gICAgdmVjNCBjID0gdmVjNChzcmMuYSAtIGRzdC5yZ2IgKiBzcmMuYSwgc3JjLmEpO1xuXG4gICAgcmV0dXJuIGIgKyBjO1xufSI7YnJlYWs7ZGVmYXVsdDp0PSJcbnZlYzQgYmxlbmQgKGluIHZlYzQgc3JjLCBpbiB2ZWM0IGRzdCkge1xuICAgIHJldHVybiBzcmMgKyBkc3QgLSBkc3QgKiBzcmMuYTtcbn0ifXJldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmVzWzJdO1xudW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFsyXTtcblxuaW4gdmVjMiB2X2Nvb3JkO1xub3V0IHZlYzQgb19jb2xvcjtcblxuJHt0fVxuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBkc3QgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHZfY29vcmQpO1xuICAgIHZlYzQgc3JjID0gdGV4dHVyZSh1X3RleHR1cmVzWzFdLCB2X2Nvb3JkKTtcbiAgICAke1Z0KDApfVxuICAgIG9fY29sb3IgPSBibGVuZChzcmMsIGRzdCk7XG59YH0pKGUpKTtyZXR1cm4gcXQuc2V0KG4scikscn07bGV0IFp0PTA7Y29uc3QgUXQ9KCk9Pntjb25zdCBlPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3QsdD1yLmF0bGFzQXR0YWNobWVudE9iamVjdDtpZihyLmJpbmQodCksbi5iaW5kRnJhbWVidWZmZXIobi5EUkFXX0ZSQU1FQlVGRkVSLFgpLFkoITEpLFp0PT09ZmUoKSl7Y29uc3QgZT1FZShmZSgpKTtlWzJdIT09LU51bWJlci5NQVhfVkFMVUUmJmVbM10hPT0tTnVtYmVyLk1BWF9WQUxVRSYmKG4uZW5hYmxlKG4uU0NJU1NPUl9URVNUKSxuLnNjaXNzb3IoZVswXSxlWzFdLGVbMl0sZVszXSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLHQud2lkdGgsdC5oZWlnaHQsMCwwLHQud2lkdGgsdC5oZWlnaHQsbi5DT0xPUl9CVUZGRVJfQklULG4uTkVBUkVTVCksbi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKSl9ZWxzZXtjb25zdCBlPXllKGZlKCkpO24uZW5hYmxlKG4uU0NJU1NPUl9URVNUKSxuLnNjaXNzb3IoZVswXSxlWzFdLGVbMl0sZVszXSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLHQud2lkdGgsdC5oZWlnaHQsMCwwLHQud2lkdGgsdC5oZWlnaHQsbi5DT0xPUl9CVUZGRVJfQklULG4uTkVBUkVTVCksbi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKSxadD1mZSgpfWUmJnIuYmluZChlKX0sSnQ9ZT0+e2NvbnN0IHQ9ZmUoKTtkZShlLmluZGV4KSxRdCgpO2NvbnN0IHI9SztuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLHIpO2NvbnN0IGE9Z2UoKTtuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKG4uRlJBTUVCVUZGRVIsbi5DT0xPUl9BVFRBQ0hNRU5UMCxuLlRFWFRVUkVfMkQsYS5yZXNvdXJjZSwwKTtjb25zdCBvPUooKTtuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLG8pO2NvbnN0IHM9dWUoZS53LGUuaCk7cmV0dXJuIG4uZnJhbWVidWZmZXJUZXh0dXJlMkQobi5GUkFNRUJVRkZFUixuLkNPTE9SX0FUVEFDSE1FTlQwLG4uVEVYVFVSRV8yRCxzLnJlc291cmNlLDApLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsbnVsbCksbi5iaW5kRnJhbWVidWZmZXIobi5SRUFEX0ZSQU1FQlVGRkVSLHIpLG4uYmluZEZyYW1lYnVmZmVyKG4uRFJBV19GUkFNRUJVRkZFUixvKSxuLmJsaXRGcmFtZWJ1ZmZlcihlLngsZS55LGUueCtlLncsZS55K2UuaCwwLDAsZS53LGUuaCxuLkNPTE9SX0JVRkZFUl9CSVQsbi5ORUFSRVNUKSxkZSh0KSxuLmJpbmRGcmFtZWJ1ZmZlcihuLlJFQURfRlJBTUVCVUZGRVIsRCksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixEKSxzfSxlbj0oZSx0LHI9ITEpPT57JGUoMixuLlRFWFRVUkUyLG51bGwsciksJGUoMSxuLlRFWFRVUkUxLHQsciksJGUoMCxuLlRFWFRVUkUwLGUscil9LHRuPSgpPT57aWYocXQuaGFzKCJwIikpcmV0dXJuIHF0LmdldCgicCIpO2NvbnN0IGU9bmV3IE10KCIjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG51bmlmb3JtIHZlYzQgdV9oaWdocFsyXTtcblxub3V0IHZlYzIgdl9jb29yZDtcblxudm9pZCBtYWluKCkge1xuICAgIHZfY29vcmQgPSBhX3ZlcnRleDtcblxuICAgIHZlYzIgb2Zmc2V0ICAgPSB1X2hpZ2hwWzBdLnh5O1xuICAgIHZlYzIgc2l6ZSAgICAgPSB1X2hpZ2hwWzBdLnp3O1xuICAgIHZlYzIgdmlld3BvcnQgPSB2ZWMyKHVfaGlnaHBbMV0ueCwgdV9oaWdocFsxXS55KTtcblxuICAgIHZlYzIgcG9zaXRpb24gPSB2ZWMyKGFfdmVydGV4LngsIDEuMCAtIGFfdmVydGV4LnkpO1xuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKiBzaXplICsgb2Zmc2V0O1xuICAgIHBvc2l0aW9uIC89IHZpZXdwb3J0O1xuXG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueCwgLXBvc2l0aW9uLnksIDAuMCwgMS4wKTtcbn0iLFd0KCExKSk7cmV0dXJuIHF0LnNldCgicCIsZSksZX0sbm49KGUsdCxuKT0+e2NvbnN0IGE9ZS5oaWdocCxvPXIuJG1hdHJpeDthWzBdPW9bNl0sYVsxXT1vWzddLGFbMl09dCxhWzNdPW4sYVs0XT14KCksYVs1XT1FKCl9LHJuPWU9PntlLnVzZVByb2dyYW0oKSxlLmJpbmRVbmlmb3JtKCksbXQoRXQoKSksbi5kcmF3QXJyYXlzKG4uVFJJQU5HTEVTLDAsNil9O2xldCBhbj1udWxsO2NvbnN0IG9uPShlLHQsYSxvKT0+e2NvbnN0IHM9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxpPXIuJG1haW5BdHRhY2htZW50T2JqZWN0O3IuYmluZChpKTtjb25zdCBjPUooKTtyZXR1cm4gbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixjKSxhbiYmYW4ud2lkdGg9PT1pLndpZHRoJiZhbi5oZWlnaHQ9PT1pLmhlaWdodHx8KGFuPXVlKGkud2lkdGgsaS5oZWlnaHQpKSxPZShhbiksbi5mcmFtZWJ1ZmZlclRleHR1cmUyRChuLkZSQU1FQlVGRkVSLG4uQ09MT1JfQVRUQUNITUVOVDAsbi5URVhUVVJFXzJELGFuLnJlc291cmNlLDApLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsbnVsbCksbi5iaW5kRnJhbWVidWZmZXIobi5SRUFEX0ZSQU1FQlVGRkVSLEQpLG4uYmluZEZyYW1lYnVmZmVyKG4uRFJBV19GUkFNRUJVRkZFUixjKSxuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGUsaS5oZWlnaHQtdC1vLGErMSxvKzEpLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCxpLndpZHRoLGkuaGVpZ2h0LDAsMCxpLndpZHRoLGkuaGVpZ2h0LG4uQ09MT1JfQlVGRkVSX0JJVCxuLk5FQVJFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixEKSxzJiZyLmJpbmQocyksYW59LHNuPShlLHQsbixhKT0+e2NvbnN0IG89ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxzPW9uKGUsdCxuLGEpLGk9aGUobixhLCExKTtyLmJpbmQoaSksci5zYXZlKCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwtZSwtdCk7Y29uc3QgYz10bigpO25uKGMscy53aWR0aCxzLmhlaWdodCksTHQoKSxPZShzKSxybihjKTtjb25zdCBsPWkudGV4dHVyZTtyZXR1cm4gci5yZXN0b3JlKCksZWUoaSwhMSksbyYmci5iaW5kKG8pLGx9LGNuPSgpPT57NjEwIT09SXQoKSYmKEJ0KDYxMCksbi5ibGVuZEZ1bmMobi5PTkUsbi5aRVJPKSl9LGxuPWU9PntPZShlKSxjbigpO2NvbnN0IHQ9dG4oKTtubih0LGUud2lkdGgsZS5oZWlnaHQpLHJuKHQpLEx0KCl9LHVuPShlLHQsbixyLGEsbyxzLGksYyk9Pntjb25zdCBsPWUudGV4dHVyZXM7bFswXT0wLGxbMV09MTtjb25zdCB1PWUubWVkaXVtcDt1WzBdPXQsdVsxXT1uLHVbMl09cix1WzNdPWEsdVs0XT1vLHVbNV09cyx1WzZdPWksdVs3XT1jfSxobj0oZT0hMSk9Pntjb25zdCB0PSJtIisoZT8ieSI6Im4iKTtpZihxdC5oYXModCkpcmV0dXJuIHF0LmdldCh0KTtjb25zdCBuPW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xudW5pZm9ybSB2ZWM0IHVfaGlnaHBbM107XG5cbm91dCB2ZWMyIHZfY29vcmQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXg7XG5cbiAgICBtYXQzIG1hdHJpeCA9IG1hdDMoXG4gICAgICAgIHVfaGlnaHBbMF0ueCwgdV9oaWdocFswXS55LCAwLjAsXG4gICAgICAgIHVfaGlnaHBbMF0ueiwgdV9oaWdocFswXS53LCAwLjAsXG4gICAgICAgIHVfaGlnaHBbMV0ueCwgdV9oaWdocFsxXS55LCAxLjBcbiAgICApO1xuXG4gICAgdmVjMiBzaXplICAgICA9IHVfaGlnaHBbMV0uenc7XG4gICAgdmVjMiB2aWV3cG9ydCA9IHZlYzIodV9oaWdocFsyXS54LCB1X2hpZ2hwWzJdLnkpO1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoYV92ZXJ0ZXgueCwgMS4wIC0gYV92ZXJ0ZXgueSk7XG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIHNpemU7XG4gICAgcG9zaXRpb24gPSAobWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMS4wKSkueHk7XG4gICAgcG9zaXRpb24gLz0gdmlld3BvcnQ7XG5cbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54LCAtcG9zaXRpb24ueSwgMC4wLCAxLjApO1xufSIsV3QoZSkpO3JldHVybiBxdC5zZXQodCxuKSxufSxibj0oZSx0LG4pPT57Y29uc3QgYT1lLmhpZ2hwLG89ci4kbWF0cml4O2FbMF09b1swXSxhWzFdPW9bMV0sYVsyXT1vWzNdLGFbM109b1s0XSxhWzRdPW9bNl0sYVs1XT1vWzddLGFbNl09dCxhWzddPW4sYVs4XT14KCksYVs5XT1FKCl9O2xldCBkbj0wO2NvbnN0IGZuPWU9PntlLnVzZVByb2dyYW0oKSxlLmJpbmRVbmlmb3JtKCksbXQoZ3QpLG4uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixwdCksR3QuYnVmZmVyLmxlbmd0aD5kbiYmKGRuPUd0LmJ1ZmZlci5sZW5ndGgsbi5idWZmZXJEYXRhKG4uQVJSQVlfQlVGRkVSLDQqZG4sbi5EWU5BTUlDX0RSQVcpKSxuLmJ1ZmZlclN1YkRhdGEobi5BUlJBWV9CVUZGRVIsMCxHdC5idWZmZXIuc3ViYXJyYXkoMCxHdC5vZmZzZXQpKSxuLmRyYXdBcnJheXNJbnN0YW5jZWQobi5UUklBTkdMRVMsMCw2LGUuY291bnQpfSxtbj0oKT0+ezYwMyE9PUl0KCkmJihCdCg2MDMpLG4uYmxlbmRGdW5jKG4uWkVSTyxuLk9ORV9NSU5VU19TUkNfQUxQSEEpKX0sdm49ZT0+e3N3aXRjaChlKXtjYXNlImFkZCI6NjExIT09SXQoKSYmKEJ0KDYxMSksbi5ibGVuZEZ1bmMobi5PTkUsbi5PTkUpKTticmVhaztjYXNlInNjcmVlbiI6NjQxIT09SXQoKSYmKEJ0KDY0MSksbi5ibGVuZEZ1bmMobi5PTkVfTUlOVVNfRFNUX0NPTE9SLG4uT05FKSk7YnJlYWs7Y2FzZSJhbHBoYSI6NjA2IT09SXQoKSYmKEJ0KDYwNiksbi5ibGVuZEZ1bmMobi5aRVJPLG4uU1JDX0FMUEhBKSk7YnJlYWs7Y2FzZSJlcmFzZSI6bW4oKTticmVhaztjYXNlImNvcHkiOmNuKCk7YnJlYWs7ZGVmYXVsdDpMdCgpfX0sX249ZT0+e3ZhciB0OyhlPT57cHQ9ZS5jcmVhdGVCdWZmZXIoKX0pKGUpLHQ9KCgpPT57Y29uc3QgZT1kdCgpO3JldHVybiBtdChlKSxuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsZS52ZXJ0ZXhCdWZmZXIpLG4uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUixuZXcgRmxvYXQzMkFycmF5KFswLDAsMSwwLDAsMSwxLDEsMCwxLDEsMF0pLG4uU1RBVElDX0RSQVcpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsMixuLkZMT0FULCExLDAsMCksbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLHB0KSxuLmJ1ZmZlckRhdGEobi5BUlJBWV9CVUZGRVIsR3QuYnVmZmVyLmxlbmd0aCxuLkRZTkFNSUNfRFJBVyksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoMSw0LG4uRkxPQVQsITEsODgsMCksbi52ZXJ0ZXhBdHRyaWJEaXZpc29yKDEsMSksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgyKSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoMiw0LG4uRkxPQVQsITEsODgsMTYpLG4udmVydGV4QXR0cmliRGl2aXNvcigyLDEpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMyksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDMsMixuLkZMT0FULCExLDg4LDMyKSxuLnZlcnRleEF0dHJpYkRpdmlzb3IoMywxKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDQpLG4udmVydGV4QXR0cmliUG9pbnRlcig0LDQsbi5GTE9BVCwhMSw4OCw0MCksbi52ZXJ0ZXhBdHRyaWJEaXZpc29yKDQsMSksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSg1KSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoNSw0LG4uRkxPQVQsITEsODgsNTYpLG4udmVydGV4QXR0cmliRGl2aXNvcig1LDEpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoNiksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDYsNCxuLkZMT0FULCExLDg4LDcyKSxuLnZlcnRleEF0dHJpYkRpdmlzb3IoNiwxKSxlfSkoKSxndD10fSxwbj0oZSx0LHIsYT0hMSk9Pntjb25zdCBvPXVlKGUsdCxhKTtyZXR1cm4gbi50ZXhTdWJJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLDAsMCxlLHQsbi5SR0JBLG4uVU5TSUdORURfQllURSxyKSxvfSxnbj0oZSx0KT0+e2NvbnN0IHI9KChlLHQscixhPSExKT0+e2NvbnN0IG89dWUoZSx0LGEpO3JldHVybiBuLnRleFN1YkltYWdlMkQobi5URVhUVVJFXzJELDAsMCwwLG4uUkdCQSxuLlVOU0lHTkVEX0JZVEUsciksb30pKGUudyxlLmgsdCksYT10bigpO25uKGEsZS53LGUuaCksTHQoKSxybihhKSxMKHIpfSx4bj1bXSxFbj1uZXcgTWFwLEFuPShlLHQsbik9PntPZShlLCEwKTtjb25zdCByPU1hdGguY2VpbCguNSpuKSxhPTEtKHItLjUqbiksbz0xK24scz0oZT0+e2NvbnN0IHQ9YGIke2V9YDtpZihFbi5oYXModCkpcmV0dXJuIEVuLmdldCh0KTtjb25zdCBuPW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKGU9Pntjb25zdCB0PWUudG9GaXhlZCgxKTtyZXR1cm5gI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xudW5pZm9ybSB2ZWM0IHVfbWVkaXVtcDtcblxuaW4gdmVjMiB2X2Nvb3JkO1xub3V0IHZlYzQgb19jb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgIG9mZnNldCAgID0gdV9tZWRpdW1wLnh5O1xuICAgIGZsb2F0IGZyYWN0aW9uID0gdV9tZWRpdW1wLno7XG4gICAgZmxvYXQgc2FtcGxlcyAgPSB1X21lZGl1bXAudztcbiAgICBcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZSh1X3RleHR1cmUsIHZfY29vcmQpO1xuXG4gICAgZm9yIChmbG9hdCBpID0gMS4wOyBpIDwgJHt0fTsgaSArPSAxLjApIHtcbiAgICAgICAgY29sb3IgKz0gdGV4dHVyZSh1X3RleHR1cmUsIHZfY29vcmQgKyBvZmZzZXQgKiBpKTtcbiAgICAgICAgY29sb3IgKz0gdGV4dHVyZSh1X3RleHR1cmUsIHZfY29vcmQgLSBvZmZzZXQgKiBpKTtcbiAgICB9XG4gICAgY29sb3IgKz0gdGV4dHVyZSh1X3RleHR1cmUsIHZfY29vcmQgKyBvZmZzZXQgKiAke3R9KSAqIGZyYWN0aW9uO1xuICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkIC0gb2Zmc2V0ICogJHt0fSkgKiBmcmFjdGlvbjtcbiAgICBjb2xvciAvPSBzYW1wbGVzO1xuXG4gICAgb19jb2xvciA9IGNvbG9yO1xufWB9KShlKSk7cmV0dXJuIEVuLnNldCh0LG4pLG59KShyKTsoKGUsdCxuLHIsYSxvKT0+e2NvbnN0IHM9ZS5tZWRpdW1wO3I/KHNbMF09MS90LHNbMV09MCk6KHNbMF09MCxzWzFdPTEvbiksc1syXT1hLHNbM109b30pKHMsZS53aWR0aCxlLmhlaWdodCx0LGEsbykscm4ocyl9LHluPXt4OjAseTowfSxUbj0oZSx0LG4pPT4oZT4+MTYpKihuP3Q6MSkvMjU1LFJuPShlLHQsbik9PihlPj44JjI1NSkqKG4/dDoxKS8yNTUsTW49KGUsdCxuKT0+KDI1NSZlKSoobj90OjEpLzI1NSx3bj1bLjUsMS4wNSwxLjQsMS41NSwxLjc1LDEuOSwyLDIuMTUsMi4yLDIuMywyLjUsMywzLDMuNSwzLjVdLEZuPShlLHQsbj00LGE9NCxvPTEscz0hMCk9Pntjb25zdCBpPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3QsYz1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSksbD1NYXRoLnNxcnQodFsyXSp0WzJdK3RbM10qdFszXSksdT15KCksaD1uKihjL3UpLGI9YSoobC91KSxkPXduW28tMV0sZj1NYXRoLnJvdW5kKGgqZCksbT1NYXRoLnJvdW5kKGIqZCk7eW4ueCs9Zix5bi55Kz1tO2NvbnN0IHY9ZS53aWR0aCsyKmYsXz1lLmhlaWdodCsyKm07bGV0IHA9MSxnPTE7aD4xMjg/cD0uMDYyNTpoPjY0P3A9LjEyNTpoPjMyP3A9LjI1Omg+MTYmJihwPS41KSxiPjEyOD9nPS4wNjI1OmI+NjQ/Zz0uMTI1OmI+MzI/Zz0uMjU6Yj4xNiYmKGc9LjUpO2NvbnN0IHg9TWF0aC5jZWlsKHYqcCksRT1NYXRoLmNlaWwoXypnKSxBPWhlKHgsRSwhMSksVD1bQSxoZSh4LEUsITEpXTtyLmJpbmQoQSksci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKHAsMCwwLGcsZipwLG0qZyksT2UoZSk7Y29uc3QgUj1obigpO2JuKFIsZS53aWR0aCxlLmhlaWdodCkscm4oUikscyYmTChlKTtjb25zdCBNPWgqcCx3PWIqZztsZXQgRj0wLCQ9QS50ZXh0dXJlO09lKCQsITApLGNuKCk7Zm9yKGxldCBlPTA7ZTxvOysrZSl7aWYobj4wKXtGPShGKzEpJTI7Y29uc3QgZT1UW0ZdO3IuYmluZChlKSxBbigkLCEwLE0pLCQ9ZS50ZXh0dXJlfWlmKGE+MCl7Rj0oRisxKSUyO2NvbnN0IGU9VFtGXTtyLmJpbmQoZSksQW4oJCwhMSx3KSwkPWUudGV4dHVyZX19aWYoTHQoKSwxIT09cHx8MSE9PWcpe2NvbnN0IGU9aGUodixfLCExKTtyLmJpbmQoZSksci5zZXRUcmFuc2Zvcm0oMS9wLDAsMCwxL2csMCwwKSxPZSgkLCEwKSxibihSLCQud2lkdGgsJC5oZWlnaHQpLHJuKFIpLCQ9ZS50ZXh0dXJlLGVlKFRbMF0pLGVlKFRbMV0pLGVlKGUsITEpfWVsc2UgRj0oRisxKSUyLGVlKFRbRl0pLEY9KEYrMSklMixlZShUW0ZdLCExKTtyZXR1cm4gaSYmci5iaW5kKGkpLCR9LCRuPShlLHQpPT57Y29uc3Qgbj1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LGE9aGUoZS53aWR0aCxlLmhlaWdodCwhMSk7ci5iaW5kKGEpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksT2UoZSksTHQoKTtjb25zdCBvPSgoKT0+e2lmKEVuLmhhcygibSIpKXJldHVybiBFbi5nZXQoIm0iKTtjb25zdCBlPW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbNV07XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBtYXQ0IG11bCA9IG1hdDQodV9tZWRpdW1wWzBdLCB1X21lZGl1bXBbMV0sIHVfbWVkaXVtcFsyXSwgdV9tZWRpdW1wWzNdKTtcbiAgICB2ZWM0IGFkZCA9IHVfbWVkaXVtcFs0XTtcbiAgICBcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZSh1X3RleHR1cmUsIHZfY29vcmQpO1xuXG4gICAgY29sb3IucmdiIC89IG1heCgwLjAwMDEsIGNvbG9yLmEpO1xuICAgIGNvbG9yID0gY2xhbXAoY29sb3IgKiBtdWwgKyBhZGQsIDAuMCwgMS4wKTtcbiAgICBjb2xvci5yZ2IgKj0gY29sb3IuYTtcblxuICAgIG9fY29sb3IgPSBjb2xvcjtcbn0iKTtyZXR1cm4gRW4uc2V0KCJtIixlKSxlfSkoKTsoKGUsdCk9Pntjb25zdCBuPWUubWVkaXVtcDtuWzBdPXRbMF0sblsxXT10WzFdLG5bMl09dFsyXSxuWzNdPXRbM10sbls0XT10WzVdLG5bNV09dFs2XSxuWzZdPXRbN10sbls3XT10WzhdLG5bOF09dFsxMF0sbls5XT10WzExXSxuWzEwXT10WzEyXSxuWzExXT10WzEzXSxuWzEyXT10WzE1XSxuWzEzXT10WzE2XSxuWzE0XT10WzE3XSxuWzE1XT10WzE4XSxuWzE2XT10WzRdLzI1NSxuWzE3XT10WzldLzI1NSxuWzE4XT10WzE0XS8yNTUsblsxOV09dFsxOV0vMjU1fSkobyx0KSxybihvKTtjb25zdCBzPWEudGV4dHVyZTtyZXR1cm4gTChlKSxlZShhLCExKSxuJiZyLmJpbmQobiksc30sT249KGUsdCxuLHIsYSxvKT0+e2NvbnN0IHM9ZT8iYmx1ci5hID0gMS4wIC0gYmx1ci5hOyI6IiIsaT1uPyhjPW8sYFxuICAgIGZsb2F0IHN0cmVuZ3RoID0gdV9tZWRpdW1wWyR7TWF0aC5mbG9vcihjLzQpfV1bJHtjJTR9XTtcbiAgICBibHVyLmEgPSBjbGFtcChibHVyLmEgKiBzdHJlbmd0aCwgMC4wLCAxLjApO1xuYCk6IiI7dmFyIGM7Y29uc3QgbD1yPyhlPT5gXG4gICAgYmx1ciA9IHRleHR1cmUodV90ZXh0dXJlc1ske2U/MjoxfV0sIHZlYzIoYmx1ci5hLCAwLjUpKTtcbmApKHQpOihlPT5gXG4gICAgdmVjNCBjb2xvciA9IHVfbWVkaXVtcFske2V9XTtcbiAgICBibHVyID0gY29sb3IgKiBibHVyLmE7XG5gKShhKTtyZXR1cm5gXG4gICAgJHtzfVxuICAgICR7aX1cbiAgICAke2x9XG5gfSxTbj0oZSx0LG4scixhLG8pPT57Y29uc3Qgcz10PyJcbiAgICB2ZWMyIHBxID0gKDEuMCAtIHZfY29vcmQpICogYmx1cl9zY2FsZSAtIGJsdXJfb2Zmc2V0O1xuICAgIHZlYzQgYmx1cjIgPSBtaXgodmVjNCgwLjApLCB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHBxKSwgaXNJbnNpZGUocHEpKTtcbiI6IlxuICAgIHZlYzQgYmx1cjIgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIDEuMCAtIHZfY29vcmQpO1xuIixpPW4/KGM9byxgXG4gICAgZmxvYXQgc3RyZW5ndGggPSB1X21lZGl1bXBbJHtNYXRoLmZsb29yKGMvNCl9XVske2MlNH1dO1xuICAgIGhpZ2hsaWdodF9hbHBoYSAqPSBzdHJlbmd0aDtcbiAgICBzaGFkb3dfYWxwaGEgICAgKj0gc3RyZW5ndGg7XG5gKToiIjt2YXIgYztjb25zdCBsPXI/KGU9PmBcbiAgICBibHVyID0gdGV4dHVyZSh1X3RleHR1cmVzWyR7ZT8yOjF9XSwgdmVjMihcbiAgICAgICAgMC41MDE5NjA3ODQzMTM3MjU1IC0gMC41MDE5NjA3ODQzMTM3MjU1ICogc2hhZG93X2FscGhhICsgMC40OTgwMzkyMTU2ODYyNzQ1ICogaGlnaGxpZ2h0X2FscGhhLFxuICAgICAgICAwLjVcbiAgICApKTtcbmApKGUpOihlPT5gXG4gICAgdmVjNCBoaWdobGlnaHRfY29sb3IgPSB1X21lZGl1bXBbJHtlfV07XG4gICAgdmVjNCBzaGFkb3dfY29sb3IgICAgPSB1X21lZGl1bXBbJHtlKzF9XTtcbiAgICBibHVyID0gaGlnaGxpZ2h0X2NvbG9yICogaGlnaGxpZ2h0X2FscGhhICsgc2hhZG93X2NvbG9yICogc2hhZG93X2FscGhhO1xuYCkoYSk7cmV0dXJuYFxuICAgICR7c31cbiAgICBmbG9hdCBoaWdobGlnaHRfYWxwaGEgPSBibHVyLmEgLSBibHVyMi5hO1xuICAgIGZsb2F0IHNoYWRvd19hbHBoYSAgICA9IGJsdXIyLmEgLSBibHVyLmE7XG4gICAgJHtpfVxuICAgIGhpZ2hsaWdodF9hbHBoYSA9IGNsYW1wKGhpZ2hsaWdodF9hbHBoYSwgMC4wLCAxLjApO1xuICAgIHNoYWRvd19hbHBoYSAgICA9IGNsYW1wKHNoYWRvd19hbHBoYSwgMC4wLCAxLjApO1xuICAgICR7bH1cbmB9LGtuPShlLHQsbixyLGEsbyxzKT0+e2NvbnN0IGk9YGYke2U/InkiOiJuIn0ke3Q/InkiOiJuIn0ke24/InkiOiJuIn0ke3J9JHthPyJ5IjoibiJ9JHtvPyJ5IjoibiJ9YDtpZihFbi5oYXMoaSkpcmV0dXJuIEVuLmdldChpKTtsZXQgYz0xO2UmJmMrKyxzJiZjKys7bGV0IGw9KGU/NDowKSsodD80OjApKyhvPzE6MCk7c3x8KGwrPW4/NDo4KSxsPU1hdGguY2VpbChsLzQpO2NvbnN0IHU9bmV3IE10KCIjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG5cbm91dCB2ZWMyIHZfY29vcmQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXg7XG5cbiAgICB2ZWMyIHBvc2l0aW9uID0gYV92ZXJ0ZXggKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7XG59IiwoKGUsdCxuLHIsYSxvLHMsaSxjKT0+e2xldCBsPTA7Y29uc3QgdT1uPyhlPT5gXG4gICAgdmVjMiBiYXNlX3NjYWxlICA9IHVfbWVkaXVtcFske2V9XS54eTtcbiAgICB2ZWMyIGJhc2Vfb2Zmc2V0ID0gdV9tZWRpdW1wWyR7ZX1dLnp3O1xuXG4gICAgdmVjMiB1diA9IHZfY29vcmQgKiBiYXNlX3NjYWxlIC0gYmFzZV9vZmZzZXQ7XG4gICAgdmVjNCBiYXNlID0gbWl4KHZlYzQoMC4wKSwgdGV4dHVyZSh1X3RleHR1cmVzWzFdLCB1diksIGlzSW5zaWRlKHV2KSk7XG5gKShsKyspOiIiLGg9cj8oZT0+YFxuICAgIHZlYzIgYmx1cl9zY2FsZSAgPSB1X21lZGl1bXBbJHtlfV0ueHk7XG4gICAgdmVjMiBibHVyX29mZnNldCA9IHVfbWVkaXVtcFske2V9XS56dztcblxuICAgIHZlYzIgc3QgPSB2X2Nvb3JkICogYmx1cl9zY2FsZSAtIGJsdXJfb2Zmc2V0O1xuICAgIHZlYzQgYmx1ciA9IG1peCh2ZWM0KDAuMCksIHRleHR1cmUodV90ZXh0dXJlc1swXSwgc3QpLCBpc0luc2lkZShzdCkpO1xuYCkobCsrKToiXG4gICAgdmVjNCBibHVyID0gdGV4dHVyZSh1X3RleHR1cmVzWzBdLCB2X2Nvb3JkKTtcbiIsYj0iaW5uZXIiPT09byxkPWw7bGV0IGYsbSx2PTQqbDtzd2l0Y2goYz9mPWE/T24oITEsbixpLGMsZCx2KTpTbihuLHIsaSxjLGQsdik6YT8odis9NCxmPU9uKGIsbixpLGMsZCx2KSk6KHYrPTgsZj1TbihuLHIsaSxjLGQsdikpLG8pe2Nhc2Uib3V0ZXIiOm09cz8iYmx1ciAtIGJsdXIgKiBiYXNlLmEiOiJiYXNlICsgYmx1ciAtIGJsdXIgKiBiYXNlLmEiO2JyZWFrO2Nhc2UiZnVsbCI6bT1zPyJibHVyIjoiYmFzZSAtIGJhc2UgKiBibHVyLmEgKyBibHVyIjticmVhaztkZWZhdWx0Om09ImJsdXIifXJldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmVzWyR7ZX1dO1xudW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFske3R9XTtcblxuaW4gdmVjMiB2X2Nvb3JkO1xub3V0IHZlYzQgb19jb2xvcjtcblxuXG5mbG9hdCBpc0luc2lkZShpbiB2ZWMyIHV2KSB7XG4gICAgcmV0dXJuIHN0ZXAoNC4wLCBkb3Qoc3RlcCh2ZWM0KDAuMCwgdXYueCwgMC4wLCB1di55KSwgdmVjNCh1di54LCAxLjAsIHV2LnksIDEuMCkpLCB2ZWM0KDEuMCkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAgICR7dX1cbiAgICAke2h9XG4gICAgJHtmfVxuICAgIG9fY29sb3IgPSAke219O1xufWB9KShjLGwsZSx0LG4scixhLG8scykpO3JldHVybiBFbi5zZXQoaSx1KSx1fSxDbj1uZXcgTWFwLFBuPShlLHQpPT57Y29uc3Qgbj1gbCR7KCIwMCIrZSkuc2xpY2UoLTMpfSR7dD8ieSI6Im4ifWA7aWYoQ24uaGFzKG4pKXJldHVybiBDbi5nZXQobik7Y29uc3Qgcj1NYXRoLmNlaWwoNSplLzQpLGE9bmV3IE10KCIjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG5cbm91dCB2ZWMyIHZfY29vcmQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXg7XG5cbiAgICB2ZWMyIHBvc2l0aW9uID0gYV92ZXJ0ZXggKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7XG59IiwoKGUsdCxuKT0+e2xldCByPSIiO2ZvcihsZXQgZT0xO2U8dDsrK2Upe2NvbnN0IG49ZS0xLGE9ZSxvPWB1X21lZGl1bXBbJHt0K01hdGguZmxvb3Iobi80KX1dWyR7biU0fV1gLHM9YHVfbWVkaXVtcFske3QrTWF0aC5mbG9vcihhLzQpfV1bJHthJTR9XWA7cis9YFxuICAgIGlmICh0IDw9ICR7c30pIHtcbiAgICAgICAgcmV0dXJuIG1peCh1X21lZGl1bXBbJHtufV0sIHVfbWVkaXVtcFske2F9XSwgKHQgLSAke299KSAvICgke3N9IC0gJHtvfSkpO1xuICAgIH1cbmB9cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbJHtlfV07XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZlYzQgZ2V0R3JhZGllbnRDb2xvcihpbiBmbG9hdCB0KSB7XG4gICAgaWYgKHQgPD0gdV9tZWRpdW1wWyR7dH1dWzBdKSB7XG4gICAgICAgIHJldHVybiB1X21lZGl1bXBbMF07XG4gICAgfVxuICAgICR7cn1cbiAgICByZXR1cm4gdV9tZWRpdW1wWyR7dC0xfV07XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWM0IGNvbG9yID0gZ2V0R3JhZGllbnRDb2xvcih2X2Nvb3JkLngpO1xuICAgICR7bj8iY29sb3IgPSBwb3coY29sb3IsIHZlYzQoMC40NTQ1NDU0NSkpOyI6IiJ9XG4gICAgY29sb3IucmdiICo9IGNvbG9yLmE7XG5cbiAgICBvX2NvbG9yID0gY29sb3I7XG59YH0pKHIsZSx0KSk7cmV0dXJuIENuLnNldChuLGEpLGF9LEJuPShlLHQsbixyLGEsbyk9Pntjb25zdCBzPWUubWVkaXVtcDtsZXQgaT0wO2ZvcihsZXQgZT1hO2U8bztlKyspe2NvbnN0IHQ9bltlXTtzW2krK109KHQ+PjE2KS8yNTUsc1tpKytdPSh0Pj44JjI1NSkvMjU1LHNbaSsrXT0oMjU1JnQpLzI1NSxzW2krK109cltlXX1mb3IobGV0IGU9YTtlPG87ZSsrKXNbaSsrXT10W2VdLzI1NX07bGV0IEluO2NvbnN0IExuPShlLHQpPT4oSW4/X3RbMF09PT1lJiZfdFs0XT09PXR8fChfdFswXT1lLF90WzJdPWUsX3RbNF09dCxfdFs2XT10LG4uYnVmZmVyU3ViRGF0YShuLkFSUkFZX0JVRkZFUiwwLF90KSk6SW49KChlLHQpPT57Y29uc3Qgcj1kdCgpO3JldHVybiBtdChyKSxuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsci52ZXJ0ZXhCdWZmZXIpLF90WzBdPWUsX3RbMl09ZSxfdFs0XT10LF90WzZdPXQsbi5idWZmZXJEYXRhKG4uQVJSQVlfQlVGRkVSLF90LG4uU1RBVElDX0RSQVcpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsMixuLkZMT0FULCExLDAsMCkscn0pKGUsdCksSW4pLFVuPShlLHQscik9PntlLnVzZVByb2dyYW0oKSxlLmJpbmRVbmlmb3JtKCksbXQoTG4odCxyKSksbi5kcmF3QXJyYXlzKG4uVFJJQU5HTEVfU1RSSVAsMCw0KX07bGV0IE5uPW51bGw7Y29uc3QgRG49KCk9PihObnx8KE5uPWhlKDUxMiwxLCExKSksTm4pO2xldCBqbj0wO2NvbnN0IFhuPSgpPT5qbix6bj1uZXcgRmxvYXQzMkFycmF5KDI1NiksVm49bmV3IEZsb2F0MzJBcnJheSgyNTYpO2ZvcihsZXQgZT0wO2U8MjU2OysrZSl7Y29uc3QgdD1lLzI1NTt6bltlXT1NYXRoLnBvdyh0LDIuMjMzMzMzMzMpLFZuW2VdPXR9Y29uc3QgV249KGUsdCxhLG8scyxpLGMsbCx1LGgsYixkLGYsbSx2LF8scD1udWxsLGc9bnVsbCx4PW51bGwsRT0wLEE9MCx5PTAsVD0wLFI9MCxNPTAsdz0wLEY9MCk9Pntjb25zdCAkPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3QsTz1oZShhLG8sITEpO3IuYmluZChPKTtjb25zdCBTPSJpbm5lciI9PT1tLGs9bnVsbCE9PXAmJm51bGwhPT1nJiZudWxsIT09eDtsZXQgQz1udWxsO2lmKGsmJihDPSgoZSx0LG4pPT57Y29uc3QgYT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LG89RG4oKTtyLmJpbmQobyk7Y29uc3Qgcz1lLmxlbmd0aDtjbigpO2NvbnN0IGk9WG4oKTtmb3IobGV0IHI9MDtyPHM7cis9aS0xKXtjb25zdCBhPU1hdGgubWluKHIraSxzKSxvPVBuKGEtciwhMSk7Qm4obyxlLHQsbixyLGEpLFVuKG8sZVtyXS8yNTUsZVthLTFdLzI1NSl9cmV0dXJuIEx0KCksYSYmci5iaW5kKGEpLG8udGV4dHVyZX0pKHAsZyx4KSksUyl7ci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxPZShlLCEwKTtjb25zdCBhPXRuKCk7bm4oYSxlLndpZHRoLGUuaGVpZ2h0KSxybihhKSxrJiZDPygoZSx0LHI9ITEpPT57JGUoMixuLlRFWFRVUkUyLHQsciksJGUoMSxuLlRFWFRVUkUxLG51bGwpLCRlKDAsbi5URVhUVVJFMCxlLHIpfSkodCxDLCEwKTpPZSh0LCEwKX1lbHNlIGsmJkM/KChlLHQscixhPSExKT0+eyRlKDIsbi5URVhUVVJFMixyLGEpLCRlKDEsbi5URVhUVVJFMSx0LGEpLCRlKDAsbi5URVhUVVJFMCxlLGEpfSkodCxlLEMsITApOmVuKHQsZSwhMCk7Y29uc3QgUD0hKFN8fCJmdWxsIj09PW0mJnYpLEI9IShhPT09dSYmbz09PWgmJjA9PT1iJiYwPT09ZCksST0hKDE9PT1fKTtTP3Y/NjcwIT09SXQoKSYmKEJ0KDY3MCksbi5ibGVuZEZ1bmMobi5EU1RfQUxQSEEsbi5aRVJPKSk6NjczIT09SXQoKSYmKEJ0KDY3Myksbi5ibGVuZEZ1bmMobi5EU1RfQUxQSEEsbi5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6Y24oKTtjb25zdCBMPWtuKFAsQixmLG0sdixJLGspOygoZSx0LG4scixhLG8scyxpLGMsbCx1LGgsYixkLGYsbSx2LF8scCxnLHgsRSxBLHksVCk9PntsZXQgUjtFPyhSPWUudGV4dHVyZXMsUlswXT0wLFJbMV09MSxUJiYoUlsyXT0yKSk6VCYmKFI9ZS50ZXh0dXJlcyxSWzBdPTAsUlsxXT0yKTtjb25zdCBNPWUubWVkaXVtcDtsZXQgdz0wO0UmJihNW3crK109dC9yLE1bdysrXT1uL2EsTVt3KytdPW8vcixNW3crK109KG4tYS1zKS9hKSxBJiYoTVt3KytdPXQvaSxNW3crK109bi9jLE1bdysrXT1sL2ksTVt3KytdPShuLWMtdSkvYyksVHx8KGg/KE1bdysrXT1kLE1bdysrXT1mLE1bdysrXT1tLE1bdysrXT12KTooTVt3KytdPWQsTVt3KytdPWYsTVt3KytdPW0sTVt3KytdPXYsTVt3KytdPV8sTVt3KytdPXAsTVt3KytdPWcsTVt3KytdPXgpKSx5JiYoTVt3XT1iKX0pKEwsYSxvLHMsaSxjLGwsdSxoLGIsZCxmLF8sRSxBLHksVCxSLE0sdyxGLFAsQixJLGspLHJuKEwpO2NvbnN0IFU9Ty50ZXh0dXJlO3JldHVybiBlZShPLCExKSxMdCgpLCQmJnIuYmluZCgkKSxVfSxHbj0oZSx0LG49MCxhPTEsbz00LHM9NCxpPTEsYz0xLGw9ITEsdT0hMSk9Pntjb25zdCBoPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3QsYj1lLndpZHRoLGQ9ZS5oZWlnaHQsZj15bi54LG09eW4ueSx2PUZuKGUsdCxvLHMsYywhMSksXz12LndpZHRoLHA9di5oZWlnaHQsZz15bi54LWYseD15bi55LW0sRT1XbihlLHYsbD9iOl8sbD9kOnAsYixkLGw/MDpnLGw/MDp4LF8scCxsPy1nOjAsbD8teDowLCEwLGw/ImlubmVyIjoib3V0ZXIiLHUsaSxudWxsLG51bGwsbnVsbCxUbihuLGEsITApLFJuKG4sYSwhMCksTW4obixhLCEwKSxhLDAsMCwwLDApO3JldHVybiBMKGUpLEwodiksaCYmci5iaW5kKGgpLEV9LFluPU1hdGguUEkvMTgwLHFuPShlLHQsbj00LGE9NDUsbz0wLHM9MSxpPTQsYz00LGw9MSx1PTEsaD0hMSxiPSExLGQ9ITEpPT57Y29uc3QgZj1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LG09ZS53aWR0aCx2PWUuaGVpZ2h0LF89eW4ueCxwPXluLnksZz1GbihlLHQsaSxjLHUsITEpLHg9Zy53aWR0aCxFPWcuaGVpZ2h0LEE9eW4ueCxUPXluLnksUj1BLV8sTT1ULXAsdz1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSksRj1NYXRoLnNxcnQodFsyXSp0WzJdK3RbM10qdFszXSksJD15KCksTz1hKlluLFM9TWF0aC5jb3MoTykqbioody8kKSxrPU1hdGguc2luKE8pKm4qKEYvJCksQz1oP206eCtNYXRoLm1heCgwLE1hdGguYWJzKFMpLVIpLFA9aD92OkUrTWF0aC5tYXgoMCxNYXRoLmFicyhrKS1NKSxCPU1hdGguY2VpbChDKSxJPU1hdGguY2VpbChQKSxVPShCLUMpLzIsTj0oSS1QKS8yLEQ9aD8wOk1hdGgubWF4KDAsUi1TKStVLGo9aD8wOk1hdGgubWF4KDAsTS1rKStOLFg9aD9TLUE6KFM+MD9NYXRoLm1heCgwLFMtUik6MCkrVSx6PWg/ay1UOihrPjA/TWF0aC5tYXgoMCxrLU0pOjApK047bGV0IFYsVz0iIjtoPyhXPSJpbm5lciIsVj1ifHxkKTohYiYmZD8oVz0iZnVsbCIsVj0hMCk6KFc9Im91dGVyIixWPWIpO2NvbnN0IEc9V24oZSxnLEIsSSxtLHYsRCxqLHgsRSxYLHosITAsVyxWLGwsbnVsbCxudWxsLG51bGwsVG4obyxzLCEwKSxSbihvLHMsITApLE1uKG8scywhMCkscywwLDAsMCwwKTtyZXR1cm4gTChlKSxMKGcpLGYmJnIuYmluZChmKSxHfSxLbj1NYXRoLlBJLzE4MCxIbj0oZSx0LG49NCxhPTQ1LG89MTY3NzcyMTUscz0xLGk9MCxjPTEsbD00LHU9NCxoPTEsYj0xLGQ9MCxmPSExKT0+e2NvbnN0IG09ZS53aWR0aCx2PWUuaGVpZ2h0LF89eW4ueCxwPXluLnksZz1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSkseD1NYXRoLnNxcnQodFsyXSp0WzJdK3RbM10qdFszXSksRT15KCksQT1hKktuLFQ9TWF0aC5jb3MoQSkqbiooZy9FKSxSPU1hdGguc2luKEEpKm4qKHgvRSksTT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LHc9aGUobSx2LCExKTtyLmJpbmQodyksci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxPZShlKTtjb25zdCBGPXRuKCk7bm4oRixlLndpZHRoLGUuaGVpZ2h0KSxybihGKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDIqVCwyKlIpLG1uKCksbm4oRixlLndpZHRoLGUuaGVpZ2h0KSxybihGKSxMdCgpO2NvbnN0ICQ9dy50ZXh0dXJlO00mJnIuYmluZChNKTtjb25zdCBPPUZuKCQsdCxsLHUsYiwhMSk7ZWUodyk7Y29uc3QgUz1PLndpZHRoLGs9Ty5oZWlnaHQsQz1NYXRoLmNlaWwoUysyKk1hdGguYWJzKFQpKSxQPU1hdGguY2VpbChrKzIqTWF0aC5hYnMoUikpO2xldCBCPSIiO3N3aXRjaChkKXtjYXNlIDA6Qj0iZnVsbCI7YnJlYWs7Y2FzZSAxOkI9ImlubmVyIjticmVhaztjYXNlIDI6Qj0ib3V0ZXIifWNvbnN0IEk9ImlubmVyIj09PUIsVT1JP206QyxOPUk/djpQLEQ9TWF0aC5hYnMoVCksaj1NYXRoLmFicyhSKSxYPShTLW0pLzIsej0oay12KS8yLFY9ST8wOkQrWCxXPUk/MDpqK3osRz1XbihlLE8sVSxOLG0sdixWLFcsUyxrLEk/LVgtVDpELVQsST8tei1SOmotUiwhMSxCLGYsaCxudWxsLG51bGwsbnVsbCxUbihvLHMsITApLFJuKG8scywhMCksTW4obyxzLCEwKSxzLFRuKGksYywhMCksUm4oaSxjLCEwKSxNbihpLGMsITApLGMpO3JldHVybiB5bi54PV8rVix5bi55PXArVyxMKGUpLEwoTyksR30sWm49TWF0aC5QSS8xODAsUW49KGUsdCxuPTQsYT00NSxvLHMsaSxjPTQsbD00LHU9MSxoPTEsYj0wLGQ9ITEpPT57Y29uc3QgZj1lLndpZHRoLG09ZS5oZWlnaHQsdj15bi54LF89eW4ueSxwPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKSxnPU1hdGguc3FydCh0WzJdKnRbMl0rdFszXSp0WzNdKSx4PXkoKSxFPWEqWm4sQT1NYXRoLmNvcyhFKSpuKihwL3gpLFQ9TWF0aC5zaW4oRSkqbiooZy94KSxSPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3QsTT1oZShmLG0sITEpO3IuYmluZChNKSxyLnJlc2V0KCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLE9lKGUpO2NvbnN0IHc9dG4oKTtubih3LGUud2lkdGgsZS5oZWlnaHQpLHJuKHcpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMipBLDIqVCksbW4oKSxubih3LGUud2lkdGgsZS5oZWlnaHQpLHJuKHcpLEx0KCk7Y29uc3QgRj1NLnRleHR1cmU7UiYmci5iaW5kKFIpO2NvbnN0ICQ9Rm4oRix0LGMsbCxoLCExKTtlZShNKTtjb25zdCBPPSQud2lkdGgsUz0kLmhlaWdodCxrPU1hdGguY2VpbChPKzIqTWF0aC5hYnMoQSkpLEM9TWF0aC5jZWlsKFMrMipNYXRoLmFicyhUKSk7bGV0IFA9IiI7c3dpdGNoKGIpe2Nhc2UgMDpQPSJmdWxsIjticmVhaztjYXNlIDE6UD0iaW5uZXIiO2JyZWFrO2Nhc2UgMjpQPSJvdXRlciJ9Y29uc3QgQj0iaW5uZXIiPT09UCxJPUI/ZjprLFU9Qj9tOkMsTj1NYXRoLmFicyhBKSxEPU1hdGguYWJzKFQpLGo9KE8tZikvMixYPShTLW0pLzIsej1CPzA6TitqLFY9Qj8wOkQrWCxXPVduKGUsJCxJLFUsZixtLHosVixPLFMsQj8tai1BOk4tQSxCPy1YLVQ6RC1ULCExLFAsZCx1LGksbyxzLDAsMCwwLDAsMCwwLDAsMCk7cmV0dXJuIHluLng9dit6LHluLnk9XytWLEwoZSksTCgkKSxXfSxKbj1NYXRoLlBJLzE4MCxlcj0oZSx0LG49NCxyPTQ1LGEsbyxzLGk9NCxjPTQsbD0xLHU9MSxoPTAsYj0hMSk9Pntjb25zdCBkPWUud2lkdGgsZj1lLmhlaWdodCxtPXluLngsdj15bi55LF89Rm4oZSx0LGksYyx1LCExKSxwPV8ud2lkdGgsZz1fLmhlaWdodCx4PXluLngsRT15bi55LEE9eC1tLFQ9RS12LFI9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLE09TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLHc9eSgpLEY9cipKbiwkPU1hdGguY29zKEYpKm4qKFIvdyksTz1NYXRoLnNpbihGKSpuKihNL3cpLFM9MT09PWgsaz1TP2Q6cCtNYXRoLm1heCgwLE1hdGguYWJzKCQpLUEpLEM9Uz9mOmcrTWF0aC5tYXgoMCxNYXRoLmFicyhPKS1UKSxQPU1hdGguY2VpbChrKSxCPU1hdGguY2VpbChDKSxJPShQLWspLzIsVT0oQi1DKS8yLE49Uz8wOk1hdGgubWF4KDAsQS0kKStJLEQ9Uz8wOk1hdGgubWF4KDAsVC1PKStVLGo9Uz8kLXg6KCQ+MD9NYXRoLm1heCgwLCQtQSk6MCkrSSxYPVM/Ty1FOihPPjA/TWF0aC5tYXgoMCxPLVQpOjApK1U7bGV0IHo9IiI7c3dpdGNoKGgpe2Nhc2UgMDp6PSJmdWxsIjticmVhaztjYXNlIDE6ej0iaW5uZXIiO2JyZWFrO2Nhc2UgMjp6PSJvdXRlciJ9Y29uc3QgVj1XbihlLF8sUCxCLGQsZixOLEQscCxnLGosWCwhMCx6LGIsbCxzLGEsbywwLDAsMCwwLDAsMCwwLDApO3JldHVybiB5bi54PW0rTix5bi55PXYrRCxMKGUpLEwoXyksVn0sdHI9KGUsdCxuLHIpPT57Y29uc3QgYT1gYyR7KCIwIitlKS5zbGljZSgtMil9JHsoIjAiK3QpLnNsaWNlKC0yKX0ke24/InkiOiJuIn0ke3I/InkiOiJuIn1gO2lmKEVuLmhhcyhhKSlyZXR1cm4gRW4uZ2V0KGEpO2NvbnN0IG89KHI/MToyKStNYXRoLmNlaWwoZSp0LzQpLHM9bmV3IE10KCIjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG5cbm91dCB2ZWMyIHZfY29vcmQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXg7XG5cbiAgICB2ZWMyIHBvc2l0aW9uID0gYV92ZXJ0ZXggKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7XG59IiwoKGUsdCxuLHIsYSk9Pntjb25zdCBvPU1hdGguZmxvb3IoLjUqdCkscz1NYXRoLmZsb29yKC41Km4pLGk9dCpuO2xldCBjPSIiO2NvbnN0IGw9YT8xOjI7Zm9yKGxldCBlPTA7ZTxpOysrZSljKz1gXG4gICAgcmVzdWx0ICs9IGdldFdlaWdodGVkQ29sb3IoJHtlfSwgdV9tZWRpdW1wWyR7bCtNYXRoLmZsb29yKGUvNCl9XVske2UlNH1dKTtcbmA7cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbJHtlfV07XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cblxuZmxvYXQgaXNJbnNpZGUoaW4gdmVjMiB1dikge1xuICAgIHJldHVybiBzdGVwKDQuMCwgZG90KHN0ZXAodmVjNCgwLjAsIHV2LngsIDAuMCwgdXYueSksIHZlYzQodXYueCwgMS4wLCB1di55LCAxLjApKSwgdmVjNCgxLjApKSk7XG59XG5cbnZlYzQgZ2V0V2VpZ2h0ZWRDb2xvciAoaW4gaW50IGksIGluIGZsb2F0IHdlaWdodCkge1xuICAgIHZlYzIgcmNwX3NpemUgPSB1X21lZGl1bXBbMF0ueHk7XG5cbiAgICBpbnQgaV9kaXZfeCA9IGkgLyAke3R9O1xuICAgIGludCBpX21vZF94ID0gaSAtICR7dH0gKiBpX2Rpdl94O1xuICAgIHZlYzIgb2Zmc2V0ID0gdmVjMihpX21vZF94IC0gJHtvfSwgJHtzfSAtIGlfZGl2X3gpO1xuICAgIHZlYzIgdXYgPSB2X2Nvb3JkICsgb2Zmc2V0ICogcmNwX3NpemU7XG5cbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZSh1X3RleHR1cmUsIHV2KTtcbiAgICBjb2xvci5yZ2IgLz0gbWF4KDAuMDAwMSwgY29sb3IuYSk7XG4gICAgJHthPyIiOiJcbiAgICB2ZWM0IHN1YnN0aXR1dGVfY29sb3IgPSB1X21lZGl1bXBbMV07XG4gICAgY29sb3IgPSBtaXgoc3Vic3RpdHV0ZV9jb2xvciwgY29sb3IsIGlzSW5zaWRlKHV2KSk7XG4ifVxuXG4gICAgcmV0dXJuIGNvbG9yICogd2VpZ2h0O1xufVxuXG52b2lkIG1haW4oKSB7XG4gICAgZmxvYXQgcmNwX2Rpdmlzb3IgPSB1X21lZGl1bXBbMF0uejtcbiAgICBmbG9hdCBiaWFzICAgICAgICA9IHVfbWVkaXVtcFswXS53O1xuXG4gICAgdmVjNCByZXN1bHQgPSB2ZWM0KDAuMCk7XG4gICAgJHtjfVxuICAgIHJlc3VsdCA9IGNsYW1wKHJlc3VsdCAqIHJjcF9kaXZpc29yICsgYmlhcywgMC4wLCAxLjApO1xuICAgICR7cj8icmVzdWx0LmEgPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCkuYTsiOiIifVxuXG4gICAgcmVzdWx0LnJnYiAqPSByZXN1bHQuYTtcbiAgICBvX2NvbG9yID0gcmVzdWx0O1xufWB9KShvLGUsdCxuLHIpKTtyZXR1cm4gRW4uc2V0KGEscyksc30sbnI9KGUsdD0wLG49MCxhLG89MSxzPTAsaT0hMCxjPSEwLGw9MCx1PTApPT57Y29uc3QgaD1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LGI9ZS53aWR0aCxkPWUuaGVpZ2h0LGY9aGUoYixkLCExKTtyLmJpbmQoZiksci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxPZShlLCEwKSxMdCgpO2NvbnN0IG09dHIodCxuLGksYyk7KChlLHQsbixyLGEsbyxzLGksYyxsLHUpPT57Y29uc3QgaD1lLm1lZGl1bXA7aFswXT0xL3QsaFsxXT0xL24saFsyXT0xL2EsaFszXT1vLzI1NTtsZXQgYj00O3N8fChoW2IrK109aSxoW2IrK109YyxoW2IrK109bCxoW2IrK109dSk7Y29uc3QgZD1yLmxlbmd0aDtmb3IobGV0IGU9MDtlPGQ7ZSsrKWhbYisrXT1yW2VdfSkobSxiLGQsYSxvLHMsYyxUbihsLHUsITEpLFJuKGwsdSwhMSksTW4obCx1LCExKSx1KSxybihtKTtjb25zdCB2PWYudGV4dHVyZTtyZXR1cm4gTChlKSxlZShmLCExKSxoJiZyLmJpbmQoaCksdn0scnI9KGUsdCxuLGE9MCxvPTAscz0wLGk9MCxjPTAsbD0wLHU9MCxoPTAsYj0yLGQ9MCxmPTApPT57Y29uc3QgbT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LHY9eSgpLF89TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pL3YscD1NYXRoLnNxcnQodFsyXSp0WzJdK3RbM10qdFszXSkvdixnPWUud2lkdGgseD1lLmhlaWdodCxFPWcvXyxBPXgvcCxUPWhlKGcseCwhMSk7ci5iaW5kKFQpO2NvbnN0IFI9cG4oYSxvLG4pO2VuKGUsUik7Y29uc3QgTT0oKGUsdCxuKT0+e2NvbnN0IHI9YGQke2V9JHt0fSR7bn1gO2lmKEVuLmhhcyhyKSlyZXR1cm4gRW4uZ2V0KHIpO2NvbnN0IGE9bmV3IE10KCIjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG5cbm91dCB2ZWMyIHZfY29vcmQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXg7XG5cbiAgICB2ZWMyIHBvc2l0aW9uID0gYV92ZXJ0ZXggKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7XG59IiwoKGUsdCxuLHIpPT57bGV0IGEsbyxzO3N3aXRjaCh0KXtjYXNlIDE6YT0ibWFwX2NvbG9yLnIiO2JyZWFrO2Nhc2UgMjphPSJtYXBfY29sb3IuZyI7YnJlYWs7Y2FzZSA0OmE9Im1hcF9jb2xvci5iIjticmVhaztjYXNlIDg6YT0ibWFwX2NvbG9yLmEiO2JyZWFrO2RlZmF1bHQ6YT0iMC41In1zd2l0Y2gobil7Y2FzZSAxOm89Im1hcF9jb2xvci5yIjticmVhaztjYXNlIDI6bz0ibWFwX2NvbG9yLmciO2JyZWFrO2Nhc2UgNDpvPSJtYXBfY29sb3IuYiI7YnJlYWs7Y2FzZSA4Om89Im1hcF9jb2xvci5hIjticmVhaztkZWZhdWx0Om89IjAuNSJ9c3dpdGNoKHIpe2Nhc2UgMDpzPSJcbiAgICB2ZWM0IHNvdXJjZV9jb2xvciA9IHRleHR1cmUodV90ZXh0dXJlc1swXSwgdXYpO1xuIjticmVhaztjYXNlIDM6cz0iXG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPXRleHR1cmUodV90ZXh0dXJlc1swXSwgbWl4KHZfY29vcmQsIHV2LCBzdGVwKGFicyh1diAtIHZlYzIoMC41KSksIHZlYzIoMC41KSkpKTtcbiI7YnJlYWs7Y2FzZSAxOnM9IlxuICAgIHZlYzQgc3Vic3RpdHV0ZV9jb2xvciA9IHVfbWVkaXVtcFsyXTtcbiAgICB2ZWM0IHNvdXJjZV9jb2xvciA9IG1peChzdWJzdGl0dXRlX2NvbG9yLCB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHV2KSwgaXNJbnNpZGUodXYpKTtcbiI7YnJlYWs7ZGVmYXVsdDpzPSJcbiAgICB2ZWM0IHNvdXJjZV9jb2xvciA9IHRleHR1cmUodV90ZXh0dXJlc1swXSwgZnJhY3QodXYpKTtcbiJ9cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZXNbMl07XG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWyR7ZX1dO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG5cbmZsb2F0IGlzSW5zaWRlKGluIHZlYzIgdXYpIHtcbiAgICByZXR1cm4gc3RlcCg0LjAsIGRvdChzdGVwKHZlYzQoMC4wLCB1di54LCAwLjAsIHV2LnkpLCB2ZWM0KHV2LngsIDEuMCwgdXYueSwgMS4wKSksIHZlYzQoMS4wKSkpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiB1dl90b19zdF9zY2FsZSAgPSB1X21lZGl1bXBbMF0ueHk7XG4gICAgdmVjMiB1dl90b19zdF9vZmZzZXQgPSB1X21lZGl1bXBbMF0uenc7XG4gICAgdmVjMiBzY2FsZSAgICAgICAgICAgPSB1X21lZGl1bXBbMV0ueHk7XG5cbiAgICB2ZWMyIHN0ID0gdl9jb29yZCAqIHV2X3RvX3N0X3NjYWxlIC0gdXZfdG9fc3Rfb2Zmc2V0O1xuICAgIHZlYzQgbWFwX2NvbG9yID0gdGV4dHVyZSh1X3RleHR1cmVzWzFdLCBzdCk7XG5cbiAgICB2ZWMyIG9mZnNldCA9IHZlYzIoJHthfSwgJHtvfSkgLSAwLjU7XG4gICAgdmVjMiB1diA9IHZfY29vcmQgKyBvZmZzZXQgKiBzY2FsZTtcbiAgICAke3N9XG5cbiAgICBvX2NvbG9yID0gbWl4KHRleHR1cmUodV90ZXh0dXJlc1swXSwgdl9jb29yZCksIHNvdXJjZV9jb2xvciwgaXNJbnNpZGUoc3QpKTtcbn1gfSkoMT09PW4/MzoyLGUsdCxuKSk7cmV0dXJuIEVuLnNldChyLGEpLGF9KShjLGwsYik7KChlLHQsbixyLGEsbyxzLGksYyxsLHUsaCxiLGQpPT57Y29uc3QgZj1lLnRleHR1cmVzO2ZbMF09MCxmWzFdPTE7Y29uc3QgbT1lLm1lZGl1bXA7bVswXT1yL3QsbVsxXT1hL24sbVsyXT1vL3QsbVszXT0oYS1uLXMpL24sbVs0XT1pL3IsbVs1XT0tYy9hLDE9PT1sJiYobVs4XT11LG1bOV09aCxtWzEwXT1iLG1bMTFdPWQpfSkoTSxnLHgsRSxBLHMsaSx1LGgsYixUbihkLGYsITApLFJuKGQsZiwhMCksTW4oZCxmLCEwKSxmKSxMdCgpLHJuKE0pO2NvbnN0IHc9VC50ZXh0dXJlO3JldHVybiBtJiZyLmJpbmQobSksTChlKSxMKFIpLGVlKFQsITEpLHd9LGFyPShlLHQsbixhKT0+e2NvbnN0IG89ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxzPWUud2lkdGgsaT1lLmhlaWdodDtzd2l0Y2goci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pe2Nhc2Uibm9ybWFsIjpjYXNlImxheWVyIjpjYXNlImFkZCI6Y2FzZSJzY3JlZW4iOmNhc2UiYWxwaGEiOmNhc2UiZXJhc2UiOmNhc2UiY29weSI6e3IuYmluZChyLiRtYWluQXR0YWNobWVudE9iamVjdCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSxuLGEpO2NvbnN0IG89aG4oITApOygoZSx0LG4sYSk9Pntjb25zdCBvPWUuaGlnaHAscz1yLiRtYXRyaXg7b1swXT1zWzBdLG9bMV09c1sxXSxvWzJdPXNbM10sb1szXT1zWzRdLG9bNF09c1s2XSxvWzVdPXNbN10sb1s2XT1uLG9bN109YSxvWzhdPXgoKSxvWzldPUUoKTtjb25zdCBpPWUubWVkaXVtcDtpWzBdPXRbMF0saVsxXT10WzFdLGlbMl09dFsyXSxpWzNdPXRbM10saVs0XT10WzRdLGlbNV09dFs1XSxpWzZdPXRbNl0saVs3XT10WzddfSkobyx0LHMsaSksT2UoZSksdm4oci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pLHJuKG8pfWJyZWFrO2RlZmF1bHQ6e2NvbnN0IG89c24obixhLHMsaSksYz1oZShzLGksITEpO3IuYmluZChjKSxlbihvLGUpO2NvbnN0IGw9SHQoci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pO3VuKGwsdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddKSxybihsKSxyLmJpbmQoci4kbWFpbkF0dGFjaG1lbnRPYmplY3QpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLG4sYSksbG4oYy50ZXh0dXJlKSxMKG8pLGVlKGMpfX1vJiZyLmJpbmQobyksTHQoKX0sb3I9W10sc3I9ZT0+e2Uuc2l6ZSYmZS5jbGVhcigpLG9yLnB1c2goZSl9LGlyPShlLHQsbixyLGE9bnVsbCk9Pnt0LmhhcyhuKXx8dC5zZXQobixvci5wb3AoKXx8bmV3IE1hcCk7Y29uc3Qgbz10LmdldChuKTtpZihudWxsPT09YSl7aWYoIW8uaGFzKHIpKXJldHVybjtyZXR1cm4gZS5kZXN0cm95KG8uZ2V0KHIpKSxvLmRlbGV0ZShyKSx2b2lkKG8uc2l6ZXx8KHQuZGVsZXRlKG4pLHNyKG8pKSl9by5zZXQocixhKX07Y29uc3QgY3I9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIl8kcG9vbCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHN0b3JlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIl8kdHJhc2giLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJHRpbWVySWQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJHJlbW92ZUNhY2hlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRyZW1vdmVJZHMiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLl8kcG9vbD1bXSx0aGlzLl8kc3RvcmU9bmV3IE1hcCx0aGlzLl8kdHJhc2g9bmV3IE1hcCx0aGlzLiR0aW1lcklkPW51bGwsdGhpcy4kcmVtb3ZlSWRzPVtdLHRoaXMuJHJlbW92ZUNhY2hlPSExfXJlc2V0KCl7KChlLHQsbik9PntuLmNsZWFyKCksbnVsbCE9PWUuJHRpbWVySWQmJmNsZWFyVGltZW91dChlLiR0aW1lcklkKTtmb3IoY29uc3QgbiBvZiB0LnZhbHVlcygpKXtmb3IoY29uc3QgdCBvZiBuLnZhbHVlcygpKXQmJmUuZGVzdHJveSh0KTtzcihuKX10LmNsZWFyKCl9KSh0aGlzLHRoaXMuXyRzdG9yZSx0aGlzLl8kdHJhc2gpfWRlc3Ryb3koZT1udWxsKXsoKGUsdCk9PntpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJiJjYW52YXMiaW4gdCl7Y29uc3Qgbj10LmNhbnZhcyxyPW4ud2lkdGgsYT1uLmhlaWdodDt0LmNsZWFyUmVjdCgwLDAscisxLGErMSksbi53aWR0aD1uLmhlaWdodD0xLGUucHVzaChuKX19KSh0aGlzLl8kcG9vbCxlKX1nZXRDYW52YXMoKXtyZXR1cm4gdGhpcy5fJHBvb2wucG9wKCl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpfXJlbW92ZShlLHQpeygoZSx0LG4pPT57aWYoIWUuaGFzKHQpKXJldHVybjtjb25zdCByPWUuZ2V0KHQpO3IuaGFzKG4pJiYoci5kZWxldGUobiksci5zaXplfHwoc3IociksZS5kZWxldGUodCkpKX0pKHRoaXMuXyRzdG9yZSxlLHQpfXJlbW92ZVRpbWVyKGUpeygoZSx0LG4scik9PntpZihuLmhhcyhyKSlyZXR1cm47Y29uc3QgYT10LmdldChyKTthJiYoYS5zZXQoInRyYXNoIiwhMCksbi5zZXQocixhKSxudWxsIT09ZS4kdGltZXJJZCYmY2xlYXJUaW1lb3V0KGUuJHRpbWVySWQpLGUuJHJlbW92ZUNhY2hlPSExLGUuJHRpbWVySWQ9c2V0VGltZW91dCgoKT0+e2UuJHJlbW92ZUNhY2hlPSEwLGUuJHRpbWVySWQ9bnVsbH0sMWUzKSl9KSh0aGlzLHRoaXMuXyRzdG9yZSx0aGlzLl8kdHJhc2gsZSl9cmVtb3ZlVGltZXJTY2hlZHVsZWRDYWNoZSgpeygoZSx0KT0+e2lmKHQuc2l6ZSl7Zm9yKGNvbnN0W24scl1vZiB0KXIuaGFzKCJ0cmFzaCIpJiYoZS5yZW1vdmVCeUlkKG4pLGUuJHJlbW92ZUlkcy5wdXNoKCtuKSk7dC5jbGVhcigpLGUuJHJlbW92ZUNhY2hlPSExfX0pKHRoaXMsdGhpcy5fJHRyYXNoKX1yZW1vdmVCeUlkKGUpeygoZSx0LG4pPT57aWYoIXQuaGFzKG4pKXJldHVybjtjb25zdCByPXQuZ2V0KG4pO2Zvcihjb25zdCB0IG9mIHIudmFsdWVzKCkpZS5kZXN0cm95KHQpO3QuZGVsZXRlKG4pLHNyKHIpfSkodGhpcyx0aGlzLl8kc3RvcmUsZSl9Z2V0QnlJZChlKXtyZXR1cm4gdGhpcy5fJHN0b3JlLmdldChlKX1nZXQoZSx0KXtyZXR1cm4oKGUsdCxuKT0+e2NvbnN0IHI9ZS5nZXQodCl8fG51bGw7cmV0dXJuIHI/KHIuZGVsZXRlKCJ0cmFzaCIpLHIuZ2V0KG4pfHxudWxsKTpudWxsfSkodGhpcy5fJHN0b3JlLGUsdCl9c2V0KGUsdCxuPW51bGwpe2lyKHRoaXMsdGhpcy5fJHN0b3JlLGUsdCxuKX1oYXMoZSx0PSIiKXtyZXR1cm4oKGUsdCxuPSIiKT0+bj8hIWUuaGFzKHQpJiZlLmdldCh0KS5oYXMobik6ZS5oYXModCkpKHRoaXMuXyRzdG9yZSxlLHQpfWdlbmVyYXRlS2V5cyhlLHQsbil7cmV0dXJuKChlLHQsbik9Pntjb25zdCByPVsxMDAqZSwxMDAqdF07biYmci5wdXNoKDEwMCpuKTtsZXQgYT0yMTY2MTM2MjYxO2ZvcihsZXQgZT0wO2U8ci5sZW5ndGg7KytlKXtsZXQgdD0wfHJbZV07Zm9yKGxldCBlPTA7ZTw0O2UrKylhXj0yNTUmdCxhPU1hdGguaW11bChhLDE2Nzc3NjE5KSx0Pj4+PTh9cmV0dXJuKGE+Pj4wKSUxNjc3NzIxNn0pKGUsdCxuKX1nZW5lcmF0ZUZpbHRlcktleXMoZSx0LG4scil7cmV0dXJuKChlLHQsbixyKT0+YCR7ZX0ke3R9JHtufSR7cn1gKShlLHQsbixyKX19LGxyPShlLHQsbixhLG8scyxpLGMsbCx1LGgpPT57Y29uc3QgYj1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2xldCBkPW51bGw7Y29uc3QgZj1NYXRoLnNxcnQoaVswXSppWzBdK2lbMV0qaVsxXSksXz1NYXRoLnNxcnQoaVsyXSppWzJdK2lbM10qaVszXSkscD1jci5nZW5lcmF0ZUZpbHRlcktleXMoaVswXSxpWzFdLGlbMl0saVszXSk7bGV0IGc9ITE7aWYoY3IuZ2V0KHQsImZLZXkiKT09PXApe2NvbnN0IGU9Y3IuZ2V0KHQsImZUZXh0dXJlIik7bj9MKGUpOihnPSEwLGQ9ZSl9bGV0IHg9MCxFPTA7aWYoZyl4PWNyLmdldCh0LCJvZmZzZXRYIiksRT1jci5nZXQodCwib2Zmc2V0WSIpO2Vsc2V7ZD1KdChlKTtjb25zdCB0PU1hdGguYXRhbjIoaVsxXSxpWzBdKSxuPU1hdGguYXRhbjIoLWlbMl0saVszXSksYz1zP2YqTWF0aC5jb3ModCk6TWF0aC5jb3ModCksbD1zP2YqTWF0aC5zaW4odCk6TWF0aC5zaW4odCksdT1zPy1fKk1hdGguc2luKG4pOi1NYXRoLnNpbihuKSxwPXM/XypNYXRoLmNvcyhuKTpNYXRoLmNvcyhuKSxnPW0oYyxsLHUscCxhLzIsby8yKSxBPW0oMSwwLDAsMSwtZS53LzIsLWUuaC8yKSx5PSgoZSx0KT0+e2NvbnN0IG49ZVswXSxyPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0saT1lWzVdLGM9dFswXSxsPXRbMV0sdT10WzJdLGg9dFszXSxiPXRbNF0sZD10WzVdO3JldHVybiBtKG4qYythKmwscipjK28qbCxuKnUrYSpoLHIqdStvKmgsbipiK2EqZCtzLHIqYitvKmQraSl9KShnLEEpO2lmKHYoZyksdihBKSwxIT09eVswXXx8MCE9PXlbMV18fDAhPT15WzJdfHwxIT09eVszXSl7Y29uc3QgZT1oZShhLG8sITEpO3IuYmluZChlKSxyLnJlc2V0KCksci5zZXRUcmFuc2Zvcm0oeVswXSx5WzFdLHlbMl0seVszXSx5WzRdLHlbNV0pLHg9eVs0XSxFPXlbNV0sT2UoZCk7Y29uc3QgdD1obigpO2JuKHQsZC53aWR0aCxkLmhlaWdodCkscm4odCksTChkKSxkPWUudGV4dHVyZSxlZShlLCExKSxiJiZyLmJpbmQoYil9dih5KSx5bi54PTAseW4ueT0wO2ZvcihsZXQgZT0wO2gubGVuZ3RoPmU7KXtzd2l0Y2goaFtlKytdKXtjYXNlIDA6ZD1IbihkLGksaFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxCb29sZWFuKGhbZSsrXSkpO2JyZWFrO2Nhc2UgMTpkPUZuKGQsaSxoW2UrK10saFtlKytdLGhbZSsrXSk7YnJlYWs7Y2FzZSAyOmQ9JG4oZCxuZXcgRmxvYXQzMkFycmF5KFtoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdXSkpO2JyZWFrO2Nhc2UgMzp7Y29uc3QgdD1oW2UrK10sbj1oW2UrK10scj10Km4sYT1oLnN1YmFycmF5KGUsZStyKTtlKz1yLGQ9bnIoZCx0LG4sYSxoW2UrK10saFtlKytdLEJvb2xlYW4oaFtlKytdKSxCb29sZWFuKGhbZSsrXSksaFtlKytdLGhbZSsrXSl9YnJlYWs7Y2FzZSA0Ontjb25zdCB0PWhbZSsrXSxuPW5ldyBVaW50OEFycmF5KHQpO24uc2V0KGguc3ViYXJyYXkoZSxlK3QpKSxlKz10LGQ9cnIoZCxpLG4saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSl9YnJlYWs7Y2FzZSA1OmQ9cW4oZCxpLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pLEJvb2xlYW4oaFtlKytdKSxCb29sZWFuKGhbZSsrXSkpO2JyZWFrO2Nhc2UgNjpkPUduKGQsaSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxCb29sZWFuKGhbZSsrXSksQm9vbGVhbihoW2UrK10pKTticmVhaztjYXNlIDc6e2NvbnN0IHQ9aFtlKytdLG49aFtlKytdO2xldCByPWhbZSsrXTtjb25zdCBhPWguc3ViYXJyYXkoZSxlK3IpO2UrPXIscj1oW2UrK107Y29uc3Qgbz1oLnN1YmFycmF5KGUsZStyKTtlKz1yLHI9aFtlKytdO2NvbnN0IHM9aC5zdWJhcnJheShlLGUrcik7ZSs9cixkPVFuKGQsaSx0LG4sYSxvLHMsaFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxCb29sZWFuKGhbZSsrXSkpfWJyZWFrO2Nhc2UgODp7Y29uc3QgdD1oW2UrK10sbj1oW2UrK107bGV0IHI9aFtlKytdO2NvbnN0IGE9aC5zdWJhcnJheShlLGUrcik7ZSs9cixyPWhbZSsrXTtjb25zdCBvPWguc3ViYXJyYXkoZSxlK3IpO2UrPXIscj1oW2UrK107Y29uc3Qgcz1oLnN1YmFycmF5KGUsZStyKTtlKz1yLGQ9ZXIoZCxpLHQsbixhLG8scyxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLEJvb2xlYW4oaFtlKytdKSl9fX19aWYoZCl7Y29uc3QgZT15KCksdD11WzBdKihmL2UpLG49dVsxXSooXy9lKTtyLnJlc2V0KCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWwsYXIoZCxjLC14K3QraVs0XSwtRStuK2lbNV0pfWd8fChjci5zZXQodCwiZktleSIscCksY3Iuc2V0KHQsImZUZXh0dXJlIixkKSxjci5zZXQodCwib2Zmc2V0WCIseCksY3Iuc2V0KHQsIm9mZnNldFkiLEUpKSxiJiZyLmJpbmQoYil9LHVyPShlLHQscixhKT0+e24uc3RlbmNpbEZ1bmMobi5BTFdBWVMsMCwyNTUpLG4uc3RlbmNpbE9wU2VwYXJhdGUobi5GUk9OVCxuLktFRVAsbi5LRUVQLG4uSU5DUl9XUkFQKSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uQkFDSyxuLktFRVAsbi5LRUVQLG4uREVDUl9XUkFQKSxuLmNvbG9yTWFzayghMSwhMSwhMSwhMSk7Y29uc3Qgbz0hIWEscz0kdChvKTthJiZPdChzLGEpLG4uZW5hYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxVdChzLGUsdCxyKSxuLmRpc2FibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpLG4uc3RlbmNpbEZ1bmMobi5OT1RFUVVBTCwwLDI1NSksbi5zdGVuY2lsT3Aobi5LRUVQLG4uWkVSTyxuLlpFUk8pLG4uY29sb3JNYXNrKCEwLCEwLCEwLCEwKTtjb25zdCBpPShlPT57Y29uc3QgdD0icyIrKGU/InkiOiJuIik7aWYod3QuaGFzKHQpKXJldHVybiB3dC5nZXQodCk7Y29uc3Qgbj1uZXcgTXQoRnQoZT85OjAsITEsITEsZSksIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbmluIHZlYzQgdl9jb2xvcjtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBvX2NvbG9yID0gdmVjNCh2X2NvbG9yLnJnYiAqIHZfY29sb3IuYSwgdl9jb2xvci5hKTtcbn0iKTtyZXR1cm4gd3Quc2V0KHQsbiksbn0pKG8pO2EmJigoZSx0KT0+e2NvbnN0IG49ZS5oaWdocDtuWzBdPXRbMF0sblsxXT10WzFdLG5bMl09MCxuWzRdPXRbMl0sbls1XT10WzNdLG5bNl09MCxuWzhdPXRbNF0sbls5XT10WzVdLG5bMTBdPTEsblsxMl09dFs2XSxuWzEzXT10WzddLG5bMTRdPTAsblsxNl09dFs4XSxuWzE3XT10WzldLG5bMThdPTAsblsyMF09dFsxMF0sblsyMV09dFsxMV0sblsyMl09MSxuWzNdPXgoKSxuWzddPUUoKSxuWzExXT10WzEyXSxuWzE1XT10WzEzXSxuWzE5XT10WzE0XSxuWzIzXT10WzE1XSxuWzI0XT10WzE2XSxuWzI1XT10WzE3XSxuWzI2XT10WzE4XSxuWzI3XT10WzE5XSxuWzI4XT10WzIwXSxuWzI5XT10WzIxXSxuWzMwXT10WzIyXSxuWzMxXT10WzIzXSxuWzMyXT10WzI0XSxuWzMzXT10WzI1XX0pKGksYSksVXQoaSxlLHQscil9LGhyPShlLHQsbixyLGEpPT57Y29uc3Qgbz1lLm1lZGl1bXA7bGV0IHM9MDtmb3IobGV0IGU9bjtlPHI7KytlKXtjb25zdCBuPTUqZTtvW3MrK109YVt0W24rMV1dLG9bcysrXT1hW3RbbisyXV0sb1tzKytdPWFbdFtuKzNdXSxvW3MrK109YVt0W24rNF1dfWZvcihsZXQgZT1uO2U8cjsrK2Upb1tzKytdPXRbNSplXX0sYnI9KGUsdCk9Pntjb25zdCBhPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Qsbz1uLmdldFBhcmFtZXRlcihuLlNDSVNTT1JfQk9YKTtuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpO2NvbnN0IHM9RG4oKTtyLmJpbmQocyk7Y29uc3QgaT0wPT09dCxjPWUubGVuZ3RoLzUsbD1pP3puOlZuO2NuKCk7Y29uc3QgdT1YbigpO2ZvcihsZXQgdD0wO3Q8Yzt0Kz11LTEpe2NvbnN0IG49TWF0aC5taW4odCt1LGMpLHI9UG4obi10LGkpO2hyKHIsZSx0LG4sbCksVW4ocixlWzBdLGVbZS5sZW5ndGgtNV0pfXJldHVybiBMdCgpLGEmJnIuYmluZChhKSxOZShvWzBdLG9bMV0sb1syXSxvWzNdKSxzLnRleHR1cmV9LGRyPW5ldyBNYXAsZnI9KGUsdCxuLHIpPT57Y29uc3QgYT0oKGUsdCxuLHIpPT5gJHtlPyJ5IjoibiJ9JHt0PyJ5IjoibiJ9JHt0JiZuPyJ5IjoibiJ9JHtyfWApKHIsZSx0LG4pO2lmKGRyLmhhcyhhKSlyZXR1cm4gZHIuZ2V0KGEpO2NvbnN0IG89MSsocj8xNDo1KSxzPW8tMSxpPW5ldyBNdChGdChvLCEwLCExLHIpLCgoZSx0LG4scixhKT0+e2NvbnN0IG89bj8oKGUsdCk9Pntjb25zdCBuPXQ/KGU9PmBcbiAgICB2ZWMyIGZvY2FsID0gdmVjMih1X2hpZ2hwWyR7ZX1dWzFdLCAwLjApO1xuXG4gICAgdmVjMiBkaXIgPSBub3JtYWxpemUoY29vcmQgLSBmb2NhbCk7XG5cbiAgICBmbG9hdCBhID0gZG90KGRpciwgZGlyKTtcbiAgICBmbG9hdCBiID0gMi4wICogZG90KGRpciwgZm9jYWwpO1xuICAgIGZsb2F0IGMgPSBkb3QoZm9jYWwsIGZvY2FsKSAtIDEuMDtcbiAgICBmbG9hdCB4ID0gKC1iICsgc3FydChiICogYiAtIDQuMCAqIGEgKiBjKSkgLyAoMi4wICogYSk7XG5cbiAgICBmbG9hdCB0ID0gZGlzdGFuY2UoZm9jYWwsIGNvb3JkKSAvIGRpc3RhbmNlKGZvY2FsLCBmb2NhbCArIGRpciAqIHgpO2ApKGUpOiJmbG9hdCB0ID0gbGVuZ3RoKGNvb3JkKTsiO3JldHVybmBcbiAgICBmbG9hdCByYWRpdXMgPSB1X2hpZ2hwWyR7ZX1dWzBdO1xuICAgIHZlYzIgY29vcmQgPSBwIC8gcmFkaXVzO1xuICAgICR7bn1cbmB9KSh0LHIpOihlPT5gXG4gICAgdmVjMiBhID0gdV9oaWdocFske2V9XS54eTtcbiAgICB2ZWMyIGIgPSB1X2hpZ2hwWyR7ZX1dLnp3O1xuXG4gICAgdmVjMiBhYiA9IGIgLSBhO1xuICAgIHZlYzIgYXAgPSBwIC0gYTtcblxuICAgIGZsb2F0IHQgPSBkb3QoYWIsIGFwKSAvIGRvdChhYiwgYWIpO2ApKHQpO2xldCBzO3N3aXRjaChhKXtjYXNlIDA6cz0iMS4wIC0gYWJzKGZyYWN0KHQgKiAwLjUpICogMi4wIC0gMS4wKSI7YnJlYWs7Y2FzZSAxOnM9ImZyYWN0KHQpIjticmVhaztkZWZhdWx0OnM9ImNsYW1wKHQsIDAuMCwgMS4wKSJ9cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9oaWdocFske2V9XTtcbiAgICBcbmluIHZlYzIgdl91djtcbm91dCB2ZWM0IG9fY29sb3I7XG4gICAgXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBwID0gdl91djtcbiAgICAke299XG4gICAgdCA9ICR7c307XG4gICAgb19jb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB2ZWMyKHQsIDAuNSkpO1xufWB9KShvLHMsZSx0LG4pKTtyZXR1cm4gZHIuc2V0KGEsaSksaX0sbXI9KGUsdCxuLHIsbz0wLHM9bnVsbCxpPW51bGwpPT57Y29uc3QgYz1lLmhpZ2hwO2NbMF09blswXSxjWzFdPW5bMV0sY1syXT1uWzJdLGNbNF09blszXSxjWzVdPW5bNF0sY1s2XT1uWzVdLGNbOF09bls2XSxjWzldPW5bN10sY1sxMF09bls4XSxjWzEyXT1yWzBdLGNbMTNdPXJbMV0sY1sxNF09clsyXSxjWzE2XT1yWzNdLGNbMTddPXJbNF0sY1sxOF09cls1XSxjWzExXT1yWzZdLGNbMTVdPXJbN10sY1sxOV09cls4XSxjWzNdPXgoKSxjWzddPUUoKTtsZXQgbD0yMDtpJiYoY1syMF09aVswXSxjWzIxXT1pWzFdLGNbMjJdPTAsY1syNF09aVsyXSxjWzI1XT1pWzNdLGNbMjZdPTAsY1syOF09aVs0XSxjWzI5XT1pWzVdLGNbMzBdPTEsY1szMl09aVs2XSxjWzMzXT1pWzddLGNbMzRdPTAsY1szNl09aVs4XSxjWzM3XT1pWzldLGNbMzhdPTAsY1s0MF09aVsxMF0sY1s0MV09aVsxMV0sY1s0Ml09MSxjWzMxXT1pWzEyXSxjWzM1XT1pWzEzXSxjWzM5XT1pWzE0XSxjWzQzXT1pWzE1XSxjWzQ0XT1pWzE2XSxjWzQ1XT1pWzE3XSxjWzQ2XT1pWzE4XSxjWzQ3XT1pWzE5XSxjWzQ4XT1pWzIwXSxjWzQ5XT1pWzIxXSxjWzUwXT1pWzIyXSxjWzUxXT1pWzIzXSxjWzUyXT1pWzI0XSxjWzUzXT1pWzI1XSxsPTU2KSwwPT09dD8oY1tsKytdPXNbMF0sY1tsKytdPXNbMV0sY1tsKytdPXNbMl0sY1tsXT1zWzNdKTooY1tsKytdPTgxOS4yLGNbbF09YShvLC0uOTc1LC45NzUsMCkpfSx2cj0oZSx0LGEsbyk9Pntjb25zdCBzPXFlLnNoaWZ0KCksaT1xZS5zaGlmdCgpLGM9cWUuc2hpZnQoKSxsPXFlLnNoaWZ0KCk7bi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKTtjb25zdCBiPWJyKHMsbCk7T2UoYiksbi5lbmFibGUobi5TVEVOQ0lMX1RFU1QpLG4uZnJvbnRGYWNlKG4uQ0NXKSxuLnN0ZW5jaWxNYXNrKDI1NSksbi5zdGVuY2lsRnVuYyhuLkFMV0FZUywwLDI1NSksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkZST05ULG4uS0VFUCxuLktFRVAsbi5JTkNSX1dSQVApLG4uc3RlbmNpbE9wU2VwYXJhdGUobi5CQUNLLG4uS0VFUCxuLktFRVAsbi5ERUNSX1dSQVApLG4uY29sb3JNYXNrKCExLCExLCExLCExKTtjb25zdCBkPSEhbyxmPSR0KGQpO28mJk90KGYsbyksbi5lbmFibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpLFV0KGYsZSx0LGEpLG4uZGlzYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksbi5zdGVuY2lsRnVuYyhuLk5PVEVRVUFMLDAsMjU1KSxuLnN0ZW5jaWxPcChuLktFRVAsbi5aRVJPLG4uWkVSTyksbi5jb2xvck1hc2soITAsITAsITAsITApO2NvbnN0IG09ZnIoITEsITEsYyxkKSxwPShlPT57Y29uc3QgdD0tODE5LjIqZVswXS04MTkuMiplWzJdK2VbNF0sbj04MTkuMiplWzBdLTgxOS4yKmVbMl0rZVs0XSxyPS04MTkuMiplWzBdKzgxOS4yKmVbMl0rZVs0XSxhPS04MTkuMiplWzFdLTgxOS4yKmVbM10rZVs1XSxvPTgxOS4yKmVbMV0tODE5LjIqZVszXStlWzVdO2xldCBzPXItdCxpPS04MTkuMiplWzFdKzgxOS4yKmVbM10rZVs1XS1hO2NvbnN0IGM9TWF0aC5zcXJ0KHMqcytpKmkpO2M/KHMvPWMsaS89Yyk6KHM9MCxpPTApO2NvbnN0IGw9KG4tdCkqcysoby1hKSppO3JldHVybiB1KHQrbCpzLGErbCppLG4sbyl9KShpKSxnPV8oci4kbWF0cml4KTttcihtLDAsci4kbWF0cml4LGcsMCxwLG8pLGgocCksdihnKSxVdChtLGUsdCxhKX0sX3I9KGUsdCxhLG8pPT57Y29uc3Qgcz1xZS5zaGlmdCgpLGk9cWUuc2hpZnQoKSxjPXFlLnNoaWZ0KCksbD1xZS5zaGlmdCgpLHU9cWUuc2hpZnQoKTtuLmRpc2FibGUobi5TVEVOQ0lMX1RFU1QpO2NvbnN0IGg9YnIocyxsKTtPZShoKSxuLmVuYWJsZShuLlNURU5DSUxfVEVTVCksbi5mcm9udEZhY2Uobi5DQ1cpLG4uc3RlbmNpbE1hc2soMjU1KSxuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uRlJPTlQsbi5LRUVQLG4uS0VFUCxuLklOQ1JfV1JBUCksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkJBQ0ssbi5LRUVQLG4uS0VFUCxuLkRFQ1JfV1JBUCksbi5jb2xvck1hc2soITEsITEsITEsITEpO2NvbnN0IGI9ISFvLGQ9JHQoYik7byYmT3QoZCxvKSxuLmVuYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksVXQoZCxlLHQsYSksbi5kaXNhYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLnN0ZW5jaWxGdW5jKG4uTk9URVFVQUwsMCwyNTUpLG4uc3RlbmNpbE9wKG4uS0VFUCxuLlpFUk8sbi5aRVJPKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksci5zYXZlKCksci50cmFuc2Zvcm0oaVswXSxpWzFdLGlbMl0saVszXSxpWzRdLGlbNV0pO2NvbnN0IGY9ci4kc3RhY2tbci4kc3RhY2subGVuZ3RoLTFdLG09XyhyLiRtYXRyaXgpLHA9ZnIoITAsQm9vbGVhbih1KSxjLGIpO21yKHAsMSxmLG0sdSxvKSxyLnJlc3RvcmUoKSx2KG0pLFV0KHAsZSx0LGEpfSxwcj1uZXcgTWFwLGdyPShlLHQsYSxvKT0+e24uc3RlbmNpbEZ1bmMobi5BTFdBWVMsMCwyNTUpLG4uc3RlbmNpbE9wU2VwYXJhdGUobi5GUk9OVCxuLktFRVAsbi5LRUVQLG4uSU5DUl9XUkFQKSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uQkFDSyxuLktFRVAsbi5LRUVQLG4uREVDUl9XUkFQKSxuLmNvbG9yTWFzayghMSwhMSwhMSwhMSk7Y29uc3Qgcz0hIW8saT0kdChzKTtvJiZPdChpLG8pLG4uZW5hYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxVdChpLGUsdCxhKSxuLmRpc2FibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpO2NvbnN0IGM9eG4uc2hpZnQoKSxsPXhuLnNoaWZ0KCksdT14bi5zaGlmdCgpLGg9eG4uc2hpZnQoKSxiPXhuLnNoaWZ0KCksZD14bi5zaGlmdCgpLGY9cG4odSxoLGMsZCk7ci5zYXZlKCksci50cmFuc2Zvcm0obFswXSxsWzFdLGxbMl0sbFszXSxsWzRdLGxbNV0pLG4uc3RlbmNpbEZ1bmMobi5OT1RFUVVBTCwwLDI1NSksbi5zdGVuY2lsT3Aobi5LRUVQLG4uWkVSTyxuLlpFUk8pLG4uY29sb3JNYXNrKCEwLCEwLCEwLCEwKTtjb25zdCBtPSgoZSx0KT0+e2NvbnN0IG49YGIke2U/InkiOiJuIn0ke3Q/InkiOiJuIn1gO2lmKHByLmhhcyhuKSlyZXR1cm4gcHIuZ2V0KG4pO2NvbnN0IHI9ZT8iI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xudW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFsxXTtcblxuaW4gdmVjMiB2X3V2O1xub3V0IHZlYzQgb19jb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgdXYgPSBmcmFjdCh2ZWMyKHZfdXYueCwgLXZfdXYueSkgLyB1X21lZGl1bXBbMF0ueHkpO1xuICAgIFxuICAgIHZlYzQgc3JjID0gdGV4dHVyZSh1X3RleHR1cmUsIHV2KTtcbiAgICBvX2NvbG9yID0gc3JjO1xufSI6IiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbMV07XG5cbmluIHZlYzIgdl91djtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIHV2ID0gdmVjMih2X3V2LngsIHVfbWVkaXVtcFswXS55IC0gdl91di55KSAvIHVfbWVkaXVtcFswXS54eTtcblxuICAgIHZlYzQgc3JjID0gdGV4dHVyZSh1X3RleHR1cmUsIHV2KTtcbiAgICBvX2NvbG9yID0gc3JjO1xufSIsYT1uZXcgTXQoRnQodD8xNDo1LCEwLCExLHQpLHIpO3JldHVybiBwci5zZXQobixhKSxhfSkoYixzKTsoKGUsdCxuLGEpPT57Y29uc3Qgbz1lLmhpZ2hwLHM9ci4kc3RhY2tbci4kc3RhY2subGVuZ3RoLTFdO29bMF09c1swXSxvWzFdPXNbMV0sb1syXT1zWzJdLG9bNF09c1szXSxvWzVdPXNbNF0sb1s2XT1zWzVdLG9bOF09c1s2XSxvWzldPXNbN10sb1sxMF09c1s4XTtjb25zdCBpPV8oci4kbWF0cml4KTtvWzEyXT1pWzBdLG9bMTNdPWlbMV0sb1sxNF09aVsyXSxvWzE2XT1pWzNdLG9bMTddPWlbNF0sb1sxOF09aVs1XSxvWzExXT1pWzZdLG9bMTVdPWlbN10sb1sxOV09aVs4XSxvWzNdPXgoKSxvWzddPUUoKSxhJiYob1syMF09YVswXSxvWzIxXT1hWzFdLG9bMjJdPTAsb1syNF09YVsyXSxvWzI1XT1hWzNdLG9bMjZdPTAsb1syOF09YVs0XSxvWzI5XT1hWzVdLG9bMzBdPTEsb1szMl09YVs2XSxvWzMzXT1hWzddLG9bMzRdPTAsb1szNl09YVs4XSxvWzM3XT1hWzldLG9bMzhdPTAsb1s0MF09YVsxMF0sb1s0MV09YVsxMV0sb1s0Ml09MSxvWzMxXT1hWzEyXSxvWzM1XT1hWzEzXSxvWzM5XT1hWzE0XSxvWzQzXT1hWzE1XSxvWzQ0XT1hWzE2XSxvWzQ1XT1hWzE3XSxvWzQ2XT1hWzE4XSxvWzQ3XT1hWzE5XSxvWzQ4XT1hWzIwXSxvWzQ5XT1hWzIxXSxvWzUwXT1hWzIyXSxvWzUxXT1hWzIzXSxvWzUyXT1hWzI0XSxvWzUzXT1hWzI1XSk7Y29uc3QgYz1lLm1lZGl1bXA7Y1swXT10LGNbMV09bn0pKG0sdSxoLG8pLFV0KG0sZSx0LGEpLHIucmVzdG9yZSgpLEwoZil9O2xldCB4cj0wO2NvbnN0IEVyPW5ldyBGbG9hdDMyQXJyYXkoMjU2KTtmb3IobGV0IGU9MTtlPDI1NjtlKyspRXJbZV09MjU1L2U7Y29uc3QgQXI9YXN5bmMoZSx0KT0+e2NvbnN0IGE9b24oMCwwLGUsdCk7T2UoYSksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixaKSxuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKG4uRlJBTUVCVUZGRVIsbi5DT0xPUl9BVFRBQ0hNRU5UMCxuLlRFWFRVUkVfMkQsYS5yZXNvdXJjZSwwKTtjb25zdCBvPW5ldyBVaW50OEFycmF5KGUqdCo0KSxzPXIuJG1haW5BdHRhY2htZW50T2JqZWN0O28uYnl0ZUxlbmd0aD54ciYmKHhyPWMoby5ieXRlTGVuZ3RoKSxuLmJ1ZmZlckRhdGEobi5QSVhFTF9QQUNLX0JVRkZFUix4cixuLlNUUkVBTV9SRUFEKSksbi5yZWFkUGl4ZWxzKDAscy5oZWlnaHQtdCxlLHQsbi5SR0JBLG4uVU5TSUdORURfQllURSwwKTtjb25zdCBpPW4uZmVuY2VTeW5jKG4uU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUsMCk7YXdhaXQgbmV3IFByb21pc2UoZT0+e2NvbnN0IHQ9KCk9PntpZihuLmNsaWVudFdhaXRTeW5jKGksbi5TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCwwKSE9PW4uVElNRU9VVF9FWFBJUkVEKXJldHVybiBuLmRlbGV0ZVN5bmMoaSksbi5nZXRCdWZmZXJTdWJEYXRhKG4uUElYRUxfUEFDS19CVUZGRVIsMCxvKSxlKCk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTt0KCl9KSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLEQpO2ZvcihsZXQgZT0wO2U8by5sZW5ndGg7ZSs9NCl7Y29uc3QgdD1vW2UrM107aWYoMD09PXR8fDI1NT09PXQpY29udGludWU7Y29uc3Qgbj1Fclt0XTtvW2VdPU1hdGgubWluKDI1NSxNYXRoLnJvdW5kKG9bZV0qbikpLG9bZSsxXT1NYXRoLm1pbigyNTUsTWF0aC5yb3VuZChvW2UrMV0qbikpLG9bZSsyXT1NYXRoLm1pbigyNTUsTWF0aC5yb3VuZChvW2UrMl0qbikpfXJldHVybiBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShvKSxlLHQpLHtpbWFnZU9yaWVudGF0aW9uOiJmbGlwWSIscHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9O2NsYXNzIHlye2NvbnN0cnVjdG9yKGEsbyxpPTEpe3ZhciBjO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkc3RhY2siLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJG1hdHJpeCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkY2xlYXJDb2xvclIiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJGNsZWFyQ29sb3JHIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRjbGVhckNvbG9yQiIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkY2xlYXJDb2xvckEiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJG1haW5BdHRhY2htZW50T2JqZWN0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRzdGFja0F0dGFjaG1lbnRPYmplY3QiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZ2xvYmFsQWxwaGEiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImltYWdlU21vb3RoaW5nRW5hYmxlZCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkZmlsbFN0eWxlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRzdHJva2VTdHlsZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtYXNrQm91bmRzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRoaWNrbmVzcyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjYXBzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImpvaW50cyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtaXRlckxpbWl0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksKGU9PntuPWV9KShhKSxjPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1RFWFRVUkVfU0laRSksZT1NYXRoLm1pbig0MDk2LGMvMiksKGU9Pnt0PWV9KShvKSwoZT0+e0E9ZX0pKGkpLHRoaXMuJHN0YWNrPXMoKSx0aGlzLiRzdGFja0F0dGFjaG1lbnRPYmplY3Q9cygpLHRoaXMuJG1hdHJpeD1kKDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzLiRjbGVhckNvbG9yUj0wLHRoaXMuJGNsZWFyQ29sb3JHPTAsdGhpcy4kY2xlYXJDb2xvckI9MCx0aGlzLiRjbGVhckNvbG9yQT0wLHRoaXMudGhpY2tuZXNzPTEsdGhpcy5jYXBzPTEsdGhpcy5qb2ludHM9Mix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLiRtYWluQXR0YWNobWVudE9iamVjdD1udWxsLHRoaXMuZ2xvYmFsQWxwaGE9MSx0aGlzLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ibm9ybWFsIix0aGlzLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMSx0aGlzLiRmaWxsU3R5bGU9bmV3IEZsb2F0MzJBcnJheShbMSwxLDEsMV0pLHRoaXMuJHN0cm9rZVN0eWxlPW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxLDFdKSx0aGlzLm1hc2tCb3VuZHM9e3hNaW46MCx5TWluOjAseE1heDowLHlNYXg6MH0sYS5waXhlbFN0b3JlaShhLlVOUEFDS19BTElHTk1FTlQsMSksYS5waXhlbFN0b3JlaShhLlVOUEFDS19GTElQX1lfV0VCR0wsITApLChlPT57RD1lLmNyZWF0ZUZyYW1lYnVmZmVyKCl9KShhKSwoZT0+e2o9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpfSkoYSksKChlLHQpPT57WD1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixYKSxlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGUuRlJBTUVCVUZGRVIsZS5DT0xPUl9BVFRBQ0hNRU5UMCxlLlRFWFRVUkVfMkQsdC5yZXNvdXJjZSwwKSxlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKGUuRFJBV19GUkFNRUJVRkZFUixYKX0pKGEsZ2UoKSksKGU9PntIPWUuY3JlYXRlRnJhbWVidWZmZXIoKSxLPWUuY3JlYXRlRnJhbWVidWZmZXIoKSxaPWUuY3JlYXRlRnJhbWVidWZmZXIoKSxRPWUuY3JlYXRlQnVmZmVyKCksZS5iaW5kQnVmZmVyKGUuUElYRUxfUEFDS19CVUZGRVIsUSl9KShhKSxfbihhKSxuLmVuYWJsZShuLkJMRU5EKSxMdCgpLChlPT57am49TWF0aC5mbG9vciguNzUqZS5nZXRQYXJhbWV0ZXIoZS5NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKSl9KShhKSxyPXRoaXN9Y2xlYXJUcmFuc2ZlckJvdW5kcygpeygoKT0+e2ZvcihsZXQgZT0wO2U8eGUubGVuZ3RoOysrZSl7Y29uc3QgdD14ZVtlXTt0JiYodFswXT10WzFdPU51bWJlci5NQVhfVkFMVUUsdFsyXT10WzNdPS1OdW1iZXIuTUFYX1ZBTFVFKX1mb3IobGV0IGU9MDtlPEFlLmxlbmd0aDsrK2Upe2NvbnN0IHQ9QWVbZV07dCYmKHRbMF09dFsxXT1OdW1iZXIuTUFYX1ZBTFVFLHRbMl09dFszXT0tTnVtYmVyLk1BWF9WQUxVRSl9fSkoKX11cGRhdGVCYWNrZ3JvdW5kQ29sb3IoZSx0LG4scil7KChlLHQsbixyLG8pPT57ZS4kY2xlYXJDb2xvclI9YSh0LDAsMSwwKSxlLiRjbGVhckNvbG9yRz1hKG4sMCwxLDApLGUuJGNsZWFyQ29sb3JCPWEociwwLDEsMCksZS4kY2xlYXJDb2xvckE9YShvLDAsMSwwKX0pKHRoaXMsZSx0LG4scil9ZmlsbEJhY2tncm91bmRDb2xvcigpe3ZhciBlLHQscixhO2U9dGhpcy4kY2xlYXJDb2xvclIsdD10aGlzLiRjbGVhckNvbG9yRyxyPXRoaXMuJGNsZWFyQ29sb3JCLGE9dGhpcy4kY2xlYXJDb2xvckEsbi5jbGVhckNvbG9yKGUsdCxyLGEpLG4uY2xlYXIobi5DT0xPUl9CVUZGRVJfQklUfG4uU1RFTkNJTF9CVUZGRVJfQklUKSxuLmNsZWFyQ29sb3IoMCwwLDAsMCl9cmVzaXplKGUsdCxuPSEwKXtGZSh0aGlzLGUsdCxuKX1jbGVhclJlY3QoZSx0LHIsYSl7KChlLHQscixhKT0+e24uZW5hYmxlKG4uU0NJU1NPUl9URVNUKSxuLnNjaXNzb3IoZSx0LHIsYSksbi5jbGVhcihuLkNPTE9SX0JVRkZFUl9CSVR8bi5TVEVOQ0lMX0JVRkZFUl9CSVQpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCl9KShlLHQscixhKX1iaW5kKGUpe0xlKHRoaXMsZSl9c2F2ZSgpe3ZhciBlOyhlPXRoaXMpLiRzdGFjay5wdXNoKGQoLi4uZS4kbWF0cml4KSl9cmVzdG9yZSgpe1VlKHRoaXMpfXNldFRyYW5zZm9ybShlLHQsbixyLGEsbyl7KChlLHQsbixyLGEsbyxzKT0+e2VbMF09dCxlWzFdPW4sZVszXT1yLGVbNF09YSxlWzZdPW8sZVs3XT1zfSkodGhpcy4kbWF0cml4LGUsdCxuLHIsYSxvKX10cmFuc2Zvcm0oZSx0LG4scixhLG8peygoZSx0LG4scixhLG8scyk9Pntjb25zdCBpPWUuJG1hdHJpeFswXSxjPWUuJG1hdHJpeFsxXSxsPWUuJG1hdHJpeFszXSx1PWUuJG1hdHJpeFs0XSxoPWUuJG1hdHJpeFs2XSxiPWUuJG1hdHJpeFs3XTtlLiRtYXRyaXhbMF09dCppK24qbCxlLiRtYXRyaXhbMV09dCpjK24qdSxlLiRtYXRyaXhbM109cippK2EqbCxlLiRtYXRyaXhbNF09cipjK2EqdSxlLiRtYXRyaXhbNl09byppK3MqbCtoLGUuJG1hdHJpeFs3XT1vKmMrcyp1K2J9KSh0aGlzLGUsdCxuLHIsYSxvKX1yZXNldCgpe3ZhciBlOyhlPXRoaXMpLmdsb2JhbEFscGhhPTEsZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Im5vcm1hbCIsZS5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITF9YmVnaW5QYXRoKCl7dmFyIGU7KGU9dGhpcykuJGZpbGxTdHlsZS5maWxsKDEpLGUuJHN0cm9rZVN0eWxlLmZpbGwoMSksKCgpPT57Zm9yKFQubGVuZ3RoPTA7Ui5sZW5ndGg7KWkoUi5wb3AoKSl9KSgpfW1vdmVUbyhlLHQpeyQoZSx0KX1saW5lVG8oZSx0KXsoKGUsdCk9PntULmxlbmd0aHx8JChlLHQpLEYoZSx0KXx8dyhlLHQsITEpfSkoZSx0KX1xdWFkcmF0aWNDdXJ2ZVRvKGUsdCxuLHIpe08oZSx0LG4scil9ZmlsbFN0eWxlKGUsdCxuLHIpe3RoaXMuJGZpbGxTdHlsZVswXT1lLHRoaXMuJGZpbGxTdHlsZVsxXT10LHRoaXMuJGZpbGxTdHlsZVsyXT1uLHRoaXMuJGZpbGxTdHlsZVszXT1yfXN0cm9rZVN0eWxlKGUsdCxuLHIpe3RoaXMuJHN0cm9rZVN0eWxlWzBdPWUsdGhpcy4kc3Ryb2tlU3R5bGVbMV09dCx0aGlzLiRzdHJva2VTdHlsZVsyXT1uLHRoaXMuJHN0cm9rZVN0eWxlWzNdPXJ9Y2xvc2VQYXRoKCl7KCgpPT57aWYoVC5sZW5ndGg8NylyZXR1cm47Y29uc3QgZT0rVFswXSx0PStUWzFdO0YoZSx0KXx8dyhlLHQsITEpfSkoKX1hcmMoZSx0LG4peygoZSx0LG4pPT57Y29uc3Qgcj1uLGE9LjU1MjI4NDc0OTgzMDc5MzYqbjtQKGUrcix0K2EsZSthLHQrcixlLHQrciksUChlLWEsdCtyLGUtcix0K2EsZS1yLHQpLFAoZS1yLHQtYSxlLWEsdC1yLGUsdC1yKSxQKGUrYSx0LXIsZStyLHQtYSxlK3IsdCl9KShlLHQsbil9YmV6aWVyQ3VydmVUbyhlLHQsbixyLGEsbyl7UChlLHQsbixyLGEsbyl9ZmlsbCgpeyhlPT57Y29uc3QgdD1NKCk7aWYoIXQubGVuZ3RoKXJldHVybjtHZS5wdXNoKGUpO2NvbnN0IG49amUodCk7VmUobi5idWZmZXIpLFdlLnB1c2gobi5pbmRleENvdW50KX0pKCJmaWxsIil9Z3JhZGllbnRGaWxsKGUsdCxuLHIsYSxvKXsoKGUsdCxuLHIsYSxvKT0+e2NvbnN0IHM9TSgpO2lmKCFzLmxlbmd0aClyZXR1cm47R2UucHVzaCgwPT09ZT8ibGluZWFyIjoicmFkaWFsIik7Y29uc3QgaT1qZShzKTtWZShpLmJ1ZmZlciksV2UucHVzaChpLmluZGV4Q291bnQpLHFlLnB1c2godCxuLHIsYSksMT09PWUmJnFlLnB1c2gobyl9KShlLHQsbixyLGEsbyl9Yml0bWFwRmlsbChlLHQsbixyLGEsbyl7KChlLHQsbixyLGEsbyk9Pntjb25zdCBzPU0oKTtpZighcy5sZW5ndGgpcmV0dXJuO0dlLnB1c2goImJpdG1hcCIpO2NvbnN0IGk9amUocyk7VmUoaS5idWZmZXIpLFdlLnB1c2goaS5pbmRleENvdW50KSx4bi5wdXNoKGUsdCxuLHIsYSxvKX0pKGUsdCxuLHIsYSxvKX1zdHJva2UoKXsoKCk9Pntjb25zdCBlPU0oITApO2lmKCFlLmxlbmd0aClyZXR1cm47R2UucHVzaCgiZmlsbCIpO2NvbnN0IHQ9dXQoZSk7VmUodC5idWZmZXIpLFdlLnB1c2godC5pbmRleENvdW50KX0pKCl9Z3JhZGllbnRTdHJva2UoZSx0LG4scixhLG8peygoZSx0LG4scixhLG8pPT57Y29uc3Qgcz1NKCk7aWYoIXMubGVuZ3RoKXJldHVybjtHZS5wdXNoKDA9PT1lPyJsaW5lYXIiOiJyYWRpYWwiKTtjb25zdCBpPXV0KHMpO1ZlKGkuYnVmZmVyKSxXZS5wdXNoKGkuaW5kZXhDb3VudCkscWUucHVzaCh0LG4scixhKSwxPT09ZSYmcWUucHVzaChvKX0pKGUsdCxuLHIsYSxvKX1iaXRtYXBTdHJva2UoZSx0LG4scixhLG8peygoZSx0LG4scixhLG8pPT57Y29uc3Qgcz1NKCEwKTtpZighcy5sZW5ndGgpcmV0dXJuO0dlLnB1c2goImJpdG1hcCIpO2NvbnN0IGk9dXQocyk7VmUoaS5idWZmZXIpLFdlLnB1c2goaS5pbmRleENvdW50KSx4bi5wdXNoKGUsdCxuLHIsYSxvKX0pKGUsdCxuLHIsYSxvKX1jbGlwKCl7KCgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2lmKCFlKXJldHVybjtjb25zdCB0PUJlLmdldChlLmNsaXBMZXZlbCksYT10WzBdLG89dFsxXSxzPXRbMl0saT10WzNdLGM9TWF0aC5jZWlsKE1hdGguYWJzKHMtYSkpLGw9TWF0aC5jZWlsKE1hdGguYWJzKGktbykpO24uZW5hYmxlKG4uU0NJU1NPUl9URVNUKSxuLnNjaXNzb3IoYSxlLmhlaWdodC1vLWwsYyxsKTtjb25zdCB1PUF0KCk7bGV0IGg9SWUuZ2V0KGUuY2xpcExldmVsKSxiPTAsZD1udWxsO2NvbnN0IGY9V2UubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8Zjt0Kyspe24uc3RlbmNpbE1hc2soMTw8aC0xKTtjb25zdCByPVdlW3RdO2h0Lmhhcyh0KSYmKGQ9aHQuZ2V0KHQpKTtjb25zdCBhPSR0KCEhZCk7ZCYmT3QoYSxkKSxVdChhLHUsYixyKSxiKz1yLCsraCxoPjcmJihEdCgpLGg9ZS5jbGlwTGV2ZWwrMSl9SWUuc2V0KGUuY2xpcExldmVsLGgpLHl0KHUpLFllKCksYnQoKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpfSkoKX1nZXQgY3VycmVudEF0dGFjaG1lbnRPYmplY3QoKXtyZXR1cm4gVygpfWdldCBhdGxhc0F0dGFjaG1lbnRPYmplY3QoKXtyZXR1cm4gdmUoKX1jcmVhdGVOb2RlKGUsdCl7cmV0dXJuIHp0KGUsdCl9cmVtb3ZlTm9kZShlKXsoZT0+e2NvbnN0IHQ9X2VbZS5pbmRleF07dCYmdC5kaXNwb3NlKGUueCxlLnksZS53LGUuaCl9KShlKX1iZWdpbk5vZGVSZW5kZXJpbmcoZSl7KGU9Pntjb25zdCB0PUVlKGUuaW5kZXgpLG49dFswXSxyPXRbMV0sYT10WzJdLG89dFszXTt0WzBdPU1hdGgubWluKGUueCxuKSx0WzFdPU1hdGgubWluKGUueSxyKSx0WzJdPU1hdGgubWF4KGUueCtlLncsYSksdFszXT1NYXRoLm1heChlLnkrZS5oLG8pfSkoZSksTmUoZS54LGUueSxlLncsZS5oKX1lbmROb2RlUmVuZGVyaW5nKCl7bi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKX1kcmF3RmlsbCgpeygoKT0+e2NvbnN0IGU9QXQoKTtuLmVuYWJsZShuLlNURU5DSUxfVEVTVCksbi5mcm9udEZhY2Uobi5DQ1cpLG4uc3RlbmNpbE1hc2soMjU1KTtsZXQgdD0wLHI9bnVsbDtmb3IobGV0IG49MDtuPEdlLmxlbmd0aDtuKyspc3dpdGNoKGh0LmhhcyhuKSYmKHI9aHQuZ2V0KG4pKSxHZVtuXSl7Y2FzZSJmaWxsIjp7Y29uc3Qgbj1XZS5zaGlmdCgpO3VyKGUsdCxuLHIpLHQrPW59YnJlYWs7Y2FzZSJsaW5lYXIiOntjb25zdCBuPVdlLnNoaWZ0KCk7dnIoZSx0LG4sciksdCs9bn1icmVhaztjYXNlInJhZGlhbCI6e2NvbnN0IG49V2Uuc2hpZnQoKTtfcihlLHQsbixyKSx0Kz1ufWJyZWFrO2Nhc2UiYml0bWFwIjp7Y29uc3Qgbj1XZS5zaGlmdCgpO2dyKGUsdCxuLHIpLHQrPW59fW4uZGlzYWJsZShuLlNURU5DSUxfVEVTVCkseXQoZSksWWUoKSxidCgpfSkoKX1kcmF3RGlzcGxheU9iamVjdCh0LG4sYSxvLHMsaSl7KGU9Pntjb25zdCB0PXllKGUuaW5kZXgpLG49dFswXSxyPXRbMV0sYT10WzJdLG89dFszXTt0WzBdPU1hdGgubWluKGUueCxuKSx0WzFdPU1hdGgubWluKGUueSxyKSx0WzJdPU1hdGgubWF4KGUueCtlLncsYSksdFszXT1NYXRoLm1heChlLnkrZS5oLG8pfSkodCksKCh0LG4sYSxvLHMsaSk9Pntjb25zdCBjPWlbMF0sbD1pWzFdLHU9aVsyXSxoPXIuZ2xvYmFsQWxwaGEsYj1pWzRdLzI1NSxkPWlbNV0vMjU1LGY9aVs2XS8yNTUsdj1yLiRtYXRyaXg7c3dpdGNoKHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKXtjYXNlIm5vcm1hbCI6Y2FzZSJsYXllciI6Y2FzZSJhZGQiOmNhc2Uic2NyZWVuIjpjYXNlImFscGhhIjpjYXNlImVyYXNlIjpjYXNlImNvcHkiOntpZihDdCgpIT09ci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb258fE1lKCkhPT10LmluZGV4KXtkZShNZSgpKTtjb25zdCBlPXIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO3IuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPUN0KCksci5kcmF3QXJyYXlzSW5zdGFuY2VkKCksci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ZSxrdChyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiksUmUodC5pbmRleCksZGUodC5pbmRleCl9Y29uc3Qgbj1LdCgpO0d0LnB1c2godC54L2UsdC55L2UsdC53L2UsdC5oL2UsdC53LHQuaCx4KCksRSgpLHZbNl0sdls3XSx2WzBdLHZbMV0sdlszXSx2WzRdLGMsbCx1LGgsYixkLGYsMCksbi5jb3VudCsrfWJyZWFrO2RlZmF1bHQ6e2NvbnN0IGU9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtyLmRyYXdBcnJheXNJbnN0YW5jZWQoKTtjb25zdCBpPU1hdGguY2VpbChNYXRoLmFicyhvLW4pKSxfPU1hdGguY2VpbChNYXRoLmFicyhzLWEpKTtsZXQgcD0wLGc9MCx4PUp0KHQpO2lmKDEhPT12WzBdfHwwIT09dlsxXXx8MCE9PXZbM118fDEhPT12WzRdKXtjb25zdCBuPWhlKGksXywhMSksYT1tKHZbMF0sdlsxXSx2WzNdLHZbNF0saS8yLF8vMiksbz1tKDEsMCwwLDEsLXQudy8yLC10LmgvMikscz1tKGFbMF0qb1swXSthWzJdKm9bMV0sYVsxXSpvWzBdK2FbM10qb1sxXSxhWzBdKm9bMl0rYVsyXSpvWzNdLGFbMV0qb1syXSthWzNdKm9bM10sYVswXSpvWzRdK2FbMl0qb1s1XSthWzRdLGFbMV0qb1s0XSthWzNdKm9bNV0rYVs1XSk7ci5zYXZlKCksci5iaW5kKG4pLHIuc2V0VHJhbnNmb3JtKHNbMF0sc1sxXSxzWzJdLHNbM10sc1s0XSxzWzVdKSxwPXNbNF0sZz1zWzVdO2NvbnN0IGM9aG4oKTtibihjLHgud2lkdGgseC5oZWlnaHQpLE9lKHgsITApLHJuKGMpLEwoeCkseD1uLnRleHR1cmUsZWUobiwhMSksZSYmci5iaW5kKGUpLHIucmVzdG9yZSgpfShwfHxnKSYmKHZbNl0tPXAsdls3XS09Zyk7Y29uc3QgRT1zbih2WzZdLHZbN10saSxfKSxBPWhlKGksXywhMSk7ci5iaW5kKEEpLGVuKEUseCk7Y29uc3QgeT1IdChyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik7dW4oeSxjLGwsdSxoLGIsZCxmLDApLHJuKHkpLGUmJnIuYmluZChlKSxsbihBLnRleHR1cmUpLChwfHxnKSYmKHZbNl0rPXAsdls3XSs9ZyksTCh4KSxMKEUpLGVlKEEpLGt0KHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKSxSZSh0LmluZGV4KSxkZSh0LmluZGV4KX19fSkodCxuLGEsbyxzLGkpfWRyYXdBcnJheXNJbnN0YW5jZWQoKXsoKCk9Pntjb25zdCBlPUt0KCk7ZS5jb3VudCYmKFF0KCksdm4oci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pLGZuKGUpLGUuY2xlYXIoKSl9KSgpfWNsZWFyQXJyYXlzSW5zdGFuY2VkKCl7S3QoKS5jbGVhcigpfXRyYW5zZmVyTWFpbkNhbnZhcygpeygoKT0+e2NvbnN0IGU9ci4kbWFpbkF0dGFjaG1lbnRPYmplY3Q7ci5iaW5kKGUpLG4uYmluZEZyYW1lYnVmZmVyKG4uUkVBRF9GUkFNRUJVRkZFUixEKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkRSQVdfRlJBTUVCVUZGRVIsbnVsbCk7Y29uc3QgdD1lLndpZHRoLGE9ZS5oZWlnaHQ7bi5ibGl0RnJhbWVidWZmZXIoMCwwLHQsYSwwLDAsdCxhLG4uQ09MT1JfQlVGRkVSX0JJVCxuLk5FQVJFU1QpLG4uYmluZEZyYW1lYnVmZmVyKG4uRFJBV19GUkFNRUJVRkZFUixqKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLEQpfSkoKX1kcmF3UGl4ZWxzKGUsdCl7KChlLHQpPT57Y29uc3Qgbj1wbihlLncsZS5oLHQpLHI9dG4oKTtubihyLGUudyxlLmgpLEx0KCkscm4ociksTChuKX0pKGUsdCl9ZHJhd0VsZW1lbnQoZSx0KXtnbihlLHQpfWJlZ2luTWFzaygpeygoKT0+e2NvbnN0IGU9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtlJiYoZS5tYXNrPSEwLGUuY2xpcExldmVsKyssSWUuc2V0KGUuY2xpcExldmVsLGUuY2xpcExldmVsKSxQZSgpfHwoQ2UoITApLG4uZW5hYmxlKG4uU1RFTkNJTF9URVNUKSxuLmVuYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksbi5zdGVuY2lsRnVuYyhuLkFMV0FZUywwLDI1NSksbi5zdGVuY2lsT3Aobi5aRVJPLG4uSU5WRVJULG4uSU5WRVJUKSxuLmNvbG9yTWFzayghMSwhMSwhMSwhMSkpKX0pKCl9c2V0TWFza0JvdW5kcyhlLHQsYSxvKXsoKGUsdCxhLG8pPT57Y29uc3Qgcz1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2lmKCFzKXJldHVybjtCZS5zZXQocy5jbGlwTGV2ZWwsdShlLHQsYSxvKSk7Y29uc3QgaT1NYXRoLmNlaWwoTWF0aC5hYnMoYS1lKSksYz1NYXRoLmNlaWwoTWF0aC5hYnMoby10KSk7bi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihlLHMuaGVpZ2h0LXQtYyxpLGMpfSkoZSx0LGEsbyl9ZW5kTWFzaygpe1NlKCl9bGVhdmVNYXNrKCl7dGhpcy5kcmF3QXJyYXlzSW5zdGFuY2VkKCksKCgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2lmKCFlKXJldHVybjtjb25zdCB0PWUuY2xpcExldmVsLGE9QmUuZ2V0KHQpLG89YVswXSxzPWFbMV0saT1hWzJdLGM9YVszXTtCZS5kZWxldGUodCksSWUuZGVsZXRlKHQpLGgoYSk7Y29uc3QgbD1NYXRoLmNlaWwoTWF0aC5hYnMoaS1vKSksdT1NYXRoLmNlaWwoTWF0aC5hYnMoYy1zKSk7aWYobi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihvLGUuaGVpZ2h0LXMtdSxsLHUpLC0tZS5jbGlwTGV2ZWwsIWUuY2xpcExldmVsKXJldHVybiBlLm1hc2s9ITEsQ2UoITEpLG4uY2xlYXIobi5TVEVOQ0lMX0JVRkZFUl9CSVQpLG4uZGlzYWJsZShuLlNURU5DSUxfVEVTVCksbi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKSxJZS5jbGVhcigpLHZvaWQgQmUuY2xlYXIoKTtuLnN0ZW5jaWxNYXNrKDE8PGUuY2xpcExldmVsKSxuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcChuLlJFUExBQ0Usbi5SRVBMQUNFLG4uUkVQTEFDRSksbi5jb2xvck1hc2soITEsITEsITEsITEpLFV0KE50KCksRXQoKSwwLDYpLFNlKCl9KSgpfXVzZUdyaWQoZSl7KGU9PntodC5zZXQoV2UubGVuZ3RoLGUpfSkoZSl9YXBwbHlGaWx0ZXIoZSx0LG4scixhLG8scyxpLGMsbCx1KXt0aGlzLmRyYXdBcnJheXNJbnN0YW5jZWQoKSxscihlLHQsbixyLGEsbyxzLGksYyxsLHUpfWFzeW5jIGNyZWF0ZUltYWdlQml0bWFwKGUsdCl7cmV0dXJuIGF3YWl0IEFyKGUsdCl9fWxldCBUcjtsZXQgUnI7bGV0IE1yPTA7bGV0IHdyPTA7bGV0IEZyPSExO2NvbnN0ICRyPVtdLE9yPSguLi5lKT0+e2NvbnN0IHQ9JHIucG9wKCl8fFtdO3JldHVybiBlLmxlbmd0aCYmdC5wdXNoKC4uLmUpLHR9LFNyPShlLHQ9MSk9Pih7UjooMTY3MTE2ODAmZSk+PjE2LEc6KDY1MjgwJmUpPj44LEI6MjU1JmUsQToyNTUqdH0pLGtyPShlLHQpPT57KGU9PntScj1lfSkoZSk7Y29uc3Qgbj1lLmdldENvbnRleHQoIndlYmdsMiIse3N0ZW5jaWw6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMSxkZXB0aDohMX0pO2lmKCFuKXRocm93IG5ldyBFcnJvcigid2ViZ2wyIGlzIG5vdCBzdXBwb3J0ZWQuIik7dmFyIHI7cj1uZXcgeXIobiw0LHQpLFRyPXJ9LENyPShlLHQsbj0hMCk9PntNcj09PWUmJndyPT09dHx8KEZyPSEwLE1yPWUsd3I9dCxUci5yZXNpemUoZSx0LG4pLG4mJmNyLnJlc2V0KCkpfSxQcj0oZSx0PSExKT0+e2xldCBuPTA7Zm9yKDtlLmxlbmd0aD5uOylzd2l0Y2goZVtuKytdKXtjYXNlIDk6VHIuYmVnaW5QYXRoKCk7YnJlYWs7Y2FzZSAwOlRyLm1vdmVUbyhlW24rK10sZVtuKytdKTticmVhaztjYXNlIDI6VHIubGluZVRvKGVbbisrXSxlW24rK10pO2JyZWFrO2Nhc2UgMTpUci5xdWFkcmF0aWNDdXJ2ZVRvKGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSk7YnJlYWs7Y2FzZSA1OmlmKHQpe24rPTQ7YnJlYWt9VHIuZmlsbFN0eWxlKGVbbisrXS8yNTUsZVtuKytdLzI1NSxlW24rK10vMjU1LGVbbisrXS8yNTUpO2JyZWFrO2Nhc2UgNzpUci5maWxsKCk7YnJlYWs7Y2FzZSA2OmlmKHQpe24rPTg7YnJlYWt9VHIudGhpY2tuZXNzPWVbbisrXSxUci5jYXBzPWVbbisrXSxUci5qb2ludHM9ZVtuKytdLFRyLm1pdGVyTGltaXQ9ZVtuKytdLFRyLnN0cm9rZVN0eWxlKGVbbisrXS8yNTUsZVtuKytdLzI1NSxlW24rK10vMjU1LGVbbisrXS8yNTUpO2JyZWFrO2Nhc2UgODppZih0KWJyZWFrO1RyLnN0cm9rZSgpO2JyZWFrO2Nhc2UgMTI6VHIuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSA0OlRyLmFyYyhlW24rK10sZVtuKytdLGVbbisrXSk7YnJlYWs7Y2FzZSAzOlRyLmJlemllckN1cnZlVG8oZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10pO2JyZWFrO2Nhc2UgMTA6e2lmKHQpe24rPTE7Y29uc3QgdD1lW24rK107bis9NSp0LG4rPTksVHIuZmlsbCgpO2JyZWFrfWNvbnN0IHI9ZVtuKytdLGE9T3IoKSxvPWVbbisrXTtmb3IobGV0IHQ9MDt0PG87Kyt0KWEucHVzaChlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdKTtjb25zdCBzPW5ldyBGbG9hdDMyQXJyYXkoW2VbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdXSksaT1lW24rK10sYz1lW24rK10sbD1lW24rK107VHIuZ3JhZGllbnRGaWxsKHIsYSxzLGksYyxsKX1icmVhaztjYXNlIDEzOntpZih0KXtuKz0yO2NvbnN0IHQ9ZVtuKytdO24rPXQsbis9OCxUci5maWxsKCk7YnJlYWt9Y29uc3Qgcj1lW24rK10sYT1lW24rK10sbz1lW24rK10scz1uZXcgVWludDhBcnJheShlLnN1YmFycmF5KG4sbitvKSk7bis9bztjb25zdCBpPW5ldyBGbG9hdDMyQXJyYXkoW2VbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdXSk7VHIuYml0bWFwRmlsbChzLGkscixhLEJvb2xlYW4oZVtuKytdKSxCb29sZWFuKGVbbisrXSkpfWJyZWFrO2Nhc2UgMTE6e2lmKHQpe24rPTIwLFRyLmZpbGwoKTticmVha31Uci50aGlja25lc3M9ZVtuKytdLFRyLmNhcHM9ZVtuKytdLFRyLmpvaW50cz1lW24rK10sVHIubWl0ZXJMaW1pdD1lW24rK107Y29uc3Qgcj1lW24rK10sYT1PcigpLG89ZVtuKytdO2ZvcihsZXQgdD0wO3Q8bzsrK3QpYS5wdXNoKGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10pO2NvbnN0IHM9bmV3IEZsb2F0MzJBcnJheShbZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK11dKSxpPWVbbisrXSxjPWVbbisrXSxsPWVbbisrXTtUci5ncmFkaWVudFN0cm9rZShyLGEscyxpLGMsbCl9YnJlYWs7Y2FzZSAxNDp7aWYodCl7bis9Njtjb25zdCB0PWVbbisrXTtuKz10LG4rPTgsVHIuZmlsbCgpO2JyZWFrfVRyLnRoaWNrbmVzcz1lW24rK10sVHIuY2Fwcz1lW24rK10sVHIuam9pbnRzPWVbbisrXSxUci5taXRlckxpbWl0PWVbbisrXTtjb25zdCByPWVbbisrXSxhPWVbbisrXSxvPWVbbisrXSxzPW5ldyBVaW50OEFycmF5KGUuc3ViYXJyYXkobixuK28pKTtuKz1vO2NvbnN0IGk9bmV3IEZsb2F0MzJBcnJheShbZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK11dKTtUci5iaXRtYXBTdHJva2UocyxpLHIsYSxCb29sZWFuKGVbbisrXSksQm9vbGVhbihlW24rK10pKX19fSxCcj1lPT57c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4iY29weSI7Y2FzZSAxOnJldHVybiJhZGQiO2Nhc2UgMjpyZXR1cm4iYWxwaGEiO2Nhc2UgMzpyZXR1cm4iZGFya2VuIjtjYXNlIDQ6cmV0dXJuImRpZmZlcmVuY2UiO2Nhc2UgNTpyZXR1cm4iZXJhc2UiO2Nhc2UgNjpyZXR1cm4iaGFyZGxpZ2h0IjtjYXNlIDc6cmV0dXJuImludmVydCI7Y2FzZSA4OnJldHVybiJsYXllciI7Y2FzZSA5OnJldHVybiJsaWdodGVuIjtjYXNlIDEwOnJldHVybiJtdWx0aXBseSI7Y2FzZSAxMTpkZWZhdWx0OnJldHVybiJub3JtYWwiO2Nhc2UgMTI6cmV0dXJuIm92ZXJsYXkiO2Nhc2UgMTM6cmV0dXJuInNjcmVlbiI7Y2FzZSAxNDpyZXR1cm4ic3VidHJhY3QifX0sSXI9KGUsdCk9Pntjb25zdCBuPWUuc3ViYXJyYXkodCx0KzYpO3QrPTY7Y29uc3Qgcj1lLnN1YmFycmF5KHQsdCs4KTt0Kz04O2NvbnN0IGE9ZS5zdWJhcnJheSh0LHQrNCk7dCs9NDtjb25zdCBvPWVbdCsrXSxzPWVbdCsrXSxpPWVbdCsrXSxjPWVbdCsrXSxsPUJvb2xlYW4oZVt0KytdKSx1PUJvb2xlYW4oZVt0KytdKSxoPUJvb2xlYW4oZVt0KytdKSxiPWAke2VbdCsrXX1gLGQ9ZVt0KytdLGY9TWF0aC5zcXJ0KG5bMF0qblswXStuWzFdKm5bMV0pLG09TWF0aC5zcXJ0KG5bMl0qblsyXStuWzNdKm5bM10pO2xldCB2O2lmKGVbdCsrXSl7aWYodj1jci5nZXQoYixgJHtkfWApLCF2KXJldHVybiB0fWVsc2V7Y29uc3Qgbj1sP25ldyBGbG9hdDMyQXJyYXkoMjgpOm51bGw7biYmKG4uc2V0KGUuc3ViYXJyYXkodCx0KzI0KSksdCs9MjQpLFRyLnVzZUdyaWQobik7Y29uc3Qgcj1lW3QrK10sYT1lLnN1YmFycmF5KHQsdCtyKTtpZihoJiYhbCl7Y29uc3QgZT1NYXRoLmNlaWwoTWF0aC5hYnMoaS1vKSksdD1NYXRoLmNlaWwoTWF0aC5hYnMoYy1zKSk7dj1Uci5jcmVhdGVOb2RlKGUsdCksY3Iuc2V0KGIsYCR7ZH1gLHYpO2NvbnN0IG49VHIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7VHIuYmluZChUci5hdGxhc0F0dGFjaG1lbnRPYmplY3QpLFRyLnJlc2V0KCksVHIuYmVnaW5Ob2RlUmVuZGVyaW5nKHYpO2NvbnN0IHI9VHIuYXRsYXNBdHRhY2htZW50T2JqZWN0LmhlaWdodC12LnktdDtUci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSx2LngsciksdT8oUHIoYSksVHIuZHJhd0ZpbGwoKSk6VHIuZHJhd1BpeGVscyh2LG5ldyBVaW50OEFycmF5KGEpKSxUci5lbmROb2RlUmVuZGVyaW5nKCksbiYmVHIuYmluZChuKX1lbHNle2NvbnN0IGU9TWF0aC5jZWlsKE1hdGguYWJzKGktbykqZiksdD1NYXRoLmNlaWwoTWF0aC5hYnMoYy1zKSptKTt2PVRyLmNyZWF0ZU5vZGUoZSx0KSxjci5zZXQoYixgJHtkfWAsdik7Y29uc3Qgcj1Uci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtUci5iaW5kKFRyLmF0bGFzQXR0YWNobWVudE9iamVjdCksVHIucmVzZXQoKSxUci5iZWdpbk5vZGVSZW5kZXJpbmcodik7Y29uc3QgbD1Uci5hdGxhc0F0dGFjaG1lbnRPYmplY3QuaGVpZ2h0LXYueS10O1RyLnNldFRyYW5zZm9ybShmLDAsMCxtLC1vKmYrdi54LC1zKm0rbCksbiYmKG5bMjRdPXYueCxuWzI1XT1sKSxQcihhKSxUci5kcmF3RmlsbCgpLFRyLmVuZE5vZGVSZW5kZXJpbmcoKSxyJiZUci5iaW5kKHIpfXQrPXJ9Y29uc3QgXz1lW3QrK107aWYoQm9vbGVhbihlW3QrK10pKXtjb25zdCBvPUJvb2xlYW4oZVt0KytdKSxzPWUuc3ViYXJyYXkodCx0KzQpO3QrPTQ7Y29uc3QgaT1lW3QrK10sYz1lLnN1YmFycmF5KHQsdCtpKSxsPU1hdGguY2VpbChNYXRoLmFicyhhWzJdLWFbMF0pKSx1PU1hdGguY2VpbChNYXRoLmFicyhhWzNdLWFbMV0pKTtyZXR1cm4gVHIuYXBwbHlGaWx0ZXIodixiLG8sbCx1LGgsbixyLEJyKF8pLHMsYyksdCs9aX1pZihUci5nbG9iYWxBbHBoYT1NYXRoLm1pbihNYXRoLm1heCgwLHJbM10rcls3XS8yNTUpLDEpLFRyLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMCxUci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249QnIoXyksaCYmIWwpVHIuc2V0VHJhbnNmb3JtKG5bMF0sblsxXSxuWzJdLG5bM10sbls0XSxuWzVdKSxUci5kcmF3RGlzcGxheU9iamVjdCh2LGFbMF0sYVsxXSxhWzJdLGFbM10scik7ZWxzZXtjb25zdCBlPU1hdGguYXRhbjIoblsxXSxuWzBdKSx0PU1hdGguYXRhbjIoLW5bMl0sblszXSk7aWYoZXx8dCl7Y29uc3Qgcj1vKmYsYT1zKm0saT1NYXRoLmNvcyhlKSxjPU1hdGguc2luKGUpLGw9TWF0aC5jb3ModCksdT1NYXRoLnNpbih0KTtUci5zZXRUcmFuc2Zvcm0oaSxjLC11LGwscippLWEqdStuWzRdLHIqYythKmwrbls1XSl9ZWxzZSBUci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSxhWzBdLGFbMV0pO1RyLmRyYXdEaXNwbGF5T2JqZWN0KHYsYVswXSxhWzFdLGFbMl0sYVszXSxyKX1yZXR1cm4gdH0sTHI9KGUsdCk9Pntjb25zdCBuPWUuc3ViYXJyYXkodCx0KzYpO3QrPTYsVHIucmVzZXQoKSxUci5zZXRUcmFuc2Zvcm0oblswXSxuWzFdLG5bMl0sblszXSxuWzRdLG5bNV0pO2NvbnN0IHI9Qm9vbGVhbihlW3QrK10pP25ldyBGbG9hdDMyQXJyYXkoMjgpOm51bGw7VHIudXNlR3JpZChyKSxyJiYoci5zZXQoZS5zdWJhcnJheSh0LHQrMjQpKSx0Kz0yNCk7Y29uc3QgYT1lW3QrK10sbz1lLnN1YmFycmF5KHQsdCthKTtyZXR1cm4gUHIobywhMCksdCs9YSxUci5jbGlwKCksdH0sVXI9KGUsdCxuKT0+e2NvbnN0IHI9ZS53aWR0aFRhYmxlW3QubGluZV18fDAsYT10LnRleHRGb3JtYXQsbz1hLmxlZnRNYXJnaW58fDA7aWYoIW4ud29yZFdyYXAmJnI+bi5yYXdXaWR0aClyZXR1cm4gTWF0aC5tYXgoMCxvKTtjb25zdCBzPWEucmlnaHRNYXJnaW58fDA7cmV0dXJuImNlbnRlciI9PT1hLmFsaWdufHwiY2VudGVyIj09PW4uYXV0b1NpemU/TWF0aC5tYXgoMCxuLnJhd1dpZHRoLzItby1zLXIvMi0yKToicmlnaHQiPT09YS5hbGlnbnx8InJpZ2h0Ij09PW4uYXV0b1NpemU/TWF0aC5tYXgoMCxuLnJhd1dpZHRoLW8tci1zLTQpOk1hdGgubWF4KDAsbyl9LE5yPWU9PntsZXQgdD0iIjtyZXR1cm4gZS5pdGFsaWMmJih0Kz0iaXRhbGljICIpLGUuYm9sZCYmKHQrPSJib2xkICIpLGAke3R9JHtlLnNpemV9cHggJyR7ZS5mb250fScsJ3NhbnMtc2VyaWYnYH0sRHI9bmV3IFRleHREZWNvZGVyLGpyPShlLHQpPT57Y29uc3Qgbj1lLnN1YmFycmF5KHQsdCs2KTt0Kz02O2NvbnN0IHI9ZS5zdWJhcnJheSh0LHQrOCk7dCs9ODtjb25zdCBhPWUuc3ViYXJyYXkodCx0KzQpO3QrPTQ7Y29uc3Qgbz1lW3QrK10scz1lW3QrK10saT1lW3QrK10sYz1lW3QrK10sbD1gJHtlW3QrK119YCx1PWVbdCsrXSxoPUJvb2xlYW4oZVt0KytdKSxiPU1hdGguc3FydChuWzBdKm5bMF0rblsxXSpuWzFdKSxkPU1hdGguc3FydChuWzJdKm5bMl0rblszXSpuWzNdKTtsZXQgZjtpZihlW3QrK10pe2lmKGY9Y3IuZ2V0KGwsYCR7dX1gKSwhZilyZXR1cm4gdH1lbHNle2NvbnN0IG49TWF0aC5jZWlsKE1hdGguYWJzKGktbykqYikscj1NYXRoLmNlaWwoTWF0aC5hYnMoYy1zKSpkKSxhPUJvb2xlYW4oZVt0KytdKTtmPWE/Y3IuZ2V0KGwsYCR7dX1gKTpUci5jcmVhdGVOb2RlKG4sciksYXx8Y3Iuc2V0KGwsYCR7dX1gLGYpO2NvbnN0IGg9ZVt0KytdLG09bmV3IFVpbnQ4QXJyYXkoZS5zdWJhcnJheSh0LHQraCkpO3QrPWg7bGV0IHY9Im5vbmUiO3N3aXRjaChlW3QrK10pe2Nhc2UgMDp2PSJjZW50ZXIiO2JyZWFrO2Nhc2UgMTp2PSJsZWZ0IjticmVhaztjYXNlIDI6dj0ibm9uZSI7YnJlYWs7Y2FzZSAzOnY9InJpZ2h0In1jb25zdCBfPXt3aWR0aDpuLGhlaWdodDpyLGF1dG9TaXplOnYsc3RvcEluZGV4OmVbdCsrXSxzY3JvbGxYOmVbdCsrXSxzY3JvbGxZOmVbdCsrXSx0ZXh0V2lkdGg6ZVt0KytdLHRleHRIZWlnaHQ6ZVt0KytdLHJhd1dpZHRoOmVbdCsrXSxyYXdIZWlnaHQ6ZVt0KytdLGZvY3VzSW5kZXg6ZVt0KytdLHNlbGVjdEluZGV4OmVbdCsrXSxmb2N1c1Zpc2libGU6Qm9vbGVhbihlW3QrK10pLHRoaWNrbmVzczplW3QrK10sdGhpY2tuZXNzQ29sb3I6ZVt0KytdLHdvcmRXcmFwOkJvb2xlYW4oZVt0KytdKSxib3JkZXI6Qm9vbGVhbihlW3QrK10pLGJvcmRlckNvbG9yOmVbdCsrXSxiYWNrZ3JvdW5kOkJvb2xlYW4oZVt0KytdKSxiYWNrZ3JvdW5kQ29sb3I6ZVt0KytdLGRlZmF1bHRDb2xvcjplW3QrK10sZGVmYXVsdFNpemU6ZVt0KytdfSxwPSgoZSx0LG4scik9Pntjb25zdCBhPW5ldyBPZmZzY3JlZW5DYW52YXModC53aWR0aCx0LmhlaWdodCksbz1hLmdldENvbnRleHQoIjJkIik7aWYoIW8pcmV0dXJuIGE7Y29uc3Qgcz1NYXRoLm1pbigxLE1hdGgubWF4KG4scikpO2lmKHQuYmFja2dyb3VuZHx8dC5ib3JkZXIpe2lmKG8uYmVnaW5QYXRoKCksby5tb3ZlVG8oMCwwKSxvLmxpbmVUbyh0LndpZHRoLDApLG8ubGluZVRvKHQud2lkdGgsdC5oZWlnaHQpLG8ubGluZVRvKDAsdC5oZWlnaHQpLG8ubGluZVRvKDAsMCksdC5iYWNrZ3JvdW5kKXtjb25zdCBlPVNyKHQuYmFja2dyb3VuZENvbG9yKTtvLmZpbGxTdHlsZT1gcmdiYSgke2UuUn0sJHtlLkd9LCR7ZS5CfSwke2UuQX0pYCxvLmZpbGwoKX1pZih0LmJvcmRlcil7Y29uc3QgZT1Tcih0LmJvcmRlckNvbG9yKTtvLmxpbmVXaWR0aD1zLG8uc3Ryb2tlU3R5bGU9YHJnYmEoJHtlLlJ9LCR7ZS5HfSwke2UuQn0sJHtlLkF9KWAsby5zdHJva2UoKX19aWYoIWUpcmV0dXJuIGE7by5zYXZlKCksby5iZWdpblBhdGgoKSxvLm1vdmVUbygyLDIpLG8ubGluZVRvKHQud2lkdGgtMiwyKSxvLmxpbmVUbyh0LndpZHRoLTIsdC5oZWlnaHQtMiksby5saW5lVG8oMix0LmhlaWdodC0yKSxvLmxpbmVUbygyLDIpLG8uY2xpcCgpO2xldCBpPTI7aWYodC5zY3JvbGxYPjApe2NvbnN0IGU9KHQudGV4dFdpZHRoKzQtdC5yYXdXaWR0aCkvdC5yYXdXaWR0aDtpKz0tdC5zY3JvbGxYKmV9bGV0IGM9MjtpZih0LnNjcm9sbFk+MCl7Y29uc3QgZT0odC50ZXh0SGVpZ2h0KzItdC5yYXdIZWlnaHQpL3QucmF3SGVpZ2h0O2MrPS10LnNjcm9sbFkqZX1pZihvLnNldFRyYW5zZm9ybShuLDAsMCxyLGkqbixjKnIpLG8uYmVnaW5QYXRoKCksdC5zZWxlY3RJbmRleD4tMSYmdC5mb2N1c0luZGV4Pi0xKXtjb25zdCBuPWUudGV4dFRhYmxlLmxlbmd0aC0xO2xldCByPTAsYT0wO3QuZm9jdXNJbmRleDw9dC5zZWxlY3RJbmRleD8ocj1NYXRoLm1pbih0LmZvY3VzSW5kZXgsbiksYT1NYXRoLm1pbih0LnNlbGVjdEluZGV4LG4pKToocj1NYXRoLm1pbih0LnNlbGVjdEluZGV4LG4pLGE9TWF0aC5taW4odC5mb2N1c0luZGV4LTEsbikpO2NvbnN0IHM9ZS50ZXh0VGFibGVbcl0saT1lLmxpbmVUYWJsZVtzLmxpbmVdLGM9VXIoZSxpLHQpO2xldCBsPTA7aWYociYmInRleHQiPT09cy5tb2RlKXtsZXQgdD1yO2Zvcig7dDspe2NvbnN0IG49ZS50ZXh0VGFibGVbLS10XTtpZigidGV4dCIhPT1uLm1vZGUpYnJlYWs7bCs9bi53fX1vLmZpbGxTdHlsZT0iI2I0ZDdmZiI7bGV0IHU9MDtmb3IobGV0IHQ9cjt0PD1hOysrdCl7Y29uc3Qgbj1lLnRleHRUYWJsZVt0XTtpZigidGV4dCI9PT1uLm1vZGUmJih1Kz1uLncsdCE9PWEpKWNvbnRpbnVlO2xldCByPTA7Y29uc3Qgcz0idGV4dCI9PT1uLm1vZGU/bi5saW5lOm4ubGluZS0xO2ZvcihsZXQgdD0wO3Q8czsrK3Qpcis9ZS5oZWlnaHRUYWJsZVt0XTtvLmJlZ2luUGF0aCgpLG8ucmVjdChsLHIsdStjLGUuaGVpZ2h0VGFibGVbc10pLG8uZmlsbCgpLGw9MCx1PTB9fWNvbnN0IGw9dC5yYXdXaWR0aDtsZXQgdT0wO2lmKHQuc2Nyb2xsWD4wKXtjb25zdCBlPSh0LnRleHRXaWR0aC1sKS9sO3U9dC5zY3JvbGxYKmV9Y29uc3QgaD1sK3UsYj10LnJhd0hlaWdodDtsZXQgZD0wO2lmKHQuc2Nyb2xsWT4wKXtjb25zdCBlPSh0LnRleHRIZWlnaHQtYikvYjtkPXQuc2Nyb2xsWSplfWNvbnN0IGY9YitkO2xldCBtPTAsdj0wLF89MCxwPTAsZz0hMSx4PS0xO2ZvcihsZXQgbj0wO248ZS50ZXh0VGFibGUubGVuZ3RoOysrbil7Y29uc3Qgcj1lLnRleHRUYWJsZVtuXTtpZighciljb250aW51ZTtpZigoInRleHQiPT09ci5tb2RlfHwiYnJlYWsiPT09ci5tb2RlKSYmKHgrKyx0LnN0b3BJbmRleD4tMSYmeD50LnN0b3BJbmRleCkpYnJlYWs7aWYoZyYmInRleHQiPT09ci5tb2RlKWNvbnRpbnVlO2NvbnN0IGE9ci50ZXh0Rm9ybWF0O2lmKCJub25lIj09PXQuYXV0b1NpemUpe2lmKHY+ZilicmVhaztpZigidGV4dCI9PT1yLm1vZGUmJih1Pm0rci53fHxtPmgpKXttKz1yLnc7Y29udGludWV9fWNvbnN0IGk9U3IoYS5jb2xvcnx8MCk7aWYoby5maWxsU3R5bGU9YHJnYmEoJHtpLlJ9LCR7aS5HfSwke2kuQn0sJHtpLkF9KWAsdC5mb2N1c1Zpc2libGUmJnQuZm9jdXNJbmRleD09PW4pe2NvbnN0IHQ9bStfKy4xO2xldCBuPXIubGluZSxhPXIueSxzPWUuYXNjZW50VGFibGVbbl07InRleHQiIT09ci5tb2RlJiYoYT0iYnJlYWsiPT09ci5tb2RlP3IuaDplLmFzY2VudFRhYmxlW24tMV0sbj4wPyhuPXIubGluZS0xLHM9ZS5hc2NlbnRUYWJsZVtuXSk6cz1yLmgpLG4+MCYmMD09PWUuYXNjZW50VGFibGVbbl0mJm4rKztmb3IobGV0IHQ9MDt0PG47Kyt0KXMrPWUuaGVpZ2h0VGFibGVbdF07by5zdHJva2VTdHlsZT1gcmdiYSgke2kuUn0sJHtpLkd9LCR7aS5CfSwke2kuQX0pYCxvLmJlZ2luUGF0aCgpLG8ubW92ZVRvKHQscyksby5saW5lVG8odCxzLWEpLG8uc3Ryb2tlKCl9aWYodC50aGlja25lc3Mpe2NvbnN0IGU9U3IodC50aGlja25lc3NDb2xvcik7by5saW5lV2lkdGg9dC50aGlja25lc3Msby5zdHJva2VTdHlsZT1gcmdiYSgke2UuUn0sJHtlLkd9LCR7ZS5CfSwke2UuQX0pYH1jb25zdCBjPTB8ci5saW5lO3N3aXRjaChyLm1vZGUpe2Nhc2UiYnJlYWsiOmNhc2Uid3JhcCI6aWYobT0wLGMmJih2Kz1lLmhlaWdodFRhYmxlW2MtMV0pLGQ+ditlLmhlaWdodFRhYmxlW2NdKXtnPSEwO2NvbnRpbnVlfXA9ZS5hc2NlbnRUYWJsZVtjXSxfPVVyKGUscix0KSxnPSExO2JyZWFrO2Nhc2UidGV4dCI6e28uYmVnaW5QYXRoKCksby5mb250PU5yKGEpO2NvbnN0IGU9bStfLG49ditwO2lmKGEudW5kZXJsaW5lKXtjb25zdCB0PVNyKGEuY29sb3J8fDApO28ubGluZVdpZHRoPXMsby5zdHJva2VTdHlsZT1gcmdiYSgke3QuUn0sJHt0Lkd9LCR7dC5CfSwke3QuQX0pYCxvLmJlZ2luUGF0aCgpLG8ubW92ZVRvKGUsbisyKSxvLmxpbmVUbyhlK3IudyxuKzIpLG8uc3Ryb2tlKCl9dC50aGlja25lc3MmJm8uc3Ryb2tlVGV4dChyLnRleHQsZSxuKSxvLmZpbGxUZXh0KHIudGV4dCxlLG4pLG0rPXIud319fWlmKHQuZm9jdXNWaXNpYmxlJiZ0LmZvY3VzSW5kZXg+PWUudGV4dFRhYmxlLmxlbmd0aCl7Y29uc3Qgbj1lLnRleHRUYWJsZVt0LmZvY3VzSW5kZXgtMV07aWYobil7Y29uc3QgZT1TcihuLnRleHRGb3JtYXQuY29sb3J8fDApO28uc3Ryb2tlU3R5bGU9YHJnYmEoJHtlLlJ9LCR7ZS5HfSwke2UuQn0sJHtlLkF9KWA7Y29uc3QgdD1tK18rLjEscj12K3A7by5iZWdpblBhdGgoKSwidGV4dCI9PT1uLm1vZGU/by5tb3ZlVG8odCxyLW4ueSk6by5tb3ZlVG8odCxyK24uaCksby5saW5lVG8odCxyKSxvLnN0cm9rZSgpfX1yZXR1cm4gby5yZXN0b3JlKCksYX0pKEpTT04ucGFyc2UoRHIuZGVjb2RlKG0pKSxfLGIsZCksZz1Uci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtUci5iaW5kKFRyLmF0bGFzQXR0YWNobWVudE9iamVjdCksVHIucmVzZXQoKSxUci5iZWdpbk5vZGVSZW5kZXJpbmcoZik7Y29uc3QgeD1Uci5hdGxhc0F0dGFjaG1lbnRPYmplY3QuaGVpZ2h0LWYueS1yO1RyLnNldFRyYW5zZm9ybSgxLDAsMCwxLGYueCx4KSxUci5kcmF3RWxlbWVudChmLHApLFRyLmVuZE5vZGVSZW5kZXJpbmcoKSxnJiZUci5iaW5kKGcpfWNvbnN0IG09ZVt0KytdO2lmKEJvb2xlYW4oZVt0KytdKSl7Y29uc3Qgbz1Cb29sZWFuKGVbdCsrXSkscz1lLnN1YmFycmF5KHQsdCs0KTt0Kz00O2NvbnN0IGk9ZVt0KytdLGM9ZS5zdWJhcnJheSh0LHQraSksdT1NYXRoLmNlaWwoTWF0aC5hYnMoYVsyXS1hWzBdKSksYj1NYXRoLmNlaWwoTWF0aC5hYnMoYVszXS1hWzFdKSk7cmV0dXJuIFRyLmFwcGx5RmlsdGVyKGYsbCxCb29sZWFuKE1hdGgubWF4KCtoLCtvKSksdSxiLCExLG4scixCcihtKSxzLGMpLHQrPWl9VHIuZ2xvYmFsQWxwaGE9TWF0aC5taW4oTWF0aC5tYXgoMCxyWzNdK3JbN10vMjU1KSwxKSxUci5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITAsVHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPUJyKG0pO2NvbnN0IHY9TWF0aC5hdGFuMihuWzFdLG5bMF0pLF89TWF0aC5hdGFuMigtblsyXSxuWzNdKTtpZih2fHxfKXtjb25zdCBlPW8qYix0PXMqZCxyPU1hdGguY29zKHYpLGE9TWF0aC5zaW4odiksaT1NYXRoLmNvcyhfKSxjPU1hdGguc2luKF8pO1RyLnNldFRyYW5zZm9ybShyLGEsLWMsaSxlKnItdCpjK25bNF0sZSphK3QqaStuWzVdKX1lbHNlIFRyLnNldFRyYW5zZm9ybSgxLDAsMCwxLGFbMF0sYVsxXSk7cmV0dXJuIFRyLmRyYXdEaXNwbGF5T2JqZWN0KGYsYVswXSxhWzFdLGFbMl0sYVszXSxyKSx0fSxYcj0oZSx0LG4pPT57Y29uc3Qgcj1lLnN1YmFycmF5KHQsdCs2KTt0Kz02O2NvbnN0IGE9ZS5zdWJhcnJheSh0LHQrOCk7dCs9ODtjb25zdCBvPWUuc3ViYXJyYXkodCx0KzQpO3QrPTQ7Y29uc3Qgcz1lW3QrK10saT1lW3QrK10sYz1lW3QrK10sbD1lW3QrK10sdT1gJHtlW3QrK119YCxoPUJvb2xlYW4oZVt0KytdKTtsZXQgYjtpZihlW3QrK10pe2lmKGI9Y3IuZ2V0KHUsIjAiKSwhYilyZXR1cm4gdH1lbHNle2NvbnN0IHI9TWF0aC5hYnMoYy1zKSxhPU1hdGguYWJzKGwtaSksbz1Cb29sZWFuKGVbdCsrXSk7aWYoYj1vP2NyLmdldCh1LCIwIik6VHIuY3JlYXRlTm9kZShyLGEpLG98fGNyLnNldCh1LCIwIixiKSxuJiZuLmxlbmd0aCl7Y29uc3QgZT1Uci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtUci5iaW5kKFRyLmF0bGFzQXR0YWNobWVudE9iamVjdCksVHIucmVzZXQoKSxUci5iZWdpbk5vZGVSZW5kZXJpbmcoYik7Y29uc3QgdD1Uci5hdGxhc0F0dGFjaG1lbnRPYmplY3QuaGVpZ2h0LWIueS1hO1RyLnNldFRyYW5zZm9ybSgxLDAsMCwxLGIueCx0KTtjb25zdCByPW4uc2hpZnQoKTtUci5kcmF3RWxlbWVudChiLHIpLFRyLmVuZE5vZGVSZW5kZXJpbmcoKSxlJiZUci5iaW5kKGUpfX1jb25zdCBkPWVbdCsrXTtpZihCb29sZWFuKGVbdCsrXSkpe2NvbnN0IG49Qm9vbGVhbihlW3QrK10pLHM9ZS5zdWJhcnJheSh0LHQrNCk7dCs9NDtjb25zdCBpPWVbdCsrXSxjPWUuc3ViYXJyYXkodCx0K2kpLGw9TWF0aC5jZWlsKE1hdGguYWJzKG9bMl0tb1swXSkpLGY9TWF0aC5jZWlsKE1hdGguYWJzKG9bM10tb1sxXSkpO3JldHVybiBUci5hcHBseUZpbHRlcihiLHUsQm9vbGVhbihNYXRoLm1heCgraCwrbikpLGwsZiwhMCxyLGEsQnIoZCkscyxjKSx0Kz1pfXJldHVybiBUci5nbG9iYWxBbHBoYT1NYXRoLm1pbihNYXRoLm1heCgwLGFbM10rYVs3XS8yNTUpLDEpLFRyLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMCxUci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249QnIoZCksVHIuc2V0VHJhbnNmb3JtKHJbMF0sclsxXSxyWzJdLHJbM10scls0XSxyWzVdKSxUci5kcmF3RGlzcGxheU9iamVjdChiLG9bMF0sb1sxXSxvWzJdLG9bM10sYSksdH0senI9KGUsdCk9Pntjb25zdCBuPWVbdCsrXTtmb3IobGV0IHI9MDtyPG47KytyKXtzd2l0Y2goZVt0KytdKXtjYXNlIDA6dD16cihlLHQpO2JyZWFrO2Nhc2UgMTp0PUxyKGUsdCl9fXJldHVybiB0fSxWcj0oZSx0LG4pPT57Y29uc3Qgcj1Cb29sZWFuKGVbdCsrXSk7aWYocil7VHIuZHJhd0FycmF5c0luc3RhbmNlZCgpLFRyLnNhdmUoKSxUci5iZWdpbk1hc2soKSxUci5zZXRNYXNrQm91bmRzKGVbdCsrXSxlW3QrK10sZVt0KytdLGVbdCsrXSk7c3dpdGNoKGVbdCsrXSl7Y2FzZSAwOnQ9enIoZSx0KTticmVhaztjYXNlIDE6dD1McihlLHQpfVRyLmVuZE1hc2soKX1sZXQgYT0wLG89ITA7Y29uc3Qgcz1lW3QrK107Zm9yKGxldCByPTA7cz5yO3IrKyl7Y29uc3Qgcj1lW3QrK10scz1lW3QrK107aWYoYSYmcj5hJiYobyYmKFRyLnJlc3RvcmUoKSxUci5sZWF2ZU1hc2soKSksYT0wLG89ITApLCFvKWNvbnRpbnVlO2lmKHMpe2lmKGE9cyxvPUJvb2xlYW4oZVt0KytdKSwhbyljb250aW51ZTtUci5kcmF3QXJyYXlzSW5zdGFuY2VkKCksVHIuc2F2ZSgpLFRyLmJlZ2luTWFzaygpLFRyLnNldE1hc2tCb3VuZHMoZVt0KytdLGVbdCsrXSxlW3QrK10sZVt0KytdKTtzd2l0Y2goZVt0KytdKXtjYXNlIDA6dD16cihlLHQpO2JyZWFrO2Nhc2UgMTp0PUxyKGUsdCl9VHIuZW5kTWFzaygpO2NvbnRpbnVlfWlmKCFlW3QrK10pY29udGludWU7Y29uc3QgaT1lW3QrK107c3dpdGNoKGkpe2Nhc2UgMDp0PVZyKGUsdCxuKTticmVhaztjYXNlIDE6dD1JcihlLHQpO2JyZWFrO2Nhc2UgMjp0PWpyKGUsdCk7YnJlYWs7Y2FzZSAzOnQ9WHIoZSx0LG4pO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigidW5rbm93biB0eXBlIixpKX19cmV0dXJuKGF8fHIpJiYoVHIucmVzdG9yZSgpLFRyLmxlYXZlTWFzaygpKSx0fTtsZXQgV3I9LTE7Y29uc3QgR3I9KGUsdCk9PntUci5jbGVhclRyYW5zZmVyQm91bmRzKCk7bGV0IG49MDtjb25zdCByPWVbbisrXTtmb3IoV3IhPT1yJiYoV3I9ciwtMT09PVdyP1RyLnVwZGF0ZUJhY2tncm91bmRDb2xvcigwLDAsMCwwKTpUci51cGRhdGVCYWNrZ3JvdW5kQ29sb3IoV3I+PjE2JjEsV3I+PjgmMSwxJldyLDEpKSxUci5yZXNldCgpLFRyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksVHIuZmlsbEJhY2tncm91bmRDb2xvcigpO2UubGVuZ3RoPm47KXtpZighZVtuKytdKWNvbnRpbnVlO2NvbnN0IHI9ZVtuKytdO3N3aXRjaChyKXtjYXNlIDA6bj1WcihlLG4sdCk7YnJlYWs7Y2FzZSAxOm49SXIoZSxuKTticmVhaztjYXNlIDI6bj1qcihlLG4pO2JyZWFrO2Nhc2UgMzpuPVhyKGUsbix0KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoInVua25vd24gdHlwZSIscil9fVRyLmRyYXdBcnJheXNJbnN0YW5jZWQoKSxGciYmKFJyLndpZHRoPU1yLFJyLmhlaWdodD13cixGcj0hMSksVHIudHJhbnNmZXJNYWluQ2FudmFzKCl9LFlyPWU9Pntmb3IobGV0IHQ9MDt0PGUubGVuZ3RoOysrdCl7Y29uc3Qgbj1gJHtlW3RdfWA7aWYoIWNyLmhhcyhuKSljb250aW51ZTtjb25zdCByPWNyLmdldEJ5SWQobik7Zm9yKGNvbnN0IGUgb2Ygci52YWx1ZXMoKSlUci5yZW1vdmVOb2RlKGUpO2NyLnJlbW92ZUJ5SWQobil9fSxxcj1hc3luYyhlLHQsbixyPTAsYT0wLG8pPT57VHIuY2xlYXJUcmFuc2ZlckJvdW5kcygpO2xldCBzPTE7Zm9yKFRyLnJlc2V0KCksVHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxUci51cGRhdGVCYWNrZ3JvdW5kQ29sb3Iocj4+MTYmMSxyPj44JjEsMSZyLGEpLFRyLmZpbGxCYWNrZ3JvdW5kQ29sb3IoKTtlLmxlbmd0aD5zOyl7aWYoIWVbcysrXSljb250aW51ZTtjb25zdCB0PWVbcysrXTtzd2l0Y2godCl7Y2FzZSAwOnM9VnIoZSxzLG8pO2JyZWFrO2Nhc2UgMTpzPUlyKGUscyk7YnJlYWs7Y2FzZSAyOnM9anIoZSxzKTticmVhaztjYXNlIDM6cz1YcihlLHMsbyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJ1bmtub3duIHR5cGUiLHQpfX1yZXR1cm4gVHIuZHJhd0FycmF5c0luc3RhbmNlZCgpLGF3YWl0IFRyLmNyZWF0ZUltYWdlQml0bWFwKHQsbil9O2NvbnN0IEtyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzdGF0ZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJxdWV1ZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuc3RhdGU9ImRlYWN0aXZhdGUiLHRoaXMucXVldWU9W119YXN5bmMgZXhlY3V0ZSgpe2Zvcih0aGlzLnN0YXRlPSJhY3RpdmUiO3RoaXMucXVldWUubGVuZ3RoOyl7Y29uc3QgZT10aGlzLnF1ZXVlLnNoaWZ0KCk7aWYoZSlzd2l0Y2goZS5jb21tYW5kKXtjYXNlInJlbmRlciI6R3IoZS5idWZmZXIuc3ViYXJyYXkoMCxlLmxlbmd0aCksZS5pbWFnZUJpdG1hcHMpLGdsb2JhbFRoaXMucG9zdE1lc3NhZ2Uoe21lc3NhZ2U6InJlbmRlciIsYnVmZmVyOmUuYnVmZmVyfSxbZS5idWZmZXIuYnVmZmVyXSk7YnJlYWs7Y2FzZSJyZXNpemUiOkNyKGUuYnVmZmVyWzBdLGUuYnVmZmVyWzFdLEJvb2xlYW4oZS5idWZmZXJbMl0pKTticmVhaztjYXNlImluaXRpYWxpemUiOmtyKGUuY2FudmFzLGUuZGV2aWNlUGl4ZWxSYXRpbyk7YnJlYWs7Y2FzZSJyZW1vdmVDYWNoZSI6WXIoZS5idWZmZXIpO2JyZWFrO2Nhc2UiY2FjaGVDbGVhciI6Y3IucmVzZXQoKTticmVhaztjYXNlImNhcHR1cmUiOntjb25zdCB0PWF3YWl0IHFyKGUuYnVmZmVyLnN1YmFycmF5KDAsZS5sZW5ndGgpLGUud2lkdGgsZS5oZWlnaHQsZS5iZ0NvbG9yLGUuYmdBbHBoYSxlLmltYWdlQml0bWFwcyk7Z2xvYmFsVGhpcy5wb3N0TWVzc2FnZSh7bWVzc2FnZToiY2FwdHVyZSIsYnVmZmVyOmUuYnVmZmVyLGltYWdlQml0bWFwOnR9LFtlLmJ1ZmZlci5idWZmZXIsdF0pfX19dGhpcy5zdGF0ZT0iZGVhY3RpdmF0ZSJ9fTtzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGFzeW5jIGU9PntLci5xdWV1ZS5wdXNoKGUuZGF0YSksImRlYWN0aXZhdGUiPT09S3Iuc3RhdGUmJmF3YWl0IEtyLmV4ZWN1dGUoKX0pO3ZhciBIcj17fTtleHBvcnR7SHIgYXMgZGVmYXVsdH07Cg==';
|
|
1
|
+
export const workerInlineUrl = 'data:application/javascript;base64,bGV0IGU9MjA0ODtsZXQgdD00O2xldCBuO2xldCByO2NvbnN0IGE9KGUsdCxuLHI9bnVsbCk9Pntjb25zdCBhPStlO3JldHVybiBpc05hTihhKSYmbnVsbCE9PXI/cjpNYXRoLm1pbihNYXRoLm1heCh0LGlzTmFOKGEpPzA6YSksbil9LG89W10scz0oLi4uZSk9Pntjb25zdCB0PW8ucG9wKCl8fFtdO3JldHVybiBlLmxlbmd0aCYmdC5wdXNoKC4uLmUpLHR9LGk9KGU9bnVsbCk9PntlJiYoZS5sZW5ndGgmJihlLmxlbmd0aD0wKSxvLnB1c2goZSkpfSxjPWU9PihlLS0sZXw9ZT4+MSxlfD1lPj4yLGV8PWU+PjQsZXw9ZT4+OCxlfD1lPj4xNiwrK2UpLGw9W10sdT0oZT0wLHQ9MCxuPTAscj0wKT0+e2NvbnN0IGE9bC5wb3AoKXx8bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gYVswXT1lLGFbMV09dCxhWzJdPW4sYVszXT1yLGF9LGg9ZT0+e2wucHVzaChlKX0sYj1bXSxkPShlPTAsdD0wLG49MCxyPTAsYT0wLG89MCxzPTAsaT0wLGM9MCk9Pntjb25zdCBsPWIucG9wKCl8fG5ldyBGbG9hdDMyQXJyYXkoOSk7cmV0dXJuIGxbMF09ZSxsWzFdPXQsbFsyXT1uLGxbM109cixsWzRdPWEsbFs1XT1vLGxbNl09cyxsWzddPWksbFs4XT1jLGx9LGY9W10sbT0oZT0wLHQ9MCxuPTAscj0wLGE9MCxvPTApPT57Y29uc3Qgcz1mLnBvcCgpfHxuZXcgRmxvYXQzMkFycmF5KDYpO3JldHVybiBzWzBdPWUsc1sxXT10LHNbMl09bixzWzNdPXIsc1s0XT1hLHNbNV09byxzfSx2PWU9PntmLnB1c2goZSl9LF89ZT0+e2NvbnN0IHQ9MS8oZVswXSplWzRdLWVbM10qZVsxXSksbj1lWzNdKmVbN10tZVs0XSplWzZdLHI9ZVsxXSplWzZdLWVbMF0qZVs3XTtyZXR1cm4gZChlWzRdKnQsMC1lWzFdKnQsMCwwLWVbM10qdCxlWzBdKnQsMCxuKnQscip0LDEpfTtsZXQgcD0wLGc9MDtjb25zdCB4PSgpPT5wLEU9KCk9Pmc7bGV0IEE9MTtjb25zdCB5PSgpPT5BLFQ9cygpLFI9cygpLE09KGU9ITEpPT57Y29uc3QgdD1lPzQ6MTA7cmV0dXJuIFQubGVuZ3RoPHQmJihULmxlbmd0aD0wKSxULmxlbmd0aCYmKFIucHVzaChULnNsaWNlKDApKSxULmxlbmd0aD0wKSxSfSx3PShlLHQsbik9PntULnB1c2goZSx0LG4pfSxGPShlLHQpPT57Y29uc3Qgbj1ULmxlbmd0aCxyPStUW24tM10sYT0rVFtuLTJdO3JldHVybiBlPT09ciYmdD09PWF9LCQ9KGUsdCk9PntULmxlbmd0aD9GKGUsdCl8fCgoKGU9ITEpPT57Y29uc3QgdD1lPzQ6MTA7VC5sZW5ndGg8dHx8Ui5wdXNoKFQuc2xpY2UoMCkpLFQubGVuZ3RoPTB9KSgpLHcoZSx0LCExKSk6dyhlLHQsITEpfSxPPShlLHQsbixyKT0+e1QubGVuZ3RofHwkKDAsMCksRihuLHIpfHwodyhlLHQsITApLHcobixyLCExKSl9LFM9bmV3IEZsb2F0MzJBcnJheSgzMiksaz0oZSx0LG4scixhLG8scyxpLGMsbCk9Pntjb25zdCB1PS4xMjUqKGUrMyoobithKStzKSxoPS4xMjUqKHQrMyoocitvKStpKSxiPS4xMjUqKHMrYS1uLWUpLGQ9LjEyNSooaStvLXItdCk7U1tjXT1lLFNbYysxXT10LFNbYysyXT0uNSooZStuKSxTW2MrM109LjUqKHQrciksU1tjKzRdPXUtYixTW2MrNV09aC1kLFNbYys2XT11LFNbYys3XT1oLFNbbF09dSxTW2wrMV09aCxTW2wrMl09dStiLFNbbCszXT1oK2QsU1tsKzRdPS41KihhK3MpLFNbbCs1XT0uNSoobytpKSxTW2wrNl09cyxTW2wrN109aX0sQz0oZSx0LG4scixhLG8scyxpLGMpPT57Y29uc3QgbD0uMTI1KihlKzMqKG4rYSkrcyksdT0uMTI1Kih0KzMqKHIrbykraSk7U1tjXT0uMjUqZSsuNzUqbixTW2MrMV09LjI1KnQrLjc1KnIsU1tjKzJdPWwsU1tjKzNdPXUsU1tjKzRdPS43NSphKy4yNSpzLFNbYys1XT0uNzUqbysuMjUqaSxTW2MrNl09cyxTW2MrN109aX0sUD0oZSx0LG4scixhLG8pPT57aWYoVC5sZW5ndGh8fCQoMCwwKSxGKGEsbykpcmV0dXJuO2NvbnN0IHM9VC5sZW5ndGgsaT0oKGUsdCxuLHIsYSxvLHMsaSk9PihrKGUsdCxuLHIsYSxvLHMsaSwwLDE2KSxrKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSwwLDgpLGsoU1sxNl0sU1sxN10sU1sxOF0sU1sxOV0sU1syMF0sU1syMV0sU1syMl0sU1syM10sMTYsMjQpLEMoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDApLEMoU1s4XSxTWzldLFNbMTBdLFNbMTFdLFNbMTJdLFNbMTNdLFNbMTRdLFNbMTVdLDgpLEMoU1sxNl0sU1sxN10sU1sxOF0sU1sxOV0sU1syMF0sU1syMV0sU1syMl0sU1syM10sMTYpLEMoU1syNF0sU1syNV0sU1syNl0sU1syN10sU1syOF0sU1syOV0sU1szMF0sU1szMV0sMjQpLFMpKSgrVFtzLTNdLCtUW3MtMl0sZSx0LG4scixhLG8pO2ZvcihsZXQgZT0wOzMyPmU7KU8oaVtlKytdLGlbZSsrXSxpW2UrK10saVtlKytdKX0sQj1bXSxJPWU9PntsZXQgdD0tMSxuPUIubGVuZ3RoO2Zvcig7TWF0aC5hYnMobi10KT4xOyl7Y29uc3Qgcj1NYXRoLmZsb29yKChuK3QpLzIpO2U8PUJbcl0uYXJlYT9uPXI6dD1yfXJldHVybiBufSxMPWU9PntuLmRlbGV0ZVRleHR1cmUoZS5yZXNvdXJjZSl9LFU9W10sTj1bXTtsZXQgRDtsZXQgaj1udWxsO2xldCBYPW51bGw7bGV0IHo9bnVsbDtjb25zdCBWPWU9Pnt6PWV9LFc9KCk9Pno7bGV0IEc9ITE7Y29uc3QgWT1lPT57Rz1lfSxxPSgpPT5HO2xldCBLPW51bGwsSD1udWxsLFo9bnVsbCxRPW51bGw7Y29uc3QgSj0oKT0+SCxlZT0oZSx0PSEwKT0+e3ZhciByO2UubXNhYT8oKGU9PntpZihCLmluZGV4T2YoZSk+LTEpcmV0dXJuO2NvbnN0IHQ9SShlLmFyZWEpO2UuZGlydHk9ITAsQi5zcGxpY2UodCwwLGUpfSkoZS5jb2xvciksZS5jb2xvcj1udWxsLGUuc3RlbmNpbD1udWxsKToodCYmTChlLnRleHR1cmUpLGUudGV4dHVyZT1udWxsLHI9ZS5zdGVuY2lsLFUuaW5kZXhPZihyKT4tMXx8KFUubGVuZ3RoPjEwP24uZGVsZXRlUmVuZGVyYnVmZmVyKHIucmVzb3VyY2UpOihyLmRpcnR5PSEwLFUucHVzaChyKSkpLGUuc3RlbmNpbD1udWxsKSxOLnB1c2goZSl9O2xldCB0ZT0wO2NvbnN0IG5lPWU9PntpZighQi5sZW5ndGgpcmV0dXJuKCgpPT57Y29uc3QgZT17aWQ6MCxyZXNvdXJjZTpuLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHdpZHRoOjAsaGVpZ2h0OjAsYXJlYTowLGRpcnR5OiExfTtyZXR1cm57cmVzb3VyY2U6bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxzdGVuY2lsOmUsd2lkdGg6MCxoZWlnaHQ6MCxhcmVhOjAsZGlydHk6ITF9fSkoKTtjb25zdCB0PUkoZSk7aWYodDxCLmxlbmd0aCl7Y29uc3QgZT1CW3RdO3JldHVybiBCLnNwbGljZSh0LDEpLGV9Y29uc3Qgcj1CLnNoaWZ0KCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJ0aGUgY29sb3IgYnVmZmVyIGlzIHZvaWQuIik7cmV0dXJuIHJ9O2xldCByZT0wO2NvbnN0IGFlPShlLHQpPT57aWYoIVUubGVuZ3RoKXJldHVybntpZDpyZSsrLHJlc291cmNlOm4uY3JlYXRlUmVuZGVyYnVmZmVyKCksd2lkdGg6MCxoZWlnaHQ6MCxhcmVhOjAsZGlydHk6ITF9O2ZvcihsZXQgbj0wO248VS5sZW5ndGg7KytuKXtjb25zdCByPVVbbl07aWYoci53aWR0aD09PWUmJnIuaGVpZ2h0PT09dClyZXR1cm4gVS5zcGxpY2UobiwxKSxyfXJldHVybiBVLnNoaWZ0KCl9O2xldCBvZT0wO2NvbnN0IHNlPShlLHQpPT4oe2lkOm9lKysscmVzb3VyY2U6bi5jcmVhdGVUZXh0dXJlKCksd2lkdGg6ZSxoZWlnaHQ6dCxhcmVhOmUqdCxzbW9vdGg6ITF9KTtsZXQgaWU9LTE7Y29uc3QgY2U9ZT0+e2llPWV9LGxlPVtudWxsLG51bGwsbnVsbF0sdWU9KGUsdCxyPSExKT0+e2NvbnN0IGE9c2UoZSx0KTtyZXR1cm4oKGUsdD0hMSk9PntpZSE9PW4uVEVYVFVSRTAmJihjZShuLlRFWFRVUkUwKSxuLmFjdGl2ZVRleHR1cmUobi5URVhUVVJFMCkpLGxlWzBdPWUsbi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsZS5yZXNvdXJjZSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUix0P24uTElORUFSOm4uTkVBUkVTVCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUix0P24uTElORUFSOm4uTkVBUkVTVCksbi50ZXhTdG9yYWdlMkQobi5URVhUVVJFXzJELDEsbi5SR0JBOCxlLndpZHRoLGUuaGVpZ2h0KX0pKGEsciksYX0saGU9KGUscixhPSExKT0+e2NvbnN0IG89Ti5sZW5ndGg/Ti5zaGlmdCgpOntpZDp0ZSsrLHdpZHRoOjAsaGVpZ2h0OjAsY2xpcExldmVsOjAsbXNhYTohMSxtYXNrOiExLGNvbG9yOm51bGwsdGV4dHVyZTpudWxsLHN0ZW5jaWw6bnVsbH07cmV0dXJuIG8ud2lkdGg9ZSxvLmhlaWdodD1yLGE/KG8ubXNhYT0hMCxvLnRleHR1cmU9bnVsbCxvLmNvbG9yPSgoZSxyKT0+e2U9TWF0aC5tYXgoMjU2LGMoZSkpLHI9TWF0aC5tYXgoMjU2LGMocikpO2NvbnN0IGE9bmUoZSpyKTtyZXR1cm4oYS53aWR0aDxlfHxhLmhlaWdodDxyKSYmKGU9TWF0aC5tYXgoZSxhLndpZHRoKSxyPU1hdGgubWF4KHIsYS5oZWlnaHQpLGEud2lkdGg9ZSxhLmhlaWdodD1yLGEuYXJlYT1lKnIsbi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLGEucmVzb3VyY2UpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKG4uUkVOREVSQlVGRkVSLHQsbi5SR0JBOCxlLHIpLG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixhLnN0ZW5jaWwucmVzb3VyY2UpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKG4uUkVOREVSQlVGRkVSLHQsbi5TVEVOQ0lMX0lOREVYOCxlLHIpKSxhLmRpcnR5PSEwLGF9KShlLHIpLG8uc3RlbmNpbD1vLmNvbG9yLnN0ZW5jaWwpOihvLm1zYWE9ITEsby50ZXh0dXJlPXVlKGUsciksby5jb2xvcj1udWxsLG8uc3RlbmNpbD0oKGUsdCk9Pntjb25zdCByPWFlKGUsdCk7cmV0dXJuIHIud2lkdGg9PT1lJiZyLmhlaWdodD09PXR8fChyLndpZHRoPWUsci5oZWlnaHQ9dCxyLmFyZWE9ZSp0LHIuZGlydHk9ITEsbi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHIucmVzb3VyY2UpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlNURU5DSUxfSU5ERVg4LGUsdCkpLHJ9KShlLHIpKSxvLm1hc2s9ITEsby5jbGlwTGV2ZWw9MCxvfTtsZXQgYmU9MDtjb25zdCBkZT1lPT57YmU9ZX0sZmU9KCk9PmJlLG1lPVtdLHZlPSgpPT57dmFyIHQ7cmV0dXJuIGJlIGluIG1lfHwodD1oZShlLGUsITApLG1lW2JlXT10KSxtZVtiZV19LF9lPVtdO2xldCBwZT1udWxsO2NvbnN0IGdlPSgpPT4ocGV8fChwZT0oKCk9Pntjb25zdCB0PXNlKGUsZSk7cmV0dXJuIG4uYWN0aXZlVGV4dHVyZShuLlRFWFRVUkUzKSxuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx0LnJlc291cmNlKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTkVBUkVTVCksbi50ZXhTdG9yYWdlMkQobi5URVhUVVJFXzJELDEsbi5SR0JBOCx0LndpZHRoLHQuaGVpZ2h0KSxuLmFjdGl2ZVRleHR1cmUoLTEhPT1pZT9pZTpuLlRFWFRVUkUwKSx0fSkoKSkscGUpLHhlPVtdLEVlPWU9PihlIGluIHhlfHwoeGVbZV09bmV3IEZsb2F0MzJBcnJheShbTnVtYmVyLk1BWF9WQUxVRSxOdW1iZXIuTUFYX1ZBTFVFLC1OdW1iZXIuTUFYX1ZBTFVFLC1OdW1iZXIuTUFYX1ZBTFVFXSkpLHhlW2VdKSxBZT1bXSx5ZT1lPT4oZSBpbiBBZXx8KEFlW2VdPW5ldyBGbG9hdDMyQXJyYXkoW051bWJlci5NQVhfVkFMVUUsTnVtYmVyLk1BWF9WQUxVRSwtTnVtYmVyLk1BWF9WQUxVRSwtTnVtYmVyLk1BWF9WQUxVRV0pKSxBZVtlXSk7bGV0IFRlPTA7Y29uc3QgUmU9ZT0+e1RlPWV9LE1lPSgpPT5UZSx3ZT0oKT0+e19lLmxlbmd0aD0wLGRlKDApO2NvbnN0IGU9bWU7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZWUoZVt0XSk7ZS5sZW5ndGg9MH0sRmU9KGUsdCxyLGE9ITApPT57aWYoZS5jbGVhckFycmF5c0luc3RhbmNlZCgpLGUuJHN0YWNrQXR0YWNobWVudE9iamVjdC5sZW5ndGgpZm9yKGxldCB0PTA7dDxlLiRzdGFja0F0dGFjaG1lbnRPYmplY3QubGVuZ3RoOysrdCl7Y29uc3Qgbj1lLiRzdGFja0F0dGFjaG1lbnRPYmplY3RbdF07biYmZWUobil9ZWxzZSBlLiRtYWluQXR0YWNobWVudE9iamVjdCYmZWUoZS4kbWFpbkF0dGFjaG1lbnRPYmplY3QpO2EmJndlKCksVihudWxsKSxxKCkmJihZKCExKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLG51bGwpKSxlLiRtYWluQXR0YWNobWVudE9iamVjdD1oZSh0LHIsITApLGUuYmluZChlLiRtYWluQXR0YWNobWVudE9iamVjdCl9LCRlPShlLHQscj1udWxsLGE9ITEpPT57LTEhPT1pZSYmdD09PWllfHwoY2UodCksbi5hY3RpdmVUZXh0dXJlKHQpKTtjb25zdCBvPWxlW2VdO251bGwhPT1vJiZudWxsIT09ciYmby5pZD09PXIuaWR8fHI9PT1vfHwobGVbZV09cixuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxyP3IucmVzb3VyY2U6bnVsbCksciYmci5zbW9vdGghPT1hJiYoci5zbW9vdGg9YSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLGE/bi5MSU5FQVI6bi5ORUFSRVNUKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLGE/bi5MSU5FQVI6bi5ORUFSRVNUKSkpfSxPZT0oZSx0PSExKT0+eyRlKDIsbi5URVhUVVJFMixudWxsKSwkZSgxLG4uVEVYVFVSRTEsbnVsbCksJGUoMCxuLlRFWFRVUkUwLGUsdCl9LFNlPSgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2lmKCFlKXJldHVybjtjb25zdCB0PWUuY2xpcExldmVsO2xldCBhPTA7Zm9yKGxldCBlPTA7ZTx0OysrZSlhfD0oMTw8dC1lKS0xO24uc3RlbmNpbE1hc2soMjU1KSxuLnN0ZW5jaWxGdW5jKG4uRVFVQUwsMjU1JmEsYSksbi5zdGVuY2lsT3Aobi5LRUVQLG4uS0VFUCxuLktFRVApLG4uY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxuLmRpc2FibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCl9O2xldCBrZT0hMTtjb25zdCBDZT1lPT57a2U9ZX0sUGU9KCk9PmtlLEJlPW5ldyBNYXAsSWU9bmV3IE1hcCxMZT0oZSx0KT0+e2NvbnN0IHI9VygpO2lmKHImJnQuaWQ9PT1yLmlkKXJldHVybjt2YXIgYSxvOyhlPT57VihlKSxxKCl8fChZKCEwKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLEQpKSxlLm1zYWE/KG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixlLmNvbG9yLnJlc291cmNlKSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKG4uRlJBTUVCVUZGRVIsbi5DT0xPUl9BVFRBQ0hNRU5UMCxuLlJFTkRFUkJVRkZFUixlLmNvbG9yLnJlc291cmNlKSk6KE9lKGUudGV4dHVyZSksbi5mcmFtZWJ1ZmZlclRleHR1cmUyRChuLkZSQU1FQlVGRkVSLG4uQ09MT1JfQVRUQUNITUVOVDAsbi5URVhUVVJFXzJELGUudGV4dHVyZS5yZXNvdXJjZSwwKSksbi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLGUuc3RlbmNpbC5yZXNvdXJjZSksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihuLkZSQU1FQlVGRkVSLG4uU1RFTkNJTF9BVFRBQ0hNRU5ULG4uUkVOREVSQlVGRkVSLGUuc3RlbmNpbC5yZXNvdXJjZSl9KSh0KSxyJiZyLndpZHRoPT09dC53aWR0aCYmci5oZWlnaHQ9PT10LmhlaWdodHx8KGE9dC53aWR0aCxvPXQuaGVpZ2h0LHA9YSxnPW8sbi52aWV3cG9ydCgwLDAsdC53aWR0aCx0LmhlaWdodCkpO2NvbnN0IHM9dC5tc2FhP3QuY29sb3I6dC5zdGVuY2lsO3ZhciBpO3MuZGlydHkmJihzLmRpcnR5PSExLGUuY2xlYXJSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KSksIShpPXQubWFzaykmJlBlKCk/KENlKCExKSxuLmRpc2FibGUobi5TVEVOQ0lMX1RFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCkpOmkmJiFQZSgpJiYoQ2UoITApLG4uZW5hYmxlKG4uU1RFTkNJTF9URVNUKSxTZSgpKX0sVWU9ZT0+e2lmKCFlLiRzdGFjay5sZW5ndGgpcmV0dXJuO2NvbnN0IHQ9ZS4kc3RhY2sucG9wKCk7dmFyIG47ZS4kbWF0cml4WzBdPXRbMF0sZS4kbWF0cml4WzFdPXRbMV0sZS4kbWF0cml4WzNdPXRbM10sZS4kbWF0cml4WzRdPXRbNF0sZS4kbWF0cml4WzZdPXRbNl0sZS4kbWF0cml4WzddPXRbN10sbj10LGIucHVzaChuKX0sTmU9KGUsdCxyLGEpPT57bi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihlLHQscisxLGErMSksbi5jbGVhcihuLkNPTE9SX0JVRkZFUl9CSVR8bi5TVEVOQ0lMX0JVRkZFUl9CSVQpLG4uc2Npc3NvcihlLHQscixhKX0sRGU9KGUsdCxuLHIsYSxvLHMsaSxjLGwsdSxoLGIpPT57Y29uc3QgZD1lLmxlbmd0aC01O2ZvcihsZXQgZj0zO2Y8ZDtmKz0zKXtsZXQgZD0xNypuO2VbZisyXT8odFtkKytdPWVbZi0zXSx0W2QrK109ZVtmLTJdLHRbZCsrXT0wLHRbZCsrXT0wLHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2ZdLHRbZCsrXT1lW2YrMV0sdFtkKytdPS41LHRbZCsrXT0wLHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2YrM10sdFtkKytdPWVbZis0XSx0W2QrK109MSx0W2QrK109MSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109byx0W2QrK109cyx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCk6ZVtmKzVdPyh0W2QrK109ZVswXSx0W2QrK109ZVsxXSx0W2QrK109LjUsdFtkKytdPS41LHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2ZdLHRbZCsrXT1lW2YrMV0sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109byx0W2QrK109cyx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmKzZdLHRbZCsrXT1lW2YrN10sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109byx0W2QrK109cyx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCk6KHRbZCsrXT1lWzBdLHRbZCsrXT1lWzFdLHRbZCsrXT0uNSx0W2QrK109LjUsdFtkKytdPWwsdFtkKytdPXUsdFtkKytdPWgsdFtkKytdPWIsdFtkKytdPXIsdFtkKytdPWEsdFtkKytdPTAsdFtkKytdPW8sdFtkKytdPXMsdFtkKytdPTAsdFtkKytdPWksdFtkKytdPWMsdFtkKytdPTAsdFtkKytdPWVbZl0sdFtkKytdPWVbZisxXSx0W2QrK109LjUsdFtkKytdPS41LHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2YrM10sdFtkKytdPWVbZis0XSx0W2QrK109LjUsdFtkKytdPS41LHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1vLHRbZCsrXT1zLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wKSxuKz0zfXJldHVybiBufSxqZT0oZSx0PSJmaWxsIik9Pntjb25zdCBuPSJmaWxsIj09PXQ/ci4kZmlsbFN0eWxlOnIuJHN0cm9rZVN0eWxlLGE9blswXSxvPW5bMV0scz1uWzJdLGk9blszXSxjPXIuJG1hdHJpeCxsPXgoKSx1PUUoKSxoPWNbMF0vbCxiPWNbM10vbCxkPWNbNl0vbCxmPWNbMV0vdSxtPWNbNF0vdSx2PWNbN10vdTtsZXQgXz0wO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7Kyt0KV8rPTUxKihlW3RdLmxlbmd0aC8zLTIpO2NvbnN0IHA9bmV3IEZsb2F0MzJBcnJheShfKTtsZXQgZz0wO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7Kyt0KWc9RGUoZVt0XSxwLGcsaCxmLGIsbSxkLHYsYSxvLHMsaSk7cmV0dXJue2J1ZmZlcjpwLGluZGV4Q291bnQ6Z319O2xldCBYZT1uZXcgRmxvYXQzMkFycmF5KDEyOCksemU9MDtjb25zdCBWZT1lPT57Y29uc3QgdD1lLmxlbmd0aCt6ZTtpZih0PlhlLmxlbmd0aCl7Y29uc3Qgcj1uZXcgRmxvYXQzMkFycmF5KChuPXQsbi0tLG58PW4+PjEsbnw9bj4+MixufD1uPj40LG58PW4+Pjgsbnw9bj4+MTYsKytuKSk7ci5zZXQoWGUpLHIuc2V0KGUsemUpLFhlPXJ9ZWxzZSBYZS5zZXQoZSx6ZSk7dmFyIG47emUrPWUubGVuZ3RofSxXZT1bXSxHZT1bXSxZZT0oKT0+e0dlLmxlbmd0aD0wLHplPTAsV2UubGVuZ3RoPTB9LHFlPVtdLEtlPShlLHQsbik9Pntjb25zdCByPXt4OnQueC1lLngseTp0LnktZS55fSxhPSgoZSx0LG4pPT57Y29uc3Qgcj1NYXRoLnNxcnQoZSplK3QqdCk7cmV0dXJue3g6LXQvcipuLHk6ZS9yKm59fSkoci54LHIueSxuKSxvPXt4OmUueCthLngseTplLnkrYS55fSxzPXt4OnQueCthLngseTp0LnkrYS55fSxpPXt4OmUueC1hLngseTplLnktYS55fSxjPXt4OnQueC1hLngseTp0LnktYS55fTtyZXR1cm5bby54LG8ueSwhMSxzLngscy55LCExLGMueCxjLnksITEsaS54LGkueSwhMSxvLngsby55LCExXX0sSGU9KGUsdCxuKT0+KHt4OmUueCsodC54LWUueCkqbix5OmUueSsodC55LWUueSkqbn0pLFplPShlLHQsbixyPS41KT0+e2NvbnN0IGE9SGUoZSx0LHIpLG89SGUodCxuLHIpLHM9SGUoYSxvLHIpO3JldHVybltbZSxhLHNdLFtzLG8sbl1dfSxRZT0oZSx0LG4scik9Pih7eDooMS1lKSoqMip0LngrMiooMS1lKSplKm4ueCtlKioyKnIueCx5OigxLWUpKioyKnQueSsyKigxLWUpKmUqbi55K2UqKjIqci55fSksSmU9KGUsdCxuLHIpPT4oe3g6MiooMS1lKSoobi54LXQueCkrMiplKihyLngtbi54KSx5OjIqKDEtZSkqKG4ueS10LnkpKzIqZSooci55LW4ueSl9KSxldD1lPT57Y29uc3QgdD1NYXRoLnNxcnQoZS54KmUueCtlLnkqZS55KTtyZXR1cm4gMD09PXQ/e3g6MCx5OjB9Ont4OmUueC90LHk6ZS55L3R9fSx0dD0oZSx0LG4scik9Pntjb25zdCBhPVswLC41LDFdLG89W107Zm9yKGxldCBzPTA7czxhLmxlbmd0aDsrK3Mpe2NvbnN0IGk9YVtzXSxjPVFlKGksZSx0LG4pLGw9SmUoaSxlLHQsbiksdT1ldCh7eDotbC55LHk6bC54fSk7by5wdXNoKHt4OmMueCt1Lngqcix5OmMueSt1Lnkqcn0pfXJldHVybiBvfSxudD0oZSx0LG4scik9Pntjb25zdCBhPSgoZSx0LG4scj00KT0+e2xldCBhPVtbZSx0LG5dXTtmb3IobGV0IGU9MDtlPHI7KytlKXtjb25zdCBlPVtdO2ZvcihsZXQgdD0wO3Q8YS5sZW5ndGg7Kyt0KXtjb25zdCBuPWFbdF07aWYoIW4pY29udGludWU7Y29uc3Qgcj1aZShuWzBdLG5bMV0sblsyXSwuNSk7ZS5wdXNoKHJbMF0sclsxXSl9YT1lfXJldHVybiBhfSkoZSx0LG4sNSksbz1bXSxzPVtdO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7KytlKXtjb25zdFt0LG4saV09YVtlXTtvLnB1c2godHQodCxuLGksK3IpKSxzLnB1c2godHQodCxuLGksLXIpKX1jb25zdCBpPW9bMF1bMF0sYz1baS54LGkueSwhMV07Zm9yKGxldCBlPTA7ZTxvLmxlbmd0aDsrK2Upe2NvbnN0IHQ9b1tlXTtjLnB1c2godFsxXS54LHRbMV0ueSwhMCx0WzJdLngsdFsyXS55LCExKX1jb25zdCBsPVsuLi5zXS5yZXZlcnNlKCk7Zm9yKGxldCBlPTA7ZTxsLmxlbmd0aDsrK2Upe2NvbnN0W3QsbixyXT1sW2VdO2xbZV09W3Isbix0XX1jb25zdCB1PWxbMF1bMF07Yy5wdXNoKHUueCx1LnksITEpO2ZvcihsZXQgZT0wO2U8bC5sZW5ndGg7KytlKXtjb25zdCB0PWxbZV07Yy5wdXNoKHRbMV0ueCx0WzFdLnksITAsdFsyXS54LHRbMl0ueSwhMSl9cmV0dXJuIGN9LHJ0PShlLHQsbixyKT0+e2NvbnN0IGE9W107Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKz0zKXtpZihyW28rMl0pY29udGludWU7Y29uc3Qgcz1yW29dLGk9cltvKzFdO01hdGguc3FydChNYXRoLnBvdyhzLWUsMikrTWF0aC5wb3coaS10LDIpKT09PW4mJmEucHVzaChzLGkpfXJldHVybiBhfSxhdD1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSxvdD0oZSx0KT0+e2F0LmJlZ2luUGF0aCgpLGF0Lm1vdmVUbyh0WzBdLHRbMV0pO2ZvcihsZXQgZT0zO2U8dC5sZW5ndGg7ZSs9Myl0W2UrMl0/KGF0LnF1YWRyYXRpY0N1cnZlVG8odFtlXSx0W2UrMV0sdFtlKzNdLHRbZSs0XSksZSs9Myk6YXQubGluZVRvKHRbZV0sdFtlKzFdKTthdC5jbG9zZVBhdGgoKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrPTIpe2NvbnN0IG49ZVt0XSxyPWVbdCsxXTtpZighYXQuaXNQb2ludEluUGF0aChuLHIpKXJldHVybltuLHJdfXJldHVybiBudWxsfSxzdD0oZSx0LG4scixhPSExKT0+e2NvbnN0IG89YT8wOnIubGVuZ3RoLTEscz1hP3IubGVuZ3RoLTE6ci5sZW5ndGgtMixpPXJ0KGUsdCxuLHJbb10pLGM9cnQoZSx0LG4scltzXSksbD1vdChpLHJbc10pO2lmKCFsKXJldHVybjtjb25zdCB1PW90KGMscltvXSk7aWYoIXUpcmV0dXJuO2NvbnN0IGg9TWF0aC5hdGFuMihsWzFdLXQsbFswXS1lKTtsZXQgYj1NYXRoLmF0YW4yKHVbMV0tdCx1WzBdLWUpLWg7Yj5NYXRoLlBJP2ItPTIqTWF0aC5QSTpiPC1NYXRoLlBJJiYoYis9MipNYXRoLlBJKTtjb25zdCBkPWIvOCxmPVtlLHQsITFdO2ZvcihsZXQgcj0wO3I8PTg7cisrKXtjb25zdCBhPWgrcipkLG89ZStuKk1hdGguY29zKGEpLHM9dCtuKk1hdGguc2luKGEpO2YucHVzaChvLHMsITEpfXIuc3BsaWNlKC0xLDAsZil9LGl0PShlLHQsbixyLGE9ITEpPT57Y29uc3Qgbz1hPzA6ci5sZW5ndGgtMSxzPWE/ci5sZW5ndGgtMTpyLmxlbmd0aC0yLGk9cnQoZSx0LG4scltvXSksYz1ydChlLHQsbixyW3NdKTtpZihpWzBdPT09Y1swXSYmaVsxXT09PWNbMV18fGlbMF09PT1jWzJdJiZpWzFdPT09Y1szXSlyZXR1cm47Y29uc3QgbD1vdChpLHJbc10pO2lmKCFsKXJldHVybjtjb25zdCB1PW90KGMscltvXSk7dSYmci5zcGxpY2UoLTEsMCxbZSx0LCExLGxbMF0sbFsxXSwhMSx1WzBdLHVbMV0sITEsZSx0LCExXSl9LGN0PShlLHQsbixyLGEsbz0hMSk9Pntjb25zdCBzPW8/MDphLmxlbmd0aC0xLGk9bz9hLmxlbmd0aC0xOmEubGVuZ3RoLTIsYz1ydChlLngsZS55LHIsYVtzXSksbD1ydChlLngsZS55LHIsYVtpXSk7aWYoY1swXT09PWxbMF0mJmNbMV09PT1sWzFdfHxjWzBdPT09bFsyXSYmY1sxXT09PWxbM10pcmV0dXJuO2NvbnN0IHU9b3QoYyxhW2ldKTtpZighdSlyZXR1cm47Y29uc3QgaD1vdChsLGFbc10pO2lmKCFoKXJldHVybjtjb25zdCBiPXQueC1lLngsZD10LnktZS55LGY9TWF0aC5oeXBvdChiLGQpLG09e3g6Yi9mLHk6ZC9mfSx2PW4ueC1lLngsXz1uLnktZS55LHA9TWF0aC5oeXBvdCh2LF8pLGc9e3g6di9wLHk6Xy9wfSx4PW0ueCxFPW0ueSxBPWcueCx5PWcueSxUPXgqeS1FKkE7MD09PVQmJmEuc3BsaWNlKC0xLDAsW2UueCxlLnksITEsdVswXSx1WzFdLCExLGhbMF0saFsxXSwhMV0pO2NvbnN0IFI9KChoWzBdLXVbMF0pKnktKGhbMV0tdVsxXSkqQSkvVCxNPXVbMF0rUip4LHc9dVsxXStSKkU7YS5zcGxpY2UoLTEsMCxbZS54LGUueSwhMSx1WzBdLHVbMV0sITEsTSx3LCExLGUueCxlLnksITEsaFswXSxoWzFdLCExLE0sdywhMV0pfSxsdD0oZSx0KT0+e2NvbnN0IG49e3g6ZVswXSx5OmVbMV19LGE9e3g6MCx5OjB9LG89e3g6MCx5OjB9LHM9e3g6MCx5OjB9LGk9W107Zm9yKGxldCBjPTM7YzxlLmxlbmd0aDtjKz0zKXtjb25zdCBsPWVbY10sdT1lW2MrMV07aWYoZVtjKzJdKWEueD1sLGEueT11O2Vsc2V7aWYoby54PWwsby55PXUsZVtjLTFdP2kucHVzaChudChuLGEsbyx0KSk6aS5wdXNoKEtlKG4sbyx0KSksaS5sZW5ndGg+MSlzd2l0Y2goci5qb2ludHMpe2Nhc2UgMDppdChuLngsbi55LHQsaSk7YnJlYWs7Y2FzZSAxOnMueD1lW2MtNl0scy55PWVbYy01XSxjdChuLG8scyx0LGkpO2JyZWFrO2Nhc2UgMjpzdChuLngsbi55LHQsaSl9bi54PW8ueCxuLnk9by55fX1pZihlWzBdPT09ZVtlLmxlbmd0aC0zXSYmZVsxXT09PWVbZS5sZW5ndGgtMl0pc3dpdGNoKHIuam9pbnRzKXtjYXNlIDA6aXQobi54LG4ueSx0LGksITApO2JyZWFrO2Nhc2UgMTpuLng9ZVswXSxuLnk9ZVsxXSxvLng9ZVszXSxvLnk9ZVs0XSxzLng9ZVtlLmxlbmd0aC02XSxzLnk9ZVtlLmxlbmd0aC01XSxjdChuLG8scyx0LGksITApO2JyZWFrO2Nhc2UgMjpzdChuLngsbi55LHQsaSwhMCl9ZWxzZSBzd2l0Y2goci5jYXBzKXtjYXNlIDE6KChlLHQsbik9Pntmb3IobGV0IHI9MDtyPDI7KytyKXtsZXQgYT0wLG89MCxzPTAsaT0wOzA9PT1yPyhhPWVbMF0sbz1lWzFdLHM9ZVszXSxpPWVbNF0pOihhPWVbZS5sZW5ndGgtM10sbz1lW2UubGVuZ3RoLTJdLHM9ZVtlLmxlbmd0aC02XSxpPWVbZS5sZW5ndGgtNV0pO2NvbnN0IGM9cy1hLGw9aS1vLHU9TWF0aC5hdGFuMihsLGMpLGg9dStNYXRoLlBJLzIsYj11LU1hdGguUEkvMixkPTE2LGY9KGItaCkvZCxtPVtdO2ZvcihsZXQgZT0wO2U8PWQ7ZSsrKXtjb25zdCBuPWIrZiplLHI9YSt0Kk1hdGguY29zKG4pLHM9byt0Kk1hdGguc2luKG4pO20ucHVzaChyLHMsITEpfTA9PT1yP24udW5zaGlmdChtKTpuLnB1c2gobSl9fSkoZSx0LGkpO2JyZWFrO2Nhc2UgMjooKGUsdCxuKT0+e2ZvcihsZXQgcj0wO3I8MjsrK3Ipe2xldCBhPTAsbz0wLHM9MCxpPTA7MD09PXI/KGE9ZVswXSxvPWVbMV0scz1lWzNdLGk9ZVs0XSk6KGE9ZVtlLmxlbmd0aC0zXSxvPWVbZS5sZW5ndGgtMl0scz1lW2UubGVuZ3RoLTZdLGk9ZVtlLmxlbmd0aC01XSk7Y29uc3QgYz0tKHMtYSksbD0tKGktbyksdT1NYXRoLnNxcnQoYypjK2wqbCk7aWYoMD09PXUpY29udGludWU7Y29uc3QgaD1jL3UsYj1sL3UsZD1hK3QqaCxmPW8rdCpiLG09LWIsdj1bZCt0KmgrdCptLGYrdCpiK3QqaCwhMSxkK3QqaC10Km0sZit0KmItdCpoLCExLGQtdCpoLXQqbSxmLXQqYi10KmgsITEsZCt0KmgrdCptLGYrdCpiK3QqaCwhMSxkLXQqaC10Km0sZi10KmItdCpoLCExLGQtdCpoK3QqbSxmLXQqYit0KmgsITFdOzA9PT1yP24udW5zaGlmdCh2KTpuLnB1c2godil9fSkoZSx0LGkpfXJldHVybiBpfSx1dD1lPT57Y29uc3QgdD1yLnRoaWNrbmVzcy8yLG49W107Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3Ipe2NvbnN0IGE9bHQoZVtyXSx0KTtuLnB1c2goLi4uYSl9cmV0dXJuIGplKG4sInN0cm9rZSIpfSxodD1uZXcgTWFwLGJ0PSgpPT57aHQuY2xlYXIoKX0sZHQ9KCk9Pih7aWQ6ImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0bz8ucmFuZG9tVVVJRD9jcnlwdG8ucmFuZG9tVVVJRCgpOiJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgiLnJlcGxhY2UoL1t4eV0vZyxlPT57Y29uc3QgdD0xNipNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKCJ4Ij09PWU/dDozJnR8OCkudG9TdHJpbmcoMTYpfSkscmVzb3VyY2U6bi5jcmVhdGVWZXJ0ZXhBcnJheSgpLHZlcnRleEJ1ZmZlcjpuLmNyZWF0ZUJ1ZmZlcigpLHZlcnRleExlbmd0aDowfSk7bGV0IGZ0O2NvbnN0IG10PWU9PntmdCYmZnQuaWQ9PT1lLmlkfHwoZnQ9ZSxuLmJpbmRWZXJ0ZXhBcnJheShlLnJlc291cmNlKSl9LHZ0PVtdLF90PW5ldyBGbG9hdDMyQXJyYXkoWzAsMCwwLDEsMSwwLDEsMV0pO2xldCBwdDtsZXQgZ3Q7bGV0IHh0O2NvbnN0IEV0PSgpPT4oeHR8fCh4dD0oKCk9Pntjb25zdCBlPWR0KCk7bXQoZSksbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGUudmVydGV4QnVmZmVyKTtjb25zdCB0PW5ldyBGbG9hdDMyQXJyYXkoWzAsMCwxLDAsMCwxLDEsMSwwLDEsMSwwXSk7cmV0dXJuIG4uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUix0LG4uU1RBVElDX0RSQVcpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsMixuLkZMT0FULCExLDAsMCksZX0pKCkpLHh0KSxBdD0oKT0+e2NvbnN0IGU9KCgpPT57aWYodnQubGVuZ3RoKXJldHVybiB2dC5wb3AoKTtjb25zdCBlPWR0KCk7cmV0dXJuIG10KGUpLG4uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixlLnZlcnRleEJ1ZmZlciksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDEpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMiksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgzKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDQpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoNSksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsMixuLkZMT0FULCExLDY4LDApLG4udmVydGV4QXR0cmliUG9pbnRlcigxLDIsbi5GTE9BVCwhMSw2OCw4KSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoMiw0LG4uRkxPQVQsITEsNjgsMTYpLG4udmVydGV4QXR0cmliUG9pbnRlcigzLDMsbi5GTE9BVCwhMSw2OCwzMiksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDQsMyxuLkZMT0FULCExLDY4LDQ0KSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoNSwzLG4uRkxPQVQsITEsNjgsNTYpLGV9KSgpO210KGUpO2NvbnN0IHQ9WGUscj16ZTtyZXR1cm4gbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGUudmVydGV4QnVmZmVyKSxlLnZlcnRleExlbmd0aDx0Lmxlbmd0aCYmKGUudmVydGV4TGVuZ3RoPWModC5sZW5ndGgpLG4uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUiw0KmUudmVydGV4TGVuZ3RoLG4uRFlOQU1JQ19EUkFXKSksbi5idWZmZXJTdWJEYXRhKG4uQVJSQVlfQlVGRkVSLDAsdC5zdWJhcnJheSgwLHIpKSxlfSx5dD1lPT57dnQuaW5kZXhPZihlKT4tMXx8dnQucHVzaChlKX07bGV0IFR0PTA7bGV0IFJ0PS0xO2NsYXNzIE10e2NvbnN0cnVjdG9yKGUsdCxyPSExKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiXyRwcm9ncmFtT2JqZWN0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIl8kdW5pZm9ybU1hcCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuXyRwcm9ncmFtT2JqZWN0PSgoZSx0KT0+e2NvbnN0IHI9bi5jcmVhdGVQcm9ncmFtKCksYT1uLmNyZWF0ZVNoYWRlcihuLlZFUlRFWF9TSEFERVIpO24uc2hhZGVyU291cmNlKGEsZSksbi5jb21waWxlU2hhZGVyKGEpO2NvbnN0IG89bi5jcmVhdGVTaGFkZXIobi5GUkFHTUVOVF9TSEFERVIpO3JldHVybiBuLnNoYWRlclNvdXJjZShvLHQpLG4uY29tcGlsZVNoYWRlcihvKSxuLmF0dGFjaFNoYWRlcihyLGEpLG4uYXR0YWNoU2hhZGVyKHIsbyksbi5saW5rUHJvZ3JhbShyKSxuLmRldGFjaFNoYWRlcihyLGEpLG4uZGV0YWNoU2hhZGVyKHIsbyksbi5kZWxldGVTaGFkZXIoYSksbi5kZWxldGVTaGFkZXIobykse2lkOlR0KysscmVzb3VyY2U6cn19KShlLHQpLHRoaXMuXyR1bmlmb3JtTWFwPW5ldyBNYXAsKChlLHQscj0hMSk9Pntjb25zdCBhPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLG4uQUNUSVZFX1VOSUZPUk1TKTtmb3IobGV0IG89MDtvPGE7KytvKXtjb25zdCBhPW4uZ2V0QWN0aXZlVW5pZm9ybShlLG8pLHM9YS5uYW1lLmVuZHNXaXRoKCJbMF0iKT9hLm5hbWUuc2xpY2UoMCwtMyk6YS5uYW1lLGk9bi5nZXRVbmlmb3JtTG9jYXRpb24oZSxzKTtpZihhLnR5cGU9PT1uLlNBTVBMRVJfMkQmJjE9PT1hLnNpemUmJiFyKWNvbnRpbnVlO2NvbnN0IGM9e307c3dpdGNoKGEudHlwZSl7Y2FzZSBuLkZMT0FUX1ZFQzQ6Yy5tZXRob2Q9bi51bmlmb3JtNGZ2LmJpbmQobixpKSxjLmFycmF5PW5ldyBGbG9hdDMyQXJyYXkoNCphLnNpemUpLGMuYXNzaWduPS0xO2JyZWFrO2Nhc2Ugbi5JTlRfVkVDNDpjLm1ldGhvZD1uLnVuaWZvcm00aXYuYmluZChuLGkpLGMuYXJyYXk9bmV3IEludDMyQXJyYXkoNCphLnNpemUpLGMuYXNzaWduPS0xO2JyZWFrO2Nhc2Ugbi5TQU1QTEVSXzJEOmMubWV0aG9kPXI/bi51bmlmb3JtMWkuYmluZChuLGksMyk6bi51bmlmb3JtMWl2LmJpbmQobixpKSxjLmFycmF5PW5ldyBJbnQzMkFycmF5KGEuc2l6ZSksYy5hc3NpZ249MTticmVhaztjYXNlIG4uRkxPQVQ6Y2FzZSBuLkZMT0FUX1ZFQzI6Y2FzZSBuLkZMT0FUX1ZFQzM6Y2FzZSBuLkZMT0FUX01BVDI6Y2FzZSBuLkZMT0FUX01BVDM6Y2FzZSBuLkZMT0FUX01BVDQ6Y2FzZSBuLklOVDpjYXNlIG4uSU5UX1ZFQzI6Y2FzZSBuLklOVF9WRUMzOmRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVc2UgZ2wuRkxPQVRfVkVDNCBvciBnbC5JTlRfVkVDNCBpbnN0ZWFkIil9dC5zZXQocyxjKX19KSh0aGlzLl8kcHJvZ3JhbU9iamVjdC5yZXNvdXJjZSx0aGlzLl8kdW5pZm9ybU1hcCxyKX11c2VQcm9ncmFtKCl7dmFyIGU7ZT10aGlzLl8kcHJvZ3JhbU9iamVjdCxSdCE9PWUuaWQmJihSdD1lLmlkLG4udXNlUHJvZ3JhbShlLnJlc291cmNlKSl9YmluZFVuaWZvcm0oKXsoZT0+e2Zvcihjb25zdCB0IG9mIGUudmFsdWVzKCkpdm9pZCAwIT09dC5tZXRob2QmJnZvaWQgMCE9PXQuYXNzaWduJiYodC5hc3NpZ248MD90Lm1ldGhvZCh0LmFycmF5KTp0LmFzc2lnbj4wJiYodC5hc3NpZ24tLSx0Lm1ldGhvZCh0LmFycmF5KSkpfSkodGhpcy5fJHVuaWZvcm1NYXApfWdldCBoaWdocCgpe3JldHVybiB0aGlzLl8kdW5pZm9ybU1hcC5nZXQoInVfaGlnaHAiKS5hcnJheX1nZXQgbWVkaXVtcCgpe3JldHVybiB0aGlzLl8kdW5pZm9ybU1hcC5nZXQoInVfbWVkaXVtcCIpLmFycmF5fWdldCB0ZXh0dXJlcygpe3JldHVybiB0aGlzLl8kdW5pZm9ybU1hcC5nZXQoInVfdGV4dHVyZXMiKS5hcnJheX19Y29uc3Qgd3Q9bmV3IE1hcCxGdD0oZSx0LG4scik9Pntjb25zdCBhPW4/ImxheW91dCAobG9jYXRpb24gPSAxKSBpbiB2ZWMyIGFfYmV6aWVyOyI6IiIsbz1uPyJvdXQgdmVjMiB2X2JlemllcjsiOnQ/Im91dCB2ZWMyIHZfdXY7IjoiIixzPW4/InZfYmV6aWVyID0gYV9iZXppZXI7Ijp0PyJcbiAgICBtYXQzIHV2X21hdHJpeCA9IG1hdDMoXG4gICAgICAgIHVfaGlnaHBbMF0ueHl6LFxuICAgICAgICB1X2hpZ2hwWzFdLnh5eixcbiAgICAgICAgdV9oaWdocFsyXS54eXpcbiAgICApO1xuICAgIG1hdDMgaW52ZXJzZV9tYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWzNdLnh5eixcbiAgICAgICAgdV9oaWdocFs0XS54eXosXG4gICAgICAgIHZlYzModV9oaWdocFsyXS53LCB1X2hpZ2hwWzNdLncsIHVfaGlnaHBbNF0udylcbiAgICApO1xuICAgIHZfdXYgPSAoaW52ZXJzZV9tYXRyaXggKiB1dl9tYXRyaXggKiB2ZWMzKGFfdmVydGV4LCAxLjApKS54eTsiOiIiLGk9cj8oZT0+YFxudmVjMiBhcHBseU1hdHJpeChpbiB2ZWMyIHZlcnRleCkge1xuICAgIG1hdDMgcGFyZW50X21hdHJpeCA9IG1hdDMoXG4gICAgICAgIHVfaGlnaHBbJHtlfV0ueHl6LFxuICAgICAgICB1X2hpZ2hwWyR7ZSsxfV0ueHl6LFxuICAgICAgICB1X2hpZ2hwWyR7ZSsyfV0ueHl6XG4gICAgKTtcbiAgICBtYXQzIGFuY2VzdG9yX21hdHJpeCA9IG1hdDMoXG4gICAgICAgIHVfaGlnaHBbJHtlKzN9XS54eXosXG4gICAgICAgIHVfaGlnaHBbJHtlKzR9XS54eXosXG4gICAgICAgIHVfaGlnaHBbJHtlKzV9XS54eXpcbiAgICApO1xuXG4gICAgdmVjMiBwYXJlbnRfb2Zmc2V0ID0gdmVjMih1X2hpZ2hwWyR7ZSsyfV0udywgdV9oaWdocFske2UrM31dLncpO1xuICAgIHZlYzIgcGFyZW50X3NpemUgICA9IHZlYzIodV9oaWdocFske2UrNH1dLncsIHVfaGlnaHBbJHtlKzV9XS53KTtcbiAgICB2ZWM0IGdyaWRfbWluID0gdV9oaWdocFske2UrNn1dO1xuICAgIHZlYzQgZ3JpZF9tYXggPSB1X2hpZ2hwWyR7ZSs3fV07XG4gICAgXG4gICAgdmVjMiBwb3NpdGlvbiA9IChwYXJlbnRfbWF0cml4ICogdmVjMyh2ZXJ0ZXgsIDEuMCkpLnh5O1xuICAgIHBvc2l0aW9uID0gKHBvc2l0aW9uIC0gcGFyZW50X29mZnNldCkgLyBwYXJlbnRfc2l6ZTtcblxuICAgIHZlYzQgZ2EgPSBncmlkX21pbjtcbiAgICB2ZWM0IGdiID0gZ3JpZF9tYXggIC0gZ3JpZF9taW47XG4gICAgdmVjNCBnYyA9IHZlYzQoMS4wKSAtIGdyaWRfbWF4O1xuXG4gICAgdmVjMiBwYSA9IHBvc2l0aW9uO1xuICAgIHZlYzIgcGIgPSBwb3NpdGlvbiAtIGdyaWRfbWluLnN0O1xuICAgIHZlYzIgcGMgPSBwb3NpdGlvbiAtIGdyaWRfbWF4LnN0O1xuXG4gICAgcG9zaXRpb24gPSAoZ2EucHEgLyBnYS5zdCkgKiBtaW4ocGEsIGdhLnN0KVxuICAgICAgICAgICAgICAgICsgKGdiLnBxIC8gZ2Iuc3QpICogY2xhbXAocGIsIHZlYzIoMC4wKSwgZ2Iuc3QpXG4gICAgICAgICAgICAgICAgKyAoZ2MucHEgLyBnYy5zdCkgKiBtYXgodmVjMigwLjApLCBwYyk7XG5cbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICogcGFyZW50X3NpemUgKyBwYXJlbnRfb2Zmc2V0O1xuICAgIHBvc2l0aW9uID0gKGFuY2VzdG9yX21hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEuMCkpLnh5O1xuXG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIHZlYzIodV9oaWdocFske2UrOH1dLngsIHVfaGlnaHBbJHtlKzh9XS55KTtcbiAgICByZXR1cm4gcG9zaXRpb24gLyB2ZWMyKHVfaGlnaHBbMF0udywgdV9oaWdocFsxXS53KTtcbn1gKSh0PzU6MCk6IlxudmVjMiBhcHBseU1hdHJpeChpbiB2ZWMyIHZlcnRleCkge1xuICAgIG1hdDMgbWF0cml4ID0gbWF0MyhhX21hdHJpeDAsIGFfbWF0cml4MSwgYV9tYXRyaXgyKTtcbiAgICByZXR1cm4gKG1hdHJpeCAqIHZlYzModmVydGV4LCAxLjApKS54eTtcbn0iO3JldHVybmAjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG4ke2F9XG4ke24/IiI6ImxheW91dCAobG9jYXRpb24gPSAyKSBpbiB2ZWM0IGFfY29sb3I7In1cbiR7cj8iIjoibGF5b3V0IChsb2NhdGlvbiA9IDMpIGluIHZlYzMgYV9tYXRyaXgwO1xubGF5b3V0IChsb2NhdGlvbiA9IDQpIGluIHZlYzMgYV9tYXRyaXgxO1xubGF5b3V0IChsb2NhdGlvbiA9IDUpIGluIHZlYzMgYV9tYXRyaXgyOyJ9XG5cbiR7ZT4xP2B1bmlmb3JtIHZlYzQgdV9oaWdocFske2V9XTtgOiIifVxuJHtvfVxuJHtuPyIiOiJvdXQgdmVjNCB2X2NvbG9yOyJ9XG4ke2l9XG5cbnZvaWQgbWFpbigpIHtcbiAgICAke24/IiI6InZfY29sb3IgPSBhX2NvbG9yOyJ9XG4gICAgJHtzfVxuICAgIHZlYzIgcG9zID0gYXBwbHlNYXRyaXgoYV92ZXJ0ZXgpO1xuICAgIHBvcyA9IHBvcyAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLngsIC1wb3MueSwgMC4wLCAxLjApO1xufWB9LCR0PWU9Pntjb25zdCB0PSJtIisoZT8ieSI6Im4iKTtpZih3dC5oYXModCkpcmV0dXJuIHd0LmdldCh0KTtjb25zdCBuPW5ldyBNdChGdChlPzk6MCwhMSwhMCxlKSwiI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxuaW4gdmVjMiB2X2Jlemllcjtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIHB4ID0gZEZkeCh2X2Jlemllcik7XG4gICAgdmVjMiBweSA9IGRGZHkodl9iZXppZXIpO1xuXG4gICAgdmVjMiBmID0gKDIuMCAqIHZfYmV6aWVyLngpICogdmVjMihweC54LCBweS54KSAtIHZlYzIocHgueSwgcHkueSk7XG4gICAgZmxvYXQgYWxwaGEgPSAwLjUgLSAodl9iZXppZXIueCAqIHZfYmV6aWVyLnggLSB2X2Jlemllci55KSAvIGxlbmd0aChmKTtcblxuICAgIGlmIChhbHBoYSA+IDAuMCkge1xuICAgICAgICBvX2NvbG9yID0gdmVjNChtaW4oYWxwaGEsIDEuMCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc2NhcmQ7XG4gICAgfSAgICBcbn0iKTtyZXR1cm4gd3Quc2V0KHQsbiksbn0sT3Q9KGUsdCk9Pntjb25zdCBuPWUuaGlnaHA7blswXT10WzBdLG5bMV09dFsxXSxuWzJdPTAsbls0XT10WzJdLG5bNV09dFszXSxuWzZdPTAsbls4XT10WzRdLG5bOV09dFs1XSxuWzEwXT0xLG5bMTJdPXRbNl0sblsxM109dFs3XSxuWzE0XT0wLG5bMTZdPXRbOF0sblsxN109dFs5XSxuWzE4XT0wLG5bMjBdPXRbMTBdLG5bMjFdPXRbMTFdLG5bMjJdPTEsblszXT14KCksbls3XT1FKCksblsxMV09dFsxMl0sblsxNV09dFsxM10sblsxOV09dFsxNF0sblsyM109dFsxNV0sblsyNF09dFsxNl0sblsyNV09dFsxN10sblsyNl09dFsxOF0sblsyN109dFsxOV0sblsyOF09dFsyMF0sblsyOV09dFsyMV0sblszMF09dFsyMl0sblszMV09dFsyM10sblszMl09dFsyNF0sblszM109dFsyNV19O2xldCBTdD0ibm9ybWFsIjtjb25zdCBrdD1lPT57U3Q9ZX0sQ3Q9KCk9PlN0O2xldCBQdD02MDA7Y29uc3QgQnQ9ZT0+e1B0PWV9LEl0PSgpPT5QdCxMdD0oKT0+ezYxMyE9PUl0KCkmJihCdCg2MTMpLG4uYmxlbmRGdW5jKG4uT05FLG4uT05FX01JTlVTX1NSQ19BTFBIQSkpfSxVdD0oZSx0LHIsYSk9PntlLnVzZVByb2dyYW0oKSxlLmJpbmRVbmlmb3JtKCksTHQoKSxtdCh0KSxuLmRyYXdBcnJheXMobi5UUklBTkdMRVMscixhKX0sTnQ9KCk9Pntjb25zdCBlPSJybW5uIjtpZih3dC5oYXMoZSkpcmV0dXJuIHd0LmdldChlKTtjb25zdCB0PW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIHBvcyA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MueCwgLXBvcy55LCAwLjAsIDEuMCk7XG59IiwiI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbm91dCB2ZWM0IG9fY29sb3I7XG52b2lkIG1haW4oKSB7XG4gICAgb19jb2xvciA9IHZlYzQoMS4wKTtcbn0iKTtyZXR1cm4gd3Quc2V0KGUsdCksdH0sRHQ9KCk9Pntjb25zdCBlPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9MTw8ZS5jbGlwTGV2ZWwtMTtuLnN0ZW5jaWxNYXNrKH50LTEpLG4uc3RlbmNpbEZ1bmMobi5MRVFVQUwsdCwyNTUpLG4uc3RlbmNpbE9wKG4uWkVSTyxuLlJFUExBQ0Usbi5SRVBMQUNFKSxVdChOdCgpLEV0KCksMCw2KSxuLnN0ZW5jaWxNYXNrKDE8PGUuY2xpcExldmVsKSxuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcChuLlJFUExBQ0Usbi5SRVBMQUNFLG4uUkVQTEFDRSksVXQoTnQoKSxFdCgpLDAsNiksbi5zdGVuY2lsTWFzaygyNTUpLG4uc3RlbmNpbE9wKG4uWkVSTyxuLklOVkVSVCxuLklOVkVSVCl9O2NsYXNzIGp0e2NvbnN0cnVjdG9yKGUsdCxuLHIsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImluZGV4Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIngiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywieSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ3Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImgiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVmdCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyaWdodCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ1c2VkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5pbmRleD1lLHRoaXMueD10LHRoaXMueT1uLHRoaXMudz1yLHRoaXMuaD1hLHRoaXMubGVmdD1udWxsLHRoaXMucmlnaHQ9bnVsbCx0aGlzLnVzZWQ9ITF9aW5zZXJ0KGUsdCl7cmV0dXJuKChlLHQsbik9PntpZihlLnVzZWQpe2NvbnN0IHI9ZS5sZWZ0Py5pbnNlcnQodCxuKTtyZXR1cm4gcnx8ZS5yaWdodD8uaW5zZXJ0KHQsbil8fG51bGx9aWYodD5lLnd8fG4+ZS5oKXJldHVybiBudWxsO2lmKHQ9PT1lLncmJm49PT1lLmgpcmV0dXJuIGUudXNlZD0hMCxlO2NvbnN0IHI9ZS53LXQsYT1lLmgtbjtyZXR1cm4gcj5hPyhlLmxlZnQ9ZS5jcmVhdGUoZS5pbmRleCxlLngsZS55LHQsbiksZS5yaWdodD1lLmNyZWF0ZShlLmluZGV4LGUueCt0KzEsZS55LHItMSxlLmgpKTooZS5sZWZ0PWUuY3JlYXRlKGUuaW5kZXgsZS54LGUueSxlLncsbiksZS5yaWdodD1lLmNyZWF0ZShlLmluZGV4LGUueCxlLnkrbisxLGUudyxhLTEpKSxlLnVzZWQ9ITAsZS5sZWZ0Lmluc2VydCh0LG4pfSkodGhpcyxlLHQpfWRpc3Bvc2UoZSx0LG4scil7cmV0dXJuKChlLHQsbixyLGEpPT5lLmxlZnQ/LmRpc3Bvc2UodCxuLHIsYSk/KGUubGVmdC51c2VkfHxlLnJpZ2h0Py51c2VkfHwoZS5sZWZ0PWUucmlnaHQ9bnVsbCxlLnVzZWQ9ITEpLCEwKTplLnJpZ2h0Py5kaXNwb3NlKHQsbixyLGEpPyhlLnJpZ2h0LnVzZWR8fGUubGVmdD8udXNlZHx8KGUubGVmdD1lLnJpZ2h0PW51bGwsZS51c2VkPSExKSwhMCk6dD09PWUueCYmbj09PWUueSYmcj09PWUudyYmYT09PWUuaCYmKGUudXNlZD0hMSwhMCkpKHRoaXMsZSx0LG4scil9Y3JlYXRlKGUsdCxuLHIsYSl7cmV0dXJuIG5ldyBqdChlLHQsbixyLGEpfX1jbGFzcyBYdHtjb25zdHJ1Y3RvcihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIl8kcm9vdCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuXyRyb290PW5ldyBqdChlLDAsMCx0LG4pfWluc2VydChlLHQpe3JldHVybiB0aGlzLl8kcm9vdC5pbnNlcnQoZSx0KX1kaXNwb3NlKGUsdCxuLHIpe3JldHVybiB0aGlzLl8kcm9vdC5kaXNwb3NlKGUsdCxuLHIpfX1jb25zdCB6dD0odCxuKT0+e2NvbnN0IHI9ZmUoKTtfZVtyXXx8KF9lW3JdPW5ldyBYdChyLGUsZSkpO2NvbnN0IGE9X2Vbcl0uaW5zZXJ0KHQsbik7cmV0dXJuIGF8fChkZShyKzEpLHp0KHQsbikpfSxWdD1lPT5gXG4gICAgdmVjNCBtdWwgPSB1X21lZGl1bXBbJHtlfV07XG4gICAgdmVjNCBhZGQgPSB1X21lZGl1bXBbJHtlKzF9XTtcblxuICAgIGlmIChtdWwueCAhPSAxLjAgfHwgbXVsLnkgIT0gMS4wIHx8IG11bC56ICE9IDEuMCB8fCBtdWwudyAhPSAxLjBcbiAgICAgICAgfHwgYWRkLnggIT0gMC4wIHx8IGFkZC55ICE9IDAuMCB8fCBhZGQueiAhPSAwLjBcbiAgICApIHtcbiAgICAgICAgc3JjLnJnYiAvPSBtYXgoMC4wMDAxLCBzcmMuYSk7XG4gICAgICAgIHNyYyA9IGNsYW1wKHNyYyAqIG11bCArIGFkZCwgMC4wLCAxLjApO1xuICAgICAgICBzcmMucmdiICo9IHNyYy5hO1xuICAgIH1cbmAsV3Q9ZT0+YCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiR7ZT8idW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFsyXTsiOiIifVxuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBzcmMgPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCk7XG4gICAgJHtlP1Z0KDApOiIifVxuICAgIG9fY29sb3IgPSBzcmM7XG59YDtjb25zdCBHdD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnVmZmVyIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm9mZnNldCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMjU2KSx0aGlzLm9mZnNldD0wfXB1c2goLi4uZSl7dGhpcy5idWZmZXIubGVuZ3RoPHRoaXMub2Zmc2V0K2UubGVuZ3RoJiZ0aGlzLnJlc2l6ZShlLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5idWZmZXJbdGhpcy5vZmZzZXQrK109ZVt0XX1zZXQoZSl7dGhpcy5idWZmZXIubGVuZ3RoPHRoaXMub2Zmc2V0K2UubGVuZ3RoJiZ0aGlzLnJlc2l6ZShlLmxlbmd0aCksdGhpcy5idWZmZXIuc2V0KGUsdGhpcy5vZmZzZXQpLHRoaXMub2Zmc2V0Kz1lLmxlbmd0aH1yZXNpemUoZSl7Y29uc3QgdD1uZXcgRmxvYXQzMkFycmF5KChuPXRoaXMub2Zmc2V0K2Usbi0tLG58PW4+PjEsbnw9bj4+MixufD1uPj40LG58PW4+Pjgsbnw9bj4+MTYsKytuKSk7dmFyIG47dGhpcy5idWZmZXIubGVuZ3RoJiZ0LnNldCh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9dH19O2NsYXNzIFl0IGV4dGVuZHMgTXR7Y29uc3RydWN0b3IoZSx0LG49ITApe3N1cGVyKGUsdCxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY291bnQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmNvdW50PTB9Y2xlYXIoKXt0aGlzLmNvdW50PUd0Lm9mZnNldD0wfX1jb25zdCBxdD1uZXcgTWFwLEt0PSgpPT57aWYocXQuaGFzKCJpIikpcmV0dXJuIHF0LmdldCgiaSIpO2NvbnN0IGU9bmV3IFl0KCIjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG5sYXlvdXQgKGxvY2F0aW9uID0gMSkgaW4gdmVjNCBhX3JlY3Q7XG5sYXlvdXQgKGxvY2F0aW9uID0gMikgaW4gdmVjNCBhX3NpemU7XG5sYXlvdXQgKGxvY2F0aW9uID0gMykgaW4gdmVjMiBhX29mZnNldDtcbmxheW91dCAobG9jYXRpb24gPSA0KSBpbiB2ZWM0IGFfbWF0cml4O1xubGF5b3V0IChsb2NhdGlvbiA9IDUpIGluIHZlYzQgYV9tdWw7XG5sYXlvdXQgKGxvY2F0aW9uID0gNikgaW4gdmVjNCBhX2FkZDtcblxub3V0IHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IHZfbXVsO1xub3V0IHZlYzQgdl9hZGQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXggKiBhX3JlY3QuencgKyBhX3JlY3QueHk7XG4gICAgdl9tdWwgPSBhX211bDtcbiAgICB2X2FkZCA9IGFfYWRkO1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoYV92ZXJ0ZXgueCwgMS4wIC0gYV92ZXJ0ZXgueSk7XG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIGFfc2l6ZS54eTtcblxuICAgIG1hdDMgbWF0cml4ID0gbWF0MyhcbiAgICAgICAgYV9tYXRyaXgueCwgYV9tYXRyaXgueSwgMC4wLFxuICAgICAgICBhX21hdHJpeC56LCBhX21hdHJpeC53LCAwLjAsXG4gICAgICAgIGFfb2Zmc2V0LngsIGFfb2Zmc2V0LnksIDEuMFxuICAgICk7XG5cbiAgICBwb3NpdGlvbiA9IChtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxLjApKS54eTtcbiAgICBwb3NpdGlvbiAvPSBhX3NpemUuenc7XG5cbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54LCAtcG9zaXRpb24ueSwgMC4wLCAxLjApO1xufSIsIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcblxuaW4gdmVjNCB2X211bDtcbmluIHZlYzQgdl9hZGQ7XG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBzcmMgPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCk7XG5cbiAgICBpZiAodl9tdWwueCAhPSAxLjAgfHwgdl9tdWwueSAhPSAxLjAgfHwgdl9tdWwueiAhPSAxLjAgfHwgdl9tdWwudyAhPSAxLjBcbiAgICAgICAgfHwgdl9hZGQueCAhPSAwLjAgfHwgdl9hZGQueSAhPSAwLjAgfHwgdl9hZGQueiAhPSAwLjBcbiAgICApIHtcbiAgICAgICAgc3JjLnJnYiAvPSBtYXgoMC4wMDAxLCBzcmMuYSk7XG4gICAgICAgIHNyYyA9IGNsYW1wKHNyYyAqIHZfbXVsICsgdl9hZGQsIDAuMCwgMS4wKTtcbiAgICAgICAgc3JjLnJnYiAqPSBzcmMuYTtcbiAgICB9XG5cbiAgICBvX2NvbG9yID0gc3JjO1xufSIpO3JldHVybiBxdC5zZXQoImkiLGUpLGV9LEh0PShlLHQpPT57Y29uc3Qgbj1gaSR7ZX15YDtpZihxdC5oYXMobikpcmV0dXJuIHF0LmdldChuKTtjb25zdCByPW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKGU9PntsZXQgdDtzd2l0Y2goZSl7Y2FzZSJzdWJ0cmFjdCI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBjID0gdmVjNChkc3QucmdiIC0gc3JjLnJnYiwgc3JjLmEgKiBkc3QuYSk7XG4gICAgYy5yZ2IgKj0gYy5hO1xuXG4gICAgcmV0dXJuIGEgKyBiICsgYztcbn0iO2JyZWFrO2Nhc2UibXVsdGlwbHkiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgdmVjNCBhID0gc3JjIC0gc3JjICogZHN0LmE7XG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG4gICAgdmVjNCBjID0gc3JjICogZHN0O1xuXG4gICAgcmV0dXJuIGEgKyBiICsgYztcbn0iO2JyZWFrO2Nhc2UibGlnaHRlbiI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBjID0gdmVjNChtaXgoc3JjLnJnYiwgZHN0LnJnYiwgc3RlcChzcmMucmdiLCBkc3QucmdiKSksIHNyYy5hICogZHN0LmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlImRhcmtlbiI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBjID0gdmVjNChtaXgoc3JjLnJnYiwgZHN0LnJnYiwgc3RlcChkc3QucmdiLCBzcmMucmdiKSksIHNyYy5hICogZHN0LmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlIm92ZXJsYXkiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgaWYgKHNyYy5hID09IDAuMCkgeyByZXR1cm4gZHN0OyB9XG4gICAgaWYgKGRzdC5hID09IDAuMCkgeyByZXR1cm4gc3JjOyB9XG5cbiAgICB2ZWM0IGEgPSBzcmMgLSBzcmMgKiBkc3QuYTtcbiAgICB2ZWM0IGIgPSBkc3QgLSBkc3QgKiBzcmMuYTtcblxuICAgIHNyYy5yZ2IgLz0gc3JjLmE7XG4gICAgZHN0LnJnYiAvPSBkc3QuYTtcblxuICAgIHZlYzQgbXVsID0gc3JjICogZHN0O1xuICAgIHZlYzMgYzEgPSAyLjAgKiBtdWwucmdiO1xuICAgIHZlYzMgYzIgPSAyLjAgKiAoc3JjLnJnYiArIGRzdC5yZ2IgLSBtdWwucmdiKSAtIDEuMDtcbiAgICB2ZWM0IGMgPSB2ZWM0KG1peChjMSwgYzIsIHN0ZXAodmVjMygwLjUpLCBkc3QucmdiKSksIG11bC5hKTtcbiAgICBjLnJnYiAqPSBjLmE7XG5cbiAgICByZXR1cm4gYSArIGIgKyBjO1xufSI7YnJlYWs7Y2FzZSJoYXJkbGlnaHQiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgaWYgKHNyYy5hID09IDAuMCkgeyByZXR1cm4gZHN0OyB9XG4gICAgaWYgKGRzdC5hID09IDAuMCkgeyByZXR1cm4gc3JjOyB9XG5cbiAgICB2ZWM0IGEgPSBzcmMgLSBzcmMgKiBkc3QuYTtcbiAgICB2ZWM0IGIgPSBkc3QgLSBkc3QgKiBzcmMuYTtcblxuICAgIHNyYy5yZ2IgLz0gc3JjLmE7XG4gICAgZHN0LnJnYiAvPSBkc3QuYTtcblxuICAgIHZlYzQgbXVsID0gc3JjICogZHN0O1xuICAgIHZlYzMgYzEgPSAyLjAgKiBtdWwucmdiO1xuICAgIHZlYzMgYzIgPSAyLjAgKiAoc3JjLnJnYiArIGRzdC5yZ2IgLSBtdWwucmdiKSAtIDEuMDtcbiAgICB2ZWM0IGMgPSB2ZWM0KG1peChjMSwgYzIsIHN0ZXAodmVjMygwLjUpLCBzcmMucmdiKSksIG11bC5hKTtcbiAgICBjLnJnYiAqPSBjLmE7XG5cbiAgICByZXR1cm4gYSArIGIgKyBjO1xufSI7YnJlYWs7Y2FzZSJkaWZmZXJlbmNlIjp0PSJcbnZlYzQgYmxlbmQgKGluIHZlYzQgc3JjLCBpbiB2ZWM0IGRzdCkge1xuICAgIGlmIChzcmMuYSA9PSAwLjApIHsgcmV0dXJuIGRzdDsgfVxuICAgIGlmIChkc3QuYSA9PSAwLjApIHsgcmV0dXJuIHNyYzsgfVxuXG4gICAgdmVjNCBhID0gc3JjIC0gc3JjICogZHN0LmE7XG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG5cbiAgICBzcmMucmdiIC89IHNyYy5hO1xuICAgIGRzdC5yZ2IgLz0gZHN0LmE7XG5cbiAgICB2ZWM0IGMgPSB2ZWM0KGFicyhzcmMucmdiIC0gZHN0LnJnYiksIHNyYy5hICogZHN0LmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlImludmVydCI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuICAgIHZlYzQgYyA9IHZlYzQoc3JjLmEgLSBkc3QucmdiICogc3JjLmEsIHNyYy5hKTtcblxuICAgIHJldHVybiBiICsgYztcbn0iO2JyZWFrO2RlZmF1bHQ6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICByZXR1cm4gc3JjICsgZHN0IC0gZHN0ICogc3JjLmE7XG59In1yZXR1cm5gI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlc1syXTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbMl07XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbiR7dH1cblxudm9pZCBtYWluKCkge1xuICAgIHZlYzQgZHN0ID0gdGV4dHVyZSh1X3RleHR1cmVzWzBdLCB2X2Nvb3JkKTtcbiAgICB2ZWM0IHNyYyA9IHRleHR1cmUodV90ZXh0dXJlc1sxXSwgdl9jb29yZCk7XG4gICAgJHtWdCgwKX1cbiAgICBvX2NvbG9yID0gYmxlbmQoc3JjLCBkc3QpO1xufWB9KShlKSk7cmV0dXJuIHF0LnNldChuLHIpLHJ9O2xldCBadD0wO2NvbnN0IFF0PSgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LHQ9ci5hdGxhc0F0dGFjaG1lbnRPYmplY3Q7aWYoci5iaW5kKHQpLG4uYmluZEZyYW1lYnVmZmVyKG4uRFJBV19GUkFNRUJVRkZFUixYKSxZKCExKSxadD09PWZlKCkpe2NvbnN0IGU9RWUoZmUoKSk7ZVsyXSE9PS1OdW1iZXIuTUFYX1ZBTFVFJiZlWzNdIT09LU51bWJlci5NQVhfVkFMVUUmJihuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLGVbM10pLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LG4uQ09MT1JfQlVGRkVSX0JJVCxuLk5FQVJFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCkpfWVsc2V7Y29uc3QgZT15ZShmZSgpKTtuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLGVbM10pLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LG4uQ09MT1JfQlVGRkVSX0JJVCxuLk5FQVJFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCksWnQ9ZmUoKX1lJiZyLmJpbmQoZSl9LEp0PWU9Pntjb25zdCB0PWZlKCk7ZGUoZS5pbmRleCksUXQoKTtjb25zdCByPUs7bi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixyKTtjb25zdCBhPWdlKCk7bi5mcmFtZWJ1ZmZlclRleHR1cmUyRChuLkZSQU1FQlVGRkVSLG4uQ09MT1JfQVRUQUNITUVOVDAsbi5URVhUVVJFXzJELGEucmVzb3VyY2UsMCk7Y29uc3Qgbz1KKCk7bi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixvKTtjb25zdCBzPXVlKGUudyxlLmgpO3JldHVybiBuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKG4uRlJBTUVCVUZGRVIsbi5DT0xPUl9BVFRBQ0hNRU5UMCxuLlRFWFRVUkVfMkQscy5yZXNvdXJjZSwwKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLG51bGwpLG4uYmluZEZyYW1lYnVmZmVyKG4uUkVBRF9GUkFNRUJVRkZFUixyKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkRSQVdfRlJBTUVCVUZGRVIsbyksbi5ibGl0RnJhbWVidWZmZXIoZS54LGUueSxlLngrZS53LGUueStlLmgsMCwwLGUudyxlLmgsbi5DT0xPUl9CVUZGRVJfQklULG4uTkVBUkVTVCksZGUodCksbi5iaW5kRnJhbWVidWZmZXIobi5SRUFEX0ZSQU1FQlVGRkVSLEQpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsRCksc30sZW49KGUsdCxyPSExKT0+eyRlKDIsbi5URVhUVVJFMixudWxsLHIpLCRlKDEsbi5URVhUVVJFMSx0LHIpLCRlKDAsbi5URVhUVVJFMCxlLHIpfSx0bj0oKT0+e2lmKHF0LmhhcygicCIpKXJldHVybiBxdC5nZXQoInAiKTtjb25zdCBlPW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xudW5pZm9ybSB2ZWM0IHVfaGlnaHBbMl07XG5cbm91dCB2ZWMyIHZfY29vcmQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXg7XG5cbiAgICB2ZWMyIG9mZnNldCAgID0gdV9oaWdocFswXS54eTtcbiAgICB2ZWMyIHNpemUgICAgID0gdV9oaWdocFswXS56dztcbiAgICB2ZWMyIHZpZXdwb3J0ID0gdmVjMih1X2hpZ2hwWzFdLngsIHVfaGlnaHBbMV0ueSk7XG5cbiAgICB2ZWMyIHBvc2l0aW9uID0gdmVjMihhX3ZlcnRleC54LCAxLjAgLSBhX3ZlcnRleC55KTtcbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2l6ZSArIG9mZnNldDtcbiAgICBwb3NpdGlvbiAvPSB2aWV3cG9ydDtcblxuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLngsIC1wb3NpdGlvbi55LCAwLjAsIDEuMCk7XG59IixXdCghMSkpO3JldHVybiBxdC5zZXQoInAiLGUpLGV9LG5uPShlLHQsbik9Pntjb25zdCBhPWUuaGlnaHAsbz1yLiRtYXRyaXg7YVswXT1vWzZdLGFbMV09b1s3XSxhWzJdPXQsYVszXT1uLGFbNF09eCgpLGFbNV09RSgpfSxybj1lPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLG10KEV0KCkpLG4uZHJhd0FycmF5cyhuLlRSSUFOR0xFUywwLDYpfTtsZXQgYW49bnVsbDtjb25zdCBvbj0oZSx0LGEsbyk9Pntjb25zdCBzPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3QsaT1yLiRtYWluQXR0YWNobWVudE9iamVjdDtyLmJpbmQoaSk7Y29uc3QgYz1KKCk7cmV0dXJuIG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsYyksYW4mJmFuLndpZHRoPT09aS53aWR0aCYmYW4uaGVpZ2h0PT09aS5oZWlnaHR8fChhbj11ZShpLndpZHRoLGkuaGVpZ2h0KSksT2UoYW4pLG4uZnJhbWVidWZmZXJUZXh0dXJlMkQobi5GUkFNRUJVRkZFUixuLkNPTE9SX0FUVEFDSE1FTlQwLG4uVEVYVFVSRV8yRCxhbi5yZXNvdXJjZSwwKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLG51bGwpLG4uYmluZEZyYW1lYnVmZmVyKG4uUkVBRF9GUkFNRUJVRkZFUixEKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkRSQVdfRlJBTUVCVUZGRVIsYyksbi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihlLGkuaGVpZ2h0LXQtbyxhKzEsbysxKSxuLmJsaXRGcmFtZWJ1ZmZlcigwLDAsaS53aWR0aCxpLmhlaWdodCwwLDAsaS53aWR0aCxpLmhlaWdodCxuLkNPTE9SX0JVRkZFUl9CSVQsbi5ORUFSRVNUKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsRCkscyYmci5iaW5kKHMpLGFufSxzbj0oZSx0LG4sYSk9Pntjb25zdCBvPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Qscz1vbihlLHQsbixhKSxpPWhlKG4sYSwhMSk7ci5iaW5kKGkpLHIuc2F2ZSgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsLWUsLXQpO2NvbnN0IGM9dG4oKTtubihjLHMud2lkdGgscy5oZWlnaHQpLEx0KCksT2Uocykscm4oYyk7Y29uc3QgbD1pLnRleHR1cmU7cmV0dXJuIHIucmVzdG9yZSgpLGVlKGksITEpLG8mJnIuYmluZChvKSxsfSxjbj0oKT0+ezYxMCE9PUl0KCkmJihCdCg2MTApLG4uYmxlbmRGdW5jKG4uT05FLG4uWkVSTykpfSxsbj1lPT57T2UoZSksY24oKTtjb25zdCB0PXRuKCk7bm4odCxlLndpZHRoLGUuaGVpZ2h0KSxybih0KSxMdCgpfSx1bj0oZSx0LG4scixhLG8scyxpLGMpPT57Y29uc3QgbD1lLnRleHR1cmVzO2xbMF09MCxsWzFdPTE7Y29uc3QgdT1lLm1lZGl1bXA7dVswXT10LHVbMV09bix1WzJdPXIsdVszXT1hLHVbNF09byx1WzVdPXMsdVs2XT1pLHVbN109Y30saG49KGU9ITEpPT57Y29uc3QgdD0ibSIrKGU/InkiOiJuIik7aWYocXQuaGFzKHQpKXJldHVybiBxdC5nZXQodCk7Y29uc3Qgbj1uZXcgTXQoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcbnVuaWZvcm0gdmVjNCB1X2hpZ2hwWzNdO1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgbWF0MyBtYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWzBdLngsIHVfaGlnaHBbMF0ueSwgMC4wLFxuICAgICAgICB1X2hpZ2hwWzBdLnosIHVfaGlnaHBbMF0udywgMC4wLFxuICAgICAgICB1X2hpZ2hwWzFdLngsIHVfaGlnaHBbMV0ueSwgMS4wXG4gICAgKTtcblxuICAgIHZlYzIgc2l6ZSAgICAgPSB1X2hpZ2hwWzFdLnp3O1xuICAgIHZlYzIgdmlld3BvcnQgPSB2ZWMyKHVfaGlnaHBbMl0ueCwgdV9oaWdocFsyXS55KTtcblxuICAgIHZlYzIgcG9zaXRpb24gPSB2ZWMyKGFfdmVydGV4LngsIDEuMCAtIGFfdmVydGV4LnkpO1xuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKiBzaXplO1xuICAgIHBvc2l0aW9uID0gKG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEuMCkpLnh5O1xuICAgIHBvc2l0aW9uIC89IHZpZXdwb3J0O1xuXG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueCwgLXBvc2l0aW9uLnksIDAuMCwgMS4wKTtcbn0iLFd0KGUpKTtyZXR1cm4gcXQuc2V0KHQsbiksbn0sYm49KGUsdCxuKT0+e2NvbnN0IGE9ZS5oaWdocCxvPXIuJG1hdHJpeDthWzBdPW9bMF0sYVsxXT1vWzFdLGFbMl09b1szXSxhWzNdPW9bNF0sYVs0XT1vWzZdLGFbNV09b1s3XSxhWzZdPXQsYVs3XT1uLGFbOF09eCgpLGFbOV09RSgpfTtsZXQgZG49MDtjb25zdCBmbj1lPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLG10KGd0KSxuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIscHQpLEd0LmJ1ZmZlci5sZW5ndGg+ZG4mJihkbj1HdC5idWZmZXIubGVuZ3RoLG4uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUiw0KmRuLG4uRFlOQU1JQ19EUkFXKSksbi5idWZmZXJTdWJEYXRhKG4uQVJSQVlfQlVGRkVSLDAsR3QuYnVmZmVyLnN1YmFycmF5KDAsR3Qub2Zmc2V0KSksbi5kcmF3QXJyYXlzSW5zdGFuY2VkKG4uVFJJQU5HTEVTLDAsNixlLmNvdW50KX0sbW49KCk9Pns2MDMhPT1JdCgpJiYoQnQoNjAzKSxuLmJsZW5kRnVuYyhuLlpFUk8sbi5PTkVfTUlOVVNfU1JDX0FMUEhBKSl9LHZuPWU9Pntzd2l0Y2goZSl7Y2FzZSJhZGQiOjYxMSE9PUl0KCkmJihCdCg2MTEpLG4uYmxlbmRGdW5jKG4uT05FLG4uT05FKSk7YnJlYWs7Y2FzZSJzY3JlZW4iOjY0MSE9PUl0KCkmJihCdCg2NDEpLG4uYmxlbmRGdW5jKG4uT05FX01JTlVTX0RTVF9DT0xPUixuLk9ORSkpO2JyZWFrO2Nhc2UiYWxwaGEiOjYwNiE9PUl0KCkmJihCdCg2MDYpLG4uYmxlbmRGdW5jKG4uWkVSTyxuLlNSQ19BTFBIQSkpO2JyZWFrO2Nhc2UiZXJhc2UiOm1uKCk7YnJlYWs7Y2FzZSJjb3B5IjpjbigpO2JyZWFrO2RlZmF1bHQ6THQoKX19LF9uPWU9Pnt2YXIgdDsoZT0+e3B0PWUuY3JlYXRlQnVmZmVyKCl9KShlKSx0PSgoKT0+e2NvbnN0IGU9ZHQoKTtyZXR1cm4gbXQoZSksbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGUudmVydGV4QnVmZmVyKSxuLmJ1ZmZlckRhdGEobi5BUlJBWV9CVUZGRVIsbmV3IEZsb2F0MzJBcnJheShbMCwwLDEsMCwwLDEsMSwxLDAsMSwxLDBdKSxuLlNUQVRJQ19EUkFXKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSwwLDApLG4uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixwdCksbi5idWZmZXJEYXRhKG4uQVJSQVlfQlVGRkVSLEd0LmJ1ZmZlci5sZW5ndGgsbi5EWU5BTUlDX0RSQVcpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsNCxuLkZMT0FULCExLDg4LDApLG4udmVydGV4QXR0cmliRGl2aXNvcigxLDEpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMiksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDIsNCxuLkZMT0FULCExLDg4LDE2KSxuLnZlcnRleEF0dHJpYkRpdmlzb3IoMiwxKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDMpLG4udmVydGV4QXR0cmliUG9pbnRlcigzLDIsbi5GTE9BVCwhMSw4OCwzMiksbi52ZXJ0ZXhBdHRyaWJEaXZpc29yKDMsMSksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSg0KSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoNCw0LG4uRkxPQVQsITEsODgsNDApLG4udmVydGV4QXR0cmliRGl2aXNvcig0LDEpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoNSksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDUsNCxuLkZMT0FULCExLDg4LDU2KSxuLnZlcnRleEF0dHJpYkRpdmlzb3IoNSwxKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDYpLG4udmVydGV4QXR0cmliUG9pbnRlcig2LDQsbi5GTE9BVCwhMSw4OCw3Miksbi52ZXJ0ZXhBdHRyaWJEaXZpc29yKDYsMSksZX0pKCksZ3Q9dH0scG49KGUsdCxyLGE9ITEpPT57Y29uc3Qgbz11ZShlLHQsYSk7cmV0dXJuIG4udGV4U3ViSW1hZ2UyRChuLlRFWFRVUkVfMkQsMCwwLDAsZSx0LG4uUkdCQSxuLlVOU0lHTkVEX0JZVEUsciksb30sZ249KGUsdCk9Pntjb25zdCByPSgoZSx0LHIsYT0hMSk9Pntjb25zdCBvPXVlKGUsdCxhKTtyZXR1cm4gbi50ZXhTdWJJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLDAsMCxuLlJHQkEsbi5VTlNJR05FRF9CWVRFLHIpLG99KShlLncsZS5oLHQpLGE9dG4oKTtubihhLGUudyxlLmgpLEx0KCkscm4oYSksTChyKX0seG49W10sRW49bmV3IE1hcCxBbj0oZSx0LG4pPT57T2UoZSwhMCk7Y29uc3Qgcj1NYXRoLmNlaWwoLjUqbiksYT0xLShyLS41Km4pLG89MStuLHM9KGU9Pntjb25zdCB0PWBiJHtlfWA7aWYoRW4uaGFzKHQpKXJldHVybiBFbi5nZXQodCk7Y29uc3Qgbj1uZXcgTXQoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcblxub3V0IHZlYzIgdl9jb29yZDtcblxudm9pZCBtYWluKCkge1xuICAgIHZfY29vcmQgPSBhX3ZlcnRleDtcblxuICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleCAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTtcbn0iLChlPT57Y29uc3QgdD1lLnRvRml4ZWQoMSk7cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXA7XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyICBvZmZzZXQgICA9IHVfbWVkaXVtcC54eTtcbiAgICBmbG9hdCBmcmFjdGlvbiA9IHVfbWVkaXVtcC56O1xuICAgIGZsb2F0IHNhbXBsZXMgID0gdV9tZWRpdW1wLnc7XG4gICAgXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkKTtcblxuICAgIGZvciAoZmxvYXQgaSA9IDEuMDsgaSA8ICR7dH07IGkgKz0gMS4wKSB7XG4gICAgICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkICsgb2Zmc2V0ICogaSk7XG4gICAgICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkIC0gb2Zmc2V0ICogaSk7XG4gICAgfVxuICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkICsgb2Zmc2V0ICogJHt0fSkgKiBmcmFjdGlvbjtcbiAgICBjb2xvciArPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCAtIG9mZnNldCAqICR7dH0pICogZnJhY3Rpb247XG4gICAgY29sb3IgLz0gc2FtcGxlcztcblxuICAgIG9fY29sb3IgPSBjb2xvcjtcbn1gfSkoZSkpO3JldHVybiBFbi5zZXQodCxuKSxufSkocik7KChlLHQsbixyLGEsbyk9Pntjb25zdCBzPWUubWVkaXVtcDtyPyhzWzBdPTEvdCxzWzFdPTApOihzWzBdPTAsc1sxXT0xL24pLHNbMl09YSxzWzNdPW99KShzLGUud2lkdGgsZS5oZWlnaHQsdCxhLG8pLHJuKHMpfSx5bj17eDowLHk6MH0sVG49KGUsdCxuKT0+KGU+PjE2KSoobj90OjEpLzI1NSxSbj0oZSx0LG4pPT4oZT4+OCYyNTUpKihuP3Q6MSkvMjU1LE1uPShlLHQsbik9PigyNTUmZSkqKG4/dDoxKS8yNTUsd249Wy41LDEuMDUsMS40LDEuNTUsMS43NSwxLjksMiwyLjE1LDIuMiwyLjMsMi41LDMsMywzLjUsMy41XSxGbj0oZSx0LG49NCxhPTQsbz0xLHM9ITApPT57Y29uc3QgaT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LGM9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLGw9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLHU9eSgpLGg9biooYy91KSxiPWEqKGwvdSksZD13bltvLTFdLGY9TWF0aC5yb3VuZChoKmQpLG09TWF0aC5yb3VuZChiKmQpO3luLngrPWYseW4ueSs9bTtjb25zdCB2PWUud2lkdGgrMipmLF89ZS5oZWlnaHQrMiptO2xldCBwPTEsZz0xO2g+MTI4P3A9LjA2MjU6aD42ND9wPS4xMjU6aD4zMj9wPS4yNTpoPjE2JiYocD0uNSksYj4xMjg/Zz0uMDYyNTpiPjY0P2c9LjEyNTpiPjMyP2c9LjI1OmI+MTYmJihnPS41KTtjb25zdCB4PU1hdGguY2VpbCh2KnApLEU9TWF0aC5jZWlsKF8qZyksQT1oZSh4LEUsITEpLFQ9W0EsaGUoeCxFLCExKV07ci5iaW5kKEEpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybShwLDAsMCxnLGYqcCxtKmcpLE9lKGUpO2NvbnN0IFI9aG4oKTtibihSLGUud2lkdGgsZS5oZWlnaHQpLHJuKFIpLHMmJkwoZSk7Y29uc3QgTT1oKnAsdz1iKmc7bGV0IEY9MCwkPUEudGV4dHVyZTtPZSgkLCEwKSxjbigpO2ZvcihsZXQgZT0wO2U8bzsrK2Upe2lmKG4+MCl7Rj0oRisxKSUyO2NvbnN0IGU9VFtGXTtyLmJpbmQoZSksQW4oJCwhMCxNKSwkPWUudGV4dHVyZX1pZihhPjApe0Y9KEYrMSklMjtjb25zdCBlPVRbRl07ci5iaW5kKGUpLEFuKCQsITEsdyksJD1lLnRleHR1cmV9fWlmKEx0KCksMSE9PXB8fDEhPT1nKXtjb25zdCBlPWhlKHYsXywhMSk7ci5iaW5kKGUpLHIuc2V0VHJhbnNmb3JtKDEvcCwwLDAsMS9nLDAsMCksT2UoJCwhMCksYm4oUiwkLndpZHRoLCQuaGVpZ2h0KSxybihSKSwkPWUudGV4dHVyZSxlZShUWzBdKSxlZShUWzFdKSxlZShlLCExKX1lbHNlIEY9KEYrMSklMixlZShUW0ZdKSxGPShGKzEpJTIsZWUoVFtGXSwhMSk7cmV0dXJuIGkmJnIuYmluZChpKSwkfSwkbj0oZSx0KT0+e2NvbnN0IG49ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxhPWhlKGUud2lkdGgsZS5oZWlnaHQsITEpO3IuYmluZChhKSxyLnJlc2V0KCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLE9lKGUpLEx0KCk7Y29uc3Qgbz0oKCk9PntpZihFbi5oYXMoIm0iKSlyZXR1cm4gRW4uZ2V0KCJtIik7Y29uc3QgZT1uZXcgTXQoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcblxub3V0IHZlYzIgdl9jb29yZDtcblxudm9pZCBtYWluKCkge1xuICAgIHZfY29vcmQgPSBhX3ZlcnRleDtcblxuICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleCAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTtcbn0iLCIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWzVdO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgbWF0NCBtdWwgPSBtYXQ0KHVfbWVkaXVtcFswXSwgdV9tZWRpdW1wWzFdLCB1X21lZGl1bXBbMl0sIHVfbWVkaXVtcFszXSk7XG4gICAgdmVjNCBhZGQgPSB1X21lZGl1bXBbNF07XG4gICAgXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkKTtcblxuICAgIGNvbG9yLnJnYiAvPSBtYXgoMC4wMDAxLCBjb2xvci5hKTtcbiAgICBjb2xvciA9IGNsYW1wKGNvbG9yICogbXVsICsgYWRkLCAwLjAsIDEuMCk7XG4gICAgY29sb3IucmdiICo9IGNvbG9yLmE7XG5cbiAgICBvX2NvbG9yID0gY29sb3I7XG59Iik7cmV0dXJuIEVuLnNldCgibSIsZSksZX0pKCk7KChlLHQpPT57Y29uc3Qgbj1lLm1lZGl1bXA7blswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG5bNF09dFs1XSxuWzVdPXRbNl0sbls2XT10WzddLG5bN109dFs4XSxuWzhdPXRbMTBdLG5bOV09dFsxMV0sblsxMF09dFsxMl0sblsxMV09dFsxM10sblsxMl09dFsxNV0sblsxM109dFsxNl0sblsxNF09dFsxN10sblsxNV09dFsxOF0sblsxNl09dFs0XS8yNTUsblsxN109dFs5XS8yNTUsblsxOF09dFsxNF0vMjU1LG5bMTldPXRbMTldLzI1NX0pKG8sdCkscm4obyk7Y29uc3Qgcz1hLnRleHR1cmU7cmV0dXJuIEwoZSksZWUoYSwhMSksbiYmci5iaW5kKG4pLHN9LE9uPShlLHQsbixyLGEsbyk9Pntjb25zdCBzPWU/ImJsdXIuYSA9IDEuMCAtIGJsdXIuYTsiOiIiLGk9bj8oYz1vLGBcbiAgICBmbG9hdCBzdHJlbmd0aCA9IHVfbWVkaXVtcFske01hdGguZmxvb3IoYy80KX1dWyR7YyU0fV07XG4gICAgYmx1ci5hID0gY2xhbXAoYmx1ci5hICogc3RyZW5ndGgsIDAuMCwgMS4wKTtcbmApOiIiO3ZhciBjO2NvbnN0IGw9cj8oZT0+YFxuICAgIGJsdXIgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbJHtlPzI6MX1dLCB2ZWMyKGJsdXIuYSwgMC41KSk7XG5gKSh0KTooZT0+YFxuICAgIHZlYzQgY29sb3IgPSB1X21lZGl1bXBbJHtlfV07XG4gICAgYmx1ciA9IGNvbG9yICogYmx1ci5hO1xuYCkoYSk7cmV0dXJuYFxuICAgICR7c31cbiAgICAke2l9XG4gICAgJHtsfVxuYH0sU249KGUsdCxuLHIsYSxvKT0+e2NvbnN0IHM9dD8iXG4gICAgdmVjMiBwcSA9ICgxLjAgLSB2X2Nvb3JkKSAqIGJsdXJfc2NhbGUgLSBibHVyX29mZnNldDtcbiAgICB2ZWM0IGJsdXIyID0gbWl4KHZlYzQoMC4wKSwgdGV4dHVyZSh1X3RleHR1cmVzWzBdLCBwcSksIGlzSW5zaWRlKHBxKSk7XG4iOiJcbiAgICB2ZWM0IGJsdXIyID0gdGV4dHVyZSh1X3RleHR1cmVzWzBdLCAxLjAgLSB2X2Nvb3JkKTtcbiIsaT1uPyhjPW8sYFxuICAgIGZsb2F0IHN0cmVuZ3RoID0gdV9tZWRpdW1wWyR7TWF0aC5mbG9vcihjLzQpfV1bJHtjJTR9XTtcbiAgICBoaWdobGlnaHRfYWxwaGEgKj0gc3RyZW5ndGg7XG4gICAgc2hhZG93X2FscGhhICAgICo9IHN0cmVuZ3RoO1xuYCk6IiI7dmFyIGM7Y29uc3QgbD1yPyhlPT5gXG4gICAgYmx1ciA9IHRleHR1cmUodV90ZXh0dXJlc1ske2U/MjoxfV0sIHZlYzIoXG4gICAgICAgIDAuNTAxOTYwNzg0MzEzNzI1NSAtIDAuNTAxOTYwNzg0MzEzNzI1NSAqIHNoYWRvd19hbHBoYSArIDAuNDk4MDM5MjE1Njg2Mjc0NSAqIGhpZ2hsaWdodF9hbHBoYSxcbiAgICAgICAgMC41XG4gICAgKSk7XG5gKShlKTooZT0+YFxuICAgIHZlYzQgaGlnaGxpZ2h0X2NvbG9yID0gdV9tZWRpdW1wWyR7ZX1dO1xuICAgIHZlYzQgc2hhZG93X2NvbG9yICAgID0gdV9tZWRpdW1wWyR7ZSsxfV07XG4gICAgYmx1ciA9IGhpZ2hsaWdodF9jb2xvciAqIGhpZ2hsaWdodF9hbHBoYSArIHNoYWRvd19jb2xvciAqIHNoYWRvd19hbHBoYTtcbmApKGEpO3JldHVybmBcbiAgICAke3N9XG4gICAgZmxvYXQgaGlnaGxpZ2h0X2FscGhhID0gYmx1ci5hIC0gYmx1cjIuYTtcbiAgICBmbG9hdCBzaGFkb3dfYWxwaGEgICAgPSBibHVyMi5hIC0gYmx1ci5hO1xuICAgICR7aX1cbiAgICBoaWdobGlnaHRfYWxwaGEgPSBjbGFtcChoaWdobGlnaHRfYWxwaGEsIDAuMCwgMS4wKTtcbiAgICBzaGFkb3dfYWxwaGEgICAgPSBjbGFtcChzaGFkb3dfYWxwaGEsIDAuMCwgMS4wKTtcbiAgICAke2x9XG5gfSxrbj0oZSx0LG4scixhLG8scyk9Pntjb25zdCBpPWBmJHtlPyJ5IjoibiJ9JHt0PyJ5IjoibiJ9JHtuPyJ5IjoibiJ9JHtyfSR7YT8ieSI6Im4ifSR7bz8ieSI6Im4ifWA7aWYoRW4uaGFzKGkpKXJldHVybiBFbi5nZXQoaSk7bGV0IGM9MTtlJiZjKysscyYmYysrO2xldCBsPShlPzQ6MCkrKHQ/NDowKSsobz8xOjApO3N8fChsKz1uPzQ6OCksbD1NYXRoLmNlaWwobC80KTtjb25zdCB1PW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbixyLGEsbyxzLGksYyk9PntsZXQgbD0wO2NvbnN0IHU9bj8oZT0+YFxuICAgIHZlYzIgYmFzZV9zY2FsZSAgPSB1X21lZGl1bXBbJHtlfV0ueHk7XG4gICAgdmVjMiBiYXNlX29mZnNldCA9IHVfbWVkaXVtcFske2V9XS56dztcblxuICAgIHZlYzIgdXYgPSB2X2Nvb3JkICogYmFzZV9zY2FsZSAtIGJhc2Vfb2Zmc2V0O1xuICAgIHZlYzQgYmFzZSA9IG1peCh2ZWM0KDAuMCksIHRleHR1cmUodV90ZXh0dXJlc1sxXSwgdXYpLCBpc0luc2lkZSh1dikpO1xuYCkobCsrKToiIixoPXI/KGU9PmBcbiAgICB2ZWMyIGJsdXJfc2NhbGUgID0gdV9tZWRpdW1wWyR7ZX1dLnh5O1xuICAgIHZlYzIgYmx1cl9vZmZzZXQgPSB1X21lZGl1bXBbJHtlfV0uenc7XG5cbiAgICB2ZWMyIHN0ID0gdl9jb29yZCAqIGJsdXJfc2NhbGUgLSBibHVyX29mZnNldDtcbiAgICB2ZWM0IGJsdXIgPSBtaXgodmVjNCgwLjApLCB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHN0KSwgaXNJbnNpZGUoc3QpKTtcbmApKGwrKyk6IlxuICAgIHZlYzQgYmx1ciA9IHRleHR1cmUodV90ZXh0dXJlc1swXSwgdl9jb29yZCk7XG4iLGI9ImlubmVyIj09PW8sZD1sO2xldCBmLG0sdj00Kmw7c3dpdGNoKGM/Zj1hP09uKCExLG4saSxjLGQsdik6U24obixyLGksYyxkLHYpOmE/KHYrPTQsZj1PbihiLG4saSxjLGQsdikpOih2Kz04LGY9U24obixyLGksYyxkLHYpKSxvKXtjYXNlIm91dGVyIjptPXM/ImJsdXIgLSBibHVyICogYmFzZS5hIjoiYmFzZSArIGJsdXIgLSBibHVyICogYmFzZS5hIjticmVhaztjYXNlImZ1bGwiOm09cz8iYmx1ciI6ImJhc2UgLSBiYXNlICogYmx1ci5hICsgYmx1ciI7YnJlYWs7ZGVmYXVsdDptPSJibHVyIn1yZXR1cm5gI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlc1ske2V9XTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbJHt0fV07XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cblxuZmxvYXQgaXNJbnNpZGUoaW4gdmVjMiB1dikge1xuICAgIHJldHVybiBzdGVwKDQuMCwgZG90KHN0ZXAodmVjNCgwLjAsIHV2LngsIDAuMCwgdXYueSksIHZlYzQodXYueCwgMS4wLCB1di55LCAxLjApKSwgdmVjNCgxLjApKSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgICAke3V9XG4gICAgJHtofVxuICAgICR7Zn1cbiAgICBvX2NvbG9yID0gJHttfTtcbn1gfSkoYyxsLGUsdCxuLHIsYSxvLHMpKTtyZXR1cm4gRW4uc2V0KGksdSksdX0sQ249bmV3IE1hcCxQbj0oZSx0KT0+e2NvbnN0IG49YGwkeygiMDAiK2UpLnNsaWNlKC0zKX0ke3Q/InkiOiJuIn1gO2lmKENuLmhhcyhuKSlyZXR1cm4gQ24uZ2V0KG4pO2NvbnN0IHI9TWF0aC5jZWlsKDUqZS80KSxhPW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbik9PntsZXQgcj0iIjtmb3IobGV0IGU9MTtlPHQ7KytlKXtjb25zdCBuPWUtMSxhPWUsbz1gdV9tZWRpdW1wWyR7dCtNYXRoLmZsb29yKG4vNCl9XVske24lNH1dYCxzPWB1X21lZGl1bXBbJHt0K01hdGguZmxvb3IoYS80KX1dWyR7YSU0fV1gO3IrPWBcbiAgICBpZiAodCA8PSAke3N9KSB7XG4gICAgICAgIHJldHVybiBtaXgodV9tZWRpdW1wWyR7bn1dLCB1X21lZGl1bXBbJHthfV0sICh0IC0gJHtvfSkgLyAoJHtzfSAtICR7b30pKTtcbiAgICB9XG5gfXJldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWyR7ZX1dO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52ZWM0IGdldEdyYWRpZW50Q29sb3IoaW4gZmxvYXQgdCkge1xuICAgIGlmICh0IDw9IHVfbWVkaXVtcFske3R9XVswXSkge1xuICAgICAgICByZXR1cm4gdV9tZWRpdW1wWzBdO1xuICAgIH1cbiAgICAke3J9XG4gICAgcmV0dXJuIHVfbWVkaXVtcFske3QtMX1dO1xufVxuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBjb2xvciA9IGdldEdyYWRpZW50Q29sb3Iodl9jb29yZC54KTtcbiAgICAke24/ImNvbG9yID0gcG93KGNvbG9yLCB2ZWM0KDAuNDU0NTQ1NDUpKTsiOiIifVxuICAgIGNvbG9yLnJnYiAqPSBjb2xvci5hO1xuXG4gICAgb19jb2xvciA9IGNvbG9yO1xufWB9KShyLGUsdCkpO3JldHVybiBDbi5zZXQobixhKSxhfSxCbj0oZSx0LG4scixhLG8pPT57Y29uc3Qgcz1lLm1lZGl1bXA7bGV0IGk9MDtmb3IobGV0IGU9YTtlPG87ZSsrKXtjb25zdCB0PW5bZV07c1tpKytdPSh0Pj4xNikvMjU1LHNbaSsrXT0odD4+OCYyNTUpLzI1NSxzW2krK109KDI1NSZ0KS8yNTUsc1tpKytdPXJbZV19Zm9yKGxldCBlPWE7ZTxvO2UrKylzW2krK109dFtlXS8yNTV9O2xldCBJbjtjb25zdCBMbj0oZSx0KT0+KEluP190WzBdPT09ZSYmX3RbNF09PT10fHwoX3RbMF09ZSxfdFsyXT1lLF90WzRdPXQsX3RbNl09dCxuLmJ1ZmZlclN1YkRhdGEobi5BUlJBWV9CVUZGRVIsMCxfdCkpOkluPSgoZSx0KT0+e2NvbnN0IHI9ZHQoKTtyZXR1cm4gbXQociksbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLHIudmVydGV4QnVmZmVyKSxfdFswXT1lLF90WzJdPWUsX3RbNF09dCxfdFs2XT10LG4uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUixfdCxuLlNUQVRJQ19EUkFXKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSwwLDApLHJ9KShlLHQpLEluKSxVbj0oZSx0LHIpPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLG10KExuKHQscikpLG4uZHJhd0FycmF5cyhuLlRSSUFOR0xFX1NUUklQLDAsNCl9O2xldCBObj1udWxsO2NvbnN0IERuPSgpPT4oTm58fChObj1oZSg1MTIsMSwhMSkpLE5uKTtsZXQgam49MDtjb25zdCBYbj0oKT0+am4sem49bmV3IEZsb2F0MzJBcnJheSgyNTYpLFZuPW5ldyBGbG9hdDMyQXJyYXkoMjU2KTtmb3IobGV0IGU9MDtlPDI1NjsrK2Upe2NvbnN0IHQ9ZS8yNTU7em5bZV09TWF0aC5wb3codCwyLjIzMzMzMzMzKSxWbltlXT10fWNvbnN0IFduPShlLHQsYSxvLHMsaSxjLGwsdSxoLGIsZCxmLG0sdixfLHA9bnVsbCxnPW51bGwseD1udWxsLEU9MCxBPTAseT0wLFQ9MCxSPTAsTT0wLHc9MCxGPTApPT57Y29uc3QgJD1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LE89aGUoYSxvLCExKTtyLmJpbmQoTyk7Y29uc3QgUz0iaW5uZXIiPT09bSxrPW51bGwhPT1wJiZudWxsIT09ZyYmbnVsbCE9PXg7bGV0IEM9bnVsbDtpZihrJiYoQz0oKGUsdCxuKT0+e2NvbnN0IGE9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxvPURuKCk7ci5iaW5kKG8pO2NvbnN0IHM9ZS5sZW5ndGg7Y24oKTtjb25zdCBpPVhuKCk7Zm9yKGxldCByPTA7cjxzO3IrPWktMSl7Y29uc3QgYT1NYXRoLm1pbihyK2kscyksbz1QbihhLXIsITEpO0JuKG8sZSx0LG4scixhKSxVbihvLGVbcl0vMjU1LGVbYS0xXS8yNTUpfXJldHVybiBMdCgpLGEmJnIuYmluZChhKSxvLnRleHR1cmV9KShwLGcseCkpLFMpe3IucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksT2UoZSwhMCk7Y29uc3QgYT10bigpO25uKGEsZS53aWR0aCxlLmhlaWdodCkscm4oYSksayYmQz8oKGUsdCxyPSExKT0+eyRlKDIsbi5URVhUVVJFMix0LHIpLCRlKDEsbi5URVhUVVJFMSxudWxsKSwkZSgwLG4uVEVYVFVSRTAsZSxyKX0pKHQsQywhMCk6T2UodCwhMCl9ZWxzZSBrJiZDPygoZSx0LHIsYT0hMSk9PnskZSgyLG4uVEVYVFVSRTIscixhKSwkZSgxLG4uVEVYVFVSRTEsdCxhKSwkZSgwLG4uVEVYVFVSRTAsZSxhKX0pKHQsZSxDLCEwKTplbih0LGUsITApO2NvbnN0IFA9IShTfHwiZnVsbCI9PT1tJiZ2KSxCPSEoYT09PXUmJm89PT1oJiYwPT09YiYmMD09PWQpLEk9ISgxPT09Xyk7Uz92PzY3MCE9PUl0KCkmJihCdCg2NzApLG4uYmxlbmRGdW5jKG4uRFNUX0FMUEhBLG4uWkVSTykpOjY3MyE9PUl0KCkmJihCdCg2NzMpLG4uYmxlbmRGdW5jKG4uRFNUX0FMUEhBLG4uT05FX01JTlVTX1NSQ19BTFBIQSkpOmNuKCk7Y29uc3QgTD1rbihQLEIsZixtLHYsSSxrKTsoKGUsdCxuLHIsYSxvLHMsaSxjLGwsdSxoLGIsZCxmLG0sdixfLHAsZyx4LEUsQSx5LFQpPT57bGV0IFI7RT8oUj1lLnRleHR1cmVzLFJbMF09MCxSWzFdPTEsVCYmKFJbMl09MikpOlQmJihSPWUudGV4dHVyZXMsUlswXT0wLFJbMV09Mik7Y29uc3QgTT1lLm1lZGl1bXA7bGV0IHc9MDtFJiYoTVt3KytdPXQvcixNW3crK109bi9hLE1bdysrXT1vL3IsTVt3KytdPShuLWEtcykvYSksQSYmKE1bdysrXT10L2ksTVt3KytdPW4vYyxNW3crK109bC9pLE1bdysrXT0obi1jLXUpL2MpLFR8fChoPyhNW3crK109ZCxNW3crK109ZixNW3crK109bSxNW3crK109dik6KE1bdysrXT1kLE1bdysrXT1mLE1bdysrXT1tLE1bdysrXT12LE1bdysrXT1fLE1bdysrXT1wLE1bdysrXT1nLE1bdysrXT14KSkseSYmKE1bd109Yil9KShMLGEsbyxzLGksYyxsLHUsaCxiLGQsZixfLEUsQSx5LFQsUixNLHcsRixQLEIsSSxrKSxybihMKTtjb25zdCBVPU8udGV4dHVyZTtyZXR1cm4gZWUoTywhMSksTHQoKSwkJiZyLmJpbmQoJCksVX0sR249KGUsdCxuPTAsYT0xLG89NCxzPTQsaT0xLGM9MSxsPSExLHU9ITEpPT57Y29uc3QgaD1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LGI9ZS53aWR0aCxkPWUuaGVpZ2h0LGY9eW4ueCxtPXluLnksdj1GbihlLHQsbyxzLGMsITEpLF89di53aWR0aCxwPXYuaGVpZ2h0LGc9eW4ueC1mLHg9eW4ueS1tLEU9V24oZSx2LGw/YjpfLGw/ZDpwLGIsZCxsPzA6ZyxsPzA6eCxfLHAsbD8tZzowLGw/LXg6MCwhMCxsPyJpbm5lciI6Im91dGVyIix1LGksbnVsbCxudWxsLG51bGwsVG4obixhLCEwKSxSbihuLGEsITApLE1uKG4sYSwhMCksYSwwLDAsMCwwKTtyZXR1cm4gTChlKSxMKHYpLGgmJnIuYmluZChoKSxFfSxZbj1NYXRoLlBJLzE4MCxxbj0oZSx0LG49NCxhPTQ1LG89MCxzPTEsaT00LGM9NCxsPTEsdT0xLGg9ITEsYj0hMSxkPSExKT0+e2NvbnN0IGY9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxtPWUud2lkdGgsdj1lLmhlaWdodCxfPXluLngscD15bi55LGc9Rm4oZSx0LGksYyx1LCExKSx4PWcud2lkdGgsRT1nLmhlaWdodCxBPXluLngsVD15bi55LFI9QS1fLE09VC1wLHc9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLEY9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLCQ9eSgpLE89YSpZbixTPU1hdGguY29zKE8pKm4qKHcvJCksaz1NYXRoLnNpbihPKSpuKihGLyQpLEM9aD9tOngrTWF0aC5tYXgoMCxNYXRoLmFicyhTKS1SKSxQPWg/djpFK01hdGgubWF4KDAsTWF0aC5hYnMoayktTSksQj1NYXRoLmNlaWwoQyksST1NYXRoLmNlaWwoUCksVT0oQi1DKS8yLE49KEktUCkvMixEPWg/MDpNYXRoLm1heCgwLFItUykrVSxqPWg/MDpNYXRoLm1heCgwLE0taykrTixYPWg/Uy1BOihTPjA/TWF0aC5tYXgoMCxTLVIpOjApK1Usej1oP2stVDooaz4wP01hdGgubWF4KDAsay1NKTowKStOO2xldCBWLFc9IiI7aD8oVz0iaW5uZXIiLFY9Ynx8ZCk6IWImJmQ/KFc9ImZ1bGwiLFY9ITApOihXPSJvdXRlciIsVj1iKTtjb25zdCBHPVduKGUsZyxCLEksbSx2LEQsaix4LEUsWCx6LCEwLFcsVixsLG51bGwsbnVsbCxudWxsLFRuKG8scywhMCksUm4obyxzLCEwKSxNbihvLHMsITApLHMsMCwwLDAsMCk7cmV0dXJuIEwoZSksTChnKSxmJiZyLmJpbmQoZiksR30sS249TWF0aC5QSS8xODAsSG49KGUsdCxuPTQsYT00NSxvPTE2Nzc3MjE1LHM9MSxpPTAsYz0xLGw9NCx1PTQsaD0xLGI9MSxkPTAsZj0hMSk9Pntjb25zdCBtPWUud2lkdGgsdj1lLmhlaWdodCxfPXluLngscD15bi55LGc9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLHg9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLEU9eSgpLEE9YSpLbixUPU1hdGguY29zKEEpKm4qKGcvRSksUj1NYXRoLnNpbihBKSpuKih4L0UpLE09ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCx3PWhlKG0sdiwhMSk7ci5iaW5kKHcpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksT2UoZSk7Y29uc3QgRj10bigpO25uKEYsZS53aWR0aCxlLmhlaWdodCkscm4oRiksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwyKlQsMipSKSxtbigpLG5uKEYsZS53aWR0aCxlLmhlaWdodCkscm4oRiksTHQoKTtjb25zdCAkPXcudGV4dHVyZTtNJiZyLmJpbmQoTSk7Y29uc3QgTz1GbigkLHQsbCx1LGIsITEpO2VlKHcpO2NvbnN0IFM9Ty53aWR0aCxrPU8uaGVpZ2h0LEM9TWF0aC5jZWlsKFMrMipNYXRoLmFicyhUKSksUD1NYXRoLmNlaWwoaysyKk1hdGguYWJzKFIpKTtsZXQgQj0iIjtzd2l0Y2goZCl7Y2FzZSAwOkI9ImZ1bGwiO2JyZWFrO2Nhc2UgMTpCPSJpbm5lciI7YnJlYWs7Y2FzZSAyOkI9Im91dGVyIn1jb25zdCBJPSJpbm5lciI9PT1CLFU9ST9tOkMsTj1JP3Y6UCxEPU1hdGguYWJzKFQpLGo9TWF0aC5hYnMoUiksWD0oUy1tKS8yLHo9KGstdikvMixWPUk/MDpEK1gsVz1JPzA6ait6LEc9V24oZSxPLFUsTixtLHYsVixXLFMsayxJPy1YLVQ6RC1ULEk/LXotUjpqLVIsITEsQixmLGgsbnVsbCxudWxsLG51bGwsVG4obyxzLCEwKSxSbihvLHMsITApLE1uKG8scywhMCkscyxUbihpLGMsITApLFJuKGksYywhMCksTW4oaSxjLCEwKSxjKTtyZXR1cm4geW4ueD1fK1YseW4ueT1wK1csTChlKSxMKE8pLEd9LFpuPU1hdGguUEkvMTgwLFFuPShlLHQsbj00LGE9NDUsbyxzLGksYz00LGw9NCx1PTEsaD0xLGI9MCxkPSExKT0+e2NvbnN0IGY9ZS53aWR0aCxtPWUuaGVpZ2h0LHY9eW4ueCxfPXluLnkscD1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSksZz1NYXRoLnNxcnQodFsyXSp0WzJdK3RbM10qdFszXSkseD15KCksRT1hKlpuLEE9TWF0aC5jb3MoRSkqbioocC94KSxUPU1hdGguc2luKEUpKm4qKGcveCksUj1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LE09aGUoZixtLCExKTtyLmJpbmQoTSksci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxPZShlKTtjb25zdCB3PXRuKCk7bm4odyxlLndpZHRoLGUuaGVpZ2h0KSxybih3KSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDIqQSwyKlQpLG1uKCksbm4odyxlLndpZHRoLGUuaGVpZ2h0KSxybih3KSxMdCgpO2NvbnN0IEY9TS50ZXh0dXJlO1ImJnIuYmluZChSKTtjb25zdCAkPUZuKEYsdCxjLGwsaCwhMSk7ZWUoTSk7Y29uc3QgTz0kLndpZHRoLFM9JC5oZWlnaHQsaz1NYXRoLmNlaWwoTysyKk1hdGguYWJzKEEpKSxDPU1hdGguY2VpbChTKzIqTWF0aC5hYnMoVCkpO2xldCBQPSIiO3N3aXRjaChiKXtjYXNlIDA6UD0iZnVsbCI7YnJlYWs7Y2FzZSAxOlA9ImlubmVyIjticmVhaztjYXNlIDI6UD0ib3V0ZXIifWNvbnN0IEI9ImlubmVyIj09PVAsST1CP2Y6ayxVPUI/bTpDLE49TWF0aC5hYnMoQSksRD1NYXRoLmFicyhUKSxqPShPLWYpLzIsWD0oUy1tKS8yLHo9Qj8wOk4raixWPUI/MDpEK1gsVz1XbihlLCQsSSxVLGYsbSx6LFYsTyxTLEI/LWotQTpOLUEsQj8tWC1UOkQtVCwhMSxQLGQsdSxpLG8scywwLDAsMCwwLDAsMCwwLDApO3JldHVybiB5bi54PXYreix5bi55PV8rVixMKGUpLEwoJCksV30sSm49TWF0aC5QSS8xODAsZXI9KGUsdCxuPTQscj00NSxhLG8scyxpPTQsYz00LGw9MSx1PTEsaD0wLGI9ITEpPT57Y29uc3QgZD1lLndpZHRoLGY9ZS5oZWlnaHQsbT15bi54LHY9eW4ueSxfPUZuKGUsdCxpLGMsdSwhMSkscD1fLndpZHRoLGc9Xy5oZWlnaHQseD15bi54LEU9eW4ueSxBPXgtbSxUPUUtdixSPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKSxNPU1hdGguc3FydCh0WzJdKnRbMl0rdFszXSp0WzNdKSx3PXkoKSxGPXIqSm4sJD1NYXRoLmNvcyhGKSpuKihSL3cpLE89TWF0aC5zaW4oRikqbiooTS93KSxTPTE9PT1oLGs9Uz9kOnArTWF0aC5tYXgoMCxNYXRoLmFicygkKS1BKSxDPVM/ZjpnK01hdGgubWF4KDAsTWF0aC5hYnMoTyktVCksUD1NYXRoLmNlaWwoayksQj1NYXRoLmNlaWwoQyksST0oUC1rKS8yLFU9KEItQykvMixOPVM/MDpNYXRoLm1heCgwLEEtJCkrSSxEPVM/MDpNYXRoLm1heCgwLFQtTykrVSxqPVM/JC14OigkPjA/TWF0aC5tYXgoMCwkLUEpOjApK0ksWD1TP08tRTooTz4wP01hdGgubWF4KDAsTy1UKTowKStVO2xldCB6PSIiO3N3aXRjaChoKXtjYXNlIDA6ej0iZnVsbCI7YnJlYWs7Y2FzZSAxOno9ImlubmVyIjticmVhaztjYXNlIDI6ej0ib3V0ZXIifWNvbnN0IFY9V24oZSxfLFAsQixkLGYsTixELHAsZyxqLFgsITAseixiLGwscyxhLG8sMCwwLDAsMCwwLDAsMCwwKTtyZXR1cm4geW4ueD1tK04seW4ueT12K0QsTChlKSxMKF8pLFZ9LHRyPShlLHQsbixyKT0+e2NvbnN0IGE9YGMkeygiMCIrZSkuc2xpY2UoLTIpfSR7KCIwIit0KS5zbGljZSgtMil9JHtuPyJ5IjoibiJ9JHtyPyJ5IjoibiJ9YDtpZihFbi5oYXMoYSkpcmV0dXJuIEVuLmdldChhKTtjb25zdCBvPShyPzE6MikrTWF0aC5jZWlsKGUqdC80KSxzPW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbixyLGEpPT57Y29uc3Qgbz1NYXRoLmZsb29yKC41KnQpLHM9TWF0aC5mbG9vciguNSpuKSxpPXQqbjtsZXQgYz0iIjtjb25zdCBsPWE/MToyO2ZvcihsZXQgZT0wO2U8aTsrK2UpYys9YFxuICAgIHJlc3VsdCArPSBnZXRXZWlnaHRlZENvbG9yKCR7ZX0sIHVfbWVkaXVtcFske2wrTWF0aC5mbG9vcihlLzQpfV1bJHtlJTR9XSk7XG5gO3JldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWyR7ZX1dO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG5cbmZsb2F0IGlzSW5zaWRlKGluIHZlYzIgdXYpIHtcbiAgICByZXR1cm4gc3RlcCg0LjAsIGRvdChzdGVwKHZlYzQoMC4wLCB1di54LCAwLjAsIHV2LnkpLCB2ZWM0KHV2LngsIDEuMCwgdXYueSwgMS4wKSksIHZlYzQoMS4wKSkpO1xufVxuXG52ZWM0IGdldFdlaWdodGVkQ29sb3IgKGluIGludCBpLCBpbiBmbG9hdCB3ZWlnaHQpIHtcbiAgICB2ZWMyIHJjcF9zaXplID0gdV9tZWRpdW1wWzBdLnh5O1xuXG4gICAgaW50IGlfZGl2X3ggPSBpIC8gJHt0fTtcbiAgICBpbnQgaV9tb2RfeCA9IGkgLSAke3R9ICogaV9kaXZfeDtcbiAgICB2ZWMyIG9mZnNldCA9IHZlYzIoaV9tb2RfeCAtICR7b30sICR7c30gLSBpX2Rpdl94KTtcbiAgICB2ZWMyIHV2ID0gdl9jb29yZCArIG9mZnNldCAqIHJjcF9zaXplO1xuXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB1dik7XG4gICAgY29sb3IucmdiIC89IG1heCgwLjAwMDEsIGNvbG9yLmEpO1xuICAgICR7YT8iIjoiXG4gICAgdmVjNCBzdWJzdGl0dXRlX2NvbG9yID0gdV9tZWRpdW1wWzFdO1xuICAgIGNvbG9yID0gbWl4KHN1YnN0aXR1dGVfY29sb3IsIGNvbG9yLCBpc0luc2lkZSh1dikpO1xuIn1cblxuICAgIHJldHVybiBjb2xvciAqIHdlaWdodDtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIGZsb2F0IHJjcF9kaXZpc29yID0gdV9tZWRpdW1wWzBdLno7XG4gICAgZmxvYXQgYmlhcyAgICAgICAgPSB1X21lZGl1bXBbMF0udztcblxuICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLjApO1xuICAgICR7Y31cbiAgICByZXN1bHQgPSBjbGFtcChyZXN1bHQgKiByY3BfZGl2aXNvciArIGJpYXMsIDAuMCwgMS4wKTtcbiAgICAke3I/InJlc3VsdC5hID0gdGV4dHVyZSh1X3RleHR1cmUsIHZfY29vcmQpLmE7IjoiIn1cblxuICAgIHJlc3VsdC5yZ2IgKj0gcmVzdWx0LmE7XG4gICAgb19jb2xvciA9IHJlc3VsdDtcbn1gfSkobyxlLHQsbixyKSk7cmV0dXJuIEVuLnNldChhLHMpLHN9LG5yPShlLHQ9MCxuPTAsYSxvPTEscz0wLGk9ITAsYz0hMCxsPTAsdT0wKT0+e2NvbnN0IGg9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxiPWUud2lkdGgsZD1lLmhlaWdodCxmPWhlKGIsZCwhMSk7ci5iaW5kKGYpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksT2UoZSwhMCksTHQoKTtjb25zdCBtPXRyKHQsbixpLGMpOygoZSx0LG4scixhLG8scyxpLGMsbCx1KT0+e2NvbnN0IGg9ZS5tZWRpdW1wO2hbMF09MS90LGhbMV09MS9uLGhbMl09MS9hLGhbM109by8yNTU7bGV0IGI9NDtzfHwoaFtiKytdPWksaFtiKytdPWMsaFtiKytdPWwsaFtiKytdPXUpO2NvbnN0IGQ9ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxkO2UrKyloW2IrK109cltlXX0pKG0sYixkLGEsbyxzLGMsVG4obCx1LCExKSxSbihsLHUsITEpLE1uKGwsdSwhMSksdSkscm4obSk7Y29uc3Qgdj1mLnRleHR1cmU7cmV0dXJuIEwoZSksZWUoZiwhMSksaCYmci5iaW5kKGgpLHZ9LHJyPShlLHQsbixhPTAsbz0wLHM9MCxpPTAsYz0wLGw9MCx1PTAsaD0wLGI9MixkPTAsZj0wKT0+e2NvbnN0IG09ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCx2PXkoKSxfPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKS92LHA9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pL3YsZz1lLndpZHRoLHg9ZS5oZWlnaHQsRT1nL18sQT14L3AsVD1oZShnLHgsITEpO3IuYmluZChUKTtjb25zdCBSPXBuKGEsbyxuKTtlbihlLFIpO2NvbnN0IE09KChlLHQsbik9Pntjb25zdCByPWBkJHtlfSR7dH0ke259YDtpZihFbi5oYXMocikpcmV0dXJuIEVuLmdldChyKTtjb25zdCBhPW5ldyBNdCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbixyKT0+e2xldCBhLG8scztzd2l0Y2godCl7Y2FzZSAxOmE9Im1hcF9jb2xvci5yIjticmVhaztjYXNlIDI6YT0ibWFwX2NvbG9yLmciO2JyZWFrO2Nhc2UgNDphPSJtYXBfY29sb3IuYiI7YnJlYWs7Y2FzZSA4OmE9Im1hcF9jb2xvci5hIjticmVhaztkZWZhdWx0OmE9IjAuNSJ9c3dpdGNoKG4pe2Nhc2UgMTpvPSJtYXBfY29sb3IuciI7YnJlYWs7Y2FzZSAyOm89Im1hcF9jb2xvci5nIjticmVhaztjYXNlIDQ6bz0ibWFwX2NvbG9yLmIiO2JyZWFrO2Nhc2UgODpvPSJtYXBfY29sb3IuYSI7YnJlYWs7ZGVmYXVsdDpvPSIwLjUifXN3aXRjaChyKXtjYXNlIDA6cz0iXG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHV2KTtcbiI7YnJlYWs7Y2FzZSAzOnM9IlxuICAgIHZlYzQgc291cmNlX2NvbG9yID10ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIG1peCh2X2Nvb3JkLCB1diwgc3RlcChhYnModXYgLSB2ZWMyKDAuNSkpLCB2ZWMyKDAuNSkpKSk7XG4iO2JyZWFrO2Nhc2UgMTpzPSJcbiAgICB2ZWM0IHN1YnN0aXR1dGVfY29sb3IgPSB1X21lZGl1bXBbMl07XG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPSBtaXgoc3Vic3RpdHV0ZV9jb2xvciwgdGV4dHVyZSh1X3RleHR1cmVzWzBdLCB1diksIGlzSW5zaWRlKHV2KSk7XG4iO2JyZWFrO2RlZmF1bHQ6cz0iXG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIGZyYWN0KHV2KSk7XG4ifXJldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmVzWzJdO1xudW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFske2V9XTtcblxuaW4gdmVjMiB2X2Nvb3JkO1xub3V0IHZlYzQgb19jb2xvcjtcblxuXG5mbG9hdCBpc0luc2lkZShpbiB2ZWMyIHV2KSB7XG4gICAgcmV0dXJuIHN0ZXAoNC4wLCBkb3Qoc3RlcCh2ZWM0KDAuMCwgdXYueCwgMC4wLCB1di55KSwgdmVjNCh1di54LCAxLjAsIHV2LnksIDEuMCkpLCB2ZWM0KDEuMCkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgdXZfdG9fc3Rfc2NhbGUgID0gdV9tZWRpdW1wWzBdLnh5O1xuICAgIHZlYzIgdXZfdG9fc3Rfb2Zmc2V0ID0gdV9tZWRpdW1wWzBdLnp3O1xuICAgIHZlYzIgc2NhbGUgICAgICAgICAgID0gdV9tZWRpdW1wWzFdLnh5O1xuXG4gICAgdmVjMiBzdCA9IHZfY29vcmQgKiB1dl90b19zdF9zY2FsZSAtIHV2X3RvX3N0X29mZnNldDtcbiAgICB2ZWM0IG1hcF9jb2xvciA9IHRleHR1cmUodV90ZXh0dXJlc1sxXSwgc3QpO1xuXG4gICAgdmVjMiBvZmZzZXQgPSB2ZWMyKCR7YX0sICR7b30pIC0gMC41O1xuICAgIHZlYzIgdXYgPSB2X2Nvb3JkICsgb2Zmc2V0ICogc2NhbGU7XG4gICAgJHtzfVxuXG4gICAgb19jb2xvciA9IG1peCh0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHZfY29vcmQpLCBzb3VyY2VfY29sb3IsIGlzSW5zaWRlKHN0KSk7XG59YH0pKDE9PT1uPzM6MixlLHQsbikpO3JldHVybiBFbi5zZXQocixhKSxhfSkoYyxsLGIpOygoZSx0LG4scixhLG8scyxpLGMsbCx1LGgsYixkKT0+e2NvbnN0IGY9ZS50ZXh0dXJlcztmWzBdPTAsZlsxXT0xO2NvbnN0IG09ZS5tZWRpdW1wO21bMF09ci90LG1bMV09YS9uLG1bMl09by90LG1bM109KGEtbi1zKS9uLG1bNF09aS9yLG1bNV09LWMvYSwxPT09bCYmKG1bOF09dSxtWzldPWgsbVsxMF09YixtWzExXT1kKX0pKE0sZyx4LEUsQSxzLGksdSxoLGIsVG4oZCxmLCEwKSxSbihkLGYsITApLE1uKGQsZiwhMCksZiksTHQoKSxybihNKTtjb25zdCB3PVQudGV4dHVyZTtyZXR1cm4gbSYmci5iaW5kKG0pLEwoZSksTChSKSxlZShULCExKSx3fSxhcj0oZSx0LG4sYSk9Pntjb25zdCBvPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Qscz1lLndpZHRoLGk9ZS5oZWlnaHQ7c3dpdGNoKHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKXtjYXNlIm5vcm1hbCI6Y2FzZSJsYXllciI6Y2FzZSJhZGQiOmNhc2Uic2NyZWVuIjpjYXNlImFscGhhIjpjYXNlImVyYXNlIjpjYXNlImNvcHkiOntyLmJpbmQoci4kbWFpbkF0dGFjaG1lbnRPYmplY3QpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsbixhKTtjb25zdCBvPWhuKCEwKTsoKGUsdCxuLGEpPT57Y29uc3Qgbz1lLmhpZ2hwLHM9ci4kbWF0cml4O29bMF09c1swXSxvWzFdPXNbMV0sb1syXT1zWzNdLG9bM109c1s0XSxvWzRdPXNbNl0sb1s1XT1zWzddLG9bNl09bixvWzddPWEsb1s4XT14KCksb1s5XT1FKCk7Y29uc3QgaT1lLm1lZGl1bXA7aVswXT10WzBdLGlbMV09dFsxXSxpWzJdPXRbMl0saVszXT10WzNdLGlbNF09dFs0XSxpWzVdPXRbNV0saVs2XT10WzZdLGlbN109dFs3XX0pKG8sdCxzLGkpLE9lKGUpLHZuKHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKSxybihvKX1icmVhaztkZWZhdWx0Ontjb25zdCBvPXNuKG4sYSxzLGkpLGM9aGUocyxpLCExKTtyLmJpbmQoYyksZW4obyxlKTtjb25zdCBsPUh0KHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKTt1bihsLHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdLHRbNl0sdFs3XSkscm4obCksci5iaW5kKHIuJG1haW5BdHRhY2htZW50T2JqZWN0KSxyLnJlc2V0KCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSxuLGEpLGxuKGMudGV4dHVyZSksTChvKSxlZShjKX19byYmci5iaW5kKG8pLEx0KCl9LG9yPVtdLHNyPWU9PntlLnNpemUmJmUuY2xlYXIoKSxvci5wdXNoKGUpfSxpcj0oZSx0LG4scixhPW51bGwpPT57dC5oYXMobil8fHQuc2V0KG4sb3IucG9wKCl8fG5ldyBNYXApO2NvbnN0IG89dC5nZXQobik7aWYobnVsbD09PWEpe2lmKCFvLmhhcyhyKSlyZXR1cm47cmV0dXJuIGUuZGVzdHJveShvLmdldChyKSksby5kZWxldGUociksdm9pZChvLnNpemV8fCh0LmRlbGV0ZShuKSxzcihvKSkpfW8uc2V0KHIsYSl9O2NvbnN0IGNyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHBvb2wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiXyRzdG9yZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHRyYXNoIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiR0aW1lcklkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRyZW1vdmVDYWNoZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkcmVtb3ZlSWRzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5fJHBvb2w9W10sdGhpcy5fJHN0b3JlPW5ldyBNYXAsdGhpcy5fJHRyYXNoPW5ldyBNYXAsdGhpcy4kdGltZXJJZD1udWxsLHRoaXMuJHJlbW92ZUlkcz1bXSx0aGlzLiRyZW1vdmVDYWNoZT0hMX1yZXNldCgpeygoZSx0LG4pPT57bi5jbGVhcigpLG51bGwhPT1lLiR0aW1lcklkJiZjbGVhclRpbWVvdXQoZS4kdGltZXJJZCk7Zm9yKGNvbnN0IG4gb2YgdC52YWx1ZXMoKSl7Zm9yKGNvbnN0IHQgb2Ygbi52YWx1ZXMoKSl0JiZlLmRlc3Ryb3kodCk7c3Iobil9dC5jbGVhcigpfSkodGhpcyx0aGlzLl8kc3RvcmUsdGhpcy5fJHRyYXNoKX1kZXN0cm95KGU9bnVsbCl7KChlLHQpPT57aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiY2FudmFzImluIHQpe2NvbnN0IG49dC5jYW52YXMscj1uLndpZHRoLGE9bi5oZWlnaHQ7dC5jbGVhclJlY3QoMCwwLHIrMSxhKzEpLG4ud2lkdGg9bi5oZWlnaHQ9MSxlLnB1c2gobil9fSkodGhpcy5fJHBvb2wsZSl9Z2V0Q2FudmFzKCl7cmV0dXJuIHRoaXMuXyRwb29sLnBvcCgpfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKX1yZW1vdmUoZSx0KXsoKGUsdCxuKT0+e2lmKCFlLmhhcyh0KSlyZXR1cm47Y29uc3Qgcj1lLmdldCh0KTtyLmhhcyhuKSYmKHIuZGVsZXRlKG4pLHIuc2l6ZXx8KHNyKHIpLGUuZGVsZXRlKHQpKSl9KSh0aGlzLl8kc3RvcmUsZSx0KX1yZW1vdmVUaW1lcihlKXsoKGUsdCxuLHIpPT57aWYobi5oYXMocikpcmV0dXJuO2NvbnN0IGE9dC5nZXQocik7YSYmKGEuc2V0KCJ0cmFzaCIsITApLG4uc2V0KHIsYSksbnVsbCE9PWUuJHRpbWVySWQmJmNsZWFyVGltZW91dChlLiR0aW1lcklkKSxlLiRyZW1vdmVDYWNoZT0hMSxlLiR0aW1lcklkPXNldFRpbWVvdXQoKCk9PntlLiRyZW1vdmVDYWNoZT0hMCxlLiR0aW1lcklkPW51bGx9LDFlMykpfSkodGhpcyx0aGlzLl8kc3RvcmUsdGhpcy5fJHRyYXNoLGUpfXJlbW92ZVRpbWVyU2NoZWR1bGVkQ2FjaGUoKXsoKGUsdCk9PntpZih0LnNpemUpe2Zvcihjb25zdFtuLHJdb2YgdClyLmhhcygidHJhc2giKSYmKGUucmVtb3ZlQnlJZChuKSxlLiRyZW1vdmVJZHMucHVzaCgrbikpO3QuY2xlYXIoKSxlLiRyZW1vdmVDYWNoZT0hMX19KSh0aGlzLHRoaXMuXyR0cmFzaCl9cmVtb3ZlQnlJZChlKXsoKGUsdCxuKT0+e2lmKCF0LmhhcyhuKSlyZXR1cm47Y29uc3Qgcj10LmdldChuKTtmb3IoY29uc3QgdCBvZiByLnZhbHVlcygpKWUuZGVzdHJveSh0KTt0LmRlbGV0ZShuKSxzcihyKX0pKHRoaXMsdGhpcy5fJHN0b3JlLGUpfWdldEJ5SWQoZSl7cmV0dXJuIHRoaXMuXyRzdG9yZS5nZXQoZSl9Z2V0KGUsdCl7cmV0dXJuKChlLHQsbik9Pntjb25zdCByPWUuZ2V0KHQpfHxudWxsO3JldHVybiByPyhyLmRlbGV0ZSgidHJhc2giKSxyLmdldChuKXx8bnVsbCk6bnVsbH0pKHRoaXMuXyRzdG9yZSxlLHQpfXNldChlLHQsbj1udWxsKXtpcih0aGlzLHRoaXMuXyRzdG9yZSxlLHQsbil9aGFzKGUsdD0iIil7cmV0dXJuKChlLHQsbj0iIik9Pm4/ISFlLmhhcyh0KSYmZS5nZXQodCkuaGFzKG4pOmUuaGFzKHQpKSh0aGlzLl8kc3RvcmUsZSx0KX1nZW5lcmF0ZUtleXMoZSx0LG4pe3JldHVybigoZSx0LG4pPT57Y29uc3Qgcj1bMTAwKmUsMTAwKnRdO24mJnIucHVzaCgxMDAqbik7bGV0IGE9MjE2NjEzNjI2MTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoOysrZSl7bGV0IHQ9MHxyW2VdO2ZvcihsZXQgZT0wO2U8NDtlKyspYV49MjU1JnQsYT1NYXRoLmltdWwoYSwxNjc3NzYxOSksdD4+Pj04fXJldHVybihhPj4+MCklMTY3NzcyMTZ9KShlLHQsbil9Z2VuZXJhdGVGaWx0ZXJLZXlzKGUsdCxuLHIpe3JldHVybigoZSx0LG4scik9PmAke2V9JHt0fSR7bn0ke3J9YCkoZSx0LG4scil9fSxscj0oZSx0LG4sYSxvLHMsaSxjLGwsdSxoKT0+e2NvbnN0IGI9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtsZXQgZD1udWxsO2NvbnN0IGY9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLF89TWF0aC5zcXJ0KGlbMl0qaVsyXStpWzNdKmlbM10pLHA9Y3IuZ2VuZXJhdGVGaWx0ZXJLZXlzKGlbMF0saVsxXSxpWzJdLGlbM10pO2xldCBnPSExO2lmKGNyLmdldCh0LCJmS2V5Iik9PT1wKXtjb25zdCBlPWNyLmdldCh0LCJmVGV4dHVyZSIpO24/TChlKTooZz0hMCxkPWUpfWxldCB4PTAsRT0wO2lmKGcpeD1jci5nZXQodCwib2Zmc2V0WCIpLEU9Y3IuZ2V0KHQsIm9mZnNldFkiKTtlbHNle2Q9SnQoZSk7Y29uc3QgdD1NYXRoLmF0YW4yKGlbMV0saVswXSksbj1NYXRoLmF0YW4yKC1pWzJdLGlbM10pLGM9cz9mKk1hdGguY29zKHQpOk1hdGguY29zKHQpLGw9cz9mKk1hdGguc2luKHQpOk1hdGguc2luKHQpLHU9cz8tXypNYXRoLnNpbihuKTotTWF0aC5zaW4obikscD1zP18qTWF0aC5jb3Mobik6TWF0aC5jb3MobiksZz1tKGMsbCx1LHAsYS8yLG8vMiksQT1tKDEsMCwwLDEsLWUudy8yLC1lLmgvMikseT0oKGUsdCk9Pntjb25zdCBuPWVbMF0scj1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGk9ZVs1XSxjPXRbMF0sbD10WzFdLHU9dFsyXSxoPXRbM10sYj10WzRdLGQ9dFs1XTtyZXR1cm4gbShuKmMrYSpsLHIqYytvKmwsbip1K2EqaCxyKnUrbypoLG4qYithKmQrcyxyKmIrbypkK2kpfSkoZyxBKTtpZih2KGcpLHYoQSksMSE9PXlbMF18fDAhPT15WzFdfHwwIT09eVsyXXx8MSE9PXlbM10pe2NvbnN0IGU9aGUoYSxvLCExKTtyLmJpbmQoZSksci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKHlbMF0seVsxXSx5WzJdLHlbM10seVs0XSx5WzVdKSx4PXlbNF0sRT15WzVdLE9lKGQpO2NvbnN0IHQ9aG4oKTtibih0LGQud2lkdGgsZC5oZWlnaHQpLHJuKHQpLEwoZCksZD1lLnRleHR1cmUsZWUoZSwhMSksYiYmci5iaW5kKGIpfXYoeSkseW4ueD0wLHluLnk9MDtmb3IobGV0IGU9MDtoLmxlbmd0aD5lOyl7c3dpdGNoKGhbZSsrXSl7Y2FzZSAwOmQ9SG4oZCxpLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pKTticmVhaztjYXNlIDE6ZD1GbihkLGksaFtlKytdLGhbZSsrXSxoW2UrK10pO2JyZWFrO2Nhc2UgMjpkPSRuKGQsbmV3IEZsb2F0MzJBcnJheShbaFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXV0pKTticmVhaztjYXNlIDM6e2NvbnN0IHQ9aFtlKytdLG49aFtlKytdLHI9dCpuLGE9aC5zdWJhcnJheShlLGUrcik7ZSs9cixkPW5yKGQsdCxuLGEsaFtlKytdLGhbZSsrXSxCb29sZWFuKGhbZSsrXSksQm9vbGVhbihoW2UrK10pLGhbZSsrXSxoW2UrK10pfWJyZWFrO2Nhc2UgNDp7Y29uc3QgdD1oW2UrK10sbj1uZXcgVWludDhBcnJheSh0KTtuLnNldChoLnN1YmFycmF5KGUsZSt0KSksZSs9dCxkPXJyKGQsaSxuLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10pfWJyZWFrO2Nhc2UgNTpkPXFuKGQsaSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLEJvb2xlYW4oaFtlKytdKSxCb29sZWFuKGhbZSsrXSksQm9vbGVhbihoW2UrK10pKTticmVhaztjYXNlIDY6ZD1HbihkLGksaFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pLEJvb2xlYW4oaFtlKytdKSk7YnJlYWs7Y2FzZSA3Ontjb25zdCB0PWhbZSsrXSxuPWhbZSsrXTtsZXQgcj1oW2UrK107Y29uc3QgYT1oLnN1YmFycmF5KGUsZStyKTtlKz1yLHI9aFtlKytdO2NvbnN0IG89aC5zdWJhcnJheShlLGUrcik7ZSs9cixyPWhbZSsrXTtjb25zdCBzPWguc3ViYXJyYXkoZSxlK3IpO2UrPXIsZD1RbihkLGksdCxuLGEsbyxzLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pKX1icmVhaztjYXNlIDg6e2NvbnN0IHQ9aFtlKytdLG49aFtlKytdO2xldCByPWhbZSsrXTtjb25zdCBhPWguc3ViYXJyYXkoZSxlK3IpO2UrPXIscj1oW2UrK107Y29uc3Qgbz1oLnN1YmFycmF5KGUsZStyKTtlKz1yLHI9aFtlKytdO2NvbnN0IHM9aC5zdWJhcnJheShlLGUrcik7ZSs9cixkPWVyKGQsaSx0LG4sYSxvLHMsaFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxCb29sZWFuKGhbZSsrXSkpfX19fWlmKGQpe2NvbnN0IGU9eSgpLHQ9dVswXSooZi9lKSxuPXVbMV0qKF8vZSk7ci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1sLGFyKGQsYywteCt0K2lbNF0sLUUrbitpWzVdKX1nfHwoY3Iuc2V0KHQsImZLZXkiLHApLGNyLnNldCh0LCJmVGV4dHVyZSIsZCksY3Iuc2V0KHQsIm9mZnNldFgiLHgpLGNyLnNldCh0LCJvZmZzZXRZIixFKSksYiYmci5iaW5kKGIpfSx1cj0oZSx0LHIsYSk9PntuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uRlJPTlQsbi5LRUVQLG4uS0VFUCxuLklOQ1JfV1JBUCksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkJBQ0ssbi5LRUVQLG4uS0VFUCxuLkRFQ1JfV1JBUCksbi5jb2xvck1hc2soITEsITEsITEsITEpO2NvbnN0IG89ISFhLHM9JHQobyk7YSYmT3QocyxhKSxuLmVuYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksVXQocyxlLHQsciksbi5kaXNhYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLnN0ZW5jaWxGdW5jKG4uTk9URVFVQUwsMCwyNTUpLG4uc3RlbmNpbE9wKG4uS0VFUCxuLlpFUk8sbi5aRVJPKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCk7Y29uc3QgaT0oZT0+e2NvbnN0IHQ9InMiKyhlPyJ5IjoibiIpO2lmKHd0Lmhhcyh0KSlyZXR1cm4gd3QuZ2V0KHQpO2NvbnN0IG49bmV3IE10KEZ0KGU/OTowLCExLCExLGUpLCIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG5pbiB2ZWM0IHZfY29sb3I7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgb19jb2xvciA9IHZlYzQodl9jb2xvci5yZ2IgKiB2X2NvbG9yLmEsIHZfY29sb3IuYSk7XG59Iik7cmV0dXJuIHd0LnNldCh0LG4pLG59KShvKTthJiYoKGUsdCk9Pntjb25zdCBuPWUuaGlnaHA7blswXT10WzBdLG5bMV09dFsxXSxuWzJdPTAsbls0XT10WzJdLG5bNV09dFszXSxuWzZdPTAsbls4XT10WzRdLG5bOV09dFs1XSxuWzEwXT0xLG5bMTJdPXRbNl0sblsxM109dFs3XSxuWzE0XT0wLG5bMTZdPXRbOF0sblsxN109dFs5XSxuWzE4XT0wLG5bMjBdPXRbMTBdLG5bMjFdPXRbMTFdLG5bMjJdPTEsblszXT14KCksbls3XT1FKCksblsxMV09dFsxMl0sblsxNV09dFsxM10sblsxOV09dFsxNF0sblsyM109dFsxNV0sblsyNF09dFsxNl0sblsyNV09dFsxN10sblsyNl09dFsxOF0sblsyN109dFsxOV0sblsyOF09dFsyMF0sblsyOV09dFsyMV0sblszMF09dFsyMl0sblszMV09dFsyM10sblszMl09dFsyNF0sblszM109dFsyNV19KShpLGEpLFV0KGksZSx0LHIpfSxocj0oZSx0LG4scixhKT0+e2NvbnN0IG89ZS5tZWRpdW1wO2xldCBzPTA7Zm9yKGxldCBlPW47ZTxyOysrZSl7Y29uc3Qgbj01KmU7b1tzKytdPWFbdFtuKzFdXSxvW3MrK109YVt0W24rMl1dLG9bcysrXT1hW3RbbiszXV0sb1tzKytdPWFbdFtuKzRdXX1mb3IobGV0IGU9bjtlPHI7KytlKW9bcysrXT10WzUqZV19LGJyPShlLHQpPT57Y29uc3QgYT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LG89bi5nZXRQYXJhbWV0ZXIobi5TQ0lTU09SX0JPWCk7bi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKTtjb25zdCBzPURuKCk7ci5iaW5kKHMpO2NvbnN0IGk9MD09PXQsYz1lLmxlbmd0aC81LGw9aT96bjpWbjtjbigpO2NvbnN0IHU9WG4oKTtmb3IobGV0IHQ9MDt0PGM7dCs9dS0xKXtjb25zdCBuPU1hdGgubWluKHQrdSxjKSxyPVBuKG4tdCxpKTtocihyLGUsdCxuLGwpLFVuKHIsZVswXSxlW2UubGVuZ3RoLTVdKX1yZXR1cm4gTHQoKSxhJiZyLmJpbmQoYSksTmUob1swXSxvWzFdLG9bMl0sb1szXSkscy50ZXh0dXJlfSxkcj1uZXcgTWFwLGZyPShlLHQsbixyKT0+e2NvbnN0IGE9KChlLHQsbixyKT0+YCR7ZT8ieSI6Im4ifSR7dD8ieSI6Im4ifSR7dCYmbj8ieSI6Im4ifSR7cn1gKShyLGUsdCxuKTtpZihkci5oYXMoYSkpcmV0dXJuIGRyLmdldChhKTtjb25zdCBvPTErKHI/MTQ6NSkscz1vLTEsaT1uZXcgTXQoRnQobywhMCwhMSxyKSwoKGUsdCxuLHIsYSk9Pntjb25zdCBvPW4/KChlLHQpPT57Y29uc3Qgbj10PyhlPT5gXG4gICAgdmVjMiBmb2NhbCA9IHZlYzIodV9oaWdocFske2V9XVsxXSwgMC4wKTtcblxuICAgIHZlYzIgZGlyID0gbm9ybWFsaXplKGNvb3JkIC0gZm9jYWwpO1xuXG4gICAgZmxvYXQgYSA9IGRvdChkaXIsIGRpcik7XG4gICAgZmxvYXQgYiA9IDIuMCAqIGRvdChkaXIsIGZvY2FsKTtcbiAgICBmbG9hdCBjID0gZG90KGZvY2FsLCBmb2NhbCkgLSAxLjA7XG4gICAgZmxvYXQgeCA9ICgtYiArIHNxcnQoYiAqIGIgLSA0LjAgKiBhICogYykpIC8gKDIuMCAqIGEpO1xuXG4gICAgZmxvYXQgdCA9IGRpc3RhbmNlKGZvY2FsLCBjb29yZCkgLyBkaXN0YW5jZShmb2NhbCwgZm9jYWwgKyBkaXIgKiB4KTtgKShlKToiZmxvYXQgdCA9IGxlbmd0aChjb29yZCk7IjtyZXR1cm5gXG4gICAgZmxvYXQgcmFkaXVzID0gdV9oaWdocFske2V9XVswXTtcbiAgICB2ZWMyIGNvb3JkID0gcCAvIHJhZGl1cztcbiAgICAke259XG5gfSkodCxyKTooZT0+YFxuICAgIHZlYzIgYSA9IHVfaGlnaHBbJHtlfV0ueHk7XG4gICAgdmVjMiBiID0gdV9oaWdocFske2V9XS56dztcblxuICAgIHZlYzIgYWIgPSBiIC0gYTtcbiAgICB2ZWMyIGFwID0gcCAtIGE7XG5cbiAgICBmbG9hdCB0ID0gZG90KGFiLCBhcCkgLyBkb3QoYWIsIGFiKTtgKSh0KTtsZXQgcztzd2l0Y2goYSl7Y2FzZSAwOnM9IjEuMCAtIGFicyhmcmFjdCh0ICogMC41KSAqIDIuMCAtIDEuMCkiO2JyZWFrO2Nhc2UgMTpzPSJmcmFjdCh0KSI7YnJlYWs7ZGVmYXVsdDpzPSJjbGFtcCh0LCAwLjAsIDEuMCkifXJldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xudW5pZm9ybSB2ZWM0IHVfaGlnaHBbJHtlfV07XG4gICAgXG5pbiB2ZWMyIHZfdXY7XG5vdXQgdmVjNCBvX2NvbG9yO1xuICAgIFxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgcCA9IHZfdXY7XG4gICAgJHtvfVxuICAgIHQgPSAke3N9O1xuICAgIG9fY29sb3IgPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdmVjMih0LCAwLjUpKTtcbn1gfSkobyxzLGUsdCxuKSk7cmV0dXJuIGRyLnNldChhLGkpLGl9LG1yPShlLHQsbixyLG89MCxzPW51bGwsaT1udWxsKT0+e2NvbnN0IGM9ZS5oaWdocDtjWzBdPW5bMF0sY1sxXT1uWzFdLGNbMl09blsyXSxjWzRdPW5bM10sY1s1XT1uWzRdLGNbNl09bls1XSxjWzhdPW5bNl0sY1s5XT1uWzddLGNbMTBdPW5bOF0sY1sxMl09clswXSxjWzEzXT1yWzFdLGNbMTRdPXJbMl0sY1sxNl09clszXSxjWzE3XT1yWzRdLGNbMThdPXJbNV0sY1sxMV09cls2XSxjWzE1XT1yWzddLGNbMTldPXJbOF0sY1szXT14KCksY1s3XT1FKCk7bGV0IGw9MjA7aSYmKGNbMjBdPWlbMF0sY1syMV09aVsxXSxjWzIyXT0wLGNbMjRdPWlbMl0sY1syNV09aVszXSxjWzI2XT0wLGNbMjhdPWlbNF0sY1syOV09aVs1XSxjWzMwXT0xLGNbMzJdPWlbNl0sY1szM109aVs3XSxjWzM0XT0wLGNbMzZdPWlbOF0sY1szN109aVs5XSxjWzM4XT0wLGNbNDBdPWlbMTBdLGNbNDFdPWlbMTFdLGNbNDJdPTEsY1szMV09aVsxMl0sY1szNV09aVsxM10sY1szOV09aVsxNF0sY1s0M109aVsxNV0sY1s0NF09aVsxNl0sY1s0NV09aVsxN10sY1s0Nl09aVsxOF0sY1s0N109aVsxOV0sY1s0OF09aVsyMF0sY1s0OV09aVsyMV0sY1s1MF09aVsyMl0sY1s1MV09aVsyM10sY1s1Ml09aVsyNF0sY1s1M109aVsyNV0sbD01NiksMD09PXQ/KGNbbCsrXT1zWzBdLGNbbCsrXT1zWzFdLGNbbCsrXT1zWzJdLGNbbF09c1szXSk6KGNbbCsrXT04MTkuMixjW2xdPWEobywtLjk3NSwuOTc1LDApKX0sdnI9KGUsdCxhLG8pPT57Y29uc3Qgcz1xZS5zaGlmdCgpLGk9cWUuc2hpZnQoKSxjPXFlLnNoaWZ0KCksbD1xZS5zaGlmdCgpO24uZGlzYWJsZShuLlNURU5DSUxfVEVTVCk7Y29uc3QgYj1icihzLGwpO09lKGIpLG4uZW5hYmxlKG4uU1RFTkNJTF9URVNUKSxuLmZyb250RmFjZShuLkNDVyksbi5zdGVuY2lsTWFzaygyNTUpLG4uc3RlbmNpbEZ1bmMobi5BTFdBWVMsMCwyNTUpLG4uc3RlbmNpbE9wU2VwYXJhdGUobi5GUk9OVCxuLktFRVAsbi5LRUVQLG4uSU5DUl9XUkFQKSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uQkFDSyxuLktFRVAsbi5LRUVQLG4uREVDUl9XUkFQKSxuLmNvbG9yTWFzayghMSwhMSwhMSwhMSk7Y29uc3QgZD0hIW8sZj0kdChkKTtvJiZPdChmLG8pLG4uZW5hYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxVdChmLGUsdCxhKSxuLmRpc2FibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpLG4uc3RlbmNpbEZ1bmMobi5OT1RFUVVBTCwwLDI1NSksbi5zdGVuY2lsT3Aobi5LRUVQLG4uWkVSTyxuLlpFUk8pLG4uY29sb3JNYXNrKCEwLCEwLCEwLCEwKTtjb25zdCBtPWZyKCExLCExLGMsZCkscD0oZT0+e2NvbnN0IHQ9LTgxOS4yKmVbMF0tODE5LjIqZVsyXStlWzRdLG49ODE5LjIqZVswXS04MTkuMiplWzJdK2VbNF0scj0tODE5LjIqZVswXSs4MTkuMiplWzJdK2VbNF0sYT0tODE5LjIqZVsxXS04MTkuMiplWzNdK2VbNV0sbz04MTkuMiplWzFdLTgxOS4yKmVbM10rZVs1XTtsZXQgcz1yLXQsaT0tODE5LjIqZVsxXSs4MTkuMiplWzNdK2VbNV0tYTtjb25zdCBjPU1hdGguc3FydChzKnMraSppKTtjPyhzLz1jLGkvPWMpOihzPTAsaT0wKTtjb25zdCBsPShuLXQpKnMrKG8tYSkqaTtyZXR1cm4gdSh0K2wqcyxhK2wqaSxuLG8pfSkoaSksZz1fKHIuJG1hdHJpeCk7bXIobSwwLHIuJG1hdHJpeCxnLDAscCxvKSxoKHApLHYoZyksVXQobSxlLHQsYSl9LF9yPShlLHQsYSxvKT0+e2NvbnN0IHM9cWUuc2hpZnQoKSxpPXFlLnNoaWZ0KCksYz1xZS5zaGlmdCgpLGw9cWUuc2hpZnQoKSx1PXFlLnNoaWZ0KCk7bi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKTtjb25zdCBoPWJyKHMsbCk7T2UoaCksbi5lbmFibGUobi5TVEVOQ0lMX1RFU1QpLG4uZnJvbnRGYWNlKG4uQ0NXKSxuLnN0ZW5jaWxNYXNrKDI1NSksbi5zdGVuY2lsRnVuYyhuLkFMV0FZUywwLDI1NSksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkZST05ULG4uS0VFUCxuLktFRVAsbi5JTkNSX1dSQVApLG4uc3RlbmNpbE9wU2VwYXJhdGUobi5CQUNLLG4uS0VFUCxuLktFRVAsbi5ERUNSX1dSQVApLG4uY29sb3JNYXNrKCExLCExLCExLCExKTtjb25zdCBiPSEhbyxkPSR0KGIpO28mJk90KGQsbyksbi5lbmFibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpLFV0KGQsZSx0LGEpLG4uZGlzYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksbi5zdGVuY2lsRnVuYyhuLk5PVEVRVUFMLDAsMjU1KSxuLnN0ZW5jaWxPcChuLktFRVAsbi5aRVJPLG4uWkVSTyksbi5jb2xvck1hc2soITAsITAsITAsITApLHIuc2F2ZSgpLHIudHJhbnNmb3JtKGlbMF0saVsxXSxpWzJdLGlbM10saVs0XSxpWzVdKTtjb25zdCBmPXIuJHN0YWNrW3IuJHN0YWNrLmxlbmd0aC0xXSxtPV8oci4kbWF0cml4KSxwPWZyKCEwLEJvb2xlYW4odSksYyxiKTttcihwLDEsZixtLHUsbyksci5yZXN0b3JlKCksdihtKSxVdChwLGUsdCxhKX0scHI9bmV3IE1hcCxncj0oZSx0LGEsbyk9PntuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uRlJPTlQsbi5LRUVQLG4uS0VFUCxuLklOQ1JfV1JBUCksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkJBQ0ssbi5LRUVQLG4uS0VFUCxuLkRFQ1JfV1JBUCksbi5jb2xvck1hc2soITEsITEsITEsITEpO2NvbnN0IHM9ISFvLGk9JHQocyk7byYmT3QoaSxvKSxuLmVuYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksVXQoaSxlLHQsYSksbi5kaXNhYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKTtjb25zdCBjPXhuLnNoaWZ0KCksbD14bi5zaGlmdCgpLHU9eG4uc2hpZnQoKSxoPXhuLnNoaWZ0KCksYj14bi5zaGlmdCgpLGQ9eG4uc2hpZnQoKSxmPXBuKHUsaCxjLGQpO3Iuc2F2ZSgpLHIudHJhbnNmb3JtKGxbMF0sbFsxXSxsWzJdLGxbM10sbFs0XSxsWzVdKSxuLnN0ZW5jaWxGdW5jKG4uTk9URVFVQUwsMCwyNTUpLG4uc3RlbmNpbE9wKG4uS0VFUCxuLlpFUk8sbi5aRVJPKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCk7Y29uc3QgbT0oKGUsdCk9Pntjb25zdCBuPWBiJHtlPyJ5IjoibiJ9JHt0PyJ5IjoibiJ9YDtpZihwci5oYXMobikpcmV0dXJuIHByLmdldChuKTtjb25zdCByPWU/IiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbMV07XG5cbmluIHZlYzIgdl91djtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIHV2ID0gZnJhY3QodmVjMih2X3V2LngsIC12X3V2LnkpIC8gdV9tZWRpdW1wWzBdLnh5KTtcbiAgICBcbiAgICB2ZWM0IHNyYyA9IHRleHR1cmUodV90ZXh0dXJlLCB1dik7XG4gICAgb19jb2xvciA9IHNyYztcbn0iOiIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWzFdO1xuXG5pbiB2ZWMyIHZfdXY7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiB1diA9IHZlYzIodl91di54LCB1X21lZGl1bXBbMF0ueSAtIHZfdXYueSkgLyB1X21lZGl1bXBbMF0ueHk7XG5cbiAgICB2ZWM0IHNyYyA9IHRleHR1cmUodV90ZXh0dXJlLCB1dik7XG4gICAgb19jb2xvciA9IHNyYztcbn0iLGE9bmV3IE10KEZ0KHQ/MTQ6NSwhMCwhMSx0KSxyKTtyZXR1cm4gcHIuc2V0KG4sYSksYX0pKGIscyk7KChlLHQsbixhKT0+e2NvbnN0IG89ZS5oaWdocCxzPXIuJHN0YWNrW3IuJHN0YWNrLmxlbmd0aC0xXTtvWzBdPXNbMF0sb1sxXT1zWzFdLG9bMl09c1syXSxvWzRdPXNbM10sb1s1XT1zWzRdLG9bNl09c1s1XSxvWzhdPXNbNl0sb1s5XT1zWzddLG9bMTBdPXNbOF07Y29uc3QgaT1fKHIuJG1hdHJpeCk7b1sxMl09aVswXSxvWzEzXT1pWzFdLG9bMTRdPWlbMl0sb1sxNl09aVszXSxvWzE3XT1pWzRdLG9bMThdPWlbNV0sb1sxMV09aVs2XSxvWzE1XT1pWzddLG9bMTldPWlbOF0sb1szXT14KCksb1s3XT1FKCksYSYmKG9bMjBdPWFbMF0sb1syMV09YVsxXSxvWzIyXT0wLG9bMjRdPWFbMl0sb1syNV09YVszXSxvWzI2XT0wLG9bMjhdPWFbNF0sb1syOV09YVs1XSxvWzMwXT0xLG9bMzJdPWFbNl0sb1szM109YVs3XSxvWzM0XT0wLG9bMzZdPWFbOF0sb1szN109YVs5XSxvWzM4XT0wLG9bNDBdPWFbMTBdLG9bNDFdPWFbMTFdLG9bNDJdPTEsb1szMV09YVsxMl0sb1szNV09YVsxM10sb1szOV09YVsxNF0sb1s0M109YVsxNV0sb1s0NF09YVsxNl0sb1s0NV09YVsxN10sb1s0Nl09YVsxOF0sb1s0N109YVsxOV0sb1s0OF09YVsyMF0sb1s0OV09YVsyMV0sb1s1MF09YVsyMl0sb1s1MV09YVsyM10sb1s1Ml09YVsyNF0sb1s1M109YVsyNV0pO2NvbnN0IGM9ZS5tZWRpdW1wO2NbMF09dCxjWzFdPW59KShtLHUsaCxvKSxVdChtLGUsdCxhKSxyLnJlc3RvcmUoKSxMKGYpfTtsZXQgeHI9MDtjb25zdCBFcj1uZXcgRmxvYXQzMkFycmF5KDI1Nik7Zm9yKGxldCBlPTE7ZTwyNTY7ZSsrKUVyW2VdPTI1NS9lO2NvbnN0IEFyPWFzeW5jKGUsdCk9Pntjb25zdCBhPW9uKDAsMCxlLHQpO09lKGEpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsWiksbi5mcmFtZWJ1ZmZlclRleHR1cmUyRChuLkZSQU1FQlVGRkVSLG4uQ09MT1JfQVRUQUNITUVOVDAsbi5URVhUVVJFXzJELGEucmVzb3VyY2UsMCk7Y29uc3Qgbz1uZXcgVWludDhBcnJheShlKnQqNCkscz1yLiRtYWluQXR0YWNobWVudE9iamVjdDtvLmJ5dGVMZW5ndGg+eHImJih4cj1jKG8uYnl0ZUxlbmd0aCksbi5idWZmZXJEYXRhKG4uUElYRUxfUEFDS19CVUZGRVIseHIsbi5TVFJFQU1fUkVBRCkpLG4ucmVhZFBpeGVscygwLHMuaGVpZ2h0LXQsZSx0LG4uUkdCQSxuLlVOU0lHTkVEX0JZVEUsMCk7Y29uc3QgaT1uLmZlbmNlU3luYyhuLlNZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFLDApO2F3YWl0IG5ldyBQcm9taXNlKGU9Pntjb25zdCB0PSgpPT57aWYobi5jbGllbnRXYWl0U3luYyhpLG4uU1lOQ19GTFVTSF9DT01NQU5EU19CSVQsMCkhPT1uLlRJTUVPVVRfRVhQSVJFRClyZXR1cm4gbi5kZWxldGVTeW5jKGkpLG4uZ2V0QnVmZmVyU3ViRGF0YShuLlBJWEVMX1BBQ0tfQlVGRkVSLDAsbyksZSgpO3JlcXVlc3RBbmltYXRpb25GcmFtZSh0KX07dCgpfSksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixEKTtmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrPTQpe2NvbnN0IHQ9b1tlKzNdO2lmKDA9PT10fHwyNTU9PT10KWNvbnRpbnVlO2NvbnN0IG49RXJbdF07b1tlXT1NYXRoLm1pbigyNTUsTWF0aC5yb3VuZChvW2VdKm4pKSxvW2UrMV09TWF0aC5taW4oMjU1LE1hdGgucm91bmQob1tlKzFdKm4pKSxvW2UrMl09TWF0aC5taW4oMjU1LE1hdGgucm91bmQob1tlKzJdKm4pKX1yZXR1cm4gYXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAobmV3IEltYWdlRGF0YShuZXcgVWludDhDbGFtcGVkQXJyYXkobyksZSx0KSx7aW1hZ2VPcmllbnRhdGlvbjoiZmxpcFkiLHByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pfTtjbGFzcyB5cntjb25zdHJ1Y3RvcihhLG8saT0xKXt2YXIgYztPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJHN0YWNrIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRtYXRyaXgiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJGNsZWFyQ29sb3JSIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRjbGVhckNvbG9yRyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkY2xlYXJDb2xvckIiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJGNsZWFyQ29sb3JBIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRtYWluQXR0YWNobWVudE9iamVjdCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkc3RhY2tBdHRhY2htZW50T2JqZWN0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImdsb2JhbEFscGhhIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJGZpbGxTdHlsZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkc3Ryb2tlU3R5bGUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWFza0JvdW5kcyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ0aGlja25lc3MiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY2FwcyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJqb2ludHMiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWl0ZXJMaW1pdCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLChlPT57bj1lfSkoYSksYz1hLmdldFBhcmFtZXRlcihhLk1BWF9URVhUVVJFX1NJWkUpLGU9TWF0aC5taW4oNDA5NixjLzIpLChlPT57dD1lfSkobyksKGU9PntBPWV9KShpKSx0aGlzLiRzdGFjaz1zKCksdGhpcy4kc3RhY2tBdHRhY2htZW50T2JqZWN0PXMoKSx0aGlzLiRtYXRyaXg9ZCgxLDAsMCwwLDEsMCwwLDAsMSksdGhpcy4kY2xlYXJDb2xvclI9MCx0aGlzLiRjbGVhckNvbG9yRz0wLHRoaXMuJGNsZWFyQ29sb3JCPTAsdGhpcy4kY2xlYXJDb2xvckE9MCx0aGlzLnRoaWNrbmVzcz0xLHRoaXMuY2Fwcz0xLHRoaXMuam9pbnRzPTIsdGhpcy5taXRlckxpbWl0PTAsdGhpcy4kbWFpbkF0dGFjaG1lbnRPYmplY3Q9bnVsbCx0aGlzLmdsb2JhbEFscGhhPTEsdGhpcy5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Im5vcm1hbCIsdGhpcy5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy4kZmlsbFN0eWxlPW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxLDFdKSx0aGlzLiRzdHJva2VTdHlsZT1uZXcgRmxvYXQzMkFycmF5KFsxLDEsMSwxXSksdGhpcy5tYXNrQm91bmRzPXt4TWluOjAseU1pbjowLHhNYXg6MCx5TWF4OjB9LGEucGl4ZWxTdG9yZWkoYS5VTlBBQ0tfQUxJR05NRU5ULDEpLGEucGl4ZWxTdG9yZWkoYS5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCEwKSwoZT0+e0Q9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpfSkoYSksKGU9PntqPWUuY3JlYXRlRnJhbWVidWZmZXIoKX0pKGEpLCgoZSx0KT0+e1g9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpLGUuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsWCksZS5mcmFtZWJ1ZmZlclRleHR1cmUyRChlLkZSQU1FQlVGRkVSLGUuQ09MT1JfQVRUQUNITUVOVDAsZS5URVhUVVJFXzJELHQucmVzb3VyY2UsMCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcihlLkRSQVdfRlJBTUVCVUZGRVIsWCl9KShhLGdlKCkpLChlPT57SD1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksSz1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksWj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksUT1lLmNyZWF0ZUJ1ZmZlcigpLGUuYmluZEJ1ZmZlcihlLlBJWEVMX1BBQ0tfQlVGRkVSLFEpfSkoYSksX24oYSksbi5lbmFibGUobi5CTEVORCksTHQoKSwoZT0+e2puPU1hdGguZmxvb3IoLjc1KmUuZ2V0UGFyYW1ldGVyKGUuTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUykpfSkoYSkscj10aGlzfWNsZWFyVHJhbnNmZXJCb3VuZHMoKXsoKCk9Pntmb3IobGV0IGU9MDtlPHhlLmxlbmd0aDsrK2Upe2NvbnN0IHQ9eGVbZV07dCYmKHRbMF09dFsxXT1OdW1iZXIuTUFYX1ZBTFVFLHRbMl09dFszXT0tTnVtYmVyLk1BWF9WQUxVRSl9Zm9yKGxldCBlPTA7ZTxBZS5sZW5ndGg7KytlKXtjb25zdCB0PUFlW2VdO3QmJih0WzBdPXRbMV09TnVtYmVyLk1BWF9WQUxVRSx0WzJdPXRbM109LU51bWJlci5NQVhfVkFMVUUpfX0pKCl9dXBkYXRlQmFja2dyb3VuZENvbG9yKGUsdCxuLHIpeygoZSx0LG4scixvKT0+e2UuJGNsZWFyQ29sb3JSPWEodCwwLDEsMCksZS4kY2xlYXJDb2xvckc9YShuLDAsMSwwKSxlLiRjbGVhckNvbG9yQj1hKHIsMCwxLDApLGUuJGNsZWFyQ29sb3JBPWEobywwLDEsMCl9KSh0aGlzLGUsdCxuLHIpfWZpbGxCYWNrZ3JvdW5kQ29sb3IoKXt2YXIgZSx0LHIsYTtlPXRoaXMuJGNsZWFyQ29sb3JSLHQ9dGhpcy4kY2xlYXJDb2xvckcscj10aGlzLiRjbGVhckNvbG9yQixhPXRoaXMuJGNsZWFyQ29sb3JBLG4uY2xlYXJDb2xvcihlLHQscixhKSxuLmNsZWFyKG4uQ09MT1JfQlVGRkVSX0JJVHxuLlNURU5DSUxfQlVGRkVSX0JJVCksbi5jbGVhckNvbG9yKDAsMCwwLDApfXJlc2l6ZShlLHQsbj0hMCl7RmUodGhpcyxlLHQsbil9Y2xlYXJSZWN0KGUsdCxyLGEpeygoZSx0LHIsYSk9PntuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGUsdCxyLGEpLG4uY2xlYXIobi5DT0xPUl9CVUZGRVJfQklUfG4uU1RFTkNJTF9CVUZGRVJfQklUKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpfSkoZSx0LHIsYSl9YmluZChlKXtMZSh0aGlzLGUpfXNhdmUoKXt2YXIgZTsoZT10aGlzKS4kc3RhY2sucHVzaChkKC4uLmUuJG1hdHJpeCkpfXJlc3RvcmUoKXtVZSh0aGlzKX1zZXRUcmFuc2Zvcm0oZSx0LG4scixhLG8peygoZSx0LG4scixhLG8scyk9PntlWzBdPXQsZVsxXT1uLGVbM109cixlWzRdPWEsZVs2XT1vLGVbN109c30pKHRoaXMuJG1hdHJpeCxlLHQsbixyLGEsbyl9dHJhbnNmb3JtKGUsdCxuLHIsYSxvKXsoKGUsdCxuLHIsYSxvLHMpPT57Y29uc3QgaT1lLiRtYXRyaXhbMF0sYz1lLiRtYXRyaXhbMV0sbD1lLiRtYXRyaXhbM10sdT1lLiRtYXRyaXhbNF0saD1lLiRtYXRyaXhbNl0sYj1lLiRtYXRyaXhbN107ZS4kbWF0cml4WzBdPXQqaStuKmwsZS4kbWF0cml4WzFdPXQqYytuKnUsZS4kbWF0cml4WzNdPXIqaSthKmwsZS4kbWF0cml4WzRdPXIqYythKnUsZS4kbWF0cml4WzZdPW8qaStzKmwraCxlLiRtYXRyaXhbN109bypjK3MqdStifSkodGhpcyxlLHQsbixyLGEsbyl9cmVzZXQoKXt2YXIgZTsoZT10aGlzKS5nbG9iYWxBbHBoYT0xLGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJub3JtYWwiLGUuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExfWJlZ2luUGF0aCgpe3ZhciBlOyhlPXRoaXMpLiRmaWxsU3R5bGUuZmlsbCgxKSxlLiRzdHJva2VTdHlsZS5maWxsKDEpLCgoKT0+e2ZvcihULmxlbmd0aD0wO1IubGVuZ3RoOylpKFIucG9wKCkpfSkoKX1tb3ZlVG8oZSx0KXskKGUsdCl9bGluZVRvKGUsdCl7KChlLHQpPT57VC5sZW5ndGh8fCQoZSx0KSxGKGUsdCl8fHcoZSx0LCExKX0pKGUsdCl9cXVhZHJhdGljQ3VydmVUbyhlLHQsbixyKXtPKGUsdCxuLHIpfWZpbGxTdHlsZShlLHQsbixyKXt0aGlzLiRmaWxsU3R5bGVbMF09ZSx0aGlzLiRmaWxsU3R5bGVbMV09dCx0aGlzLiRmaWxsU3R5bGVbMl09bix0aGlzLiRmaWxsU3R5bGVbM109cn1zdHJva2VTdHlsZShlLHQsbixyKXt0aGlzLiRzdHJva2VTdHlsZVswXT1lLHRoaXMuJHN0cm9rZVN0eWxlWzFdPXQsdGhpcy4kc3Ryb2tlU3R5bGVbMl09bix0aGlzLiRzdHJva2VTdHlsZVszXT1yfWNsb3NlUGF0aCgpeygoKT0+e2lmKFQubGVuZ3RoPDcpcmV0dXJuO2NvbnN0IGU9K1RbMF0sdD0rVFsxXTtGKGUsdCl8fHcoZSx0LCExKX0pKCl9YXJjKGUsdCxuKXsoKGUsdCxuKT0+e2NvbnN0IHI9bixhPS41NTIyODQ3NDk4MzA3OTM2Km47UChlK3IsdCthLGUrYSx0K3IsZSx0K3IpLFAoZS1hLHQrcixlLXIsdCthLGUtcix0KSxQKGUtcix0LWEsZS1hLHQtcixlLHQtciksUChlK2EsdC1yLGUrcix0LWEsZStyLHQpfSkoZSx0LG4pfWJlemllckN1cnZlVG8oZSx0LG4scixhLG8pe1AoZSx0LG4scixhLG8pfWZpbGwoKXsoZT0+e2NvbnN0IHQ9TSgpO2lmKCF0Lmxlbmd0aClyZXR1cm47R2UucHVzaChlKTtjb25zdCBuPWplKHQpO1ZlKG4uYnVmZmVyKSxXZS5wdXNoKG4uaW5kZXhDb3VudCl9KSgiZmlsbCIpfWdyYWRpZW50RmlsbChlLHQsbixyLGEsbyl7KChlLHQsbixyLGEsbyk9Pntjb25zdCBzPU0oKTtpZighcy5sZW5ndGgpcmV0dXJuO0dlLnB1c2goMD09PWU/ImxpbmVhciI6InJhZGlhbCIpO2NvbnN0IGk9amUocyk7VmUoaS5idWZmZXIpLFdlLnB1c2goaS5pbmRleENvdW50KSxxZS5wdXNoKHQsbixyLGEpLDE9PT1lJiZxZS5wdXNoKG8pfSkoZSx0LG4scixhLG8pfWJpdG1hcEZpbGwoZSx0LG4scixhLG8peygoZSx0LG4scixhLG8pPT57Y29uc3Qgcz1NKCk7aWYoIXMubGVuZ3RoKXJldHVybjtHZS5wdXNoKCJiaXRtYXAiKTtjb25zdCBpPWplKHMpO1ZlKGkuYnVmZmVyKSxXZS5wdXNoKGkuaW5kZXhDb3VudCkseG4ucHVzaChlLHQsbixyLGEsbyl9KShlLHQsbixyLGEsbyl9c3Ryb2tlKCl7KCgpPT57Y29uc3QgZT1NKCEwKTtpZighZS5sZW5ndGgpcmV0dXJuO0dlLnB1c2goImZpbGwiKTtjb25zdCB0PXV0KGUpO1ZlKHQuYnVmZmVyKSxXZS5wdXNoKHQuaW5kZXhDb3VudCl9KSgpfWdyYWRpZW50U3Ryb2tlKGUsdCxuLHIsYSxvKXsoKGUsdCxuLHIsYSxvKT0+e2NvbnN0IHM9TSgpO2lmKCFzLmxlbmd0aClyZXR1cm47R2UucHVzaCgwPT09ZT8ibGluZWFyIjoicmFkaWFsIik7Y29uc3QgaT11dChzKTtWZShpLmJ1ZmZlciksV2UucHVzaChpLmluZGV4Q291bnQpLHFlLnB1c2godCxuLHIsYSksMT09PWUmJnFlLnB1c2gobyl9KShlLHQsbixyLGEsbyl9Yml0bWFwU3Ryb2tlKGUsdCxuLHIsYSxvKXsoKGUsdCxuLHIsYSxvKT0+e2NvbnN0IHM9TSghMCk7aWYoIXMubGVuZ3RoKXJldHVybjtHZS5wdXNoKCJiaXRtYXAiKTtjb25zdCBpPXV0KHMpO1ZlKGkuYnVmZmVyKSxXZS5wdXNoKGkuaW5kZXhDb3VudCkseG4ucHVzaChlLHQsbixyLGEsbyl9KShlLHQsbixyLGEsbyl9Y2xpcCgpeygoKT0+e2NvbnN0IGU9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtpZighZSlyZXR1cm47Y29uc3QgdD1CZS5nZXQoZS5jbGlwTGV2ZWwpLGE9dFswXSxvPXRbMV0scz10WzJdLGk9dFszXSxjPU1hdGguY2VpbChNYXRoLmFicyhzLWEpKSxsPU1hdGguY2VpbChNYXRoLmFicyhpLW8pKTtuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGEsZS5oZWlnaHQtby1sLGMsbCk7Y29uc3QgdT1BdCgpO2xldCBoPUllLmdldChlLmNsaXBMZXZlbCksYj0wLGQ9bnVsbDtjb25zdCBmPVdlLmxlbmd0aDtmb3IobGV0IHQ9MDt0PGY7dCsrKXtuLnN0ZW5jaWxNYXNrKDE8PGgtMSk7Y29uc3Qgcj1XZVt0XTtodC5oYXModCkmJihkPWh0LmdldCh0KSk7Y29uc3QgYT0kdCghIWQpO2QmJk90KGEsZCksVXQoYSx1LGIsciksYis9ciwrK2gsaD43JiYoRHQoKSxoPWUuY2xpcExldmVsKzEpfUllLnNldChlLmNsaXBMZXZlbCxoKSx5dCh1KSxZZSgpLGJ0KCksbi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKX0pKCl9Z2V0IGN1cnJlbnRBdHRhY2htZW50T2JqZWN0KCl7cmV0dXJuIFcoKX1nZXQgYXRsYXNBdHRhY2htZW50T2JqZWN0KCl7cmV0dXJuIHZlKCl9Y3JlYXRlTm9kZShlLHQpe3JldHVybiB6dChlLHQpfXJlbW92ZU5vZGUoZSl7KGU9Pntjb25zdCB0PV9lW2UuaW5kZXhdO3QmJnQuZGlzcG9zZShlLngsZS55LGUudyxlLmgpfSkoZSl9YmVnaW5Ob2RlUmVuZGVyaW5nKGUpeyhlPT57Y29uc3QgdD1FZShlLmluZGV4KSxuPXRbMF0scj10WzFdLGE9dFsyXSxvPXRbM107dFswXT1NYXRoLm1pbihlLngsbiksdFsxXT1NYXRoLm1pbihlLnksciksdFsyXT1NYXRoLm1heChlLngrZS53LGEpLHRbM109TWF0aC5tYXgoZS55K2UuaCxvKX0pKGUpLE5lKGUueCxlLnksZS53LGUuaCl9ZW5kTm9kZVJlbmRlcmluZygpe24uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCl9ZHJhd0ZpbGwoKXsoKCk9Pntjb25zdCBlPUF0KCk7bi5lbmFibGUobi5TVEVOQ0lMX1RFU1QpLG4uZnJvbnRGYWNlKG4uQ0NXKSxuLnN0ZW5jaWxNYXNrKDI1NSk7bGV0IHQ9MCxyPW51bGw7Zm9yKGxldCBuPTA7bjxHZS5sZW5ndGg7bisrKXN3aXRjaChodC5oYXMobikmJihyPWh0LmdldChuKSksR2Vbbl0pe2Nhc2UiZmlsbCI6e2NvbnN0IG49V2Uuc2hpZnQoKTt1cihlLHQsbixyKSx0Kz1ufWJyZWFrO2Nhc2UibGluZWFyIjp7Y29uc3Qgbj1XZS5zaGlmdCgpO3ZyKGUsdCxuLHIpLHQrPW59YnJlYWs7Y2FzZSJyYWRpYWwiOntjb25zdCBuPVdlLnNoaWZ0KCk7X3IoZSx0LG4sciksdCs9bn1icmVhaztjYXNlImJpdG1hcCI6e2NvbnN0IG49V2Uuc2hpZnQoKTtncihlLHQsbixyKSx0Kz1ufX1uLmRpc2FibGUobi5TVEVOQ0lMX1RFU1QpLHl0KGUpLFllKCksYnQoKX0pKCl9ZHJhd0Rpc3BsYXlPYmplY3QodCxuLGEsbyxzLGkpeyhlPT57Y29uc3QgdD15ZShlLmluZGV4KSxuPXRbMF0scj10WzFdLGE9dFsyXSxvPXRbM107dFswXT1NYXRoLm1pbihlLngsbiksdFsxXT1NYXRoLm1pbihlLnksciksdFsyXT1NYXRoLm1heChlLngrZS53LGEpLHRbM109TWF0aC5tYXgoZS55K2UuaCxvKX0pKHQpLCgodCxuLGEsbyxzLGkpPT57Y29uc3QgYz1pWzBdLGw9aVsxXSx1PWlbMl0saD1yLmdsb2JhbEFscGhhLGI9aVs0XS8yNTUsZD1pWzVdLzI1NSxmPWlbNl0vMjU1LHY9ci4kbWF0cml4O3N3aXRjaChyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbil7Y2FzZSJub3JtYWwiOmNhc2UibGF5ZXIiOmNhc2UiYWRkIjpjYXNlInNjcmVlbiI6Y2FzZSJhbHBoYSI6Y2FzZSJlcmFzZSI6Y2FzZSJjb3B5Ijp7aWYoQ3QoKSE9PXIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9ufHxNZSgpIT09dC5pbmRleCl7ZGUoTWUoKSk7Y29uc3QgZT1yLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1DdCgpLHIuZHJhd0FycmF5c0luc3RhbmNlZCgpLHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWUsa3Qoci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pLFJlKHQuaW5kZXgpLGRlKHQuaW5kZXgpfWNvbnN0IG49S3QoKTtHdC5wdXNoKHQueC9lLHQueS9lLHQudy9lLHQuaC9lLHQudyx0LmgseCgpLEUoKSx2WzZdLHZbN10sdlswXSx2WzFdLHZbM10sdls0XSxjLGwsdSxoLGIsZCxmLDApLG4uY291bnQrK31icmVhaztkZWZhdWx0Ontjb25zdCBlPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7ci5kcmF3QXJyYXlzSW5zdGFuY2VkKCk7Y29uc3QgaT1NYXRoLmNlaWwoTWF0aC5hYnMoby1uKSksXz1NYXRoLmNlaWwoTWF0aC5hYnMocy1hKSk7bGV0IHA9MCxnPTAseD1KdCh0KTtpZigxIT09dlswXXx8MCE9PXZbMV18fDAhPT12WzNdfHwxIT09dls0XSl7Y29uc3Qgbj1oZShpLF8sITEpLGE9bSh2WzBdLHZbMV0sdlszXSx2WzRdLGkvMixfLzIpLG89bSgxLDAsMCwxLC10LncvMiwtdC5oLzIpLHM9bShhWzBdKm9bMF0rYVsyXSpvWzFdLGFbMV0qb1swXSthWzNdKm9bMV0sYVswXSpvWzJdK2FbMl0qb1szXSxhWzFdKm9bMl0rYVszXSpvWzNdLGFbMF0qb1s0XSthWzJdKm9bNV0rYVs0XSxhWzFdKm9bNF0rYVszXSpvWzVdK2FbNV0pO3Iuc2F2ZSgpLHIuYmluZChuKSxyLnNldFRyYW5zZm9ybShzWzBdLHNbMV0sc1syXSxzWzNdLHNbNF0sc1s1XSkscD1zWzRdLGc9c1s1XTtjb25zdCBjPWhuKCk7Ym4oYyx4LndpZHRoLHguaGVpZ2h0KSxPZSh4LCEwKSxybihjKSxMKHgpLHg9bi50ZXh0dXJlLGVlKG4sITEpLGUmJnIuYmluZChlKSxyLnJlc3RvcmUoKX0ocHx8ZykmJih2WzZdLT1wLHZbN10tPWcpO2NvbnN0IEU9c24odls2XSx2WzddLGksXyksQT1oZShpLF8sITEpO3IuYmluZChBKSxlbihFLHgpO2NvbnN0IHk9SHQoci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pO3VuKHksYyxsLHUsaCxiLGQsZiwwKSxybih5KSxlJiZyLmJpbmQoZSksbG4oQS50ZXh0dXJlKSwocHx8ZykmJih2WzZdKz1wLHZbN10rPWcpLEwoeCksTChFKSxlZShBKSxrdChyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiksUmUodC5pbmRleCksZGUodC5pbmRleCl9fX0pKHQsbixhLG8scyxpKX1kcmF3QXJyYXlzSW5zdGFuY2VkKCl7KCgpPT57Y29uc3QgZT1LdCgpO2UuY291bnQmJihRdCgpLHZuKHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKSxmbihlKSxlLmNsZWFyKCkpfSkoKX1jbGVhckFycmF5c0luc3RhbmNlZCgpe0t0KCkuY2xlYXIoKX10cmFuc2Zlck1haW5DYW52YXMoKXsoKCk9Pntjb25zdCBlPXIuJG1haW5BdHRhY2htZW50T2JqZWN0O3IuYmluZChlKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLlJFQURfRlJBTUVCVUZGRVIsRCksbi5iaW5kRnJhbWVidWZmZXIobi5EUkFXX0ZSQU1FQlVGRkVSLG51bGwpO2NvbnN0IHQ9ZS53aWR0aCxhPWUuaGVpZ2h0O24uYmxpdEZyYW1lYnVmZmVyKDAsMCx0LGEsMCwwLHQsYSxuLkNPTE9SX0JVRkZFUl9CSVQsbi5ORUFSRVNUKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkRSQVdfRlJBTUVCVUZGRVIsaiksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixEKX0pKCl9ZHJhd1BpeGVscyhlLHQpeygoZSx0KT0+e2NvbnN0IG49cG4oZS53LGUuaCx0KSxyPXRuKCk7bm4ocixlLncsZS5oKSxMdCgpLHJuKHIpLEwobil9KShlLHQpfWRyYXdFbGVtZW50KGUsdCl7Z24oZSx0KX1iZWdpbk1hc2soKXsoKCk9Pntjb25zdCBlPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7ZSYmKGUubWFzaz0hMCxlLmNsaXBMZXZlbCsrLEllLnNldChlLmNsaXBMZXZlbCxlLmNsaXBMZXZlbCksUGUoKXx8KENlKCEwKSxuLmVuYWJsZShuLlNURU5DSUxfVEVTVCksbi5lbmFibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpLG4uc3RlbmNpbEZ1bmMobi5BTFdBWVMsMCwyNTUpLG4uc3RlbmNpbE9wKG4uWkVSTyxuLklOVkVSVCxuLklOVkVSVCksbi5jb2xvck1hc2soITEsITEsITEsITEpKSl9KSgpfXNldE1hc2tCb3VuZHMoZSx0LGEsbyl7KChlLHQsYSxvKT0+e2NvbnN0IHM9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtpZighcylyZXR1cm47QmUuc2V0KHMuY2xpcExldmVsLHUoZSx0LGEsbykpO2NvbnN0IGk9TWF0aC5jZWlsKE1hdGguYWJzKGEtZSkpLGM9TWF0aC5jZWlsKE1hdGguYWJzKG8tdCkpO24uZW5hYmxlKG4uU0NJU1NPUl9URVNUKSxuLnNjaXNzb3IoZSxzLmhlaWdodC10LWMsaSxjKX0pKGUsdCxhLG8pfWVuZE1hc2soKXtTZSgpfWxlYXZlTWFzaygpe3RoaXMuZHJhd0FycmF5c0luc3RhbmNlZCgpLCgoKT0+e2NvbnN0IGU9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtpZighZSlyZXR1cm47Y29uc3QgdD1lLmNsaXBMZXZlbCxhPUJlLmdldCh0KSxvPWFbMF0scz1hWzFdLGk9YVsyXSxjPWFbM107QmUuZGVsZXRlKHQpLEllLmRlbGV0ZSh0KSxoKGEpO2NvbnN0IGw9TWF0aC5jZWlsKE1hdGguYWJzKGktbykpLHU9TWF0aC5jZWlsKE1hdGguYWJzKGMtcykpO2lmKG4uZW5hYmxlKG4uU0NJU1NPUl9URVNUKSxuLnNjaXNzb3IobyxlLmhlaWdodC1zLXUsbCx1KSwtLWUuY2xpcExldmVsLCFlLmNsaXBMZXZlbClyZXR1cm4gZS5tYXNrPSExLENlKCExKSxuLmNsZWFyKG4uU1RFTkNJTF9CVUZGRVJfQklUKSxuLmRpc2FibGUobi5TVEVOQ0lMX1RFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCksSWUuY2xlYXIoKSx2b2lkIEJlLmNsZWFyKCk7bi5zdGVuY2lsTWFzaygxPDxlLmNsaXBMZXZlbCksbi5zdGVuY2lsRnVuYyhuLkFMV0FZUywwLDI1NSksbi5zdGVuY2lsT3Aobi5SRVBMQUNFLG4uUkVQTEFDRSxuLlJFUExBQ0UpLG4uY29sb3JNYXNrKCExLCExLCExLCExKSxVdChOdCgpLEV0KCksMCw2KSxTZSgpfSkoKX11c2VHcmlkKGUpeyhlPT57aHQuc2V0KFdlLmxlbmd0aCxlKX0pKGUpfWFwcGx5RmlsdGVyKGUsdCxuLHIsYSxvLHMsaSxjLGwsdSl7dGhpcy5kcmF3QXJyYXlzSW5zdGFuY2VkKCksbHIoZSx0LG4scixhLG8scyxpLGMsbCx1KX1hc3luYyBjcmVhdGVJbWFnZUJpdG1hcChlLHQpe3JldHVybiBhd2FpdCBBcihlLHQpfX1sZXQgVHI7bGV0IFJyO2xldCBNcj0wO2xldCB3cj0wO2xldCBGcj0hMTtjb25zdCAkcj1bXSxPcj0oLi4uZSk9Pntjb25zdCB0PSRyLnBvcCgpfHxbXTtyZXR1cm4gZS5sZW5ndGgmJnQucHVzaCguLi5lKSx0fSxTcj0oZSx0PTEpPT4oe1I6KDE2NzExNjgwJmUpPj4xNixHOig2NTI4MCZlKT4+OCxCOjI1NSZlLEE6MjU1KnR9KSxrcj0oZSx0KT0+eyhlPT57UnI9ZX0pKGUpO2NvbnN0IG49ZS5nZXRDb250ZXh0KCJ3ZWJnbDIiLHtzdGVuY2lsOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITEsZGVwdGg6ITF9KTtpZighbil0aHJvdyBuZXcgRXJyb3IoIndlYmdsMiBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciByO3I9bmV3IHlyKG4sNCx0KSxUcj1yfSxDcj0oZSx0LG49ITApPT57TXI9PT1lJiZ3cj09PXR8fChGcj0hMCxNcj1lLHdyPXQsVHIucmVzaXplKGUsdCxuKSxuJiZjci5yZXNldCgpKX0sUHI9KGUsdD0hMSk9PntsZXQgbj0wO2Zvcig7ZS5sZW5ndGg+bjspc3dpdGNoKGVbbisrXSl7Y2FzZSA5OlRyLmJlZ2luUGF0aCgpO2JyZWFrO2Nhc2UgMDpUci5tb3ZlVG8oZVtuKytdLGVbbisrXSk7YnJlYWs7Y2FzZSAyOlRyLmxpbmVUbyhlW24rK10sZVtuKytdKTticmVhaztjYXNlIDE6VHIucXVhZHJhdGljQ3VydmVUbyhlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10pO2JyZWFrO2Nhc2UgNTppZih0KXtuKz00O2JyZWFrfVRyLmZpbGxTdHlsZShlW24rK10vMjU1LGVbbisrXS8yNTUsZVtuKytdLzI1NSxlW24rK10vMjU1KTticmVhaztjYXNlIDc6VHIuZmlsbCgpO2JyZWFrO2Nhc2UgNjppZih0KXtuKz04O2JyZWFrfVRyLnRoaWNrbmVzcz1lW24rK10sVHIuY2Fwcz1lW24rK10sVHIuam9pbnRzPWVbbisrXSxUci5taXRlckxpbWl0PWVbbisrXSxUci5zdHJva2VTdHlsZShlW24rK10vMjU1LGVbbisrXS8yNTUsZVtuKytdLzI1NSxlW24rK10vMjU1KTticmVhaztjYXNlIDg6aWYodClicmVhaztUci5zdHJva2UoKTticmVhaztjYXNlIDEyOlRyLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgNDpUci5hcmMoZVtuKytdLGVbbisrXSxlW24rK10pO2JyZWFrO2Nhc2UgMzpUci5iZXppZXJDdXJ2ZVRvKGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdKTticmVhaztjYXNlIDEwOntpZih0KXtuKz0xO2NvbnN0IHQ9ZVtuKytdO24rPTUqdCxuKz05LFRyLmZpbGwoKTticmVha31jb25zdCByPWVbbisrXSxhPU9yKCksbz1lW24rK107Zm9yKGxldCB0PTA7dDxvOysrdClhLnB1c2goZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSk7Y29uc3Qgcz1uZXcgRmxvYXQzMkFycmF5KFtlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXV0pLGk9ZVtuKytdLGM9ZVtuKytdLGw9ZVtuKytdO1RyLmdyYWRpZW50RmlsbChyLGEscyxpLGMsbCl9YnJlYWs7Y2FzZSAxMzp7aWYodCl7bis9Mjtjb25zdCB0PWVbbisrXTtuKz10LG4rPTgsVHIuZmlsbCgpO2JyZWFrfWNvbnN0IHI9ZVtuKytdLGE9ZVtuKytdLG89ZVtuKytdLHM9bmV3IFVpbnQ4QXJyYXkoZS5zdWJhcnJheShuLG4rbykpO24rPW87Y29uc3QgaT1uZXcgRmxvYXQzMkFycmF5KFtlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXV0pO1RyLmJpdG1hcEZpbGwocyxpLHIsYSxCb29sZWFuKGVbbisrXSksQm9vbGVhbihlW24rK10pKX1icmVhaztjYXNlIDExOntpZih0KXtuKz0yMCxUci5maWxsKCk7YnJlYWt9VHIudGhpY2tuZXNzPWVbbisrXSxUci5jYXBzPWVbbisrXSxUci5qb2ludHM9ZVtuKytdLFRyLm1pdGVyTGltaXQ9ZVtuKytdO2NvbnN0IHI9ZVtuKytdLGE9T3IoKSxvPWVbbisrXTtmb3IobGV0IHQ9MDt0PG87Kyt0KWEucHVzaChlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdKTtjb25zdCBzPW5ldyBGbG9hdDMyQXJyYXkoW2VbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdXSksaT1lW24rK10sYz1lW24rK10sbD1lW24rK107VHIuZ3JhZGllbnRTdHJva2UocixhLHMsaSxjLGwpfWJyZWFrO2Nhc2UgMTQ6e2lmKHQpe24rPTY7Y29uc3QgdD1lW24rK107bis9dCxuKz04LFRyLmZpbGwoKTticmVha31Uci50aGlja25lc3M9ZVtuKytdLFRyLmNhcHM9ZVtuKytdLFRyLmpvaW50cz1lW24rK10sVHIubWl0ZXJMaW1pdD1lW24rK107Y29uc3Qgcj1lW24rK10sYT1lW24rK10sbz1lW24rK10scz1uZXcgVWludDhBcnJheShlLnN1YmFycmF5KG4sbitvKSk7bis9bztjb25zdCBpPW5ldyBGbG9hdDMyQXJyYXkoW2VbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdXSk7VHIuYml0bWFwU3Ryb2tlKHMsaSxyLGEsQm9vbGVhbihlW24rK10pLEJvb2xlYW4oZVtuKytdKSl9fX0sQnI9ZT0+e3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuImNvcHkiO2Nhc2UgMTpyZXR1cm4iYWRkIjtjYXNlIDI6cmV0dXJuImFscGhhIjtjYXNlIDM6cmV0dXJuImRhcmtlbiI7Y2FzZSA0OnJldHVybiJkaWZmZXJlbmNlIjtjYXNlIDU6cmV0dXJuImVyYXNlIjtjYXNlIDY6cmV0dXJuImhhcmRsaWdodCI7Y2FzZSA3OnJldHVybiJpbnZlcnQiO2Nhc2UgODpyZXR1cm4ibGF5ZXIiO2Nhc2UgOTpyZXR1cm4ibGlnaHRlbiI7Y2FzZSAxMDpyZXR1cm4ibXVsdGlwbHkiO2Nhc2UgMTE6ZGVmYXVsdDpyZXR1cm4ibm9ybWFsIjtjYXNlIDEyOnJldHVybiJvdmVybGF5IjtjYXNlIDEzOnJldHVybiJzY3JlZW4iO2Nhc2UgMTQ6cmV0dXJuInN1YnRyYWN0In19LElyPShlLHQpPT57Y29uc3Qgbj1lLnN1YmFycmF5KHQsdCs2KTt0Kz02O2NvbnN0IHI9ZS5zdWJhcnJheSh0LHQrOCk7dCs9ODtjb25zdCBhPWUuc3ViYXJyYXkodCx0KzQpO3QrPTQ7Y29uc3Qgbz1lW3QrK10scz1lW3QrK10saT1lW3QrK10sYz1lW3QrK10sbD1Cb29sZWFuKGVbdCsrXSksdT1Cb29sZWFuKGVbdCsrXSksaD1Cb29sZWFuKGVbdCsrXSksYj1gJHtlW3QrK119YCxkPWVbdCsrXSxmPU1hdGguc3FydChuWzBdKm5bMF0rblsxXSpuWzFdKSxtPU1hdGguc3FydChuWzJdKm5bMl0rblszXSpuWzNdKTtsZXQgdjtpZihlW3QrK10pe2lmKHY9Y3IuZ2V0KGIsYCR7ZH1gKSwhdilyZXR1cm4gdH1lbHNle2NvbnN0IG49bD9uZXcgRmxvYXQzMkFycmF5KDI4KTpudWxsO24mJihuLnNldChlLnN1YmFycmF5KHQsdCsyNCkpLHQrPTI0KSxUci51c2VHcmlkKG4pO2NvbnN0IHI9ZVt0KytdLGE9ZS5zdWJhcnJheSh0LHQrcik7aWYoaCYmIWwpe2NvbnN0IGU9TWF0aC5jZWlsKE1hdGguYWJzKGktbykpLHQ9TWF0aC5jZWlsKE1hdGguYWJzKGMtcykpO3Y9VHIuY3JlYXRlTm9kZShlLHQpLGNyLnNldChiLGAke2R9YCx2KTtjb25zdCBuPVRyLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O1RyLmJpbmQoVHIuYXRsYXNBdHRhY2htZW50T2JqZWN0KSxUci5yZXNldCgpLFRyLmJlZ2luTm9kZVJlbmRlcmluZyh2KTtjb25zdCByPVRyLmF0bGFzQXR0YWNobWVudE9iamVjdC5oZWlnaHQtdi55LXQ7VHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsdi54LHIpLHU/KFByKGEpLFRyLmRyYXdGaWxsKCkpOlRyLmRyYXdQaXhlbHModixuZXcgVWludDhBcnJheShhKSksVHIuZW5kTm9kZVJlbmRlcmluZygpLG4mJlRyLmJpbmQobil9ZWxzZXtjb25zdCBlPU1hdGguY2VpbChNYXRoLmFicyhpLW8pKmYpLHQ9TWF0aC5jZWlsKE1hdGguYWJzKGMtcykqbSk7dj1Uci5jcmVhdGVOb2RlKGUsdCksY3Iuc2V0KGIsYCR7ZH1gLHYpO2NvbnN0IHI9VHIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7VHIuYmluZChUci5hdGxhc0F0dGFjaG1lbnRPYmplY3QpLFRyLnJlc2V0KCksVHIuYmVnaW5Ob2RlUmVuZGVyaW5nKHYpO2NvbnN0IGw9VHIuYXRsYXNBdHRhY2htZW50T2JqZWN0LmhlaWdodC12LnktdDtUci5zZXRUcmFuc2Zvcm0oZiwwLDAsbSwtbypmK3YueCwtcyptK2wpLG4mJihuWzI0XT12LngsblsyNV09bCksUHIoYSksVHIuZHJhd0ZpbGwoKSxUci5lbmROb2RlUmVuZGVyaW5nKCksciYmVHIuYmluZChyKX10Kz1yfWNvbnN0IF89ZVt0KytdO2lmKEJvb2xlYW4oZVt0KytdKSl7Y29uc3Qgbz1Cb29sZWFuKGVbdCsrXSkscz1lLnN1YmFycmF5KHQsdCs0KTt0Kz00O2NvbnN0IGk9ZVt0KytdLGM9ZS5zdWJhcnJheSh0LHQraSksbD1NYXRoLmNlaWwoTWF0aC5hYnMoYVsyXS1hWzBdKSksdT1NYXRoLmNlaWwoTWF0aC5hYnMoYVszXS1hWzFdKSk7cmV0dXJuIFRyLmFwcGx5RmlsdGVyKHYsYixvLGwsdSxoLG4scixCcihfKSxzLGMpLHQrPWl9aWYoVHIuZ2xvYmFsQWxwaGE9TWF0aC5taW4oTWF0aC5tYXgoMCxyWzNdK3JbN10vMjU1KSwxKSxUci5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITAsVHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPUJyKF8pLGgmJiFsKVRyLnNldFRyYW5zZm9ybShuWzBdLG5bMV0sblsyXSxuWzNdLG5bNF0sbls1XSksVHIuZHJhd0Rpc3BsYXlPYmplY3QodixhWzBdLGFbMV0sYVsyXSxhWzNdLHIpO2Vsc2V7Y29uc3QgZT1NYXRoLmF0YW4yKG5bMV0sblswXSksdD1NYXRoLmF0YW4yKC1uWzJdLG5bM10pO2lmKGV8fHQpe2NvbnN0IHI9bypmLGE9cyptLGk9TWF0aC5jb3MoZSksYz1NYXRoLnNpbihlKSxsPU1hdGguY29zKHQpLHU9TWF0aC5zaW4odCk7VHIuc2V0VHJhbnNmb3JtKGksYywtdSxsLHIqaS1hKnUrbls0XSxyKmMrYSpsK25bNV0pfWVsc2UgVHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYVswXSxhWzFdKTtUci5kcmF3RGlzcGxheU9iamVjdCh2LGFbMF0sYVsxXSxhWzJdLGFbM10scil9cmV0dXJuIHR9LExyPShlLHQpPT57Y29uc3Qgbj1lLnN1YmFycmF5KHQsdCs2KTt0Kz02LFRyLnJlc2V0KCksVHIuc2V0VHJhbnNmb3JtKG5bMF0sblsxXSxuWzJdLG5bM10sbls0XSxuWzVdKTtjb25zdCByPUJvb2xlYW4oZVt0KytdKT9uZXcgRmxvYXQzMkFycmF5KDI4KTpudWxsO1RyLnVzZUdyaWQociksciYmKHIuc2V0KGUuc3ViYXJyYXkodCx0KzI0KSksdCs9MjQpO2NvbnN0IGE9ZVt0KytdLG89ZS5zdWJhcnJheSh0LHQrYSk7cmV0dXJuIFByKG8sITApLHQrPWEsVHIuY2xpcCgpLHR9LFVyPShlLHQsbik9Pntjb25zdCByPWUud2lkdGhUYWJsZVt0LmxpbmVdfHwwLGE9dC50ZXh0Rm9ybWF0LG89YS5sZWZ0TWFyZ2lufHwwO2lmKCFuLndvcmRXcmFwJiZyPm4ucmF3V2lkdGgpcmV0dXJuIE1hdGgubWF4KDAsbyk7Y29uc3Qgcz1hLnJpZ2h0TWFyZ2lufHwwO3JldHVybiJjZW50ZXIiPT09YS5hbGlnbnx8ImNlbnRlciI9PT1uLmF1dG9TaXplP01hdGgubWF4KDAsbi5yYXdXaWR0aC8yLW8tcy1yLzItMik6InJpZ2h0Ij09PWEuYWxpZ258fCJyaWdodCI9PT1uLmF1dG9TaXplP01hdGgubWF4KDAsbi5yYXdXaWR0aC1vLXItcy00KTpNYXRoLm1heCgwLG8pfSxOcj1lPT57bGV0IHQ9IiI7cmV0dXJuIGUuaXRhbGljJiYodCs9Iml0YWxpYyAiKSxlLmJvbGQmJih0Kz0iYm9sZCAiKSxgJHt0fSR7ZS5zaXplfXB4ICcke2UuZm9udH0nLCdzYW5zLXNlcmlmJ2B9LERyPW5ldyBUZXh0RGVjb2Rlcixqcj0oZSx0KT0+e2NvbnN0IG49ZS5zdWJhcnJheSh0LHQrNik7dCs9Njtjb25zdCByPWUuc3ViYXJyYXkodCx0KzgpO3QrPTg7Y29uc3QgYT1lLnN1YmFycmF5KHQsdCs0KTt0Kz00O2NvbnN0IG89ZVt0KytdLHM9ZVt0KytdLGk9ZVt0KytdLGM9ZVt0KytdLGw9YCR7ZVt0KytdfWAsdT1lW3QrK10saD1Cb29sZWFuKGVbdCsrXSksYj1NYXRoLnNxcnQoblswXSpuWzBdK25bMV0qblsxXSksZD1NYXRoLnNxcnQoblsyXSpuWzJdK25bM10qblszXSk7bGV0IGY7aWYoZVt0KytdKXtpZihmPWNyLmdldChsLGAke3V9YCksIWYpcmV0dXJuIHR9ZWxzZXtjb25zdCBuPU1hdGguY2VpbChNYXRoLmFicyhpLW8pKmIpLHI9TWF0aC5jZWlsKE1hdGguYWJzKGMtcykqZCksYT1Cb29sZWFuKGVbdCsrXSk7Zj1hP2NyLmdldChsLGAke3V9YCk6VHIuY3JlYXRlTm9kZShuLHIpLGF8fGNyLnNldChsLGAke3V9YCxmKTtjb25zdCBoPWVbdCsrXSxtPW5ldyBVaW50OEFycmF5KGUuc3ViYXJyYXkodCx0K2gpKTt0Kz1oO2xldCB2PSJub25lIjtzd2l0Y2goZVt0KytdKXtjYXNlIDA6dj0iY2VudGVyIjticmVhaztjYXNlIDE6dj0ibGVmdCI7YnJlYWs7Y2FzZSAyOnY9Im5vbmUiO2JyZWFrO2Nhc2UgMzp2PSJyaWdodCJ9Y29uc3QgXz17d2lkdGg6bixoZWlnaHQ6cixhdXRvU2l6ZTp2LHN0b3BJbmRleDplW3QrK10sc2Nyb2xsWDplW3QrK10sc2Nyb2xsWTplW3QrK10sdGV4dFdpZHRoOmVbdCsrXSx0ZXh0SGVpZ2h0OmVbdCsrXSxyYXdXaWR0aDplW3QrK10scmF3SGVpZ2h0OmVbdCsrXSxmb2N1c0luZGV4OmVbdCsrXSxzZWxlY3RJbmRleDplW3QrK10sZm9jdXNWaXNpYmxlOkJvb2xlYW4oZVt0KytdKSx0aGlja25lc3M6ZVt0KytdLHRoaWNrbmVzc0NvbG9yOmVbdCsrXSx3b3JkV3JhcDpCb29sZWFuKGVbdCsrXSksYm9yZGVyOkJvb2xlYW4oZVt0KytdKSxib3JkZXJDb2xvcjplW3QrK10sYmFja2dyb3VuZDpCb29sZWFuKGVbdCsrXSksYmFja2dyb3VuZENvbG9yOmVbdCsrXSxkZWZhdWx0Q29sb3I6ZVt0KytdLGRlZmF1bHRTaXplOmVbdCsrXX0scD0oKGUsdCxuLHIpPT57Y29uc3QgYT1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQud2lkdGgsdC5oZWlnaHQpLG89YS5nZXRDb250ZXh0KCIyZCIpO2lmKCFvKXJldHVybiBhO2NvbnN0IHM9TWF0aC5taW4oMSxNYXRoLm1heChuLHIpKTtpZih0LmJhY2tncm91bmR8fHQuYm9yZGVyKXtpZihvLmJlZ2luUGF0aCgpLG8ubW92ZVRvKDAsMCksby5saW5lVG8odC53aWR0aCwwKSxvLmxpbmVUbyh0LndpZHRoLHQuaGVpZ2h0KSxvLmxpbmVUbygwLHQuaGVpZ2h0KSxvLmxpbmVUbygwLDApLHQuYmFja2dyb3VuZCl7Y29uc3QgZT1Tcih0LmJhY2tncm91bmRDb2xvcik7by5maWxsU3R5bGU9YHJnYmEoJHtlLlJ9LCR7ZS5HfSwke2UuQn0sJHtlLkF9KWAsby5maWxsKCl9aWYodC5ib3JkZXIpe2NvbnN0IGU9U3IodC5ib3JkZXJDb2xvcik7by5saW5lV2lkdGg9cyxvLnN0cm9rZVN0eWxlPWByZ2JhKCR7ZS5SfSwke2UuR30sJHtlLkJ9LCR7ZS5BfSlgLG8uc3Ryb2tlKCl9fWlmKCFlKXJldHVybiBhO28uc2F2ZSgpLG8uYmVnaW5QYXRoKCksby5tb3ZlVG8oMiwyKSxvLmxpbmVUbyh0LndpZHRoLTIsMiksby5saW5lVG8odC53aWR0aC0yLHQuaGVpZ2h0LTIpLG8ubGluZVRvKDIsdC5oZWlnaHQtMiksby5saW5lVG8oMiwyKSxvLmNsaXAoKTtsZXQgaT0yO2lmKHQuc2Nyb2xsWD4wKXtjb25zdCBlPSh0LnRleHRXaWR0aCs0LXQucmF3V2lkdGgpL3QucmF3V2lkdGg7aSs9LXQuc2Nyb2xsWCplfWxldCBjPTI7aWYodC5zY3JvbGxZPjApe2NvbnN0IGU9KHQudGV4dEhlaWdodCsyLXQucmF3SGVpZ2h0KS90LnJhd0hlaWdodDtjKz0tdC5zY3JvbGxZKmV9aWYoby5zZXRUcmFuc2Zvcm0obiwwLDAscixpKm4sYypyKSxvLmJlZ2luUGF0aCgpLHQuc2VsZWN0SW5kZXg+LTEmJnQuZm9jdXNJbmRleD4tMSl7Y29uc3Qgbj1lLnRleHRUYWJsZS5sZW5ndGgtMTtsZXQgcj0wLGE9MDt0LmZvY3VzSW5kZXg8PXQuc2VsZWN0SW5kZXg/KHI9TWF0aC5taW4odC5mb2N1c0luZGV4LG4pLGE9TWF0aC5taW4odC5zZWxlY3RJbmRleCxuKSk6KHI9TWF0aC5taW4odC5zZWxlY3RJbmRleCxuKSxhPU1hdGgubWluKHQuZm9jdXNJbmRleC0xLG4pKTtjb25zdCBzPWUudGV4dFRhYmxlW3JdLGk9ZS5saW5lVGFibGVbcy5saW5lXSxjPVVyKGUsaSx0KTtsZXQgbD0wO2lmKHImJiJ0ZXh0Ij09PXMubW9kZSl7bGV0IHQ9cjtmb3IoO3Q7KXtjb25zdCBuPWUudGV4dFRhYmxlWy0tdF07aWYoInRleHQiIT09bi5tb2RlKWJyZWFrO2wrPW4ud319by5maWxsU3R5bGU9IiNiNGQ3ZmYiO2xldCB1PTA7Zm9yKGxldCB0PXI7dDw9YTsrK3Qpe2NvbnN0IG49ZS50ZXh0VGFibGVbdF07aWYoInRleHQiPT09bi5tb2RlJiYodSs9bi53LHQhPT1hKSljb250aW51ZTtsZXQgcj0wO2NvbnN0IHM9InRleHQiPT09bi5tb2RlP24ubGluZTpuLmxpbmUtMTtmb3IobGV0IHQ9MDt0PHM7Kyt0KXIrPWUuaGVpZ2h0VGFibGVbdF07by5iZWdpblBhdGgoKSxvLnJlY3QobCxyLHUrYyxlLmhlaWdodFRhYmxlW3NdKSxvLmZpbGwoKSxsPTAsdT0wfX1jb25zdCBsPXQucmF3V2lkdGg7bGV0IHU9MDtpZih0LnNjcm9sbFg+MCl7Y29uc3QgZT0odC50ZXh0V2lkdGgtbCkvbDt1PXQuc2Nyb2xsWCplfWNvbnN0IGg9bCt1LGI9dC5yYXdIZWlnaHQ7bGV0IGQ9MDtpZih0LnNjcm9sbFk+MCl7Y29uc3QgZT0odC50ZXh0SGVpZ2h0LWIpL2I7ZD10LnNjcm9sbFkqZX1jb25zdCBmPWIrZDtsZXQgbT0wLHY9MCxfPTAscD0wLGc9ITEseD0tMTtmb3IobGV0IG49MDtuPGUudGV4dFRhYmxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZS50ZXh0VGFibGVbbl07aWYoIXIpY29udGludWU7aWYoKCJ0ZXh0Ij09PXIubW9kZXx8ImJyZWFrIj09PXIubW9kZSkmJih4KyssdC5zdG9wSW5kZXg+LTEmJng+dC5zdG9wSW5kZXgpKWJyZWFrO2lmKGcmJiJ0ZXh0Ij09PXIubW9kZSljb250aW51ZTtjb25zdCBhPXIudGV4dEZvcm1hdDtpZigibm9uZSI9PT10LmF1dG9TaXplKXtpZih2PmYpYnJlYWs7aWYoInRleHQiPT09ci5tb2RlJiYodT5tK3Iud3x8bT5oKSl7bSs9ci53O2NvbnRpbnVlfX1jb25zdCBpPVNyKGEuY29sb3J8fDApO2lmKG8uZmlsbFN0eWxlPWByZ2JhKCR7aS5SfSwke2kuR30sJHtpLkJ9LCR7aS5BfSlgLHQuZm9jdXNWaXNpYmxlJiZ0LmZvY3VzSW5kZXg9PT1uKXtjb25zdCB0PW0rXysuMTtsZXQgbj1yLmxpbmUsYT1yLnkscz1lLmFzY2VudFRhYmxlW25dOyJ0ZXh0IiE9PXIubW9kZSYmKGE9ImJyZWFrIj09PXIubW9kZT9yLmg6ZS5hc2NlbnRUYWJsZVtuLTFdLG4+MD8obj1yLmxpbmUtMSxzPWUuYXNjZW50VGFibGVbbl0pOnM9ci5oKSxuPjAmJjA9PT1lLmFzY2VudFRhYmxlW25dJiZuKys7Zm9yKGxldCB0PTA7dDxuOysrdClzKz1lLmhlaWdodFRhYmxlW3RdO28uc3Ryb2tlU3R5bGU9YHJnYmEoJHtpLlJ9LCR7aS5HfSwke2kuQn0sJHtpLkF9KWAsby5iZWdpblBhdGgoKSxvLm1vdmVUbyh0LHMpLG8ubGluZVRvKHQscy1hKSxvLnN0cm9rZSgpfWlmKHQudGhpY2tuZXNzKXtjb25zdCBlPVNyKHQudGhpY2tuZXNzQ29sb3IpO28ubGluZVdpZHRoPXQudGhpY2tuZXNzLG8uc3Ryb2tlU3R5bGU9YHJnYmEoJHtlLlJ9LCR7ZS5HfSwke2UuQn0sJHtlLkF9KWB9Y29uc3QgYz0wfHIubGluZTtzd2l0Y2goci5tb2RlKXtjYXNlImJyZWFrIjpjYXNlIndyYXAiOmlmKG09MCxjJiYodis9ZS5oZWlnaHRUYWJsZVtjLTFdKSxkPnYrZS5oZWlnaHRUYWJsZVtjXSl7Zz0hMDtjb250aW51ZX1wPWUuYXNjZW50VGFibGVbY10sXz1VcihlLHIsdCksZz0hMTticmVhaztjYXNlInRleHQiOntvLmJlZ2luUGF0aCgpLG8uZm9udD1OcihhKTtjb25zdCBlPW0rXyxuPXYrcDtpZihhLnVuZGVybGluZSl7Y29uc3QgdD1TcihhLmNvbG9yfHwwKTtvLmxpbmVXaWR0aD1zLG8uc3Ryb2tlU3R5bGU9YHJnYmEoJHt0LlJ9LCR7dC5HfSwke3QuQn0sJHt0LkF9KWAsby5iZWdpblBhdGgoKSxvLm1vdmVUbyhlLG4rMiksby5saW5lVG8oZStyLncsbisyKSxvLnN0cm9rZSgpfXQudGhpY2tuZXNzJiZvLnN0cm9rZVRleHQoci50ZXh0LGUsbiksby5maWxsVGV4dChyLnRleHQsZSxuKSxtKz1yLnd9fX1pZih0LmZvY3VzVmlzaWJsZSYmdC5mb2N1c0luZGV4Pj1lLnRleHRUYWJsZS5sZW5ndGgpe2NvbnN0IG49ZS50ZXh0VGFibGVbdC5mb2N1c0luZGV4LTFdO2lmKG4pe2NvbnN0IGU9U3Iobi50ZXh0Rm9ybWF0LmNvbG9yfHwwKTtvLnN0cm9rZVN0eWxlPWByZ2JhKCR7ZS5SfSwke2UuR30sJHtlLkJ9LCR7ZS5BfSlgO2NvbnN0IHQ9bStfKy4xLHI9ditwO28uYmVnaW5QYXRoKCksInRleHQiPT09bi5tb2RlP28ubW92ZVRvKHQsci1uLnkpOm8ubW92ZVRvKHQscituLmgpLG8ubGluZVRvKHQsciksby5zdHJva2UoKX19cmV0dXJuIG8ucmVzdG9yZSgpLGF9KShKU09OLnBhcnNlKERyLmRlY29kZShtKSksXyxiLGQpLGc9VHIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7VHIuYmluZChUci5hdGxhc0F0dGFjaG1lbnRPYmplY3QpLFRyLnJlc2V0KCksVHIuYmVnaW5Ob2RlUmVuZGVyaW5nKGYpO2NvbnN0IHg9VHIuYXRsYXNBdHRhY2htZW50T2JqZWN0LmhlaWdodC1mLnktcjtUci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSxmLngseCksVHIuZHJhd0VsZW1lbnQoZixwKSxUci5lbmROb2RlUmVuZGVyaW5nKCksZyYmVHIuYmluZChnKX1jb25zdCBtPWVbdCsrXTtpZihCb29sZWFuKGVbdCsrXSkpe2NvbnN0IG89Qm9vbGVhbihlW3QrK10pLHM9ZS5zdWJhcnJheSh0LHQrNCk7dCs9NDtjb25zdCBpPWVbdCsrXSxjPWUuc3ViYXJyYXkodCx0K2kpLHU9TWF0aC5jZWlsKE1hdGguYWJzKGFbMl0tYVswXSkpLGI9TWF0aC5jZWlsKE1hdGguYWJzKGFbM10tYVsxXSkpO3JldHVybiBUci5hcHBseUZpbHRlcihmLGwsQm9vbGVhbihNYXRoLm1heCgraCwrbykpLHUsYiwhMSxuLHIsQnIobSkscyxjKSx0Kz1pfVRyLmdsb2JhbEFscGhhPU1hdGgubWluKE1hdGgubWF4KDAsclszXStyWzddLzI1NSksMSksVHIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwLFRyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1CcihtKTtjb25zdCB2PU1hdGguYXRhbjIoblsxXSxuWzBdKSxfPU1hdGguYXRhbjIoLW5bMl0sblszXSk7aWYodnx8Xyl7Y29uc3QgZT1vKmIsdD1zKmQscj1NYXRoLmNvcyh2KSxhPU1hdGguc2luKHYpLGk9TWF0aC5jb3MoXyksYz1NYXRoLnNpbihfKTtUci5zZXRUcmFuc2Zvcm0ocixhLC1jLGksZSpyLXQqYytuWzRdLGUqYSt0Kmkrbls1XSl9ZWxzZSBUci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSxhWzBdLGFbMV0pO3JldHVybiBUci5kcmF3RGlzcGxheU9iamVjdChmLGFbMF0sYVsxXSxhWzJdLGFbM10sciksdH0sWHI9KGUsdCxuKT0+e2NvbnN0IHI9ZS5zdWJhcnJheSh0LHQrNik7dCs9Njtjb25zdCBhPWUuc3ViYXJyYXkodCx0KzgpO3QrPTg7Y29uc3Qgbz1lLnN1YmFycmF5KHQsdCs0KTt0Kz00O2NvbnN0IHM9ZVt0KytdLGk9ZVt0KytdLGM9ZVt0KytdLGw9ZVt0KytdLHU9YCR7ZVt0KytdfWAsaD1Cb29sZWFuKGVbdCsrXSk7bGV0IGI7aWYoZVt0KytdKXtpZihiPWNyLmdldCh1LCIwIiksIWIpcmV0dXJuIHR9ZWxzZXtjb25zdCByPU1hdGguYWJzKGMtcyksYT1NYXRoLmFicyhsLWkpLG89Qm9vbGVhbihlW3QrK10pO2lmKGI9bz9jci5nZXQodSwiMCIpOlRyLmNyZWF0ZU5vZGUocixhKSxvfHxjci5zZXQodSwiMCIsYiksbiYmbi5sZW5ndGgpe2NvbnN0IGU9VHIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7VHIuYmluZChUci5hdGxhc0F0dGFjaG1lbnRPYmplY3QpLFRyLnJlc2V0KCksVHIuYmVnaW5Ob2RlUmVuZGVyaW5nKGIpO2NvbnN0IHQ9VHIuYXRsYXNBdHRhY2htZW50T2JqZWN0LmhlaWdodC1iLnktYTtUci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSxiLngsdCk7Y29uc3Qgcj1uLnNoaWZ0KCk7VHIuZHJhd0VsZW1lbnQoYixyKSxUci5lbmROb2RlUmVuZGVyaW5nKCksZSYmVHIuYmluZChlKX19Y29uc3QgZD1lW3QrK107aWYoQm9vbGVhbihlW3QrK10pKXtjb25zdCBuPUJvb2xlYW4oZVt0KytdKSxzPWUuc3ViYXJyYXkodCx0KzQpO3QrPTQ7Y29uc3QgaT1lW3QrK10sYz1lLnN1YmFycmF5KHQsdCtpKSxsPU1hdGguY2VpbChNYXRoLmFicyhvWzJdLW9bMF0pKSxmPU1hdGguY2VpbChNYXRoLmFicyhvWzNdLW9bMV0pKTtyZXR1cm4gVHIuYXBwbHlGaWx0ZXIoYix1LEJvb2xlYW4oTWF0aC5tYXgoK2gsK24pKSxsLGYsITAscixhLEJyKGQpLHMsYyksdCs9aX1yZXR1cm4gVHIuZ2xvYmFsQWxwaGE9TWF0aC5taW4oTWF0aC5tYXgoMCxhWzNdK2FbN10vMjU1KSwxKSxUci5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITAsVHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPUJyKGQpLFRyLnNldFRyYW5zZm9ybShyWzBdLHJbMV0sclsyXSxyWzNdLHJbNF0scls1XSksVHIuZHJhd0Rpc3BsYXlPYmplY3QoYixvWzBdLG9bMV0sb1syXSxvWzNdLGEpLHR9LHpyPShlLHQpPT57Y29uc3Qgbj1lW3QrK107Zm9yKGxldCByPTA7cjxuOysrcil7c3dpdGNoKGVbdCsrXSl7Y2FzZSAwOnQ9enIoZSx0KTticmVhaztjYXNlIDE6dD1McihlLHQpfX1yZXR1cm4gdH0sVnI9KGUsdCxuKT0+e2NvbnN0IHI9Qm9vbGVhbihlW3QrK10pO2lmKHIpe1RyLmRyYXdBcnJheXNJbnN0YW5jZWQoKSxUci5zYXZlKCksVHIuYmVnaW5NYXNrKCksVHIuc2V0TWFza0JvdW5kcyhlW3QrK10sZVt0KytdLGVbdCsrXSxlW3QrK10pO3N3aXRjaChlW3QrK10pe2Nhc2UgMDp0PXpyKGUsdCk7YnJlYWs7Y2FzZSAxOnQ9THIoZSx0KX1Uci5lbmRNYXNrKCl9bGV0IGE9MCxvPSEwO2NvbnN0IHM9ZVt0KytdO2ZvcihsZXQgcj0wO3M+cjtyKyspe2NvbnN0IHI9ZVt0KytdLHM9ZVt0KytdO2lmKGEmJnI+YSYmKG8mJihUci5yZXN0b3JlKCksVHIubGVhdmVNYXNrKCkpLGE9MCxvPSEwKSwhbyljb250aW51ZTtpZihzKXtpZihhPXMsbz1Cb29sZWFuKGVbdCsrXSksIW8pY29udGludWU7VHIuZHJhd0FycmF5c0luc3RhbmNlZCgpLFRyLnNhdmUoKSxUci5iZWdpbk1hc2soKSxUci5zZXRNYXNrQm91bmRzKGVbdCsrXSxlW3QrK10sZVt0KytdLGVbdCsrXSk7c3dpdGNoKGVbdCsrXSl7Y2FzZSAwOnQ9enIoZSx0KTticmVhaztjYXNlIDE6dD1McihlLHQpfVRyLmVuZE1hc2soKTtjb250aW51ZX1pZighZVt0KytdKWNvbnRpbnVlO2NvbnN0IGk9ZVt0KytdO3N3aXRjaChpKXtjYXNlIDA6dD1WcihlLHQsbik7YnJlYWs7Y2FzZSAxOnQ9SXIoZSx0KTticmVhaztjYXNlIDI6dD1qcihlLHQpO2JyZWFrO2Nhc2UgMzp0PVhyKGUsdCxuKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoInVua25vd24gdHlwZSIsaSl9fXJldHVybihhfHxyKSYmKFRyLnJlc3RvcmUoKSxUci5sZWF2ZU1hc2soKSksdH07bGV0IFdyPS0xO2NvbnN0IEdyPShlLHQpPT57VHIuY2xlYXJUcmFuc2ZlckJvdW5kcygpO2xldCBuPTA7Y29uc3Qgcj1lW24rK107Zm9yKFdyIT09ciYmKFdyPXIsLTE9PT1Xcj9Uci51cGRhdGVCYWNrZ3JvdW5kQ29sb3IoMCwwLDAsMCk6VHIudXBkYXRlQmFja2dyb3VuZENvbG9yKFdyPj4xNiYxLFdyPj44JjEsMSZXciwxKSksVHIucmVzZXQoKSxUci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLFRyLmZpbGxCYWNrZ3JvdW5kQ29sb3IoKTtlLmxlbmd0aD5uOyl7aWYoIWVbbisrXSljb250aW51ZTtjb25zdCByPWVbbisrXTtzd2l0Y2gocil7Y2FzZSAwOm49VnIoZSxuLHQpO2JyZWFrO2Nhc2UgMTpuPUlyKGUsbik7YnJlYWs7Y2FzZSAyOm49anIoZSxuKTticmVhaztjYXNlIDM6bj1YcihlLG4sdCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJ1bmtub3duIHR5cGUiLHIpfX1Uci5kcmF3QXJyYXlzSW5zdGFuY2VkKCksRnImJihSci53aWR0aD1NcixSci5oZWlnaHQ9d3IsRnI9ITEpLFRyLnRyYW5zZmVyTWFpbkNhbnZhcygpfSxZcj1lPT57Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDsrK3Qpe2NvbnN0IG49YCR7ZVt0XX1gO2lmKCFjci5oYXMobikpY29udGludWU7Y29uc3Qgcj1jci5nZXRCeUlkKG4pO2Zvcihjb25zdCBlIG9mIHIudmFsdWVzKCkpVHIucmVtb3ZlTm9kZShlKTtjci5yZW1vdmVCeUlkKG4pfX0scXI9YXN5bmMoZSx0LG4scj0wLGE9MCxvKT0+e1RyLmNsZWFyVHJhbnNmZXJCb3VuZHMoKTtsZXQgcz0xO2ZvcihUci5yZXNldCgpLFRyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksVHIudXBkYXRlQmFja2dyb3VuZENvbG9yKHI+PjE2JjEscj4+OCYxLDEmcixhKSxUci5maWxsQmFja2dyb3VuZENvbG9yKCk7ZS5sZW5ndGg+czspe2lmKCFlW3MrK10pY29udGludWU7Y29uc3QgdD1lW3MrK107c3dpdGNoKHQpe2Nhc2UgMDpzPVZyKGUscyxvKTticmVhaztjYXNlIDE6cz1JcihlLHMpO2JyZWFrO2Nhc2UgMjpzPWpyKGUscyk7YnJlYWs7Y2FzZSAzOnM9WHIoZSxzLG8pO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigidW5rbm93biB0eXBlIix0KX19cmV0dXJuIFRyLmRyYXdBcnJheXNJbnN0YW5jZWQoKSxhd2FpdCBUci5jcmVhdGVJbWFnZUJpdG1hcCh0LG4pfTtjb25zdCBLcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic3RhdGUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicXVldWUiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLnN0YXRlPSJkZWFjdGl2YXRlIix0aGlzLnF1ZXVlPVtdfWFzeW5jIGV4ZWN1dGUoKXtmb3IodGhpcy5zdGF0ZT0iYWN0aXZlIjt0aGlzLnF1ZXVlLmxlbmd0aDspe2NvbnN0IGU9dGhpcy5xdWV1ZS5zaGlmdCgpO2lmKGUpc3dpdGNoKGUuY29tbWFuZCl7Y2FzZSJyZW5kZXIiOkdyKGUuYnVmZmVyLnN1YmFycmF5KDAsZS5sZW5ndGgpLGUuaW1hZ2VCaXRtYXBzKSxnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKHttZXNzYWdlOiJyZW5kZXIiLGJ1ZmZlcjplLmJ1ZmZlcn0sW2UuYnVmZmVyLmJ1ZmZlcl0pO2JyZWFrO2Nhc2UicmVzaXplIjpDcihlLmJ1ZmZlclswXSxlLmJ1ZmZlclsxXSxCb29sZWFuKGUuYnVmZmVyWzJdKSk7YnJlYWs7Y2FzZSJpbml0aWFsaXplIjprcihlLmNhbnZhcyxlLmRldmljZVBpeGVsUmF0aW8pO2JyZWFrO2Nhc2UicmVtb3ZlQ2FjaGUiOllyKGUuYnVmZmVyKTticmVhaztjYXNlImNhY2hlQ2xlYXIiOmNyLnJlc2V0KCk7YnJlYWs7Y2FzZSJjYXB0dXJlIjp7Y29uc3QgdD1hd2FpdCBxcihlLmJ1ZmZlci5zdWJhcnJheSgwLGUubGVuZ3RoKSxlLndpZHRoLGUuaGVpZ2h0LGUuYmdDb2xvcixlLmJnQWxwaGEsZS5pbWFnZUJpdG1hcHMpO2dsb2JhbFRoaXMucG9zdE1lc3NhZ2Uoe21lc3NhZ2U6ImNhcHR1cmUiLGJ1ZmZlcjplLmJ1ZmZlcixpbWFnZUJpdG1hcDp0fSxbZS5idWZmZXIuYnVmZmVyLHRdKX19fXRoaXMuc3RhdGU9ImRlYWN0aXZhdGUifX07c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhc3luYyBlPT57S3IucXVldWUucHVzaChlLmRhdGEpLCJkZWFjdGl2YXRlIj09PUtyLnN0YXRlJiZhd2FpdCBLci5leGVjdXRlKCl9KTt2YXIgSHI9e307ZXhwb3J0e0hyIGFzIGRlZmF1bHR9Owo=';
|