diff --git a/build/config.js b/build/config.js index 4e33e8fe..f3cc5a6c 100644 --- a/build/config.js +++ b/build/config.js @@ -12,8 +12,7 @@ const argv = process.argv, info = require("../package.json"); const args = {}, cdn_dir = "E:\\home\\sgn\\public_html\\cdn\\jquery\\plugins\\SGNetworks\\SGNUIKit\\"; -//const SGNUIKitLoader = "LyoKICogQ29weXJpZ2h0IChjKSAyMDIyIFNHTmV0d29ya3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFRoZSBzb2Z0d2FyZSBpcyBhbiBleGNsdXNpdmUgY29weXJpZ2h0IG9mICJTR05ldHdvcmtzIiBhbmQgaXMgcHJvdmlkZWQgYXMgaXMgZXhjbHVzaXZlbHkgd2l0aCBvbmx5ICJVU0FHRSIgYWNjZXNzLiAiTW9kaWZpY2F0aW9uIiwgICJBbHRlcmF0aW9uIiwgIlJlLWRpc3RyaWJ1dGlvbiIgaXMgY29tcGxldGVseSBwcm9oaWJpdGVkLgogKiBWSU9MQVRJTkcgVEhFIEFCT1ZFIFRFUk1TIElTIEEgUFVOSVNIQUJMRSBPRkZFTlNFIFdISUNIIE1BWSBMRUFEIFRPIExFR0FMIENPTlNFUVVFTkNFUy4KICovCgpjb25zdCB1bnRpbCA9IChwcmVkaWNhdGVGbikgPT4gewoJY29uc3QgcG9sbCA9IChkb25lKSA9PiAocHJlZGljYXRlRm4oKSA/IGRvbmUoKSA6IHNldFRpbWVvdXQoKCkgPT4gcG9sbChkb25lKSwgNTAwKSk7CglyZXR1cm4gbmV3IFByb21pc2UocG9sbCk7Cn07Cgphc3luYyBmdW5jdGlvbiBwYXVzZSh2KSB7Cgl3aGlsZSh2IDwgMTAwKQoJCWF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7Cn0KCmZ1bmN0aW9uIGxvb3AobGlnaHRib3hJbWFnZXMsIGluZGV4KSB7CglpZihpbmRleCA9PT0gbGlnaHRib3hJbWFnZXMubGVuZ3RoKSByZXR1cm47CgoJbGlnaHRib3hJbWFnZXNbaW5kZXhdLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewoJCWNvbnNvbGUubG9nKCdpbWFnZSAnICsgaW5kZXggKyAnIGxvYWRlZC4nKTsKCQlsb29wKGxpZ2h0Ym94SW1hZ2VzLCArK2luZGV4KTsKCX07Cn0KCihhc3luYyBmdW5jdGlvbihwcmVjYWxsYmFjaykgewoJY29uc3QgdGl0bGUgPSBkb2N1bWVudC50aXRsZTsKCWlmKHRpdGxlICE9PSB1bmRlZmluZWQpCgkJZG9jdW1lbnQudGl0bGUgPSAnTG9hZGluZy4uLic7CgoJaWYod2luZG93LmpRdWVyeSkKCQkkLmhvbGRSZWFkeSh0cnVlKTsKCgkoKCkgPT4gewoJCWNvbnN0IGNzcyA9IGAvKgogKiBDb3B5cmlnaHQgKGMpIDIwMjIgU0dOZXR3b3Jrcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhlIHNvZnR3YXJlIGlzIGFuIGV4Y2x1c2l2ZSBjb3B5cmlnaHQgb2YgIlNHTmV0d29ya3MiIGFuZCBpcyBwcm92aWRlZCBhcyBpcyBleGNsdXNpdmVseSB3aXRoIG9ubHkgIlVTQUdFIiBhY2Nlc3MuICJNb2RpZmljYXRpb24iLCAgIkFsdGVyYXRpb24iLCAiUmUtZGlzdHJpYnV0aW9uIiBpcyBjb21wbGV0ZWx5IHByb2hpYml0ZWQuCiAqIFZJT0xBVElORyBUSEUgQUJPVkUgVEVSTVMgSVMgQSBQVU5JU0hBQkxFIE9GRkVOU0UgV0hJQ0ggTUFZIExFQUQgVE8gTEVHQUwgQ09OU0VRVUVOQ0VTLgogKi8KCi5oYXMtcHJlbG9hZGVyLAouaGFzLXByZWxvYWRlciAqIHsKXHQtLXNnbi1iYWNrZ3JvdW5kOiAjZmZmOwpcdC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoOiA2cHg7Clx0LS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGg6IDQ0cHg7Clx0LS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0OiAyMnB4OwpcdC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbjogMXB4OwpcdC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1czogNnB4Owp9CgpAbWVkaWEgYWxsIGFuZCAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKXHQuaGFzLXByZWxvYWRlciwKXHQuaGFzLXByZWxvYWRlciAqIHsKXHQtLXNnbi1iYWNrZ3JvdW5kOiAjMDAwOwpcdH0KfQoKYm9keSB7Clx0bWFyZ2luOiAwOwp9Cgouc2duLXByZWxvYWRlciB7Clx0cGFkZGluZzogMDsKXHR3aWR0aDogMTAwJTsKXHRoZWlnaHQ6IDEwMCU7Clx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2duLWJhY2tncm91bmQpOwpcdGRpc3BsYXk6IGZsZXg7Clx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7Clx0YWxpZ24taXRlbXM6IGNlbnRlcjsKXHRwb3NpdGlvbjogYWJzb2x1dGU7Clx0ei1pbmRleDogOTk5OTk5Owp9CgoKLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyIHsKXHRwb3NpdGlvbjogcmVsYXRpdmU7Clx0ZGlzcGxheTogaW5saW5lLWZsZXg7Clx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7Clx0YWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgewpcdGFuaW1hdGlvbjogcm90YXRlIDEwcyBpbmZpbml0ZSBsaW5lYXI7Clx0cG9zaXRpb246IHJlbGF0aXZlOwpcdGRpc3BsYXk6IGlubGluZS1mbGV4OwpcdGp1c3RpZnktY29udGVudDogY2VudGVyOwpcdGFsaWduLWl0ZW1zOiBjZW50ZXI7Clx0d2lkdGg6IDEwMCU7Clx0aGVpZ2h0OiAxMDAlOwp9CgoKLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gaW1nIHsKXHR3aWR0aDogMTAwJTsKXHRoZWlnaHQ6IDEwMCU7Clx0bWFyZ2luOiB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKTsKXHRkaXNwbGF5OiBmbGV4OwpcdGp1c3RpZnktY29udGVudDogY2VudGVyOwpcdGFsaWduLWl0ZW1zOiBjZW50ZXI7Clx0cG9zaXRpb246IHJlbGF0aXZlOwpcdHRvcDogNTAlOwpcdGxlZnQ6IDUwJTsKfQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGltZyB7Clx0d2lkdGg6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSk7Clx0aGVpZ2h0OiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkpOwpcdG1hcmdpbjogdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbik7Cn0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpIHsKXHRhbmltYXRpb246IHJvdGF0ZSAzcyBpbmZpbml0ZSBjdWJpYy1iZXppZXIoMC4wOSwgMC42LCAwLjgsIDAuMDMpOwpcdHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxMDAlIDA7Clx0cG9zaXRpb246IGFic29sdXRlOwpcdGRpc3BsYXk6IGlubGluZS1mbGV4OwpcdGp1c3RpZnktY29udGVudDogY2VudGVyOwpcdGFsaWduLWl0ZW1zOiBjZW50ZXI7Clx0dG9wOiA1MCU7Clx0bGVmdDogNTAlOwpcdGJvcmRlcjogc29saWQgdmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSB0cmFuc3BhcmVudDsKXHRib3JkZXItYm90dG9tOiBub25lOwp9Ci5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IC5zcGlubmVyID4gaTpudGgtY2hpbGQoMSkgewpcdC1tb3otYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDAuMywgMC4xMiwgMC4wMyk7Clx0LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMC4zLCAwLjEyLCAwLjAzKTsKXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMC4zLCAwLjEyLCAwLjAzKTsKXHR3aWR0aDogdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKTsKXHRoZWlnaHQ6IHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpOwpcdG1hcmdpbi10b3A6IGNhbGMoMHB4IC0gdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkpOwpcdG1hcmdpbi1sZWZ0OiBjYWxjKDBweCAtIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpKTsKXHRib3JkZXItY29sb3I6ICMyMTcyYjg7Clx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMSkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7Clx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDEpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOwp9Ci5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IC5zcGlubmVyID4gaTpudGgtY2hpbGQoMikgewpcdC1tb3otYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDAuNiwgMC4yNCwgMC4wMyk7Clx0LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMC42LCAwLjI0LCAwLjAzKTsKXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMC42LCAwLjI0LCAwLjAzKTsKXHR3aWR0aDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikpOwpcdGhlaWdodDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpKTsKXHRtYXJnaW4tdG9wOiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpKSk7Clx0bWFyZ2luLWxlZnQ6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkpKTsKXHRib3JkZXItY29sb3I6ICMxOGEzOWI7Clx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMikgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7Clx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDIpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOwp9Ci5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IC5zcGlubmVyID4gaTpudGgtY2hpbGQoMykgewpcdC1tb3otYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDAuOSwgMC4zNiwgMC4wMyk7Clx0LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMC45LCAwLjM2LCAwLjAzKTsKXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMC45LCAwLjM2LCAwLjAzKTsKXHR3aWR0aDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAyKTsKXHRoZWlnaHQ6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSk7Clx0bWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSkpOwpcdG1hcmdpbi1sZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpKSk7Clx0Ym9yZGVyLWNvbG9yOiAjODJjNTQ1OwpcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDIpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOwpcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAyKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsKfQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGk6bnRoLWNoaWxkKDQpIHsKXHQtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAxLjIsIDAuNDgsIDAuMDMpOwpcdC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDEuMiwgMC40OCwgMC4wMyk7Clx0YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDEuMiwgMC40OCwgMC4wMyk7Clx0d2lkdGg6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMyk7Clx0aGVpZ2h0OiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAxLjUpOwpcdG1hcmdpbi10b3A6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMykpKTsKXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAzKSkpOwpcdGJvcmRlci1jb2xvcjogI2Y4YjczOTsKXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAzKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsKXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMykgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7Cn0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpOm50aC1jaGlsZCg1KSB7Clx0LW1vei1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS41LCAwLjYsIDAuMDMpOwpcdC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDEuNSwgMC42LCAwLjAzKTsKXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS41LCAwLjYsIDAuMDMpOwpcdHdpZHRoOiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDQpOwpcdGhlaWdodDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMik7Clx0bWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA0KSkpOwpcdG1hcmdpbi1sZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDQpKSk7Clx0Ym9yZGVyLWNvbG9yOiAjZjA2MDQ1OwpcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDQpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOwpcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA0KSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsKfQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGk6bnRoLWNoaWxkKDYpIHsKXHQtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAxLjgsIDAuNzIsIDAuMDMpOwpcdC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDEuOCwgMC43MiwgMC4wMyk7Clx0YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDEuOCwgMC43MiwgMC4wMyk7Clx0d2lkdGg6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNSk7Clx0aGVpZ2h0OiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAyLjUpOwpcdG1hcmdpbi10b3A6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogNSkpKTsKXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA1KSkpOwpcdGJvcmRlci1jb2xvcjogI2VkMjg2MTsKXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA1KSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsKXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNSkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7Cn0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpOm50aC1jaGlsZCg3KSB7Clx0LW1vei1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMi4xLCAwLjg0LCAwLjAzKTsKXHQtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAyLjEsIDAuODQsIDAuMDMpOwpcdGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAyLjEsIDAuODQsIDAuMDMpOwpcdHdpZHRoOiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDYpOwpcdGhlaWdodDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMyk7Clx0bWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA2KSkpOwpcdG1hcmdpbi1sZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDYpKSk7Clx0Ym9yZGVyLWNvbG9yOiAjYzEyNjgwOwpcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDYpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOwpcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA2KSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsKfQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGk6bnRoLWNoaWxkKDgpIHsKXHQtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAyLjQsIDAuOTYsIDAuMDMpOwpcdC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDIuNCwgMC45NiwgMC4wMyk7Clx0YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDIuNCwgMC45NiwgMC4wMyk7Clx0d2lkdGg6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNyk7Clx0aGVpZ2h0OiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAzLjUpOwpcdG1hcmdpbi10b3A6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogNykpKTsKXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA3KSkpOwpcdGJvcmRlci1jb2xvcjogIzVkMzE5MTsKXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA3KSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsKXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNykgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7Cn0KCkAtbW96LWtleWZyYW1lcyByb3RhdGUgewpcdHRvIHsKXHRcdHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7Clx0fQp9CkAtd2Via2l0LWtleWZyYW1lcyByb3RhdGUgewpcdHRvIHsKXHRcdHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7Clx0fQp9CkBrZXlmcmFtZXMgcm90YXRlIHsKXHR0byB7Clx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwpcdH0KfQoKCmA7CgkJY29uc3QgaGVhZCAgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0sCgkJCSAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwoKCQloZWFkLmFwcGVuZENoaWxkKHN0eWxlKTsKCQlzdHlsZS50eXBlID0gJ3RleHQvY3NzJzsKCQlzdHlsZS5pZCA9ICdzZ24tdWlraXQtc3R5bGVzJzsKCQlpZihzdHlsZS5zdHlsZVNoZWV0KSB7CgkJCS8vIFRoaXMgaXMgcmVxdWlyZWQgZm9yIElFOCBhbmQgYmVsb3cuCgkJCXN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzczsKCQl9IGVsc2UgewoJCQlzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTsKCQl9Cgl9KSgpOwoJKGZ1bmN0aW9uKCkgewoJCWxldCBwcmVsb2FkZXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJcHJlbG9hZGVyRWxlbS5jbGFzc05hbWUgPSAnc2duLXByZWxvYWRlcic7CgkJbGV0IHByZWxvYWRlciA9IGBcdFx0XHQ8ZGl2IGNsYXNzPSJwcmVsb2FkZXIiPlxuYDsKCQkvL3ByZWxvYWRlciArPSBgXHRcdFx0XHQ8aW1nIHNyYz0iPD89JHB1YmxpY19pbWdBc3NldHM7Pz5pY29ucy94c21hbGwucG5nIj5cbmA7CgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdDxkaXYgY2xhc3M9InNwaW5uZXIiPlxuYDsKCQlwcmVsb2FkZXIgKz0gYFx0XHRcdFx0XHQ8aT48L2k+XG5gOwoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7CgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsKCQlwcmVsb2FkZXIgKz0gYFx0XHRcdFx0XHQ8aT48L2k+XG5gOwoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7CgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsKCQlwcmVsb2FkZXIgKz0gYFx0XHRcdFx0XHQ8aT48L2k+XG5gOwoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7CgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdDwvZGl2PlxuYDsKCQlwcmVsb2FkZXIgKz0gYFx0XHRcdDwvZGl2PlxuYDsKCQlwcmVsb2FkZXIgKz0gYFx0XHQ8L2Rpdj5cbmA7CgoJCXByZWxvYWRlckVsZW0uaW5uZXJIVE1MID0gcHJlbG9hZGVyOwoKCQl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CgkJCWRvY3VtZW50LmJvZHkuY2xhc3NOYW1lICs9ICcgaGFzLXByZWxvYWRlcic7CgkJCWRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHByZWxvYWRlckVsZW0sIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CgkJfQoJfSkoKTsKCgljb25zdCBjdXJyZW50U2NyaXB0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdCB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj0iU0dOVUlLaXQubG9hZGVyLmpzIl0nKTsKCWNvbnN0IHVybCA9IGN1cnJlbnRTY3JpcHQuc3JjLnNwbGl0KCIvIikuc2xpY2UoMCwgLTIpLmpvaW4oIi8iKSArICcvJzsKCWNvbnN0IHByZWxvYWQgPSBbCgkJJ2pzL2kxOG4vU0dOaTE4bi5qcycKCV07CgoJbGV0IGZpbGVzbG9hZGVkID0gMDsKCWNvbnN0IGZpbGVzdG9sb2FkID0gcHJlbG9hZC5sZW5ndGg7CgoJZm9yKGxldCBpID0gMDsgaSA8IGZpbGVzdG9sb2FkOyBpKyspIHsKCQljb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKCQlzY3JpcHQuc3JjID0gdXJsICsgcHJlbG9hZFtpXTsKCQlzY3JpcHQuYXN5bmMgPSBmYWxzZTsKCQlzY3JpcHQuZGVmZXIgPSBmYWxzZTsKCQljdXJyZW50U2NyaXB0LmFmdGVyKHNjcmlwdCk7CgkJaWYoaSA9PT0gMCkKCQkJc2NyaXB0LmlkID0gJ3Nnbi1wcmVsb2FkLWVuZCc7CgkJc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgewoJCQlmaWxlc2xvYWRlZCsrOwoJCQlzY3JpcHQub25sb2FkID0gbnVsbDsKCQkJZmluaXNoTG9hZCgpOwoJCX07Cgl9CgoJYXN5bmMgZnVuY3Rpb24gZmluaXNoTG9hZCgpIHsKCQlsZXQgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKChmaWxlc2xvYWRlZCAqIDEwMCkgLyBmaWxlc3RvbG9hZCk7CgoJCWF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gewoJCQlpZihmaWxlc2xvYWRlZCA+PSBmaWxlc3RvbG9hZCkgewoJCQkJcmVzb2x2ZSgpOwoJCQl9CgkJfSkudGhlbihmdW5jdGlvbigpIHsKCQkJaW1wb3J0KCcuL2hlbHBlcnMvaGVscGVycy5qcycpOwoJCQkkKCdoZWFkID4gdGl0bGUnKS50ZXh0KHRpdGxlKTsKCQkJaWYodHlwZW9mIHByZWNhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmIHByb2dyZXNzID09PSAxMDApCgkJCQlwcmVjYWxsYmFjaygpOwoJCX0pOwoJfQp9KShmdW5jdGlvbigpIHsKCShhc3luYyBmdW5jdGlvbihjYWxsYmFjaykgewoJCWNvbnN0IHNnbnVpa2l0U2NyaXB0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdCB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj0iU0dOVUlLaXQubG9hZGVyLmpzIl0nKTsKCQljb25zdCBjdXJyZW50U2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nnbi1wcmVsb2FkLWVuZCcpIHx8IHNnbnVpa2l0U2NyaXB0OwoKCQlmdW5jdGlvbiBnZXRTY3JpcHRVUkwoKSB7CgkJCXJldHVybiBzZ251aWtpdFNjcmlwdC5zcmM7CgkJfQoKCQljb25zdCB1cmwgPSBnZXRTY3JpcHRVUkwoKS5zcGxpdCgiLyIpLnNsaWNlKDAsIC0yKS5qb2luKCIvIikgKyAnLyc7CgoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJCXN0YXJ0TG9hZCgpOwoJCX0sIDUwMDApOwoKCQlmdW5jdGlvbiBzdGFydExvYWQoKSB7CgkJCWNvbnN0IHNjcmlwdHMgPSBbCgkJCQknanMvU0dOVUlLaXQuYnVuZGxlLmpzJywKCQkJXTsKCQkJY29uc3Qgc3R5bGVzID0gWwoJCQkJJ2Nzcy9TR05VSUtpdC5idW5kbGUuY3NzJywKCQkJXTsKCQkJbGV0IGZpbGVzbG9hZGVkID0gMCwKCQkJCWxhc3RTY3JpcHQgID0gY3VycmVudFNjcmlwdDsKCQkJY29uc3QgZmlsZXN0b2xvYWQgPSBzY3JpcHRzLmxlbmd0aCArIHN0eWxlcy5sZW5ndGg7CgoJCQlmdW5jdGlvbiBsb2FkU2NyaXB0KGkpIHsKCQkJCWlmKGkgPT09IHNjcmlwdHMubGVuZ3RoKSByZXR1cm47CgoJCQkJY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CgkJCQlzY3JpcHQuc3JjID0gdXJsICsgc2NyaXB0c1tpXTsKCQkJCXNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbigpIHsKCQkJCQlmaWxlc2xvYWRlZCsrOwoJCQkJCXNjcmlwdC5vbmxvYWQgPSBudWxsOwoJCQkJCS8vY29uc29sZS5sb2coYExPQURFRCBTQ1JJUFQ6ICR7c2NyaXB0LnNyY31gLCBgJHtpfS8ke2ZpbGVzdG9sb2FkfWApOwoJCQkJCWZpbmlzaExvYWQoKTsKCQkJCQlsb2FkU2NyaXB0KCsraSk7CgkJCQl9OwoJCQkJbGFzdFNjcmlwdC5hZnRlcihzY3JpcHQpOwoJCQkJbGFzdFNjcmlwdCA9IGxhc3RTY3JpcHQubmV4dEVsZW1lbnRTaWJsaW5nIHx8IGN1cnJlbnRTY3JpcHQ7CgkJCX0KCgkJCWZ1bmN0aW9uIGxvYWRTdHlsZShpKSB7CgkJCQlpZihpID09PSBzY3JpcHRzLmxlbmd0aCkgcmV0dXJuOwoKCQkJCWNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpOwoJCQkJc3R5bGUucmVsID0gJ3N0eWxlc2hlZXQnOwoJCQkJc3R5bGUuaHJlZiA9IHVybCArIHN0eWxlc1tpXTsKCQkJCXN0eWxlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewoJCQkJCWZpbGVzbG9hZGVkKys7CgkJCQkJc3R5bGUub25sb2FkID0gbnVsbDsKCQkJCQlmaW5pc2hMb2FkKCk7CgkJCQkJbG9vcCgrK2kpOwoJCQkJfTsKCQkJCWN1cnJlbnRTY3JpcHQuYWZ0ZXIoc3R5bGUpOwoJCQl9CgoJCQlsb2FkU2NyaXB0KDApOwoJCQlsb2FkU3R5bGUoMCk7CgoJCQlhc3luYyBmdW5jdGlvbiBmaW5pc2hMb2FkKCkgewoJCQkJY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKChmaWxlc2xvYWRlZCAqIDEwMCkgLyBmaWxlc3RvbG9hZCk7CgoJCQkJaWYodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7CgkJCQkJY2FsbGJhY2soZmlsZXNsb2FkZWQsIGZpbGVzdG9sb2FkLCBwcm9ncmVzcyk7CgkJCQl9CgkJCX0KCQl9Cgl9KShhc3luYyBmdW5jdGlvbihsb2FkZWQsIHRvdGFsLCBwcm9ncmVzcykgewoJCWlmKHByb2dyZXNzID09PSAxMDApIHsKCQkJaW1wb3J0KCcuL2kxOG4vU0dOaTE4bi5qcycpOwoJCQlpbXBvcnQoJy4vY29tcG9uZW50cy9jb21wb25lbnRzLmpzJyk7CgkJCXdpbmRvdy5TR05VSUtpdFJlYWR5ID0gdHJ1ZTsKCgkJCWNvbnN0IGxlZnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLWNrZT0idHJ1ZSJdJyk7CgkJCWlmKGxlZnQgIT09IG51bGwpCgkJCQlsZWZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGVmdCk7CgoJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewoJCQkJJC5ob2xkUmVhZHkoZmFsc2UpOwoJCQkJalF1ZXJ5LnJlYWR5KCk7CgoJCQkJJCgnYm9keScpLmNoaWxkcmVuKCcuc2duLXByZWxvYWRlcicpLmZhZGVPdXQoMjAwMCwgZnVuY3Rpb24oKSB7CgkJCQkJJCgnYm9keScpLmNoaWxkcmVuKCcuc2duLXByZWxvYWRlcicpLnJlbW92ZSgpOwoJCQkJCSQoJ2JvZHknKS5yZW1vdmVDbGFzcygnaGFzLXByZWxvYWRlcicpOwoJCQkJfSk7CgkJCX0sIDUwMDApOwoKCQl9Cgl9KTsKfSk7CgoKYXN5bmMgZnVuY3Rpb24gZ2V0U0dOSTE4bkluc3RhbmNlKGNhbGxiYWNrKSB7CglyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewoJCWNvbnN0IHRpbWVvdXRIYW5kbGVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJaWYoY2hlY2tJbnRlcnZhbEhhbmRsZXIpCgkJCQljbGVhckludGVydmFsKGNoZWNrSW50ZXJ2YWxIYW5kbGVyKTsKCQl9LCAxMDAwMCk7CgoJCWNvbnN0IGNoZWNrSW50ZXJ2YWxIYW5kbGVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CgkJCWlmKHdpbmRvdy5TR05VSUtpdFJlYWR5KSB7CgkJCQlpZih0aW1lb3V0SGFuZGxlcikKCQkJCQljbGVhclRpbWVvdXQodGltZW91dEhhbmRsZXIpOwoJCQkJY2xlYXJJbnRlcnZhbChjaGVja0ludGVydmFsSGFuZGxlcik7CgkJCQljb25zdCBjID0gbmV3IFNHTmkxOG4oKTsKCgkJCQlyZXNvbHZlKGMpOwoJCQl9CgkJfSwgMTAwKTsKCX0pOwp9Cgo="; -const SGNUIKitLoader = "LyoNCiAqIENvcHlyaWdodCAoYykgMjAyMiBTR05ldHdvcmtzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFRoZSBzb2Z0d2FyZSBpcyBhbiBleGNsdXNpdmUgY29weXJpZ2h0IG9mICJTR05ldHdvcmtzIiBhbmQgaXMgcHJvdmlkZWQgYXMgaXMgZXhjbHVzaXZlbHkgd2l0aCBvbmx5ICJVU0FHRSIgYWNjZXNzLiAiTW9kaWZpY2F0aW9uIiwgICJBbHRlcmF0aW9uIiwgIlJlLWRpc3RyaWJ1dGlvbiIgaXMgY29tcGxldGVseSBwcm9oaWJpdGVkLg0KICogVklPTEFUSU5HIFRIRSBBQk9WRSBURVJNUyBJUyBBIFBVTklTSEFCTEUgT0ZGRU5TRSBXSElDSCBNQVkgTEVBRCBUTyBMRUdBTCBDT05TRVFVRU5DRVMuDQogKi8NCg0KY29uc3QgU0dOVUlLaXQgPSB7DQoJaXNSZWFkeTogZmFsc2UsDQoJY29tcG9uZW50czoge30sDQoJb25DaGFuZ2VMaXN0ZW5lcjogW10sDQoJb25SZWFkeUxpc3RlbmVyOiBbXSwNCg0KCS8qKg0KCSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gYSBjb21wb25lbnQgaXMgbG9hZGVkL3JlbW92ZWQgb3IgdGhlIHN0YXR1cyBvZiByZWFkaW5lc3MgaXMgY2hhbmdlZC4NCgkgKg0KCSAqIEBjYWxsYmFjayBTR05VSUtpdENoYW5nZUNhbGxiYWNrDQoJICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB3aGljaCBpcyBjaGFuZ2VkLg0KCSAqIEBwYXJhbSB7Ym9vbGVhbnxKU09OfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHN0YXRlIHdoaWNoIGlzIGNoYW5nZWQuDQoJICogQHBhcmFtIHtKU09OfSBjb21wb25lbnRzIFRoZSA8Yj48aT5KU09OPC9pPjwvYj4gb2JqZWN0IG9mIGxvYWRlZCA8Yj5TR05VSUtpdDwvYj4gY29tcG9uZW50cywgb3IgYW4gZW1wdHkgPGI+PGk+SlNPTjwvaT48L2I+IG9iamVjdCBpZiBubyBjb21wb25lbnRzIGxvYWRlZC4NCgkgKi8NCgkvKioNCgkgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIDxiPlNHTlVJS2l0PC9iPiBpcyByZWFkeS4NCgkgKg0KCSAqIEBjYWxsYmFjayBTR05VSUtpdFJlYWR5Q2FsbGJhY2sNCgkgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVhZHkgdGhlIHN0YXR1cyBvZiByZWFkaW5lc3Mgb2YgPGI+U0dOVUlLaXQ8L2I+Lg0KCSAqLw0KDQoJLyoqDQoJICogQWRkIGEgbG9hZGVkIDxiPlNHTlVJS2l0PC9iPiBjb21wb25lbnQuDQoJICoNCgkgKiBAcGFyYW0ge0pTT059IHZhbHVlIFRoZSA8Yj48aT5KU09OPC9pPjwvYj4gb2JqZWN0IG9mIHRoZSBsb2FkZWQgPGI+U0dOVUlLaXQ8L2I+IGNvbXBvbmVudC4NCgkgKi8NCglzZXQgY29tcG9uZW50KHZhbHVlKSB7DQoJCWlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICIiKQ0KCQkJdmFsdWUgPSB7fTsNCgkJT2JqZWN0LmFzc2lnbih0aGlzLmNvbXBvbmVudHMsIHZhbHVlKTsNCg0KCQl0aGlzLm9uQ2hhbmdlTGlzdGVuZXIodmFsdWUpOw0KCQkJdGhpcy5vbkNoYW5nZUxpc3RlbmVyLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcigiY29tcG9uZW50cyIsIHZhbHVlLCB0aGlzLmNvbXBvbmVudHMpKTsNCgl9LA0KDQoJLyoqDQoJICogR2V0IHRoZSBsaXN0IG9mIGxvYWRlZCA8Yj5TR05VSUtpdDwvYj4gY29tcG9uZW50cy4NCgkgKg0KCSAqIEByZXR1cm4ge29iamVjdH0gVGhlIDxiPjxpPkpTT048L2k+PC9iPiBvYmplY3Qgb2YgbG9hZGVkIDxiPlNHTlVJS2l0PC9iPiBjb21wb25lbnRzLCBvciBhbiBlbXB0eSA8Yj48aT5KU09OPC9pPjwvYj4gb2JqZWN0IGlmIG5vIGNvbXBvbmVudHMgbG9hZGVkLg0KCSAqLw0KCWdldCBjb21wb25lbnQoKSB7DQoJCXJldHVybiB0aGlzLmNvbXBvbmVudHM7DQoJfSwNCg0KCS8qKg0KCSAqIFNldCB0aGUgc3RhdHVzIG9mIHJlYWRpbmVzcyBvZiA8Yj5TR05VSUtpdDwvYj4uDQoJICoNCgkgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVhZHkgVGhlIHRoZSBzdGF0dXMgb2YgcmVhZGluZXNzIG9mIDxiPlNHTlVJS2l0PC9iPi4NCgkgKi8NCglzZXQgcmVhZHkoaXNSZWFkeSkgew0KCQl0aGlzLmlzUmVhZHkgPSBpc1JlYWR5Ow0KCQl0aGlzLm9uQ2hhbmdlTGlzdGVuZXIuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKCJyZWFkeSIsIHRoaXMuaXNSZWFkeSkpOw0KDQoJCWlmKGlzUmVhZHkpDQoJCQl0aGlzLm9uUmVhZHlMaXN0ZW5lci5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoaXNSZWFkeSkpOw0KCX0sDQoNCgkvKioNCgkgKiBHZXQgdGhlIHN0YXR1cyBvZiByZWFkaW5lc3Mgb2YgPGI+U0dOVUlLaXQ8L2I+Lg0KCSAqDQoJICogQHJldHVybiB7Ym9vbGVhbn0gPGI+PGk+VFJVRTwvaT48L2I+IGlmIDxiPlNHTlVJS2l0PC9iPiBpcyByZWFkeSwgPGI+PGk+RkFMU0U8L2k+PC9iPiBvdGhlcndpc2UuDQoJICovDQoJZ2V0IHJlYWR5KCkgew0KCQlyZXR1cm4gdGhpcy5pc1JlYWR5Ow0KCX0sDQoNCgkvKioNCgkgKiBTZXQgdGhlIGhhbmRsZXIgZm9yIDxiPlNHTlVJS2l0PC9iPiA8Yj48aT5PbkNoYW5nZTwvaT48L2I+IGV2ZW50LCB3aGljaCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGEgY29tcG9uZW50IGlzIGxvYWRlZC9yZW1vdmVkIG9yIHRoZSBzdGF0dXMgb2YgcmVhZGluZXNzIGlzIGNoYW5nZWQuDQoJICoNCgkgKiBAcGFyYW0ge1NHTlVJS2l0Q2hhbmdlQ2FsbGJhY2t9bGlzdGVuZXINCgkgKi8NCglzZXRPbkNoYW5nZUxpc3RlbmVyOiBmdW5jdGlvbihsaXN0ZW5lcikgew0KCQl0aGlzLm9uQ2hhbmdlTGlzdGVuZXIucHVzaChsaXN0ZW5lcik7DQoJfSwNCg0KCS8qKg0KCSAqIFNldCB0aGUgaGFuZGxlciBmb3IgPGI+U0dOVUlLaXQ8L2I+IDxiPjxpPk9uUmVhZHk8L2k+PC9iPiBldmVudCwgd2hpY2ggd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgPGI+U0dOVUlLaXQ8L2I+IGlzIHJlYWR5Lg0KCSAqDQoJICogQHBhcmFtIHtTR05VSUtpdFJlYWR5Q2FsbGJhY2t9bGlzdGVuZXINCgkgKi8NCglzZXRPblJlYWR5TGlzdGVuZXI6IGZ1bmN0aW9uKGxpc3RlbmVyKSB7DQoJCXRoaXMub25SZWFkeUxpc3RlbmVyLnB1c2gobGlzdGVuZXIpOw0KDQoJCWlmKHRoaXMucmVhZHkpDQoJCQl0aGlzLm9uUmVhZHlMaXN0ZW5lci5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIodGhpcy5yZWFkeSkpOw0KCX0sDQp9Ow0Kd2luZG93LlNHTlVJS2l0ID0gU0dOVUlLaXQ7DQoNCmNvbnN0IHVudGlsID0gKHByZWRpY2F0ZUZuKSA9PiB7DQoJY29uc3QgcG9sbCA9IChkb25lKSA9PiAocHJlZGljYXRlRm4oKSA/IGRvbmUoKSA6IHNldFRpbWVvdXQoKCkgPT4gcG9sbChkb25lKSwgNTAwKSk7DQoJcmV0dXJuIG5ldyBQcm9taXNlKHBvbGwpOw0KfTsNCg0KYXN5bmMgZnVuY3Rpb24gcGF1c2Uodikgew0KCXdoaWxlKHYgPCAxMDApDQoJCWF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7DQp9DQoNCmZ1bmN0aW9uIGxvb3AobGlnaHRib3hJbWFnZXMsIGluZGV4KSB7DQoJaWYoaW5kZXggPT09IGxpZ2h0Ym94SW1hZ2VzLmxlbmd0aCkgcmV0dXJuOw0KDQoJbGlnaHRib3hJbWFnZXNbaW5kZXhdLm9ubG9hZCA9IGZ1bmN0aW9uKCkgew0KCQljb25zb2xlLmxvZygiaW1hZ2UgIiArIGluZGV4ICsgIiBsb2FkZWQuIik7DQoJCWxvb3AobGlnaHRib3hJbWFnZXMsICsraW5kZXgpOw0KCX07DQp9DQoNCihhc3luYyBmdW5jdGlvbihwcmVjYWxsYmFjaykgew0KCWNvbnN0IHRpdGxlID0gZG9jdW1lbnQudGl0bGU7DQoJaWYodGl0bGUgIT09IHVuZGVmaW5lZCkNCgkJZG9jdW1lbnQudGl0bGUgPSAiTG9hZGluZy4uLiI7DQoNCglpZih3aW5kb3cualF1ZXJ5KQ0KCQkkLmhvbGRSZWFkeSh0cnVlKTsNCg0KCSgoKSA9PiB7DQoJCWNvbnN0IGNzcyA9IGAvKg0KICogQ29weXJpZ2h0IChjKSAyMDIyIFNHTmV0d29ya3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogVGhlIHNvZnR3YXJlIGlzIGFuIGV4Y2x1c2l2ZSBjb3B5cmlnaHQgb2YgIlNHTmV0d29ya3MiIGFuZCBpcyBwcm92aWRlZCBhcyBpcyBleGNsdXNpdmVseSB3aXRoIG9ubHkgIlVTQUdFIiBhY2Nlc3MuICJNb2RpZmljYXRpb24iLCAgIkFsdGVyYXRpb24iLCAiUmUtZGlzdHJpYnV0aW9uIiBpcyBjb21wbGV0ZWx5IHByb2hpYml0ZWQuDQogKiBWSU9MQVRJTkcgVEhFIEFCT1ZFIFRFUk1TIElTIEEgUFVOSVNIQUJMRSBPRkZFTlNFIFdISUNIIE1BWSBMRUFEIFRPIExFR0FMIENPTlNFUVVFTkNFUy4NCiAqLw0KDQouaGFzLXByZWxvYWRlciwNCi5oYXMtcHJlbG9hZGVyICogew0KXHQtLXNnbi1iYWNrZ3JvdW5kOiAjZmZmOw0KXHQtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aDogNnB4Ow0KXHQtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aDogNDRweDsNClx0LS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0OiAyMnB4Ow0KXHQtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW46IDFweDsNClx0LS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzOiA2cHg7DQp9DQoNCkBtZWRpYSBhbGwgYW5kIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgew0KXHQuaGFzLXByZWxvYWRlciwNClx0Lmhhcy1wcmVsb2FkZXIgKiB7DQpcdC0tc2duLWJhY2tncm91bmQ6ICMwMDA7DQpcdH0NCn0NCg0KYm9keSB7DQpcdG1hcmdpbjogMDsNCn0NCg0KLnNnbi1wcmVsb2FkZXIgew0KXHRwYWRkaW5nOiAwOw0KXHR3aWR0aDogMTAwJTsNClx0aGVpZ2h0OiAxMDAlOw0KXHRiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZ24tYmFja2dyb3VuZCk7DQpcdGRpc3BsYXk6IGZsZXg7DQpcdGp1c3RpZnktY29udGVudDogY2VudGVyOw0KXHRhbGlnbi1pdGVtczogY2VudGVyOw0KXHRwb3NpdGlvbjogYWJzb2x1dGU7DQpcdHotaW5kZXg6IDk5OTk5OTsNCn0NCg0KDQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgew0KXHRwb3NpdGlvbjogcmVsYXRpdmU7DQpcdGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNClx0YWxpZ24taXRlbXM6IGNlbnRlcjsNCn0NCg0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgew0KXHRhbmltYXRpb246IHJvdGF0ZSAxMHMgaW5maW5pdGUgbGluZWFyOw0KXHRwb3NpdGlvbjogcmVsYXRpdmU7DQpcdGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNClx0YWxpZ24taXRlbXM6IGNlbnRlcjsNClx0d2lkdGg6IDEwMCU7DQpcdGhlaWdodDogMTAwJTsNCn0NCg0KDQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiBpbWcgew0KXHR3aWR0aDogMTAwJTsNClx0aGVpZ2h0OiAxMDAlOw0KXHRtYXJnaW46IHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pOw0KXHRkaXNwbGF5OiBmbGV4Ow0KXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNClx0YWxpZ24taXRlbXM6IGNlbnRlcjsNClx0cG9zaXRpb246IHJlbGF0aXZlOw0KXHR0b3A6IDUwJTsNClx0bGVmdDogNTAlOw0KfQ0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpbWcgew0KXHR3aWR0aDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpKTsNClx0aGVpZ2h0OiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkpOw0KXHRtYXJnaW46IHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pOw0KfQ0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpIHsNClx0YW5pbWF0aW9uOiByb3RhdGUgM3MgaW5maW5pdGUgY3ViaWMtYmV6aWVyKDAuMDksIDAuNiwgMC44LCAwLjAzKTsNClx0dHJhbnNmb3JtLW9yaWdpbjogNTAlIDEwMCUgMDsNClx0cG9zaXRpb246IGFic29sdXRlOw0KXHRkaXNwbGF5OiBpbmxpbmUtZmxleDsNClx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQpcdGFsaWduLWl0ZW1zOiBjZW50ZXI7DQpcdHRvcDogNTAlOw0KXHRsZWZ0OiA1MCU7DQpcdGJvcmRlcjogc29saWQgdmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSB0cmFuc3BhcmVudDsNClx0Ym9yZGVyLWJvdHRvbTogbm9uZTsNCn0NCi5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IC5zcGlubmVyID4gaTpudGgtY2hpbGQoMSkgew0KXHQtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAwLjMsIDAuMTIsIDAuMDMpOw0KXHQtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAwLjMsIDAuMTIsIDAuMDMpOw0KXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMC4zLCAwLjEyLCAwLjAzKTsNClx0d2lkdGg6IHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCk7DQpcdGhlaWdodDogdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCk7DQpcdG1hcmdpbi10b3A6IGNhbGMoMHB4IC0gdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkpOw0KXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSk7DQpcdGJvcmRlci1jb2xvcjogIzIxNzJiODsNClx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMSkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQpcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAxKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNCn0NCi5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IC5zcGlubmVyID4gaTpudGgtY2hpbGQoMikgew0KXHQtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAwLjYsIDAuMjQsIDAuMDMpOw0KXHQtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAwLjYsIDAuMjQsIDAuMDMpOw0KXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMC42LCAwLjI0LCAwLjAzKTsNClx0d2lkdGg6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpKTsNClx0aGVpZ2h0OiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkpOw0KXHRtYXJnaW4tdG9wOiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpKSk7DQpcdG1hcmdpbi1sZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpKSk7DQpcdGJvcmRlci1jb2xvcjogIzE4YTM5YjsNClx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMikgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQpcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAyKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNCn0NCi5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IC5zcGlubmVyID4gaTpudGgtY2hpbGQoMykgew0KXHQtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAwLjksIDAuMzYsIDAuMDMpOw0KXHQtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAwLjksIDAuMzYsIDAuMDMpOw0KXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMC45LCAwLjM2LCAwLjAzKTsNClx0d2lkdGg6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMik7DQpcdGhlaWdodDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpKTsNClx0bWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSkpOw0KXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSkpOw0KXHRib3JkZXItY29sb3I6ICM4MmM1NDU7DQpcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDIpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMikgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQp9DQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGk6bnRoLWNoaWxkKDQpIHsNClx0LW1vei1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS4yLCAwLjQ4LCAwLjAzKTsNClx0LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS4yLCAwLjQ4LCAwLjAzKTsNClx0YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDEuMiwgMC40OCwgMC4wMyk7DQpcdHdpZHRoOiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDMpOw0KXHRoZWlnaHQ6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDEuNSk7DQpcdG1hcmdpbi10b3A6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMykpKTsNClx0bWFyZ2luLWxlZnQ6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMykpKTsNClx0Ym9yZGVyLWNvbG9yOiAjZjhiNzM5Ow0KXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAzKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNClx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDMpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KfQ0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpOm50aC1jaGlsZCg1KSB7DQpcdC1tb3otYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDEuNSwgMC42LCAwLjAzKTsNClx0LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS41LCAwLjYsIDAuMDMpOw0KXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS41LCAwLjYsIDAuMDMpOw0KXHR3aWR0aDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA0KTsNClx0aGVpZ2h0OiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAyKTsNClx0bWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA0KSkpOw0KXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA0KSkpOw0KXHRib3JkZXItY29sb3I6ICNmMDYwNDU7DQpcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDQpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQp9DQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGk6bnRoLWNoaWxkKDYpIHsNClx0LW1vei1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS44LCAwLjcyLCAwLjAzKTsNClx0LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS44LCAwLjcyLCAwLjAzKTsNClx0YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDEuOCwgMC43MiwgMC4wMyk7DQpcdHdpZHRoOiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDUpOw0KXHRoZWlnaHQ6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDIuNSk7DQpcdG1hcmdpbi10b3A6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogNSkpKTsNClx0bWFyZ2luLWxlZnQ6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogNSkpKTsNClx0Ym9yZGVyLWNvbG9yOiAjZWQyODYxOw0KXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA1KSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNClx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDUpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KfQ0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpOm50aC1jaGlsZCg3KSB7DQpcdC1tb3otYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDIuMSwgMC44NCwgMC4wMyk7DQpcdC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDIuMSwgMC44NCwgMC4wMyk7DQpcdGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAyLjEsIDAuODQsIDAuMDMpOw0KXHR3aWR0aDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA2KTsNClx0aGVpZ2h0OiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAzKTsNClx0bWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA2KSkpOw0KXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA2KSkpOw0KXHRib3JkZXItY29sb3I6ICNjMTI2ODA7DQpcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDYpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNikgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQp9DQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGk6bnRoLWNoaWxkKDgpIHsNClx0LW1vei1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMi40LCAwLjk2LCAwLjAzKTsNClx0LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMi40LCAwLjk2LCAwLjAzKTsNClx0YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDIuNCwgMC45NiwgMC4wMyk7DQpcdHdpZHRoOiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDcpOw0KXHRoZWlnaHQ6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDMuNSk7DQpcdG1hcmdpbi10b3A6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogNykpKTsNClx0bWFyZ2luLWxlZnQ6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogNykpKTsNClx0Ym9yZGVyLWNvbG9yOiAjNWQzMTkxOw0KXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA3KSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNClx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDcpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KfQ0KDQpALW1vei1rZXlmcmFtZXMgcm90YXRlIHsNClx0dG8gew0KXHRcdHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7DQpcdH0NCn0NCkAtd2Via2l0LWtleWZyYW1lcyByb3RhdGUgew0KXHR0byB7DQpcdFx0dHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsNClx0fQ0KfQ0KQGtleWZyYW1lcyByb3RhdGUgew0KXHR0byB7DQpcdFx0dHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsNClx0fQ0KfQ0KDQoNCmA7DQoJCWNvbnN0IGhlYWQgID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLA0KCQkgICAgICBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7DQoNCgkJaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7DQoJCXN0eWxlLnR5cGUgPSAidGV4dC9jc3MiOw0KCQlzdHlsZS5pZCA9ICJzZ24tdWlraXQtc3R5bGVzIjsNCgkJaWYoc3R5bGUuc3R5bGVTaGVldCkgew0KCQkJLy8gVGhpcyBpcyByZXF1aXJlZCBmb3IgSUU4IGFuZCBiZWxvdy4NCgkJCXN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzczsNCgkJfSBlbHNlIHsNCgkJCXN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpOw0KCQl9DQoJfSkoKTsNCgkoZnVuY3Rpb24oKSB7DQoJCWxldCBwcmVsb2FkZXJFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7DQoJCXByZWxvYWRlckVsZW0uY2xhc3NOYW1lID0gInNnbi1wcmVsb2FkZXIiOw0KCQlsZXQgcHJlbG9hZGVyID0gYFx0XHRcdDxkaXYgY2xhc3M9InByZWxvYWRlciI+XG5gOw0KCQkvL3ByZWxvYWRlciArPSBgXHRcdFx0XHQ8aW1nIHNyYz0iPD89JHB1YmxpY19pbWdBc3NldHM7Pz5pY29ucy94c21hbGwucG5nIj5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHQ8ZGl2IGNsYXNzPSJzcGlubmVyIj5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHRcdDxpPjwvaT5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0XHQ8L2Rpdj5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdFx0PC9kaXY+XG5gOw0KCQlwcmVsb2FkZXIgKz0gYFx0XHQ8L2Rpdj5cbmA7DQoNCgkJcHJlbG9hZGVyRWxlbS5pbm5lckhUTUwgPSBwcmVsb2FkZXI7DQoNCgkJd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgew0KCQkJZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKz0gIiBoYXMtcHJlbG9hZGVyIjsNCgkJCWRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHByZWxvYWRlckVsZW0sIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7DQoJCX07DQoJfSkoKTsNCg0KCWNvbnN0IGN1cnJlbnRTY3JpcHQgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0IHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtzcmMqPVwiU0dOVUlLaXQubG9hZGVyLmpzXCJdIik7DQoJY29uc3QgdXJsID0gY3VycmVudFNjcmlwdC5zcmMuc3BsaXQoIi8iKS5zbGljZSgwLCAtMikuam9pbigiLyIpICsgIi8iOw0KCWNvbnN0IHByZWxvYWQgPSBbDQoJCS8vJ2pzL2kxOG4vU0dOaTE4bi5qcycNCgldOw0KDQoJbGV0IGZpbGVzbG9hZGVkID0gMDsNCgljb25zdCBmaWxlc3RvbG9hZCA9IHByZWxvYWQubGVuZ3RoOw0KDQoJaWYoZmlsZXN0b2xvYWQgPiAwKSB7DQoJCWZvcihsZXQgaSA9IDA7IGkgPCBmaWxlc3RvbG9hZDsgaSsrKSB7DQoJCQljb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsNCgkJCXNjcmlwdC5zcmMgPSB1cmwgKyBwcmVsb2FkW2ldOw0KCQkJc2NyaXB0LmFzeW5jID0gZmFsc2U7DQoJCQlzY3JpcHQuZGVmZXIgPSBmYWxzZTsNCgkJCWN1cnJlbnRTY3JpcHQuYWZ0ZXIoc2NyaXB0KTsNCgkJCWlmKGkgPT09IDApDQoJCQkJc2NyaXB0LmlkID0gInNnbi1wcmVsb2FkLWVuZCI7DQoJCQlzY3JpcHQub25sb2FkID0gZnVuY3Rpb24oKSB7DQoJCQkJZmlsZXNsb2FkZWQrKzsNCgkJCQlzY3JpcHQub25sb2FkID0gbnVsbDsNCgkJCQlmaW5pc2hMb2FkKCk7DQoJCQl9Ow0KCQl9DQoJfSBlbHNlDQoJCWZpbmlzaExvYWQoKTsNCg0KCWFzeW5jIGZ1bmN0aW9uIGZpbmlzaExvYWQoKSB7DQoJCWxldCBwcm9ncmVzcyA9IE1hdGgucm91bmQoKGZpbGVzbG9hZGVkICogMTAwKSAvIGZpbGVzdG9sb2FkKSB8fCAxMDA7DQoNCgkJYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7DQoJCQlpZihmaWxlc2xvYWRlZCA+PSBmaWxlc3RvbG9hZCkgew0KCQkJCXJlc29sdmUoKTsNCgkJCX0NCgkJfSkudGhlbihmdW5jdGlvbigpIHsNCgkJCS8vaW1wb3J0KCcuL2hlbHBlcnMvaGVscGVycy5qcycpOw0KCQkJJCgiaGVhZCA+IHRpdGxlIikudGV4dCh0aXRsZSk7DQoJCQlpZih0eXBlb2YgcHJlY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIgJiYgcHJvZ3Jlc3MgPT09IDEwMCkNCgkJCQlwcmVjYWxsYmFjaygpOw0KCQl9KTsNCgl9DQp9KShmdW5jdGlvbigpIHsNCgkoYXN5bmMgZnVuY3Rpb24oY2FsbGJhY2spIHsNCgkJY29uc3Qgc2dudWlraXRTY3JpcHQgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0IHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtzcmMqPVwiU0dOVUlLaXQubG9hZGVyLmpzXCJdIik7DQoJCWNvbnN0IGN1cnJlbnRTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2duLXByZWxvYWQtZW5kIikgfHwgc2dudWlraXRTY3JpcHQ7DQoNCgkJZnVuY3Rpb24gZ2V0U2NyaXB0VVJMKCkgew0KCQkJcmV0dXJuIHNnbnVpa2l0U2NyaXB0LnNyYzsNCgkJfQ0KDQoJCWNvbnN0IHVybCA9IGdldFNjcmlwdFVSTCgpLnNwbGl0KCIvIikuc2xpY2UoMCwgLTIpLmpvaW4oIi8iKSArICIvIjsNCg0KCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KCQkJc3RhcnRMb2FkKCk7DQoJCX0sIDUwMDApOw0KDQoJCWZ1bmN0aW9uIHN0YXJ0TG9hZCgpIHsNCgkJCWNvbnN0IHNjcmlwdHMgPSBbDQoJCQkJImpzL1NHTlVJS2l0LmJ1bmRsZS5qcyIsDQoJCQldOw0KCQkJY29uc3Qgc3R5bGVzID0gWw0KCQkJCSJjc3MvU0dOVUlLaXQuYnVuZGxlLmNzcyIsDQoJCQldOw0KCQkJbGV0IGZpbGVzbG9hZGVkID0gMCwNCgkJCSAgICBsYXN0U2NyaXB0ICA9IGN1cnJlbnRTY3JpcHQ7DQoJCQljb25zdCBmaWxlc3RvbG9hZCA9IHNjcmlwdHMubGVuZ3RoICsgc3R5bGVzLmxlbmd0aDsNCg0KCQkJZnVuY3Rpb24gbG9hZFNjcmlwdChpKSB7DQoJCQkJaWYoaSA9PT0gc2NyaXB0cy5sZW5ndGgpIHJldHVybjsNCg0KCQkJCWNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOw0KCQkJCXNjcmlwdC5zcmMgPSB1cmwgKyBzY3JpcHRzW2ldOw0KCQkJCXNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbigpIHsNCgkJCQkJZmlsZXNsb2FkZWQrKzsNCgkJCQkJU0dOVUlLaXQuY29tcG9uZW50ID0gew0KCQkJCQkJaTogc2NyaXB0c1tpXSwNCgkJCQkJfTsNCgkJCQkJc2NyaXB0Lm9ubG9hZCA9IG51bGw7DQoJCQkJCS8vY29uc29sZS5sb2coYExPQURFRCBTQ1JJUFQ6ICR7c2NyaXB0LnNyY31gLCBgJHtpfS8ke2ZpbGVzdG9sb2FkfWApOw0KCQkJCQlmaW5pc2hMb2FkKCk7DQoJCQkJCWxvYWRTY3JpcHQoKytpKTsNCgkJCQl9Ow0KCQkJCWxhc3RTY3JpcHQuYWZ0ZXIoc2NyaXB0KTsNCgkJCQlsYXN0U2NyaXB0ID0gbGFzdFNjcmlwdC5uZXh0RWxlbWVudFNpYmxpbmcgfHwgY3VycmVudFNjcmlwdDsNCgkJCX0NCg0KCQkJZnVuY3Rpb24gbG9hZFN0eWxlKGkpIHsNCgkJCQlpZihpID09PSBzY3JpcHRzLmxlbmd0aCkgcmV0dXJuOw0KDQoJCQkJY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7DQoJCQkJc3R5bGUucmVsID0gInN0eWxlc2hlZXQiOw0KCQkJCXN0eWxlLmhyZWYgPSB1cmwgKyBzdHlsZXNbaV07DQoJCQkJc3R5bGUub25sb2FkID0gZnVuY3Rpb24oKSB7DQoJCQkJCWZpbGVzbG9hZGVkKys7DQoJCQkJCXN0eWxlLm9ubG9hZCA9IG51bGw7DQoJCQkJCWZpbmlzaExvYWQoKTsNCgkJCQkJbG9vcCgrK2kpOw0KCQkJCX07DQoJCQkJY3VycmVudFNjcmlwdC5hZnRlcihzdHlsZSk7DQoJCQl9DQoNCgkJCWxvYWRTY3JpcHQoMCk7DQoJCQlsb2FkU3R5bGUoMCk7DQoNCgkJCWFzeW5jIGZ1bmN0aW9uIGZpbmlzaExvYWQoKSB7DQoJCQkJY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKChmaWxlc2xvYWRlZCAqIDEwMCkgLyBmaWxlc3RvbG9hZCk7DQoNCgkJCQlpZih0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpIHsNCgkJCQkJY2FsbGJhY2soZmlsZXNsb2FkZWQsIGZpbGVzdG9sb2FkLCBwcm9ncmVzcyk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSkoYXN5bmMgZnVuY3Rpb24obG9hZGVkLCB0b3RhbCwgcHJvZ3Jlc3MpIHsNCgkJaWYocHJvZ3Jlc3MgPT09IDEwMCkgew0KCQkJLy9pbXBvcnQoJy4vaTE4bi9TR05pMThuLmpzJyk7DQoJCQkvL2ltcG9ydCgnLi9jb21wb25lbnRzL2NvbXBvbmVudHMuanMnKTsNCgkJCVNHTlVJS2l0LnJlYWR5ID0gdHJ1ZTsNCgkJCXdpbmRvdy5TR05VSUtpdFJlYWR5ID0gdHJ1ZTsNCg0KCQkJY29uc3QgbGVmdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInN0eWxlW2RhdGEtY2tlPVwidHJ1ZVwiXSIpOw0KCQkJaWYobGVmdCAhPT0gbnVsbCkNCgkJCQlsZWZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGVmdCk7DQoNCgkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQoJCQkJJC5ob2xkUmVhZHkoZmFsc2UpOw0KCQkJCWpRdWVyeS5yZWFkeSgpOw0KDQoJCQkJJCgiYm9keSIpLmNoaWxkcmVuKCIuc2duLXByZWxvYWRlciIpLmZhZGVPdXQoMjAwMCwgZnVuY3Rpb24oKSB7DQoJCQkJCSQoImJvZHkiKS5jaGlsZHJlbigiLnNnbi1wcmVsb2FkZXIiKS5yZW1vdmUoKTsNCgkJCQkJJCgiYm9keSIpLnJlbW92ZUNsYXNzKCJoYXMtcHJlbG9hZGVyIik7DQoJCQkJfSk7DQoJCQl9LCA1MDAwKTsNCg0KCQl9DQoJfSk7DQp9KTsNCg0KDQphc3luYyBmdW5jdGlvbiBnZXRTR05JMThuSW5zdGFuY2UoY2FsbGJhY2spIHsNCglyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gew0KCQljb25zdCB0aW1lb3V0SGFuZGxlciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQoJCQlpZihjaGVja0ludGVydmFsSGFuZGxlcikNCgkJCQljbGVhckludGVydmFsKGNoZWNrSW50ZXJ2YWxIYW5kbGVyKTsNCgkJfSwgMTAwMDApOw0KDQoJCWNvbnN0IGNoZWNrSW50ZXJ2YWxIYW5kbGVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQoJCQlpZih3aW5kb3cuU0dOVUlLaXRSZWFkeSkgew0KCQkJCWlmKHRpbWVvdXRIYW5kbGVyKQ0KCQkJCQljbGVhclRpbWVvdXQodGltZW91dEhhbmRsZXIpOw0KCQkJCWNsZWFySW50ZXJ2YWwoY2hlY2tJbnRlcnZhbEhhbmRsZXIpOw0KCQkJCWNvbnN0IGMgPSBuZXcgU0dOaTE4bigpOw0KDQoJCQkJcmVzb2x2ZShjKTsNCgkJCX0NCgkJfSwgMTAwKTsNCgl9KTsNCn0NCg0K"; +const SGNUIKitLoader = "LyoNCiAqIENvcHlyaWdodCAoYykgMjAyMiBTR05ldHdvcmtzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFRoZSBzb2Z0d2FyZSBpcyBhbiBleGNsdXNpdmUgY29weXJpZ2h0IG9mICJTR05ldHdvcmtzIiBhbmQgaXMgcHJvdmlkZWQgYXMgaXMgZXhjbHVzaXZlbHkgd2l0aCBvbmx5ICJVU0FHRSIgYWNjZXNzLiAiTW9kaWZpY2F0aW9uIiwgICJBbHRlcmF0aW9uIiwgIlJlLWRpc3RyaWJ1dGlvbiIgaXMgY29tcGxldGVseSBwcm9oaWJpdGVkLg0KICogVklPTEFUSU5HIFRIRSBBQk9WRSBURVJNUyBJUyBBIFBVTklTSEFCTEUgT0ZGRU5TRSBXSElDSCBNQVkgTEVBRCBUTyBMRUdBTCBDT05TRVFVRU5DRVMuDQogKi8NCg0KY29uc3QgU0dOVUlLaXQgPSB7DQoJaXNSZWFkeTogZmFsc2UsDQoJY29tcG9uZW50czoge30sDQoJb25DaGFuZ2VMaXN0ZW5lcjogW10sDQoJb25SZWFkeUxpc3RlbmVyOiBbXSwNCg0KCS8qKg0KCSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gYSBjb21wb25lbnQgaXMgbG9hZGVkL3JlbW92ZWQgb3IgdGhlIHN0YXR1cyBvZiByZWFkaW5lc3MgaXMgY2hhbmdlZC4NCgkgKg0KCSAqIEBjYWxsYmFjayBTR05VSUtpdENoYW5nZUNhbGxiYWNrDQoJICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB3aGljaCBpcyBjaGFuZ2VkLg0KCSAqIEBwYXJhbSB7Ym9vbGVhbnxKU09OfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHN0YXRlIHdoaWNoIGlzIGNoYW5nZWQuDQoJICogQHBhcmFtIHtKU09OfSBjb21wb25lbnRzIFRoZSA8Yj48aT5KU09OPC9pPjwvYj4gb2JqZWN0IG9mIGxvYWRlZCA8Yj5TR05VSUtpdDwvYj4gY29tcG9uZW50cywgb3IgYW4gZW1wdHkgPGI+PGk+SlNPTjwvaT48L2I+IG9iamVjdCBpZiBubyBjb21wb25lbnRzIGxvYWRlZC4NCgkgKi8NCgkvKioNCgkgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIDxiPlNHTlVJS2l0PC9iPiBpcyByZWFkeS4NCgkgKg0KCSAqIEBjYWxsYmFjayBTR05VSUtpdFJlYWR5Q2FsbGJhY2sNCgkgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVhZHkgdGhlIHN0YXR1cyBvZiByZWFkaW5lc3Mgb2YgPGI+U0dOVUlLaXQ8L2I+Lg0KCSAqLw0KDQoJLyoqDQoJICogQWRkIGEgbG9hZGVkIDxiPlNHTlVJS2l0PC9iPiBjb21wb25lbnQuDQoJICoNCgkgKiBAcGFyYW0ge0pTT059IHZhbHVlIFRoZSA8Yj48aT5KU09OPC9pPjwvYj4gb2JqZWN0IG9mIHRoZSBsb2FkZWQgPGI+U0dOVUlLaXQ8L2I+IGNvbXBvbmVudC4NCgkgKi8NCglzZXQgY29tcG9uZW50KHZhbHVlKSB7DQoJCWlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICIiKQ0KCQkJdmFsdWUgPSB7fTsNCgkJT2JqZWN0LmFzc2lnbih0aGlzLmNvbXBvbmVudHMsIHZhbHVlKTsNCg0KCQl0aGlzLm9uQ2hhbmdlTGlzdGVuZXIuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKCJjb21wb25lbnRzIiwgdmFsdWUsIHRoaXMuY29tcG9uZW50cykpOw0KCX0sDQoNCgkvKioNCgkgKiBHZXQgdGhlIGxpc3Qgb2YgbG9hZGVkIDxiPlNHTlVJS2l0PC9iPiBjb21wb25lbnRzLg0KCSAqDQoJICogQHJldHVybiB7b2JqZWN0fSBUaGUgPGI+PGk+SlNPTjwvaT48L2I+IG9iamVjdCBvZiBsb2FkZWQgPGI+U0dOVUlLaXQ8L2I+IGNvbXBvbmVudHMsIG9yIGFuIGVtcHR5IDxiPjxpPkpTT048L2k+PC9iPiBvYmplY3QgaWYgbm8gY29tcG9uZW50cyBsb2FkZWQuDQoJICovDQoJZ2V0IGNvbXBvbmVudCgpIHsNCgkJcmV0dXJuIHRoaXMuY29tcG9uZW50czsNCgl9LA0KDQoJLyoqDQoJICogU2V0IHRoZSBzdGF0dXMgb2YgcmVhZGluZXNzIG9mIDxiPlNHTlVJS2l0PC9iPi4NCgkgKg0KCSAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSZWFkeSBUaGUgdGhlIHN0YXR1cyBvZiByZWFkaW5lc3Mgb2YgPGI+U0dOVUlLaXQ8L2I+Lg0KCSAqLw0KCXNldCByZWFkeShpc1JlYWR5KSB7DQoJCXRoaXMuaXNSZWFkeSA9IGlzUmVhZHk7DQoJCXRoaXMub25DaGFuZ2VMaXN0ZW5lci5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoInJlYWR5IiwgdGhpcy5pc1JlYWR5KSk7DQoNCgkJaWYoaXNSZWFkeSkNCgkJCXRoaXMub25SZWFkeUxpc3RlbmVyLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihpc1JlYWR5KSk7DQoJfSwNCg0KCS8qKg0KCSAqIEdldCB0aGUgc3RhdHVzIG9mIHJlYWRpbmVzcyBvZiA8Yj5TR05VSUtpdDwvYj4uDQoJICoNCgkgKiBAcmV0dXJuIHtib29sZWFufSA8Yj48aT5UUlVFPC9pPjwvYj4gaWYgPGI+U0dOVUlLaXQ8L2I+IGlzIHJlYWR5LCA8Yj48aT5GQUxTRTwvaT48L2I+IG90aGVyd2lzZS4NCgkgKi8NCglnZXQgcmVhZHkoKSB7DQoJCXJldHVybiB0aGlzLmlzUmVhZHk7DQoJfSwNCg0KCS8qKg0KCSAqIFNldCB0aGUgaGFuZGxlciBmb3IgPGI+U0dOVUlLaXQ8L2I+IDxiPjxpPk9uQ2hhbmdlPC9pPjwvYj4gZXZlbnQsIHdoaWNoIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYSBjb21wb25lbnQgaXMgbG9hZGVkL3JlbW92ZWQgb3IgdGhlIHN0YXR1cyBvZiByZWFkaW5lc3MgaXMgY2hhbmdlZC4NCgkgKg0KCSAqIEBwYXJhbSB7U0dOVUlLaXRDaGFuZ2VDYWxsYmFja31saXN0ZW5lcg0KCSAqLw0KCXNldE9uQ2hhbmdlTGlzdGVuZXI6IGZ1bmN0aW9uKGxpc3RlbmVyKSB7DQoJCXRoaXMub25DaGFuZ2VMaXN0ZW5lci5wdXNoKGxpc3RlbmVyKTsNCgl9LA0KDQoJLyoqDQoJICogU2V0IHRoZSBoYW5kbGVyIGZvciA8Yj5TR05VSUtpdDwvYj4gPGI+PGk+T25SZWFkeTwvaT48L2I+IGV2ZW50LCB3aGljaCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSA8Yj5TR05VSUtpdDwvYj4gaXMgcmVhZHkuDQoJICoNCgkgKiBAcGFyYW0ge1NHTlVJS2l0UmVhZHlDYWxsYmFja31saXN0ZW5lcg0KCSAqLw0KCXNldE9uUmVhZHlMaXN0ZW5lcjogZnVuY3Rpb24obGlzdGVuZXIpIHsNCgkJdGhpcy5vblJlYWR5TGlzdGVuZXIucHVzaChsaXN0ZW5lcik7DQoNCgkJaWYodGhpcy5yZWFkeSkNCgkJCXRoaXMub25SZWFkeUxpc3RlbmVyLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcih0aGlzLnJlYWR5KSk7DQoJfSwNCn07DQp3aW5kb3cuU0dOVUlLaXQgPSBTR05VSUtpdDsNCg0KY29uc3QgdW50aWwgPSAocHJlZGljYXRlRm4pID0+IHsNCgljb25zdCBwb2xsID0gKGRvbmUpID0+IChwcmVkaWNhdGVGbigpID8gZG9uZSgpIDogc2V0VGltZW91dCgoKSA9PiBwb2xsKGRvbmUpLCA1MDApKTsNCglyZXR1cm4gbmV3IFByb21pc2UocG9sbCk7DQp9Ow0KDQphc3luYyBmdW5jdGlvbiBwYXVzZSh2KSB7DQoJd2hpbGUodiA8IDEwMCkNCgkJYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTsNCn0NCg0KZnVuY3Rpb24gbG9vcChsaWdodGJveEltYWdlcywgaW5kZXgpIHsNCglpZihpbmRleCA9PT0gbGlnaHRib3hJbWFnZXMubGVuZ3RoKSByZXR1cm47DQoNCglsaWdodGJveEltYWdlc1tpbmRleF0ub25sb2FkID0gZnVuY3Rpb24oKSB7DQoJCWNvbnNvbGUubG9nKCJpbWFnZSAiICsgaW5kZXggKyAiIGxvYWRlZC4iKTsNCgkJbG9vcChsaWdodGJveEltYWdlcywgKytpbmRleCk7DQoJfTsNCn0NCg0KKGFzeW5jIGZ1bmN0aW9uKHByZWNhbGxiYWNrKSB7DQoJY29uc3QgdGl0bGUgPSBkb2N1bWVudC50aXRsZTsNCglpZih0aXRsZSAhPT0gdW5kZWZpbmVkKQ0KCQlkb2N1bWVudC50aXRsZSA9ICJMb2FkaW5nLi4uIjsNCg0KCWlmKHdpbmRvdy5qUXVlcnkpDQoJCSQuaG9sZFJlYWR5KHRydWUpOw0KDQoJKCgpID0+IHsNCgkJY29uc3QgY3NzID0gYC8qDQogKiBDb3B5cmlnaHQgKGMpIDIwMjIgU0dOZXR3b3Jrcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqDQogKiBUaGUgc29mdHdhcmUgaXMgYW4gZXhjbHVzaXZlIGNvcHlyaWdodCBvZiAiU0dOZXR3b3JrcyIgYW5kIGlzIHByb3ZpZGVkIGFzIGlzIGV4Y2x1c2l2ZWx5IHdpdGggb25seSAiVVNBR0UiIGFjY2Vzcy4gIk1vZGlmaWNhdGlvbiIsICAiQWx0ZXJhdGlvbiIsICJSZS1kaXN0cmlidXRpb24iIGlzIGNvbXBsZXRlbHkgcHJvaGliaXRlZC4NCiAqIFZJT0xBVElORyBUSEUgQUJPVkUgVEVSTVMgSVMgQSBQVU5JU0hBQkxFIE9GRkVOU0UgV0hJQ0ggTUFZIExFQUQgVE8gTEVHQUwgQ09OU0VRVUVOQ0VTLg0KICovDQoNCi5oYXMtcHJlbG9hZGVyLA0KLmhhcy1wcmVsb2FkZXIgKiB7DQpcdC0tc2duLWJhY2tncm91bmQ6ICNmZmY7DQpcdC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoOiA2cHg7DQpcdC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoOiA0NHB4Ow0KXHQtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQ6IDIycHg7DQpcdC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbjogMXB4Ow0KXHQtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXM6IDZweDsNCn0NCg0KQG1lZGlhIGFsbCBhbmQgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7DQpcdC5oYXMtcHJlbG9hZGVyLA0KXHQuaGFzLXByZWxvYWRlciAqIHsNClx0LS1zZ24tYmFja2dyb3VuZDogIzAwMDsNClx0fQ0KfQ0KDQpib2R5IHsNClx0bWFyZ2luOiAwOw0KfQ0KDQouc2duLXByZWxvYWRlciB7DQpcdHBhZGRpbmc6IDA7DQpcdHdpZHRoOiAxMDAlOw0KXHRoZWlnaHQ6IDEwMCU7DQpcdGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNnbi1iYWNrZ3JvdW5kKTsNClx0ZGlzcGxheTogZmxleDsNClx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQpcdGFsaWduLWl0ZW1zOiBjZW50ZXI7DQpcdHBvc2l0aW9uOiBhYnNvbHV0ZTsNClx0ei1pbmRleDogOTk5OTk5Ow0KfQ0KDQoNCi5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciB7DQpcdHBvc2l0aW9uOiByZWxhdGl2ZTsNClx0ZGlzcGxheTogaW5saW5lLWZsZXg7DQpcdGp1c3RpZnktY29udGVudDogY2VudGVyOw0KXHRhbGlnbi1pdGVtczogY2VudGVyOw0KfQ0KDQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciB7DQpcdGFuaW1hdGlvbjogcm90YXRlIDEwcyBpbmZpbml0ZSBsaW5lYXI7DQpcdHBvc2l0aW9uOiByZWxhdGl2ZTsNClx0ZGlzcGxheTogaW5saW5lLWZsZXg7DQpcdGp1c3RpZnktY29udGVudDogY2VudGVyOw0KXHRhbGlnbi1pdGVtczogY2VudGVyOw0KXHR3aWR0aDogMTAwJTsNClx0aGVpZ2h0OiAxMDAlOw0KfQ0KDQoNCi5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IGltZyB7DQpcdHdpZHRoOiAxMDAlOw0KXHRoZWlnaHQ6IDEwMCU7DQpcdG1hcmdpbjogdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbik7DQpcdGRpc3BsYXk6IGZsZXg7DQpcdGp1c3RpZnktY29udGVudDogY2VudGVyOw0KXHRhbGlnbi1pdGVtczogY2VudGVyOw0KXHRwb3NpdGlvbjogcmVsYXRpdmU7DQpcdHRvcDogNTAlOw0KXHRsZWZ0OiA1MCU7DQp9DQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGltZyB7DQpcdHdpZHRoOiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkpOw0KXHRoZWlnaHQ6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSk7DQpcdG1hcmdpbjogdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbik7DQp9DQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGkgew0KXHRhbmltYXRpb246IHJvdGF0ZSAzcyBpbmZpbml0ZSBjdWJpYy1iZXppZXIoMC4wOSwgMC42LCAwLjgsIDAuMDMpOw0KXHR0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTAwJSAwOw0KXHRwb3NpdGlvbjogYWJzb2x1dGU7DQpcdGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNClx0YWxpZ24taXRlbXM6IGNlbnRlcjsNClx0dG9wOiA1MCU7DQpcdGxlZnQ6IDUwJTsNClx0Ym9yZGVyOiBzb2xpZCB2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpIHRyYW5zcGFyZW50Ow0KXHRib3JkZXItYm90dG9tOiBub25lOw0KfQ0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpOm50aC1jaGlsZCgxKSB7DQpcdC1tb3otYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDAuMywgMC4xMiwgMC4wMyk7DQpcdC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDAuMywgMC4xMiwgMC4wMyk7DQpcdGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAwLjMsIDAuMTIsIDAuMDMpOw0KXHR3aWR0aDogdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKTsNClx0aGVpZ2h0OiB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KTsNClx0bWFyZ2luLXRvcDogY2FsYygwcHggLSB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSk7DQpcdG1hcmdpbi1sZWZ0OiBjYWxjKDBweCAtIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpKTsNClx0Ym9yZGVyLWNvbG9yOiAjMjE3MmI4Ow0KXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAxKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNClx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDEpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KfQ0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpOm50aC1jaGlsZCgyKSB7DQpcdC1tb3otYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDAuNiwgMC4yNCwgMC4wMyk7DQpcdC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDAuNiwgMC4yNCwgMC4wMyk7DQpcdGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAwLjYsIDAuMjQsIDAuMDMpOw0KXHR3aWR0aDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikpOw0KXHRoZWlnaHQ6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSk7DQpcdG1hcmdpbi10b3A6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkpKTsNClx0bWFyZ2luLWxlZnQ6IGNhbGMoMHB4IC0gKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkpKTsNClx0Ym9yZGVyLWNvbG9yOiAjMThhMzliOw0KXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAyKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNClx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDIpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KfQ0KLnNnbi1wcmVsb2FkZXIgPiAucHJlbG9hZGVyID4gLnNwaW5uZXIgPiBpOm50aC1jaGlsZCgzKSB7DQpcdC1tb3otYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDAuOSwgMC4zNiwgMC4wMyk7DQpcdC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDAuOSwgMC4zNiwgMC4wMyk7DQpcdGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAwLjksIDAuMzYsIDAuMDMpOw0KXHR3aWR0aDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAyKTsNClx0aGVpZ2h0OiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1oZWlnaHQpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikpOw0KXHRtYXJnaW4tdG9wOiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpKSk7DQpcdG1hcmdpbi1sZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpKSk7DQpcdGJvcmRlci1jb2xvcjogIzgyYzU0NTsNClx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMikgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQpcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiAyKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNCn0NCi5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IC5zcGlubmVyID4gaTpudGgtY2hpbGQoNCkgew0KXHQtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAxLjIsIDAuNDgsIDAuMDMpOw0KXHQtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAxLjIsIDAuNDgsIDAuMDMpOw0KXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS4yLCAwLjQ4LCAwLjAzKTsNClx0d2lkdGg6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMyk7DQpcdGhlaWdodDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMS41KTsNClx0bWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAzKSkpOw0KXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAzKSkpOw0KXHRib3JkZXItY29sb3I6ICNmOGI3Mzk7DQpcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDMpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMykgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQp9DQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGk6bnRoLWNoaWxkKDUpIHsNClx0LW1vei1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS41LCAwLjYsIDAuMDMpOw0KXHQtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAxLjUsIDAuNiwgMC4wMyk7DQpcdGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAxLjUsIDAuNiwgMC4wMyk7DQpcdHdpZHRoOiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDQpOw0KXHRoZWlnaHQ6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDIpOw0KXHRtYXJnaW4tdG9wOiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDQpKSk7DQpcdG1hcmdpbi1sZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDQpKSk7DQpcdGJvcmRlci1jb2xvcjogI2YwNjA0NTsNClx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQpcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA0KSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNCn0NCi5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IC5zcGlubmVyID4gaTpudGgtY2hpbGQoNikgew0KXHQtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAxLjgsIDAuNzIsIDAuMDMpOw0KXHQtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAxLjgsIDAuNzIsIDAuMDMpOw0KXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMS44LCAwLjcyLCAwLjAzKTsNClx0d2lkdGg6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNSk7DQpcdGhlaWdodDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMi41KTsNClx0bWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA1KSkpOw0KXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA1KSkpOw0KXHRib3JkZXItY29sb3I6ICNlZDI4NjE7DQpcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDUpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNSkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQp9DQouc2duLXByZWxvYWRlciA+IC5wcmVsb2FkZXIgPiAuc3Bpbm5lciA+IGk6bnRoLWNoaWxkKDcpIHsNClx0LW1vei1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMi4xLCAwLjg0LCAwLjAzKTsNClx0LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMi4xLCAwLjg0LCAwLjAzKTsNClx0YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDksIDIuMSwgMC44NCwgMC4wMyk7DQpcdHdpZHRoOiBjYWxjKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDYpOw0KXHRoZWlnaHQ6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDMpOw0KXHRtYXJnaW4tdG9wOiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDYpKSk7DQpcdG1hcmdpbi1sZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDYpKSk7DQpcdGJvcmRlci1jb2xvcjogI2MxMjY4MDsNClx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNikgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQpcdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBjYWxjKCh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtd2lkdGgpICsgKCh2YXIoLS1zZ24tcHJlbG9hZGVyLXN0cmlwZXMtd2lkdGgpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLW1hcmdpbikpICogMikgKiA2KSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1yYWRpdXMpKTsNCn0NCi5zZ24tcHJlbG9hZGVyID4gLnByZWxvYWRlciA+IC5zcGlubmVyID4gaTpudGgtY2hpbGQoOCkgew0KXHQtbW96LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAyLjQsIDAuOTYsIDAuMDMpOw0KXHQtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA5LCAyLjQsIDAuOTYsIDAuMDMpOw0KXHRhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wOSwgMi40LCAwLjk2LCAwLjAzKTsNClx0d2lkdGg6IGNhbGModmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNyk7DQpcdGhlaWdodDogY2FsYyh2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtaGVpZ2h0KSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogMy41KTsNClx0bWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA3KSkpOw0KXHRtYXJnaW4tbGVmdDogY2FsYygwcHggLSAodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLWhlaWdodCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiA3KSkpOw0KXHRib3JkZXItY29sb3I6ICM1ZDMxOTE7DQpcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IGNhbGMoKHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy13aWR0aCkgKyAoKHZhcigtLXNnbi1wcmVsb2FkZXItc3RyaXBlcy13aWR0aCkgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtbWFyZ2luKSkgKiAyKSAqIDcpICsgdmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXJhZGl1cykpOw0KXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogY2FsYygodmFyKC0tc2duLXByZWxvYWRlci1jaXJjbGVzLXdpZHRoKSArICgodmFyKC0tc2duLXByZWxvYWRlci1zdHJpcGVzLXdpZHRoKSArIHZhcigtLXNnbi1wcmVsb2FkZXItY2lyY2xlcy1tYXJnaW4pKSAqIDIpICogNykgKyB2YXIoLS1zZ24tcHJlbG9hZGVyLWNpcmNsZXMtcmFkaXVzKSk7DQp9DQoNCkAtbW96LWtleWZyYW1lcyByb3RhdGUgew0KXHR0byB7DQpcdFx0dHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsNClx0fQ0KfQ0KQC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZSB7DQpcdHRvIHsNClx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOw0KXHR9DQp9DQpAa2V5ZnJhbWVzIHJvdGF0ZSB7DQpcdHRvIHsNClx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOw0KXHR9DQp9DQoNCg0KYDsNCgkJY29uc3QgaGVhZCAgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sDQoJCSAgICAgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsNCg0KCQloZWFkLmFwcGVuZENoaWxkKHN0eWxlKTsNCgkJc3R5bGUudHlwZSA9ICJ0ZXh0L2NzcyI7DQoJCXN0eWxlLmlkID0gInNnbi11aWtpdC1zdHlsZXMiOw0KCQlpZihzdHlsZS5zdHlsZVNoZWV0KSB7DQoJCQkvLyBUaGlzIGlzIHJlcXVpcmVkIGZvciBJRTggYW5kIGJlbG93Lg0KCQkJc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzOw0KCQl9IGVsc2Ugew0KCQkJc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7DQoJCX0NCgl9KSgpOw0KCShmdW5jdGlvbigpIHsNCgkJbGV0IHByZWxvYWRlckVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsNCgkJcHJlbG9hZGVyRWxlbS5jbGFzc05hbWUgPSAic2duLXByZWxvYWRlciI7DQoJCWxldCBwcmVsb2FkZXIgPSBgXHRcdFx0PGRpdiBjbGFzcz0icHJlbG9hZGVyIj5cbmA7DQoJCS8vcHJlbG9hZGVyICs9IGBcdFx0XHRcdDxpbWcgc3JjPSI8Pz0kcHVibGljX2ltZ0Fzc2V0czs/Pmljb25zL3hzbWFsbC5wbmciPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdDxkaXYgY2xhc3M9InNwaW5uZXIiPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdFx0PGk+PC9pPlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHRcdDwvZGl2PlxuYDsNCgkJcHJlbG9hZGVyICs9IGBcdFx0XHQ8L2Rpdj5cbmA7DQoJCXByZWxvYWRlciArPSBgXHRcdDwvZGl2PlxuYDsNCg0KCQlwcmVsb2FkZXJFbGVtLmlubmVySFRNTCA9IHByZWxvYWRlcjsNCg0KCQl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7DQoJCQlkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSArPSAiIGhhcy1wcmVsb2FkZXIiOw0KCQkJZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUocHJlbG9hZGVyRWxlbSwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsNCgkJfTsNCgl9KSgpOw0KDQoJY29uc3QgY3VycmVudFNjcmlwdCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W3NyYyo9XCJTR05VSUtpdC5sb2FkZXIuanNcIl0iKTsNCgljb25zdCB1cmwgPSBjdXJyZW50U2NyaXB0LnNyYy5zcGxpdCgiLyIpLnNsaWNlKDAsIC0yKS5qb2luKCIvIikgKyAiLyI7DQoJY29uc3QgcHJlbG9hZCA9IFsNCgkJLy8nanMvaTE4bi9TR05pMThuLmpzJw0KCV07DQoNCglsZXQgZmlsZXNsb2FkZWQgPSAwOw0KCWNvbnN0IGZpbGVzdG9sb2FkID0gcHJlbG9hZC5sZW5ndGg7DQoNCglpZihmaWxlc3RvbG9hZCA+IDApIHsNCgkJZm9yKGxldCBpID0gMDsgaSA8IGZpbGVzdG9sb2FkOyBpKyspIHsNCgkJCWNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOw0KCQkJc2NyaXB0LnNyYyA9IHVybCArIHByZWxvYWRbaV07DQoJCQlzY3JpcHQuYXN5bmMgPSBmYWxzZTsNCgkJCXNjcmlwdC5kZWZlciA9IGZhbHNlOw0KCQkJY3VycmVudFNjcmlwdC5hZnRlcihzY3JpcHQpOw0KCQkJaWYoaSA9PT0gMCkNCgkJCQlzY3JpcHQuaWQgPSAic2duLXByZWxvYWQtZW5kIjsNCgkJCXNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbigpIHsNCgkJCQlmaWxlc2xvYWRlZCsrOw0KCQkJCXNjcmlwdC5vbmxvYWQgPSBudWxsOw0KCQkJCWZpbmlzaExvYWQoKTsNCgkJCX07DQoJCX0NCgl9IGVsc2UNCgkJZmluaXNoTG9hZCgpOw0KDQoJYXN5bmMgZnVuY3Rpb24gZmluaXNoTG9hZCgpIHsNCgkJbGV0IHByb2dyZXNzID0gTWF0aC5yb3VuZCgoZmlsZXNsb2FkZWQgKiAxMDApIC8gZmlsZXN0b2xvYWQpIHx8IDEwMDsNCg0KCQlhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsNCgkJCWlmKGZpbGVzbG9hZGVkID49IGZpbGVzdG9sb2FkKSB7DQoJCQkJcmVzb2x2ZSgpOw0KCQkJfQ0KCQl9KS50aGVuKGZ1bmN0aW9uKCkgew0KCQkJLy9pbXBvcnQoJy4vaGVscGVycy9oZWxwZXJzLmpzJyk7DQoJCQkkKCJoZWFkID4gdGl0bGUiKS50ZXh0KHRpdGxlKTsNCgkJCWlmKHR5cGVvZiBwcmVjYWxsYmFjayA9PT0gImZ1bmN0aW9uIiAmJiBwcm9ncmVzcyA9PT0gMTAwKQ0KCQkJCXByZWNhbGxiYWNrKCk7DQoJCX0pOw0KCX0NCn0pKGZ1bmN0aW9uKCkgew0KCShhc3luYyBmdW5jdGlvbihjYWxsYmFjaykgew0KCQljb25zdCBzZ251aWtpdFNjcmlwdCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W3NyYyo9XCJTR05VSUtpdC5sb2FkZXIuanNcIl0iKTsNCgkJY29uc3QgY3VycmVudFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZ24tcHJlbG9hZC1lbmQiKSB8fCBzZ251aWtpdFNjcmlwdDsNCg0KCQlmdW5jdGlvbiBnZXRTY3JpcHRVUkwoKSB7DQoJCQlyZXR1cm4gc2dudWlraXRTY3JpcHQuc3JjOw0KCQl9DQoNCgkJY29uc3QgdXJsID0gZ2V0U2NyaXB0VVJMKCkuc3BsaXQoIi8iKS5zbGljZSgwLCAtMikuam9pbigiLyIpICsgIi8iOw0KDQoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQoJCQlzdGFydExvYWQoKTsNCgkJfSwgNTAwMCk7DQoNCgkJZnVuY3Rpb24gc3RhcnRMb2FkKCkgew0KCQkJY29uc3Qgc2NyaXB0cyA9IFsNCgkJCQkianMvU0dOVUlLaXQuYnVuZGxlLmpzIiwNCgkJCV07DQoJCQljb25zdCBzdHlsZXMgPSBbDQoJCQkJImNzcy9TR05VSUtpdC5idW5kbGUuY3NzIiwNCgkJCV07DQoJCQlsZXQgZmlsZXNsb2FkZWQgPSAwLA0KCQkJICAgIGxhc3RTY3JpcHQgID0gY3VycmVudFNjcmlwdDsNCgkJCWNvbnN0IGZpbGVzdG9sb2FkID0gc2NyaXB0cy5sZW5ndGggKyBzdHlsZXMubGVuZ3RoOw0KDQoJCQlmdW5jdGlvbiBsb2FkU2NyaXB0KGkpIHsNCgkJCQlpZihpID09PSBzY3JpcHRzLmxlbmd0aCkgcmV0dXJuOw0KDQoJCQkJY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7DQoJCQkJc2NyaXB0LnNyYyA9IHVybCArIHNjcmlwdHNbaV07DQoJCQkJc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgew0KCQkJCQlmaWxlc2xvYWRlZCsrOw0KCQkJCQlTR05VSUtpdC5jb21wb25lbnQgPSB7DQoJCQkJCQlpOiBzY3JpcHRzW2ldLA0KCQkJCQl9Ow0KCQkJCQlzY3JpcHQub25sb2FkID0gbnVsbDsNCgkJCQkJLy9jb25zb2xlLmxvZyhgTE9BREVEIFNDUklQVDogJHtzY3JpcHQuc3JjfWAsIGAke2l9LyR7ZmlsZXN0b2xvYWR9YCk7DQoJCQkJCWZpbmlzaExvYWQoKTsNCgkJCQkJbG9hZFNjcmlwdCgrK2kpOw0KCQkJCX07DQoJCQkJbGFzdFNjcmlwdC5hZnRlcihzY3JpcHQpOw0KCQkJCWxhc3RTY3JpcHQgPSBsYXN0U2NyaXB0Lm5leHRFbGVtZW50U2libGluZyB8fCBjdXJyZW50U2NyaXB0Ow0KCQkJfQ0KDQoJCQlmdW5jdGlvbiBsb2FkU3R5bGUoaSkgew0KCQkJCWlmKGkgPT09IHNjcmlwdHMubGVuZ3RoKSByZXR1cm47DQoNCgkJCQljb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTsNCgkJCQlzdHlsZS5yZWwgPSAic3R5bGVzaGVldCI7DQoJCQkJc3R5bGUuaHJlZiA9IHVybCArIHN0eWxlc1tpXTsNCgkJCQlzdHlsZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsNCgkJCQkJZmlsZXNsb2FkZWQrKzsNCgkJCQkJc3R5bGUub25sb2FkID0gbnVsbDsNCgkJCQkJZmluaXNoTG9hZCgpOw0KCQkJCQlsb29wKCsraSk7DQoJCQkJfTsNCgkJCQljdXJyZW50U2NyaXB0LmFmdGVyKHN0eWxlKTsNCgkJCX0NCg0KCQkJbG9hZFNjcmlwdCgwKTsNCgkJCWxvYWRTdHlsZSgwKTsNCg0KCQkJYXN5bmMgZnVuY3Rpb24gZmluaXNoTG9hZCgpIHsNCgkJCQljb25zdCBwcm9ncmVzcyA9IE1hdGgucm91bmQoKGZpbGVzbG9hZGVkICogMTAwKSAvIGZpbGVzdG9sb2FkKTsNCg0KCQkJCWlmKHR5cGVvZiBjYWxsYmFjayA9PT0gImZ1bmN0aW9uIikgew0KCQkJCQljYWxsYmFjayhmaWxlc2xvYWRlZCwgZmlsZXN0b2xvYWQsIHByb2dyZXNzKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9KShhc3luYyBmdW5jdGlvbihsb2FkZWQsIHRvdGFsLCBwcm9ncmVzcykgew0KCQlpZihwcm9ncmVzcyA9PT0gMTAwKSB7DQoJCQkvL2ltcG9ydCgnLi9pMThuL1NHTmkxOG4uanMnKTsNCgkJCS8vaW1wb3J0KCcuL2NvbXBvbmVudHMvY29tcG9uZW50cy5qcycpOw0KCQkJU0dOVUlLaXQucmVhZHkgPSB0cnVlOw0KCQkJd2luZG93LlNHTlVJS2l0UmVhZHkgPSB0cnVlOw0KDQoJCQljb25zdCBsZWZ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic3R5bGVbZGF0YS1ja2U9XCJ0cnVlXCJdIik7DQoJCQlpZihsZWZ0ICE9PSBudWxsKQ0KCQkJCWxlZnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsZWZ0KTsNCg0KCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsNCgkJCQkkLmhvbGRSZWFkeShmYWxzZSk7DQoJCQkJalF1ZXJ5LnJlYWR5KCk7DQoNCgkJCQkkKCJib2R5IikuY2hpbGRyZW4oIi5zZ24tcHJlbG9hZGVyIikuZmFkZU91dCgyMDAwLCBmdW5jdGlvbigpIHsNCgkJCQkJJCgiYm9keSIpLmNoaWxkcmVuKCIuc2duLXByZWxvYWRlciIpLnJlbW92ZSgpOw0KCQkJCQkkKCJib2R5IikucmVtb3ZlQ2xhc3MoImhhcy1wcmVsb2FkZXIiKTsNCgkJCQl9KTsNCgkJCX0sIDUwMDApOw0KDQoJCX0NCgl9KTsNCn0pOw0KDQoNCmFzeW5jIGZ1bmN0aW9uIGdldFNHTkkxOG5JbnN0YW5jZShjYWxsYmFjaykgew0KCXJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7DQoJCWNvbnN0IHRpbWVvdXRIYW5kbGVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsNCgkJCWlmKGNoZWNrSW50ZXJ2YWxIYW5kbGVyKQ0KCQkJCWNsZWFySW50ZXJ2YWwoY2hlY2tJbnRlcnZhbEhhbmRsZXIpOw0KCQl9LCAxMDAwMCk7DQoNCgkJY29uc3QgY2hlY2tJbnRlcnZhbEhhbmRsZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsNCgkJCWlmKHdpbmRvdy5TR05VSUtpdFJlYWR5KSB7DQoJCQkJaWYodGltZW91dEhhbmRsZXIpDQoJCQkJCWNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlcik7DQoJCQkJY2xlYXJJbnRlcnZhbChjaGVja0ludGVydmFsSGFuZGxlcik7DQoJCQkJY29uc3QgYyA9IG5ldyBTR05pMThuKCk7DQoNCgkJCQlyZXNvbHZlKGMpOw0KCQkJfQ0KCQl9LCAxMDApOw0KCX0pOw0KfQ0KDQo="; for(let i = 2; i < argv.length; i++) { const v = argv[i].replace("--", ""); i++; diff --git a/src/js/helpers/helpers.js b/src/js/helpers/helpers.js index a5c58bf1..6219d854 100644 --- a/src/js/helpers/helpers.js +++ b/src/js/helpers/helpers.js @@ -16,6 +16,38 @@ function logStopArt(stopArt) { , "text-align: center" , "font-weight: bold", ].join(";"); + if(empty(stopArt)) { + stopArt = "\n"; + stopArt += " \n"; + stopArt += " \n"; + stopArt += " SSSSSSSSSSSSSSS tttt !!! \n"; + stopArt += " SS:::::::::::::::S ttt:::t !!:!! \n"; + stopArt += " S:::::SSSSSS::::::S t:::::t !:::! \n"; + stopArt += " S:::::S SSSSSSS t:::::t !:::! \n"; + stopArt += " S:::::S ttttttt:::::ttttttt ooooooooooo ppppp ppppppppp !:::! \n"; + stopArt += " S:::::S t:::::::::::::::::t oo:::::::::::oo p::::ppp:::::::::p !:::! \n"; + stopArt += " S::::SSSS t:::::::::::::::::t o:::::::::::::::o p:::::::::::::::::p !:::! \n"; + stopArt += " SS::::::SSSSS tttttt:::::::tttttt o:::::ooooo:::::o pp::::::ppppp::::::p !:::! \n"; + stopArt += " SSS::::::::SS t:::::t o::::o o::::o p:::::p p:::::p !:::! \n"; + stopArt += " SSSSSS::::S t:::::t o::::o o::::o p:::::p p:::::p !:::! \n"; + stopArt += " S:::::S t:::::t o::::o o::::o p:::::p p:::::p !!:!! \n"; + stopArt += " S:::::S t:::::t tttttt o::::o o::::o p:::::p p::::::p !!! \n"; + stopArt += " SSSSSSS S:::::S t::::::tttt:::::t o:::::ooooo:::::o p:::::ppppp:::::::p \n"; + stopArt += " S::::::SSSSSS:::::S tt::::::::::::::t o:::::::::::::::o p::::::::::::::::p !!! \n"; + stopArt += " S:::::::::::::::SS tt:::::::::::tt oo:::::::::::oo p::::::::::::::pp !!:!! \n"; + stopArt += " SSSSSSSSSSSSSSS ttttttttttt ooooooooooo p::::::pppppppp !!! \n"; + stopArt += " p:::::p \n"; + stopArt += " p:::::p \n"; + stopArt += " p:::::::p \n"; + stopArt += " p:::::::p \n"; + stopArt += " p:::::::p \n"; + stopArt += " ppppppppp \n"; + stopArt += " \n"; + stopArt += " \n"; + stopArt += " \n"; + stopArt += "If you are not a developer, please close this panel by pressing F12 or CTRL-SHIFT-I (Windows). If someone told you to paste a block of code here to activate a feature, please don't do that as it may result in a punishable offense.\n"; + } + Console.log("%c" + stopArt, styles); }