From 690b75420299a00b0c6a502544550819e350bfa1 Mon Sep 17 00:00:00 2001 From: Sagnik Ganguly Date: Sat, 7 Jan 2023 13:50:14 +0530 Subject: [PATCH] UPDATED: Build Scripts --- build/config.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build/config.js b/build/config.js index 961ace36..4e33e8fe 100644 --- a/build/config.js +++ b/build/config.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 SGNetworks. All rights reserved. + * Copyright (c) 2022-2023 SGNetworks. All rights reserved. * * The software is an exclusive copyright of "SGNetworks" and is provided as is exclusively with only "USAGE" access. "Modification", "Alteration", "Re-distribution" is completely prohibited. * VIOLATING THE ABOVE TERMS IS A PUNISHABLE OFFENSE WHICH MAY LEAD TO LEGAL CONSEQUENCES. @@ -12,7 +12,8 @@ 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 = "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"; for(let i = 2; i < argv.length; i++) { const v = argv[i].replace("--", ""); i++;