From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: tjuhasz To: git-commits@fedoraproject.org Subject: [rpms/nodejs22] rawhide: Fix for CVE-2026-59873 and Fix for CVE-2026-59874 (node-tar) Date: Fri, 31 Jul 2026 08:03:35 GMT Message-ID: <178548501504.1.8047674400832868223.rpms-nodejs22-555cad6859d2@fedoraproject.org> List-ID: X-Git-Repo: rpms/nodejs22 X-Git-Branch: rawhide X-Git-Rev: 555cad6859d2bdabca212b31077df73300782145 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvbm9kZWpzMjIKICAgICAgICAgICAgQnJhbmNoIDogcmF3aGlkZQogICAgICAg ICAgICBDb21taXQgOiA1NTVjYWQ2ODU5ZDJiZGFiY2EyMTJiMzEwNzdkZjczMzAwNzgyMTQ1CiAg ICAgICAgICAgIEF1dGhvciA6IHRqdWhhc3ogPHRqdWhhc3pAcmVkaGF0LmNvbT4KICAgICAgICAg ICAgRGF0ZSAgIDogMjAyNi0wNy0zMFQxMzoyNDozNiswMDowMAogICAgICAgICAgICBTdGF0cyAg OiArNDkxLy0wIGluIDIgZmlsZShzKQogICAgICAgICAgICBVUkwgICAgOiBodHRwczovL3NyYy5m ZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL25vZGVqczIyL2MvNTU1Y2FkNjg1OWQyYmRhYmNhMjEyYjMx MDc3ZGY3MzMwMDc4MjE0NT9icmFuY2g9cmF3aGlkZQoKICAgICAgICAgICAgTG9nOgogICAgICAg ICAgICBGaXggZm9yIENWRS0yMDI2LTU5ODczIGFuZCBGaXggZm9yIENWRS0yMDI2LTU5ODc0IChu b2RlLXRhcikKCkZpeCBmb3IgIERlY29tcHJlc3Npb24vcGFyc2UgRG9TIHZpYSB1bmxpbWl0ZWQg aW5wdXQgaW4gbm9kZS10YXIuCkZpeCBmb3IgTm9kZS10YXI6IERlbmlhbCBvZiBTZXJ2aWNlIHZp YSBtYWxmb3JtZWQgdGFyIGFyY2hpdmUgaGVhZGVyLgoKQ3JlYXRlZCBieSB1cGRhdGluZyBucG0g dG8gMTEuMTggYW5kIGZpbHRlcmluZyBvbmx5IGZvciBub2RlLXRhciBmaWxlcy4KCkFkdmlzb3J5 OgogLSBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtdGFyL3NlY3VyaXR5L2Fkdmlzb3Jp ZXMvR0hTQS0yM2hwLTNqcmgtN2ZwdwogLSBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUt dGFyL3NlY3VyaXR5L2Fkdmlzb3JpZXMvR0hTQS04eDg4LWM1bWYtN2o1dwoKUmVzb2x2ZXM6IHJo YnojMjQ5ODc2NCByaGJ6IzI0OTg3OTIgcmhieiMyNDk4Nzc5IHJoYnojMjQ5ODc1MAoKLS0tCmRp ZmYgLS1naXQgYS8wMDAzLUNWRS0yMDI2LTU5ODczLUNWRS0yMDI2LTU5ODc0LXVwZ3JhZGUtYnVu ZGxlZC10YXItdG8tNy41LjE5LnBhdGNoIGIvMDAwMy1DVkUtMjAyNi01OTg3My1DVkUtMjAyNi01 OTg3NC11cGdyYWRlLWJ1bmRsZWQtdGFyLXRvLTcuNS4xOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5kMTcxM2JlCi0tLSAvZGV2L251bGwKKysrIGIvMDAwMy1DVkUt MjAyNi01OTg3My1DVkUtMjAyNi01OTg3NC11cGdyYWRlLWJ1bmRsZWQtdGFyLXRvLTcuNS4xOS5w YXRjaApAQCAtMCwwICsxLDQ5MCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVpIFJhZGNo ZW5rbyA8YXJhZGNoZW5AcmVkaGF0LmNvbT4KK0RhdGU6IFN1biwgMjAgSnVsIDIwMjYgMDA6MDA6 MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ1ZFLTIwMjYtNTk4NzM6IGFkZCBtYXhEZWNvbXBy ZXNzaW9uUmF0aW8gZ3VhcmQgaW4gbnBtJ3MKKyBidW5kbGVkIHRhciBhZ2FpbnN0IGV4cGxvc2l2 ZSBkZWNvbXByZXNzaW9uCisKK0JhY2twb3J0IG9mIHVwc3RyZWFtIG5vZGUtdGFyIGNvbW1pdCAy ODEyZTkzIHRvIHRhciA3LjUuMTEgYnVuZGxlZCBpbgorbnBtIDEwLjkuOCAobm9kZWpzMjIpLiBB ZGRzIGEgY29uZmlndXJhYmxlIG1heERlY29tcHJlc3Npb25SYXRpbyAoZGVmYXVsdAorMTAwMCkg dG8gdGhlIFBhcnNlciBjbGFzczsgYWJvcnRzIGV4dHJhY3Rpb24gaWYgdGhlIGRlY29tcHJlc3Nl ZC9jb21wcmVzc2VkCitieXRlIHJhdGlvIGV4Y2VlZHMgdGhlIGxpbWl0LgorCitCb3RoIHBhcnNl LmpzIChzb3VyY2UpIGFuZCBpbmRleC5taW4uanMgKHJ1bnRpbWUgZW50cnkgcG9pbnQpIGFyZSBw YXRjaGVkLgorCitVcHN0cmVhbTogaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLXRhci9j b21taXQvMjgxMmU5MzM4NjY1NjU5YjE4M2FhNzIyNjUxOGMzMDcwNDQ5NTdkMworQlo6IGh0dHBz Oi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODEyMAorLS0tCitkaWZm IC0tZ2l0IGEvZGVwcy9ucG0vbm9kZV9tb2R1bGVzL3Rhci9kaXN0L2NvbW1vbmpzL2luZGV4Lm1p bi5qcyBiL2RlcHMvbnBtL25vZGVfbW9kdWxlcy90YXIvZGlzdC9jb21tb25qcy9pbmRleC5taW4u anMKK2luZGV4IGQ3ZTcxZjgxLi4xYTIyOWEwMSAxMDA2NDQKKy0tLSBhL2RlcHMvbnBtL25vZGVf bW9kdWxlcy90YXIvZGlzdC9jb21tb25qcy9pbmRleC5taW4uanMKKysrKyBiL2RlcHMvbnBtL25v ZGVfbW9kdWxlcy90YXIvZGlzdC9jb21tb25qcy9pbmRleC5taW4uanMKK0BAIC0xLDQgKzEsNCBA QAorLSJ1c2Ugc3RyaWN0Ijt2YXIgZD0ocyxlKT0+KCk9PihlfHxzKChlPXtleHBvcnRzOnt9fSku ZXhwb3J0cyxlKSxlLmV4cG9ydHMpO3ZhciBXZT1kKEM9PnsidXNlIHN0cmljdCI7dmFyIHlvPUMm JkMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihzKXtyZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6 e2RlZmF1bHQ6c319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShDLCJfX2VzTW9kdWxlIix7dmFsdWU6 ITB9KTtDLk1pbmlwYXNzPUMuaXNXcml0YWJsZT1DLmlzUmVhZGFibGU9Qy5pc1N0cmVhbT12b2lk IDA7dmFyIEJyPXR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmcHJvY2Vzcz9wcm9jZXNzOntzdGRv dXQ6bnVsbCxzdGRlcnI6bnVsbH0sZXM9cmVxdWlyZSgibm9kZTpldmVudHMiKSx4cj15byhyZXF1 aXJlKCJub2RlOnN0cmVhbSIpKSxFbz1yZXF1aXJlKCJub2RlOnN0cmluZ19kZWNvZGVyIiksYm89 cz0+ISFzJiZ0eXBlb2Ygcz09Im9iamVjdCImJihzIGluc3RhbmNlb2YgV3R8fHMgaW5zdGFuY2Vv ZiB4ci5kZWZhdWx0fHwoMCxDLmlzUmVhZGFibGUpKHMpfHwoMCxDLmlzV3JpdGFibGUpKHMpKTtD LmlzU3RyZWFtPWJvO3ZhciBTbz1zPT4hIXMmJnR5cGVvZiBzPT0ib2JqZWN0IiYmcyBpbnN0YW5j ZW9mIGVzLkV2ZW50RW1pdHRlciYmdHlwZW9mIHMucGlwZT09ImZ1bmN0aW9uIiYmcy5waXBlIT09 eHIuZGVmYXVsdC5Xcml0YWJsZS5wcm90b3R5cGUucGlwZTtDLmlzUmVhZGFibGU9U287dmFyIGdv PXM9PiEhcyYmdHlwZW9mIHM9PSJvYmplY3QiJiZzIGluc3RhbmNlb2YgZXMuRXZlbnRFbWl0dGVy JiZ0eXBlb2Ygcy53cml0ZT09ImZ1bmN0aW9uIiYmdHlwZW9mIHMuZW5kPT0iZnVuY3Rpb24iO0Mu aXNXcml0YWJsZT1nbzt2YXIgbGU9U3ltYm9sKCJFT0YiKSx1ZT1TeW1ib2woIm1heWJlRW1pdEVu ZCIpLF9lPVN5bWJvbCgiZW1pdHRlZEVuZCIpLHp0PVN5bWJvbCgiZW1pdHRpbmdFbmQiKSxmdD1T eW1ib2woImVtaXR0ZWRFcnJvciIpLGt0PVN5bWJvbCgiY2xvc2VkIiksenI9U3ltYm9sKCJyZWFk IiksanQ9U3ltYm9sKCJmbHVzaCIpLGtyPVN5bWJvbCgiZmx1c2hDaHVuayIpLEs9U3ltYm9sKCJl bmNvZGluZyIpLFVlPVN5bWJvbCgiZGVjb2RlciIpLFI9U3ltYm9sKCJmbG93aW5nIiksZHQ9U3lt Ym9sKCJwYXVzZWQiKSxxZT1TeW1ib2woInJlc3VtZSIpLE89U3ltYm9sKCJidWZmZXIiKSxJPVN5 bWJvbCgicGlwZXMiKSx2PVN5bWJvbCgiYnVmZmVyTGVuZ3RoIiksS2k9U3ltYm9sKCJidWZmZXJQ dXNoIikseHQ9U3ltYm9sKCJidWZmZXJTaGlmdCIpLE49U3ltYm9sKCJvYmplY3RNb2RlIikseT1T eW1ib2woImRlc3Ryb3llZCIpLFZpPVN5bWJvbCgiZXJyb3IiKSwkaT1TeW1ib2woImVtaXREYXRh IiksanI9U3ltYm9sKCJlbWl0RW5kIiksWGk9U3ltYm9sKCJlbWl0RW5kMiIpLEo9U3ltYm9sKCJh c3luYyIpLFFpPVN5bWJvbCgiYWJvcnQiKSxVdD1TeW1ib2woImFib3J0ZWQiKSxtdD1TeW1ib2wo InNpZ25hbCIpLFBlPVN5bWJvbCgiZGF0YUxpc3RlbmVycyIpLGs9U3ltYm9sKCJkaXNjYXJkZWQi KSxwdD1zPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKHMpLFJvPXM9PnMoKSxPbz1zPT5zPT09ImVu ZCJ8fHM9PT0iZmluaXNoInx8cz09PSJwcmVmaW5pc2giLHZvPXM9PnMgaW5zdGFuY2VvZiBBcnJh eUJ1ZmZlcnx8ISFzJiZ0eXBlb2Ygcz09Im9iamVjdCImJnMuY29uc3RydWN0b3ImJnMuY29uc3Ry dWN0b3IubmFtZT09PSJBcnJheUJ1ZmZlciImJnMuYnl0ZUxlbmd0aD49MCxUbz1zPT4hQnVmZmVy LmlzQnVmZmVyKHMpJiZBcnJheUJ1ZmZlci5pc1ZpZXcocykscXQ9Y2xhc3N7c3JjO2Rlc3Q7b3B0 cztvbmRyYWluO2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLnNyYz1lLHRoaXMuZGVzdD10LHRoaXMu b3B0cz1pLHRoaXMub25kcmFpbj0oKT0+ZVtxZV0oKSx0aGlzLmRlc3Qub24oImRyYWluIix0aGlz Lm9uZHJhaW4pfXVucGlwZSgpe3RoaXMuZGVzdC5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHRoaXMu b25kcmFpbil9cHJveHlFcnJvcnMoZSl7fWVuZCgpe3RoaXMudW5waXBlKCksdGhpcy5vcHRzLmVu ZCYmdGhpcy5kZXN0LmVuZCgpfX0sSmk9Y2xhc3MgZXh0ZW5kcyBxdHt1bnBpcGUoKXt0aGlzLnNy Yy5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHRoaXMucHJveHlFcnJvcnMpLHN1cGVyLnVucGlwZSgp fWNvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcihlLHQsaSksdGhpcy5wcm94eUVycm9ycz1yPT50aGlz LmRlc3QuZW1pdCgiZXJyb3IiLHIpLGUub24oImVycm9yIix0aGlzLnByb3h5RXJyb3JzKX19LERv PXM9PiEhcy5vYmplY3RNb2RlLFBvPXM9PiFzLm9iamVjdE1vZGUmJiEhcy5lbmNvZGluZyYmcy5l bmNvZGluZyE9PSJidWZmZXIiLFd0PWNsYXNzIGV4dGVuZHMgZXMuRXZlbnRFbWl0dGVye1tSXT0h MTtbZHRdPSExO1tJXT1bXTtbT109W107W05dO1tLXTtbSl07W1VlXTtbbGVdPSExO1tfZV09ITE7 W3p0XT0hMTtba3RdPSExO1tmdF09bnVsbDtbdl09MDtbeV09ITE7W210XTtbVXRdPSExO1tQZV09 MDtba109ITE7d3JpdGFibGU9ITA7cmVhZGFibGU9ITA7Y29uc3RydWN0b3IoLi4uZSl7bGV0IHQ9 ZVswXXx8e307aWYoc3VwZXIoKSx0Lm9iamVjdE1vZGUmJnR5cGVvZiB0LmVuY29kaW5nPT0ic3Ry aW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFbmNvZGluZyBhbmQgb2JqZWN0TW9kZSBtYXkgbm90 IGJlIHVzZWQgdG9nZXRoZXIiKTtEbyh0KT8odGhpc1tOXT0hMCx0aGlzW0tdPW51bGwpOlBvKHQp Pyh0aGlzW0tdPXQuZW5jb2RpbmcsdGhpc1tOXT0hMSk6KHRoaXNbTl09ITEsdGhpc1tLXT1udWxs KSx0aGlzW0pdPSEhdC5hc3luYyx0aGlzW1VlXT10aGlzW0tdP25ldyBFby5TdHJpbmdEZWNvZGVy KHRoaXNbS10pOm51bGwsdCYmdC5kZWJ1Z0V4cG9zZUJ1ZmZlcj09PSEwJiZPYmplY3QuZGVmaW5l UHJvcGVydHkodGhpcywiYnVmZmVyIix7Z2V0OigpPT50aGlzW09dfSksdCYmdC5kZWJ1Z0V4cG9z ZVBpcGVzPT09ITAmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwaXBlcyIse2dldDooKT0+ dGhpc1tJXX0pO2xldHtzaWduYWw6aX09dDtpJiYodGhpc1ttdF09aSxpLmFib3J0ZWQ/dGhpc1tR aV0oKTppLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+dGhpc1tRaV0oKSkpfWdldCBidWZm ZXJMZW5ndGgoKXtyZXR1cm4gdGhpc1t2XX1nZXQgZW5jb2RpbmcoKXtyZXR1cm4gdGhpc1tLXX1z ZXQgZW5jb2RpbmcoZSl7dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyBtdXN0IGJlIHNldCBhdCBp bnN0YW50aWF0aW9uIHRpbWUiKX1zZXRFbmNvZGluZyhlKXt0aHJvdyBuZXcgRXJyb3IoIkVuY29k aW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZSIpfWdldCBvYmplY3RNb2RlKCl7 cmV0dXJuIHRoaXNbTl19c2V0IG9iamVjdE1vZGUoZSl7dGhyb3cgbmV3IEVycm9yKCJvYmplY3RN b2RlIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZSIpfWdldCBhc3luYygpe3JldHVy biB0aGlzW0pdfXNldCBhc3luYyhlKXt0aGlzW0pdPXRoaXNbSl18fCEhZX1bUWldKCl7dGhpc1tV dF09ITAsdGhpcy5lbWl0KCJhYm9ydCIsdGhpc1ttdF0/LnJlYXNvbiksdGhpcy5kZXN0cm95KHRo aXNbbXRdPy5yZWFzb24pfWdldCBhYm9ydGVkKCl7cmV0dXJuIHRoaXNbVXRdfXNldCBhYm9ydGVk KGUpe313cml0ZShlLHQsaSl7aWYodGhpc1tVdF0pcmV0dXJuITE7aWYodGhpc1tsZV0pdGhyb3cg bmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTtpZih0aGlzW3ldKXJldHVybiB0aGlzLmVtaXQo ImVycm9yIixPYmplY3QuYXNzaWduKG5ldyBFcnJvcigiQ2Fubm90IGNhbGwgd3JpdGUgYWZ0ZXIg YSBzdHJlYW0gd2FzIGRlc3Ryb3llZCIpLHtjb2RlOiJFUlJfU1RSRUFNX0RFU1RST1lFRCJ9KSks ITA7dHlwZW9mIHQ9PSJmdW5jdGlvbiImJihpPXQsdD0idXRmOCIpLHR8fCh0PSJ1dGY4Iik7bGV0 IHI9dGhpc1tKXT9wdDpSbztpZighdGhpc1tOXSYmIUJ1ZmZlci5pc0J1ZmZlcihlKSl7aWYoVG8o ZSkpZT1CdWZmZXIuZnJvbShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKTtlbHNl IGlmKHZvKGUpKWU9QnVmZmVyLmZyb20oZSk7ZWxzZSBpZih0eXBlb2YgZSE9InN0cmluZyIpdGhy b3cgbmV3IEVycm9yKCJOb24tY29udGlndW91cyBkYXRhIHdyaXR0ZW4gdG8gbm9uLW9iamVjdE1v ZGUgc3RyZWFtIil9cmV0dXJuIHRoaXNbTl0/KHRoaXNbUl0mJnRoaXNbdl0hPT0wJiZ0aGlzW2p0 XSghMCksdGhpc1tSXT90aGlzLmVtaXQoImRhdGEiLGUpOnRoaXNbS2ldKGUpLHRoaXNbdl0hPT0w JiZ0aGlzLmVtaXQoInJlYWRhYmxlIiksaSYmcihpKSx0aGlzW1JdKTplLmxlbmd0aD8odHlwZW9m IGU9PSJzdHJpbmciJiYhKHQ9PT10aGlzW0tdJiYhdGhpc1tVZV0/Lmxhc3ROZWVkKSYmKGU9QnVm ZmVyLmZyb20oZSx0KSksQnVmZmVyLmlzQnVmZmVyKGUpJiZ0aGlzW0tdJiYoZT10aGlzW1VlXS53 cml0ZShlKSksdGhpc1tSXSYmdGhpc1t2XSE9PTAmJnRoaXNbanRdKCEwKSx0aGlzW1JdP3RoaXMu ZW1pdCgiZGF0YSIsZSk6dGhpc1tLaV0oZSksdGhpc1t2XSE9PTAmJnRoaXMuZW1pdCgicmVhZGFi bGUiKSxpJiZyKGkpLHRoaXNbUl0pOih0aGlzW3ZdIT09MCYmdGhpcy5lbWl0KCJyZWFkYWJsZSIp LGkmJnIoaSksdGhpc1tSXSl9cmVhZChlKXtpZih0aGlzW3ldKXJldHVybiBudWxsO2lmKHRoaXNb a109ITEsdGhpc1t2XT09PTB8fGU9PT0wfHxlJiZlPnRoaXNbdl0pcmV0dXJuIHRoaXNbdWVdKCks bnVsbDt0aGlzW05dJiYoZT1udWxsKSx0aGlzW09dLmxlbmd0aD4xJiYhdGhpc1tOXSYmKHRoaXNb T109W3RoaXNbS10/dGhpc1tPXS5qb2luKCIiKTpCdWZmZXIuY29uY2F0KHRoaXNbT10sdGhpc1t2 XSldKTtsZXQgdD10aGlzW3pyXShlfHxudWxsLHRoaXNbT11bMF0pO3JldHVybiB0aGlzW3VlXSgp LHR9W3pyXShlLHQpe2lmKHRoaXNbTl0pdGhpc1t4dF0oKTtlbHNle2xldCBpPXQ7ZT09PWkubGVu Z3RofHxlPT09bnVsbD90aGlzW3h0XSgpOnR5cGVvZiBpPT0ic3RyaW5nIj8odGhpc1tPXVswXT1p LnNsaWNlKGUpLHQ9aS5zbGljZSgwLGUpLHRoaXNbdl0tPWUpOih0aGlzW09dWzBdPWkuc3ViYXJy YXkoZSksdD1pLnN1YmFycmF5KDAsZSksdGhpc1t2XS09ZSl9cmV0dXJuIHRoaXMuZW1pdCgiZGF0 YSIsdCksIXRoaXNbT10ubGVuZ3RoJiYhdGhpc1tsZV0mJnRoaXMuZW1pdCgiZHJhaW4iKSx0fWVu ZChlLHQsaSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYoaT1lLGU9dm9pZCAwKSx0eXBl b2YgdD09ImZ1bmN0aW9uIiYmKGk9dCx0PSJ1dGY4IiksZSE9PXZvaWQgMCYmdGhpcy53cml0ZShl LHQpLGkmJnRoaXMub25jZSgiZW5kIixpKSx0aGlzW2xlXT0hMCx0aGlzLndyaXRhYmxlPSExLCh0 aGlzW1JdfHwhdGhpc1tkdF0pJiZ0aGlzW3VlXSgpLHRoaXN9W3FlXSgpe3RoaXNbeV18fCghdGhp c1tQZV0mJiF0aGlzW0ldLmxlbmd0aCYmKHRoaXNba109ITApLHRoaXNbZHRdPSExLHRoaXNbUl09 ITAsdGhpcy5lbWl0KCJyZXN1bWUiKSx0aGlzW09dLmxlbmd0aD90aGlzW2p0XSgpOnRoaXNbbGVd P3RoaXNbdWVdKCk6dGhpcy5lbWl0KCJkcmFpbiIpKX1yZXN1bWUoKXtyZXR1cm4gdGhpc1txZV0o KX1wYXVzZSgpe3RoaXNbUl09ITEsdGhpc1tkdF09ITAsdGhpc1trXT0hMX1nZXQgZGVzdHJveWVk KCl7cmV0dXJuIHRoaXNbeV19Z2V0IGZsb3dpbmcoKXtyZXR1cm4gdGhpc1tSXX1nZXQgcGF1c2Vk KCl7cmV0dXJuIHRoaXNbZHRdfVtLaV0oZSl7dGhpc1tOXT90aGlzW3ZdKz0xOnRoaXNbdl0rPWUu bGVuZ3RoLHRoaXNbT10ucHVzaChlKX1beHRdKCl7cmV0dXJuIHRoaXNbTl0/dGhpc1t2XS09MTp0 aGlzW3ZdLT10aGlzW09dWzBdLmxlbmd0aCx0aGlzW09dLnNoaWZ0KCl9W2p0XShlPSExKXtkbzt3 aGlsZSh0aGlzW2tyXSh0aGlzW3h0XSgpKSYmdGhpc1tPXS5sZW5ndGgpOyFlJiYhdGhpc1tPXS5s ZW5ndGgmJiF0aGlzW2xlXSYmdGhpcy5lbWl0KCJkcmFpbiIpfVtrcl0oZSl7cmV0dXJuIHRoaXMu ZW1pdCgiZGF0YSIsZSksdGhpc1tSXX1waXBlKGUsdCl7aWYodGhpc1t5XSlyZXR1cm4gZTt0aGlz W2tdPSExO2xldCBpPXRoaXNbX2VdO3JldHVybiB0PXR8fHt9LGU9PT1Cci5zdGRvdXR8fGU9PT1C ci5zdGRlcnI/dC5lbmQ9ITE6dC5lbmQ9dC5lbmQhPT0hMSx0LnByb3h5RXJyb3JzPSEhdC5wcm94 eUVycm9ycyxpP3QuZW5kJiZlLmVuZCgpOih0aGlzW0ldLnB1c2godC5wcm94eUVycm9ycz9uZXcg SmkodGhpcyxlLHQpOm5ldyBxdCh0aGlzLGUsdCkpLHRoaXNbSl0/cHQoKCk9PnRoaXNbcWVdKCkp OnRoaXNbcWVdKCkpLGV9dW5waXBlKGUpe2xldCB0PXRoaXNbSV0uZmluZChpPT5pLmRlc3Q9PT1l KTt0JiYodGhpc1tJXS5sZW5ndGg9PT0xPyh0aGlzW1JdJiZ0aGlzW1BlXT09PTAmJih0aGlzW1Jd PSExKSx0aGlzW0ldPVtdKTp0aGlzW0ldLnNwbGljZSh0aGlzW0ldLmluZGV4T2YodCksMSksdC51 bnBpcGUoKSl9YWRkTGlzdGVuZXIoZSx0KXtyZXR1cm4gdGhpcy5vbihlLHQpfW9uKGUsdCl7bGV0 IGk9c3VwZXIub24oZSx0KTtpZihlPT09ImRhdGEiKXRoaXNba109ITEsdGhpc1tQZV0rKywhdGhp c1tJXS5sZW5ndGgmJiF0aGlzW1JdJiZ0aGlzW3FlXSgpO2Vsc2UgaWYoZT09PSJyZWFkYWJsZSIm JnRoaXNbdl0hPT0wKXN1cGVyLmVtaXQoInJlYWRhYmxlIik7ZWxzZSBpZihPbyhlKSYmdGhpc1tf ZV0pc3VwZXIuZW1pdChlKSx0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhlKTtlbHNlIGlmKGU9PT0i ZXJyb3IiJiZ0aGlzW2Z0XSl7bGV0IHI9dDt0aGlzW0pdP3B0KCgpPT5yLmNhbGwodGhpcyx0aGlz W2Z0XSkpOnIuY2FsbCh0aGlzLHRoaXNbZnRdKX1yZXR1cm4gaX1yZW1vdmVMaXN0ZW5lcihlLHQp e3JldHVybiB0aGlzLm9mZihlLHQpfW9mZihlLHQpe2xldCBpPXN1cGVyLm9mZihlLHQpO3JldHVy biBlPT09ImRhdGEiJiYodGhpc1tQZV09dGhpcy5saXN0ZW5lcnMoImRhdGEiKS5sZW5ndGgsdGhp c1tQZV09PT0wJiYhdGhpc1trXSYmIXRoaXNbSV0ubGVuZ3RoJiYodGhpc1tSXT0hMSkpLGl9cmVt b3ZlQWxsTGlzdGVuZXJzKGUpe2xldCB0PXN1cGVyLnJlbW92ZUFsbExpc3RlbmVycyhlKTtyZXR1 cm4oZT09PSJkYXRhInx8ZT09PXZvaWQgMCkmJih0aGlzW1BlXT0wLCF0aGlzW2tdJiYhdGhpc1tJ XS5sZW5ndGgmJih0aGlzW1JdPSExKSksdH1nZXQgZW1pdHRlZEVuZCgpe3JldHVybiB0aGlzW19l XX1bdWVdKCl7IXRoaXNbenRdJiYhdGhpc1tfZV0mJiF0aGlzW3ldJiZ0aGlzW09dLmxlbmd0aD09 PTAmJnRoaXNbbGVdJiYodGhpc1t6dF09ITAsdGhpcy5lbWl0KCJlbmQiKSx0aGlzLmVtaXQoInBy ZWZpbmlzaCIpLHRoaXMuZW1pdCgiZmluaXNoIiksdGhpc1trdF0mJnRoaXMuZW1pdCgiY2xvc2Ui KSx0aGlzW3p0XT0hMSl9ZW1pdChlLC4uLnQpe2xldCBpPXRbMF07aWYoZSE9PSJlcnJvciImJmUh PT0iY2xvc2UiJiZlIT09eSYmdGhpc1t5XSlyZXR1cm4hMTtpZihlPT09ImRhdGEiKXJldHVybiF0 aGlzW05dJiYhaT8hMTp0aGlzW0pdPyhwdCgoKT0+dGhpc1skaV0oaSkpLCEwKTp0aGlzWyRpXShp KTtpZihlPT09ImVuZCIpcmV0dXJuIHRoaXNbanJdKCk7aWYoZT09PSJjbG9zZSIpe2lmKHRoaXNb a3RdPSEwLCF0aGlzW19lXSYmIXRoaXNbeV0pcmV0dXJuITE7bGV0IG49c3VwZXIuZW1pdCgiY2xv c2UiKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoImNsb3NlIiksbn1lbHNlIGlmKGU9 PT0iZXJyb3IiKXt0aGlzW2Z0XT1pLHN1cGVyLmVtaXQoVmksaSk7bGV0IG49IXRoaXNbbXRdfHx0 aGlzLmxpc3RlbmVycygiZXJyb3IiKS5sZW5ndGg/c3VwZXIuZW1pdCgiZXJyb3IiLGkpOiExO3Jl dHVybiB0aGlzW3VlXSgpLG59ZWxzZSBpZihlPT09InJlc3VtZSIpe2xldCBuPXN1cGVyLmVtaXQo InJlc3VtZSIpO3JldHVybiB0aGlzW3VlXSgpLG59ZWxzZSBpZihlPT09ImZpbmlzaCJ8fGU9PT0i cHJlZmluaXNoIil7bGV0IG49c3VwZXIuZW1pdChlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0 ZW5lcnMoZSksbn1sZXQgcj1zdXBlci5lbWl0KGUsLi4udCk7cmV0dXJuIHRoaXNbdWVdKCkscn1b JGldKGUpe2ZvcihsZXQgaSBvZiB0aGlzW0ldKWkuZGVzdC53cml0ZShlKT09PSExJiZ0aGlzLnBh dXNlKCk7bGV0IHQ9dGhpc1trXT8hMTpzdXBlci5lbWl0KCJkYXRhIixlKTtyZXR1cm4gdGhpc1t1 ZV0oKSx0fVtqcl0oKXtyZXR1cm4gdGhpc1tfZV0/ITE6KHRoaXNbX2VdPSEwLHRoaXMucmVhZGFi bGU9ITEsdGhpc1tKXT8ocHQoKCk9PnRoaXNbWGldKCkpLCEwKTp0aGlzW1hpXSgpKX1bWGldKCl7 aWYodGhpc1tVZV0pe2xldCB0PXRoaXNbVWVdLmVuZCgpO2lmKHQpe2ZvcihsZXQgaSBvZiB0aGlz W0ldKWkuZGVzdC53cml0ZSh0KTt0aGlzW2tdfHxzdXBlci5lbWl0KCJkYXRhIix0KX19Zm9yKGxl dCB0IG9mIHRoaXNbSV0pdC5lbmQoKTtsZXQgZT1zdXBlci5lbWl0KCJlbmQiKTtyZXR1cm4gdGhp cy5yZW1vdmVBbGxMaXN0ZW5lcnMoImVuZCIpLGV9YXN5bmMgY29sbGVjdCgpe2xldCBlPU9iamVj dC5hc3NpZ24oW10se2RhdGFMZW5ndGg6MH0pO3RoaXNbTl18fChlLmRhdGFMZW5ndGg9MCk7bGV0 IHQ9dGhpcy5wcm9taXNlKCk7cmV0dXJuIHRoaXMub24oImRhdGEiLGk9PntlLnB1c2goaSksdGhp c1tOXXx8KGUuZGF0YUxlbmd0aCs9aS5sZW5ndGgpfSksYXdhaXQgdCxlfWFzeW5jIGNvbmNhdCgp e2lmKHRoaXNbTl0pdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgY29uY2F0IGluIG9iamVjdE1vZGUi KTtsZXQgZT1hd2FpdCB0aGlzLmNvbGxlY3QoKTtyZXR1cm4gdGhpc1tLXT9lLmpvaW4oIiIpOkJ1 ZmZlci5jb25jYXQoZSxlLmRhdGFMZW5ndGgpfWFzeW5jIHByb21pc2UoKXtyZXR1cm4gbmV3IFBy b21pc2UoKGUsdCk9Pnt0aGlzLm9uKHksKCk9PnQobmV3IEVycm9yKCJzdHJlYW0gZGVzdHJveWVk IikpKSx0aGlzLm9uKCJlcnJvciIsaT0+dChpKSksdGhpcy5vbigiZW5kIiwoKT0+ZSgpKX0pfVtT eW1ib2wuYXN5bmNJdGVyYXRvcl0oKXt0aGlzW2tdPSExO2xldCBlPSExLHQ9YXN5bmMoKT0+KHRo aXMucGF1c2UoKSxlPSEwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO3JldHVybntuZXh0OigpPT57 aWYoZSlyZXR1cm4gdCgpO2xldCByPXRoaXMucmVhZCgpO2lmKHIhPT1udWxsKXJldHVybiBQcm9t aXNlLnJlc29sdmUoe2RvbmU6ITEsdmFsdWU6cn0pO2lmKHRoaXNbbGVdKXJldHVybiB0KCk7bGV0 IG4sbyxhPWM9Pnt0aGlzLm9mZigiZGF0YSIsaCksdGhpcy5vZmYoImVuZCIsbCksdGhpcy5vZmYo eSx1KSx0KCksbyhjKX0saD1jPT57dGhpcy5vZmYoImVycm9yIixhKSx0aGlzLm9mZigiZW5kIixs KSx0aGlzLm9mZih5LHUpLHRoaXMucGF1c2UoKSxuKHt2YWx1ZTpjLGRvbmU6ISF0aGlzW2xlXX0p fSxsPSgpPT57dGhpcy5vZmYoImVycm9yIixhKSx0aGlzLm9mZigiZGF0YSIsaCksdGhpcy5vZmYo eSx1KSx0KCksbih7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KX0sdT0oKT0+YShuZXcgRXJyb3IoInN0 cmVhbSBkZXN0cm95ZWQiKSk7cmV0dXJuIG5ldyBQcm9taXNlKChjLEUpPT57bz1FLG49Yyx0aGlz Lm9uY2UoeSx1KSx0aGlzLm9uY2UoImVycm9yIixhKSx0aGlzLm9uY2UoImVuZCIsbCksdGhpcy5v bmNlKCJkYXRhIixoKX0pfSx0aHJvdzp0LHJldHVybjp0LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0o KXtyZXR1cm4gdGhpc30sW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOmFzeW5jKCk9Pnt9fX1bU3ltYm9s Lml0ZXJhdG9yXSgpe3RoaXNba109ITE7bGV0IGU9ITEsdD0oKT0+KHRoaXMucGF1c2UoKSx0aGlz Lm9mZihWaSx0KSx0aGlzLm9mZih5LHQpLHRoaXMub2ZmKCJlbmQiLHQpLGU9ITAse2RvbmU6ITAs dmFsdWU6dm9pZCAwfSksaT0oKT0+e2lmKGUpcmV0dXJuIHQoKTtsZXQgcj10aGlzLnJlYWQoKTty ZXR1cm4gcj09PW51bGw/dCgpOntkb25lOiExLHZhbHVlOnJ9fTtyZXR1cm4gdGhpcy5vbmNlKCJl bmQiLHQpLHRoaXMub25jZShWaSx0KSx0aGlzLm9uY2UoeSx0KSx7bmV4dDppLHRocm93OnQscmV0 dXJuOnQsW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc30sW1N5bWJvbC5kaXNwb3NlXToo KT0+e319fWRlc3Ryb3koZSl7aWYodGhpc1t5XSlyZXR1cm4gZT90aGlzLmVtaXQoImVycm9yIixl KTp0aGlzLmVtaXQoeSksdGhpczt0aGlzW3ldPSEwLHRoaXNba109ITAsdGhpc1tPXS5sZW5ndGg9 MCx0aGlzW3ZdPTA7bGV0IHQ9dGhpcztyZXR1cm4gdHlwZW9mIHQuY2xvc2U9PSJmdW5jdGlvbiIm JiF0aGlzW2t0XSYmdC5jbG9zZSgpLGU/dGhpcy5lbWl0KCJlcnJvciIsZSk6dGhpcy5lbWl0KHkp LHRoaXN9c3RhdGljIGdldCBpc1N0cmVhbSgpe3JldHVybiBDLmlzU3RyZWFtfX07Qy5NaW5pcGFz cz1XdH0pO3ZhciBLZT1kKFc9PnsidXNlIHN0cmljdCI7dmFyIFVyPVcmJlcuX19pbXBvcnREZWZh dWx0fHxmdW5jdGlvbihzKXtyZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6e2RlZmF1bHQ6c319O09i amVjdC5kZWZpbmVQcm9wZXJ0eShXLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtXLldyaXRlU3Ry ZWFtU3luYz1XLldyaXRlU3RyZWFtPVcuUmVhZFN0cmVhbVN5bmM9Vy5SZWFkU3RyZWFtPXZvaWQg MDt2YXIgTm89VXIocmVxdWlyZSgiZXZlbnRzIikpLEI9VXIocmVxdWlyZSgiZnMiKSksTW89V2Uo KSxMbz1CLmRlZmF1bHQud3JpdGV2LHllPVN5bWJvbCgiX2F1dG9DbG9zZSIpLCQ9U3ltYm9sKCJf Y2xvc2UiKSxfdD1TeW1ib2woIl9lbmRlZCIpLHA9U3ltYm9sKCJfZmQiKSx0cz1TeW1ib2woIl9m aW5pc2hlZCIpLGZlPVN5bWJvbCgiX2ZsYWdzIiksaXM9U3ltYm9sKCJfZmx1c2giKSxvcz1TeW1i b2woIl9oYW5kbGVDaHVuayIpLGFzPVN5bWJvbCgiX21ha2VCdWYiKSx5dD1TeW1ib2woIl9tb2Rl IiksSHQ9U3ltYm9sKCJfbmVlZERyYWluIiksR2U9U3ltYm9sKCJfb25lcnJvciIpLFllPVN5bWJv bCgiX29ub3BlbiIpLHNzPVN5bWJvbCgiX29ucmVhZCIpLEhlPVN5bWJvbCgiX29ud3JpdGUiKSxF ZT1TeW1ib2woIl9vcGVuIiksVj1TeW1ib2woIl9wYXRoIiksd2U9U3ltYm9sKCJfcG9zIiksZWU9 U3ltYm9sKCJfcXVldWUiKSxaZT1TeW1ib2woIl9yZWFkIikscnM9U3ltYm9sKCJfcmVhZFNpemUi KSxjZT1TeW1ib2woIl9yZWFkaW5nIiksd3Q9U3ltYm9sKCJfcmVtYWluIiksbnM9U3ltYm9sKCJf c2l6ZSIpLFp0PVN5bWJvbCgiX3dyaXRlIiksTmU9U3ltYm9sKCJfd3JpdGluZyIpLEd0PVN5bWJv bCgiX2RlZmF1bHRGbGFnIiksTWU9U3ltYm9sKCJfZXJyb3JlZCIpLFl0PWNsYXNzIGV4dGVuZHMg TW8uTWluaXBhc3N7W01lXT0hMTtbcF07W1ZdO1tyc107W2NlXT0hMTtbbnNdO1t3dF07W3llXTtj b25zdHJ1Y3RvcihlLHQpe2lmKHQ9dHx8e30sc3VwZXIodCksdGhpcy5yZWFkYWJsZT0hMCx0aGlz LndyaXRhYmxlPSExLHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXRo IG11c3QgYmUgYSBzdHJpbmciKTt0aGlzW01lXT0hMSx0aGlzW3BdPXR5cGVvZiB0LmZkPT0ibnVt YmVyIj90LmZkOnZvaWQgMCx0aGlzW1ZdPWUsdGhpc1tyc109dC5yZWFkU2l6ZXx8MTYqMTAyNCox MDI0LHRoaXNbY2VdPSExLHRoaXNbbnNdPXR5cGVvZiB0LnNpemU9PSJudW1iZXIiP3Quc2l6ZTox LzAsdGhpc1t3dF09dGhpc1tuc10sdGhpc1t5ZV09dHlwZW9mIHQuYXV0b0Nsb3NlPT0iYm9vbGVh biI/dC5hdXRvQ2xvc2U6ITAsdHlwZW9mIHRoaXNbcF09PSJudW1iZXIiP3RoaXNbWmVdKCk6dGhp c1tFZV0oKX1nZXQgZmQoKXtyZXR1cm4gdGhpc1twXX1nZXQgcGF0aCgpe3JldHVybiB0aGlzW1Zd fXdyaXRlKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigidGhpcyBpcyBhIHJlYWRhYmxlIHN0cmVhbSIp fWVuZCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoInRoaXMgaXMgYSByZWFkYWJsZSBzdHJlYW0iKX1b RWVdKCl7Qi5kZWZhdWx0Lm9wZW4odGhpc1tWXSwiciIsKGUsdCk9PnRoaXNbWWVdKGUsdCkpfVtZ ZV0oZSx0KXtlP3RoaXNbR2VdKGUpOih0aGlzW3BdPXQsdGhpcy5lbWl0KCJvcGVuIix0KSx0aGlz W1plXSgpKX1bYXNdKCl7cmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZShNYXRoLm1pbih0aGlzW3Jz XSx0aGlzW3d0XSkpfVtaZV0oKXtpZighdGhpc1tjZV0pe3RoaXNbY2VdPSEwO2xldCBlPXRoaXNb YXNdKCk7aWYoZS5sZW5ndGg9PT0wKXJldHVybiBwcm9jZXNzLm5leHRUaWNrKCgpPT50aGlzW3Nz XShudWxsLDAsZSkpO0IuZGVmYXVsdC5yZWFkKHRoaXNbcF0sZSwwLGUubGVuZ3RoLG51bGwsKHQs aSxyKT0+dGhpc1tzc10odCxpLHIpKX19W3NzXShlLHQsaSl7dGhpc1tjZV09ITEsZT90aGlzW0dl XShlKTp0aGlzW29zXSh0LGkpJiZ0aGlzW1plXSgpfVskXSgpe2lmKHRoaXNbeWVdJiZ0eXBlb2Yg dGhpc1twXT09Im51bWJlciIpe2xldCBlPXRoaXNbcF07dGhpc1twXT12b2lkIDAsQi5kZWZhdWx0 LmNsb3NlKGUsdD0+dD90aGlzLmVtaXQoImVycm9yIix0KTp0aGlzLmVtaXQoImNsb3NlIikpfX1b R2VdKGUpe3RoaXNbY2VdPSEwLHRoaXNbJF0oKSx0aGlzLmVtaXQoImVycm9yIixlKX1bb3NdKGUs dCl7bGV0IGk9ITE7cmV0dXJuIHRoaXNbd3RdLT1lLGU+MCYmKGk9c3VwZXIud3JpdGUoZTx0Lmxl bmd0aD90LnN1YmFycmF5KDAsZSk6dCkpLChlPT09MHx8dGhpc1t3dF08PTApJiYoaT0hMSx0aGlz WyRdKCksc3VwZXIuZW5kKCkpLGl9ZW1pdChlLC4uLnQpe3N3aXRjaChlKXtjYXNlInByZWZpbmlz aCI6Y2FzZSJmaW5pc2giOnJldHVybiExO2Nhc2UiZHJhaW4iOnJldHVybiB0eXBlb2YgdGhpc1tw XT09Im51bWJlciImJnRoaXNbWmVdKCksITE7Y2FzZSJlcnJvciI6cmV0dXJuIHRoaXNbTWVdPyEx Oih0aGlzW01lXT0hMCxzdXBlci5lbWl0KGUsLi4udCkpO2RlZmF1bHQ6cmV0dXJuIHN1cGVyLmVt aXQoZSwuLi50KX19fTtXLlJlYWRTdHJlYW09WXQ7dmFyIGhzPWNsYXNzIGV4dGVuZHMgWXR7W0Vl XSgpe2xldCBlPSEwO3RyeXt0aGlzW1llXShudWxsLEIuZGVmYXVsdC5vcGVuU3luYyh0aGlzW1Zd LCJyIikpLGU9ITF9ZmluYWxseXtlJiZ0aGlzWyRdKCl9fVtaZV0oKXtsZXQgZT0hMDt0cnl7aWYo IXRoaXNbY2VdKXt0aGlzW2NlXT0hMDtkb3tsZXQgdD10aGlzW2FzXSgpLGk9dC5sZW5ndGg9PT0w PzA6Qi5kZWZhdWx0LnJlYWRTeW5jKHRoaXNbcF0sdCwwLHQubGVuZ3RoLG51bGwpO2lmKCF0aGlz W29zXShpLHQpKWJyZWFrfXdoaWxlKCEwKTt0aGlzW2NlXT0hMX1lPSExfWZpbmFsbHl7ZSYmdGhp c1skXSgpfX1bJF0oKXtpZih0aGlzW3llXSYmdHlwZW9mIHRoaXNbcF09PSJudW1iZXIiKXtsZXQg ZT10aGlzW3BdO3RoaXNbcF09dm9pZCAwLEIuZGVmYXVsdC5jbG9zZVN5bmMoZSksdGhpcy5lbWl0 KCJjbG9zZSIpfX19O1cuUmVhZFN0cmVhbVN5bmM9aHM7dmFyIEt0PWNsYXNzIGV4dGVuZHMgTm8u ZGVmYXVsdHtyZWFkYWJsZT0hMTt3cml0YWJsZT0hMDtbTWVdPSExO1tOZV09ITE7W190XT0hMTtb ZWVdPVtdO1tIdF09ITE7W1ZdO1t5dF07W3llXTtbcF07W0d0XTtbZmVdO1t0c109ITE7W3dlXTtj b25zdHJ1Y3RvcihlLHQpe3Q9dHx8e30sc3VwZXIodCksdGhpc1tWXT1lLHRoaXNbcF09dHlwZW9m IHQuZmQ9PSJudW1iZXIiP3QuZmQ6dm9pZCAwLHRoaXNbeXRdPXQubW9kZT09PXZvaWQgMD80Mzg6 dC5tb2RlLHRoaXNbd2VdPXR5cGVvZiB0LnN0YXJ0PT0ibnVtYmVyIj90LnN0YXJ0OnZvaWQgMCx0 aGlzW3llXT10eXBlb2YgdC5hdXRvQ2xvc2U9PSJib29sZWFuIj90LmF1dG9DbG9zZTohMDtsZXQg aT10aGlzW3dlXSE9PXZvaWQgMD8icisiOiJ3Ijt0aGlzW0d0XT10LmZsYWdzPT09dm9pZCAwLHRo aXNbZmVdPXQuZmxhZ3M9PT12b2lkIDA/aTp0LmZsYWdzLHRoaXNbcF09PT12b2lkIDAmJnRoaXNb RWVdKCl9ZW1pdChlLC4uLnQpe2lmKGU9PT0iZXJyb3IiKXtpZih0aGlzW01lXSlyZXR1cm4hMTt0 aGlzW01lXT0hMH1yZXR1cm4gc3VwZXIuZW1pdChlLC4uLnQpfWdldCBmZCgpe3JldHVybiB0aGlz W3BdfWdldCBwYXRoKCl7cmV0dXJuIHRoaXNbVl19W0dlXShlKXt0aGlzWyRdKCksdGhpc1tOZV09 ITAsdGhpcy5lbWl0KCJlcnJvciIsZSl9W0VlXSgpe0IuZGVmYXVsdC5vcGVuKHRoaXNbVl0sdGhp c1tmZV0sdGhpc1t5dF0sKGUsdCk9PnRoaXNbWWVdKGUsdCkpfVtZZV0oZSx0KXt0aGlzW0d0XSYm dGhpc1tmZV09PT0icisiJiZlJiZlLmNvZGU9PT0iRU5PRU5UIj8odGhpc1tmZV09InciLHRoaXNb RWVdKCkpOmU/dGhpc1tHZV0oZSk6KHRoaXNbcF09dCx0aGlzLmVtaXQoIm9wZW4iLHQpLHRoaXNb TmVdfHx0aGlzW2lzXSgpKX1lbmQoZSx0KXtyZXR1cm4gZSYmdGhpcy53cml0ZShlLHQpLHRoaXNb X3RdPSEwLCF0aGlzW05lXSYmIXRoaXNbZWVdLmxlbmd0aCYmdHlwZW9mIHRoaXNbcF09PSJudW1i ZXIiJiZ0aGlzW0hlXShudWxsLDApLHRoaXN9d3JpdGUoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJz dHJpbmciJiYoZT1CdWZmZXIuZnJvbShlLHQpKSx0aGlzW190XT8odGhpcy5lbWl0KCJlcnJvciIs bmV3IEVycm9yKCJ3cml0ZSgpIGFmdGVyIGVuZCgpIikpLCExKTp0aGlzW3BdPT09dm9pZCAwfHx0 aGlzW05lXXx8dGhpc1tlZV0ubGVuZ3RoPyh0aGlzW2VlXS5wdXNoKGUpLHRoaXNbSHRdPSEwLCEx KToodGhpc1tOZV09ITAsdGhpc1tadF0oZSksITApfVtadF0oZSl7Qi5kZWZhdWx0LndyaXRlKHRo aXNbcF0sZSwwLGUubGVuZ3RoLHRoaXNbd2VdLCh0LGkpPT50aGlzW0hlXSh0LGkpKX1bSGVdKGUs dCl7ZT90aGlzW0dlXShlKToodGhpc1t3ZV0hPT12b2lkIDAmJnR5cGVvZiB0PT0ibnVtYmVyIiYm KHRoaXNbd2VdKz10KSx0aGlzW2VlXS5sZW5ndGg/dGhpc1tpc10oKToodGhpc1tOZV09ITEsdGhp c1tfdF0mJiF0aGlzW3RzXT8odGhpc1t0c109ITAsdGhpc1skXSgpLHRoaXMuZW1pdCgiZmluaXNo IikpOnRoaXNbSHRdJiYodGhpc1tIdF09ITEsdGhpcy5lbWl0KCJkcmFpbiIpKSkpfVtpc10oKXtp Zih0aGlzW2VlXS5sZW5ndGg9PT0wKXRoaXNbX3RdJiZ0aGlzW0hlXShudWxsLDApO2Vsc2UgaWYo dGhpc1tlZV0ubGVuZ3RoPT09MSl0aGlzW1p0XSh0aGlzW2VlXS5wb3AoKSk7ZWxzZXtsZXQgZT10 aGlzW2VlXTt0aGlzW2VlXT1bXSxMbyh0aGlzW3BdLGUsdGhpc1t3ZV0sKHQsaSk9PnRoaXNbSGVd KHQsaSkpfX1bJF0oKXtpZih0aGlzW3llXSYmdHlwZW9mIHRoaXNbcF09PSJudW1iZXIiKXtsZXQg ZT10aGlzW3BdO3RoaXNbcF09dm9pZCAwLEIuZGVmYXVsdC5jbG9zZShlLHQ9PnQ/dGhpcy5lbWl0 KCJlcnJvciIsdCk6dGhpcy5lbWl0KCJjbG9zZSIpKX19fTtXLldyaXRlU3RyZWFtPUt0O3ZhciBs cz1jbGFzcyBleHRlbmRzIEt0e1tFZV0oKXtsZXQgZTtpZih0aGlzW0d0XSYmdGhpc1tmZV09PT0i cisiKXRyeXtlPUIuZGVmYXVsdC5vcGVuU3luYyh0aGlzW1ZdLHRoaXNbZmVdLHRoaXNbeXRdKX1j YXRjaCh0KXtpZih0Py5jb2RlPT09IkVOT0VOVCIpcmV0dXJuIHRoaXNbZmVdPSJ3Iix0aGlzW0Vl XSgpO3Rocm93IHR9ZWxzZSBlPUIuZGVmYXVsdC5vcGVuU3luYyh0aGlzW1ZdLHRoaXNbZmVdLHRo aXNbeXRdKTt0aGlzW1llXShudWxsLGUpfVskXSgpe2lmKHRoaXNbeWVdJiZ0eXBlb2YgdGhpc1tw XT09Im51bWJlciIpe2xldCBlPXRoaXNbcF07dGhpc1twXT12b2lkIDAsQi5kZWZhdWx0LmNsb3Nl U3luYyhlKSx0aGlzLmVtaXQoImNsb3NlIil9fVtadF0oZSl7bGV0IHQ9ITA7dHJ5e3RoaXNbSGVd KG51bGwsQi5kZWZhdWx0LndyaXRlU3luYyh0aGlzW3BdLGUsMCxlLmxlbmd0aCx0aGlzW3dlXSkp LHQ9ITF9ZmluYWxseXtpZih0KXRyeXt0aGlzWyRdKCl9Y2F0Y2h7fX19fTtXLldyaXRlU3RyZWFt U3luYz1sc30pO3ZhciBWdD1kKGI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5 KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2IuZGVhbGlhcz1iLmlzTm9GaWxlPWIuaXNGaWxl PWIuaXNBc3luYz1iLmlzU3luYz1iLmlzQXN5bmNOb0ZpbGU9Yi5pc1N5bmNOb0ZpbGU9Yi5pc0Fz eW5jRmlsZT1iLmlzU3luY0ZpbGU9dm9pZCAwO3ZhciBBbz1uZXcgTWFwKFtbIkMiLCJjd2QiXSxb ImYiLCJmaWxlIl0sWyJ6IiwiZ3ppcCJdLFsiUCIsInByZXNlcnZlUGF0aHMiXSxbIlUiLCJ1bmxp bmsiXSxbInN0cmlwLWNvbXBvbmVudHMiLCJzdHJpcCJdLFsic3RyaXBDb21wb25lbnRzIiwic3Ry aXAiXSxbImtlZXAtbmV3ZXIiLCJuZXdlciJdLFsia2VlcE5ld2VyIiwibmV3ZXIiXSxbImtlZXAt bmV3ZXItZmlsZXMiLCJuZXdlciJdLFsia2VlcE5ld2VyRmlsZXMiLCJuZXdlciJdLFsiayIsImtl ZXAiXSxbImtlZXAtZXhpc3RpbmciLCJrZWVwIl0sWyJrZWVwRXhpc3RpbmciLCJrZWVwIl0sWyJt Iiwibm9NdGltZSJdLFsibm8tbXRpbWUiLCJub010aW1lIl0sWyJwIiwicHJlc2VydmVPd25lciJd LFsiTCIsImZvbGxvdyJdLFsiaCIsImZvbGxvdyJdLFsib25lbnRyeSIsIm9uUmVhZEVudHJ5Il1d KSxJbz1zPT4hIXMuc3luYyYmISFzLmZpbGU7Yi5pc1N5bmNGaWxlPUlvO3ZhciBDbz1zPT4hcy5z eW5jJiYhIXMuZmlsZTtiLmlzQXN5bmNGaWxlPUNvO3ZhciBGbz1zPT4hIXMuc3luYyYmIXMuZmls ZTtiLmlzU3luY05vRmlsZT1Gbzt2YXIgQm89cz0+IXMuc3luYyYmIXMuZmlsZTtiLmlzQXN5bmNO b0ZpbGU9Qm87dmFyIHpvPXM9PiEhcy5zeW5jO2IuaXNTeW5jPXpvO3ZhciBrbz1zPT4hcy5zeW5j O2IuaXNBc3luYz1rbzt2YXIgam89cz0+ISFzLmZpbGU7Yi5pc0ZpbGU9am87dmFyIHhvPXM9PiFz LmZpbGU7Yi5pc05vRmlsZT14bzt2YXIgVW89cz0+e2xldCBlPUFvLmdldChzKTtyZXR1cm4gZXx8 c30scW89KHM9e30pPT57aWYoIXMpcmV0dXJue307bGV0IGU9e307Zm9yKGxldFt0LGldb2YgT2Jq ZWN0LmVudHJpZXMocykpe2xldCByPVVvKHQpO2Vbcl09aX1yZXR1cm4gZS5jaG1vZD09PXZvaWQg MCYmZS5ub0NobW9kPT09ITEmJihlLmNobW9kPSEwKSxkZWxldGUgZS5ub0NobW9kLGV9O2IuZGVh bGlhcz1xb30pO3ZhciBWZT1kKCR0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0 eSgkdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7JHQubWFrZUNvbW1hbmQ9dm9pZCAwO3ZhciBF dD1WdCgpLFdvPShzLGUsdCxpLHIpPT5PYmplY3QuYXNzaWduKChuPVtdLG8sYSk9PntBcnJheS5p c0FycmF5KG4pJiYobz1uLG49e30pLHR5cGVvZiBvPT0iZnVuY3Rpb24iJiYoYT1vLG89dm9pZCAw KSxvP289QXJyYXkuZnJvbShvKTpvPVtdO2xldCBoPSgwLEV0LmRlYWxpYXMpKG4pO2lmKHI/Liho LG8pLCgwLEV0LmlzU3luY0ZpbGUpKGgpKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIil0aHJvdyBu ZXcgVHlwZUVycm9yKCJjYWxsYmFjayBub3Qgc3VwcG9ydGVkIGZvciBzeW5jIHRhciBmdW5jdGlv bnMiKTtyZXR1cm4gcyhoLG8pfWVsc2UgaWYoKDAsRXQuaXNBc3luY0ZpbGUpKGgpKXtsZXQgbD1l KGgsbyksdT1hfHx2b2lkIDA7cmV0dXJuIHU/bC50aGVuKCgpPT51KCksdSk6bH1lbHNlIGlmKCgw LEV0LmlzU3luY05vRmlsZSkoaCkpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXRocm93IG5ldyBU eXBlRXJyb3IoImNhbGxiYWNrIG5vdCBzdXBwb3J0ZWQgZm9yIHN5bmMgdGFyIGZ1bmN0aW9ucyIp O3JldHVybiB0KGgsbyl9ZWxzZSBpZigoMCxFdC5pc0FzeW5jTm9GaWxlKShoKSl7aWYodHlwZW9m IGE9PSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgb25seSBzdXBwb3J0 ZWQgd2l0aCBmaWxlIG9wdGlvbiIpO3JldHVybiBpKGgsbyl9ZWxzZSB0aHJvdyBuZXcgRXJyb3Io ImltcG9zc2libGUgb3B0aW9ucz8/Iil9LHtzeW5jRmlsZTpzLGFzeW5jRmlsZTplLHN5bmNOb0Zp bGU6dCxhc3luY05vRmlsZTppLHZhbGlkYXRlOnJ9KTskdC5tYWtlQ29tbWFuZD1Xb30pO3ZhciB1 cz1kKCRlPT57InVzZSBzdHJpY3QiO3ZhciBIbz0kZSYmJGUuX19pbXBvcnREZWZhdWx0fHxmdW5j dGlvbihzKXtyZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6e2RlZmF1bHQ6c319O09iamVjdC5kZWZp bmVQcm9wZXJ0eSgkZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7JGUuY29uc3RhbnRzPXZvaWQg MDt2YXIgWm89SG8ocmVxdWlyZSgiemxpYiIpKSxHbz1aby5kZWZhdWx0LmNvbnN0YW50c3x8e1pM SUJfVkVSTlVNOjQ3MzZ9OyRlLmNvbnN0YW50cz1PYmplY3QuZnJlZXplKE9iamVjdC5hc3NpZ24o T2JqZWN0LmNyZWF0ZShudWxsKSx7Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lO Q19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfT0s6MCxaX1NU UkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9E QVRBX0VSUk9SOi0zLFpfTUVNX0VSUk9SOi00LFpfQlVGX0VSUk9SOi01LFpfVkVSU0lPTl9FUlJP UjotNixaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9O OjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToy LFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLERFRkxBVEU6MSxJTkZMQVRF OjIsR1pJUDozLEdVTlpJUDo0LERFRkxBVEVSQVc6NSxJTkZMQVRFUkFXOjYsVU5aSVA6NyxCUk9U TElfREVDT0RFOjgsQlJPVExJX0VOQ09ERTo5LFpfTUlOX1dJTkRPV0JJVFM6OCxaX01BWF9XSU5E T1dCSVRTOjE1LFpfREVGQVVMVF9XSU5ET1dCSVRTOjE1LFpfTUlOX0NIVU5LOjY0LFpfTUFYX0NI VU5LOjEvMCxaX0RFRkFVTFRfQ0hVTks6MTYzODQsWl9NSU5fTUVNTEVWRUw6MSxaX01BWF9NRU1M RVZFTDo5LFpfREVGQVVMVF9NRU1MRVZFTDo4LFpfTUlOX0xFVkVMOi0xLFpfTUFYX0xFVkVMOjks Wl9ERUZBVUxUX0xFVkVMOi0xLEJST1RMSV9PUEVSQVRJT05fUFJPQ0VTUzowLEJST1RMSV9PUEVS QVRJT05fRkxVU0g6MSxCUk9UTElfT1BFUkFUSU9OX0ZJTklTSDoyLEJST1RMSV9PUEVSQVRJT05f RU1JVF9NRVRBREFUQTozLEJST1RMSV9NT0RFX0dFTkVSSUM6MCxCUk9UTElfTU9ERV9URVhUOjEs QlJPVExJX01PREVfRk9OVDoyLEJST1RMSV9ERUZBVUxUX01PREU6MCxCUk9UTElfTUlOX1FVQUxJ VFk6MCxCUk9UTElfTUFYX1FVQUxJVFk6MTEsQlJPVExJX0RFRkFVTFRfUVVBTElUWToxMSxCUk9U TElfTUlOX1dJTkRPV19CSVRTOjEwLEJST1RMSV9NQVhfV0lORE9XX0JJVFM6MjQsQlJPVExJX0xB UkdFX01BWF9XSU5ET1dfQklUUzozMCxCUk9UTElfREVGQVVMVF9XSU5ET1c6MjIsQlJPVExJX01J Tl9JTlBVVF9CTE9DS19CSVRTOjE2LEJST1RMSV9NQVhfSU5QVVRfQkxPQ0tfQklUUzoyNCxCUk9U TElfUEFSQU1fTU9ERTowLEJST1RMSV9QQVJBTV9RVUFMSVRZOjEsQlJPVExJX1BBUkFNX0xHV0lO OjIsQlJPVExJX1BBUkFNX0xHQkxPQ0s6MyxCUk9UTElfUEFSQU1fRElTQUJMRV9MSVRFUkFMX0NP TlRFWFRfTU9ERUxJTkc6NCxCUk9UTElfUEFSQU1fU0laRV9ISU5UOjUsQlJPVExJX1BBUkFNX0xB UkdFX1dJTkRPVzo2LEJST1RMSV9QQVJBTV9OUE9TVEZJWDo3LEJST1RMSV9QQVJBTV9ORElSRUNU OjgsQlJPVExJX0RFQ09ERVJfUkVTVUxUX0VSUk9SOjAsQlJPVExJX0RFQ09ERVJfUkVTVUxUX1NV Q0NFU1M6MSxCUk9UTElfREVDT0RFUl9SRVNVTFRfTkVFRFNfTU9SRV9JTlBVVDoyLEJST1RMSV9E RUNPREVSX1JFU1VMVF9ORUVEU19NT1JFX09VVFBVVDozLEJST1RMSV9ERUNPREVSX1BBUkFNX0RJ U0FCTEVfUklOR19CVUZGRVJfUkVBTExPQ0FUSU9OOjAsQlJPVExJX0RFQ09ERVJfUEFSQU1fTEFS R0VfV0lORE9XOjEsQlJPVExJX0RFQ09ERVJfTk9fRVJST1I6MCxCUk9UTElfREVDT0RFUl9TVUND RVNTOjEsQlJPVExJX0RFQ09ERVJfTkVFRFNfTU9SRV9JTlBVVDoyLEJST1RMSV9ERUNPREVSX05F RURTX01PUkVfT1VUUFVUOjMsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0VYVUJFUkFOVF9O SUJCTEU6LTEsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1JFU0VSVkVEOi0yLEJST1RMSV9E RUNPREVSX0VSUk9SX0ZPUk1BVF9FWFVCRVJBTlRfTUVUQV9OSUJCTEU6LTMsQlJPVExJX0RFQ09E RVJfRVJST1JfRk9STUFUX1NJTVBMRV9IVUZGTUFOX0FMUEhBQkVUOi00LEJST1RMSV9ERUNPREVS X0VSUk9SX0ZPUk1BVF9TSU1QTEVfSFVGRk1BTl9TQU1FOi01LEJST1RMSV9ERUNPREVSX0VSUk9S X0ZPUk1BVF9DTF9TUEFDRTotNixCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfSFVGRk1BTl9T UEFDRTotNyxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQ09OVEVYVF9NQVBfUkVQRUFUOi04 LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9CTE9DS19MRU5HVEhfMTotOSxCUk9UTElfREVD T0RFUl9FUlJPUl9GT1JNQVRfQkxPQ0tfTEVOR1RIXzI6LTEwLEJST1RMSV9ERUNPREVSX0VSUk9S X0ZPUk1BVF9UUkFOU0ZPUk06LTExLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESUNUSU9O QVJZOi0xMixCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfV0lORE9XX0JJVFM6LTEzLEJST1RM SV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9QQURESU5HXzE6LTE0LEJST1RMSV9ERUNPREVSX0VSUk9S X0ZPUk1BVF9QQURESU5HXzI6LTE1LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESVNUQU5D RTotMTYsQlJPVExJX0RFQ09ERVJfRVJST1JfRElDVElPTkFSWV9OT1RfU0VUOi0xOSxCUk9UTElf REVDT0RFUl9FUlJPUl9JTlZBTElEX0FSR1VNRU5UUzotMjAsQlJPVExJX0RFQ09ERVJfRVJST1Jf QUxMT0NfQ09OVEVYVF9NT0RFUzotMjEsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfVFJFRV9H Uk9VUFM6LTIyLEJST1RMSV9ERUNPREVSX0VSUk9SX0FMTE9DX0NPTlRFWFRfTUFQOi0yNSxCUk9U TElfREVDT0RFUl9FUlJPUl9BTExPQ19SSU5HX0JVRkZFUl8xOi0yNixCUk9UTElfREVDT0RFUl9F UlJPUl9BTExPQ19SSU5HX0JVRkZFUl8yOi0yNyxCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19C TE9DS19UWVBFX1RSRUVTOi0zMCxCUk9UTElfREVDT0RFUl9FUlJPUl9VTlJFQUNIQUJMRTotMzF9 LEdvKSl9KTt2YXIgdnM9ZChmPT57InVzZSBzdHJpY3QiO3ZhciBZbz1mJiZmLl9fY3JlYXRlQmlu ZGluZ3x8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHMsZSx0LGkpe2k9PT12b2lkIDAmJihpPXQp O3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KTsoIXJ8fCgiZ2V0Imlu IHI/IWUuX19lc01vZHVsZTpyLndyaXRhYmxlfHxyLmNvbmZpZ3VyYWJsZSkpJiYocj17ZW51bWVy YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVt0XX19KSxPYmplY3QuZGVmaW5lUHJvcGVy dHkocyxpLHIpfSk6KGZ1bmN0aW9uKHMsZSx0LGkpe2k9PT12b2lkIDAmJihpPXQpLHNbaV09ZVt0 XX0pKSxLbz1mJiZmLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9u KHMsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHMsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZh bHVlOmV9KX0pOmZ1bmN0aW9uKHMsZSl7cy5kZWZhdWx0PWV9KSxWbz1mJiZmLl9faW1wb3J0U3Rh cnx8KGZ1bmN0aW9uKCl7dmFyIHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHM9T2JqZWN0LmdldE93blBy b3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3ZhciBpPVtdO2Zvcih2YXIgciBpbiB0KU9iamVjdC5w cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoaVtpLmxlbmd0aF09cik7cmV0dXJu IGl9LHMoZSl9O3JldHVybiBmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7 dmFyIHQ9e307aWYoZSE9bnVsbClmb3IodmFyIGk9cyhlKSxyPTA7cjxpLmxlbmd0aDtyKyspaVty XSE9PSJkZWZhdWx0IiYmWW8odCxlLGlbcl0pO3JldHVybiBLbyh0LGUpLHR9fSkoKSwkbz1mJiZm Ll9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocyl7cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntk ZWZhdWx0OnN9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwiX19lc01vZHVsZSIse3ZhbHVlOiEw fSk7Zi5ac3RkRGVjb21wcmVzcz1mLlpzdGRDb21wcmVzcz1mLkJyb3RsaURlY29tcHJlc3M9Zi5C cm90bGlDb21wcmVzcz1mLlVuemlwPWYuSW5mbGF0ZVJhdz1mLkRlZmxhdGVSYXc9Zi5HdW56aXA9 Zi5HemlwPWYuSW5mbGF0ZT1mLkRlZmxhdGU9Zi5abGliPWYuWmxpYkVycm9yPWYuY29uc3RhbnRz PXZvaWQgMDt2YXIgZHM9JG8ocmVxdWlyZSgiYXNzZXJ0IikpLExlPXJlcXVpcmUoImJ1ZmZlciIp LFhvPVdlKCkscXI9Vm8ocmVxdWlyZSgiemxpYiIpKSx0ZT11cygpLFFvPXVzKCk7T2JqZWN0LmRl ZmluZVByb3BlcnR5KGYsImNvbnN0YW50cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7 cmV0dXJuIFFvLmNvbnN0YW50c319KTt2YXIgSm89TGUuQnVmZmVyLmNvbmNhdCxXcj1PYmplY3Qu Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKExlLkJ1ZmZlciwiY29uY2F0IiksZWE9cz0+cyxjcz1X cj8ud3JpdGFibGU9PT0hMHx8V3I/LnNldCE9PXZvaWQgMD9zPT57TGUuQnVmZmVyLmNvbmNhdD1z P2VhOkpvfTpzPT57fSxBZT1TeW1ib2woIl9zdXBlcldyaXRlIiksSWU9Y2xhc3MgZXh0ZW5kcyBF cnJvcntjb2RlO2Vycm5vO2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoInpsaWI6ICIrZS5tZXNzYWdl LHtjYXVzZTplfSksdGhpcy5jb2RlPWUuY29kZSx0aGlzLmVycm5vPWUuZXJybm8sdGhpcy5jb2Rl fHwodGhpcy5jb2RlPSJaTElCX0VSUk9SIiksdGhpcy5tZXNzYWdlPSJ6bGliOiAiK2UubWVzc2Fn ZSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHQ/P3RoaXMuY29uc3RydWN0b3IpfWdldCBu YW1lKCl7cmV0dXJuIlpsaWJFcnJvciJ9fTtmLlpsaWJFcnJvcj1JZTt2YXIgZnM9U3ltYm9sKCJm bHVzaEZsYWciKSxidD1jbGFzcyBleHRlbmRzIFhvLk1pbmlwYXNzeyNlPSExOyNpPSExOyNzOyNu OyNyOyN0OyNvO2dldCBzYXdFcnJvcigpe3JldHVybiB0aGlzLiNlfWdldCBoYW5kbGUoKXtyZXR1 cm4gdGhpcy4jdH1nZXQgZmx1c2hGbGFnKCl7cmV0dXJuIHRoaXMuI3N9Y29uc3RydWN0b3IoZSx0 KXtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQg b3B0aW9ucyBmb3IgWmxpYkJhc2UgY29uc3RydWN0b3IiKTtpZihzdXBlcihlKSx0aGlzLiNzPWUu Zmx1c2g/PzAsdGhpcy4jbj1lLmZpbmlzaEZsdXNoPz8wLHRoaXMuI3I9ZS5mdWxsRmx1c2hGbGFn Pz8wLHR5cGVvZiBxclt0XSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDb21wcmVz c2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZDogIit0KTt0cnl7dGhpcy4jdD1uZXcgcXJbdF0oZSl9 Y2F0Y2goaSl7dGhyb3cgbmV3IEllKGksdGhpcy5jb25zdHJ1Y3Rvcil9dGhpcy4jbz1pPT57dGhp cy4jZXx8KHRoaXMuI2U9ITAsdGhpcy5jbG9zZSgpLHRoaXMuZW1pdCgiZXJyb3IiLGkpKX0sdGhp cy4jdD8ub24oImVycm9yIixpPT50aGlzLiNvKG5ldyBJZShpKSkpLHRoaXMub25jZSgiZW5kIiwo KT0+dGhpcy5jbG9zZSl9Y2xvc2UoKXt0aGlzLiN0JiYodGhpcy4jdC5jbG9zZSgpLHRoaXMuI3Q9 dm9pZCAwLHRoaXMuZW1pdCgiY2xvc2UiKSl9cmVzZXQoKXtpZighdGhpcy4jZSlyZXR1cm4oMCxk cy5kZWZhdWx0KSh0aGlzLiN0LCJ6bGliIGJpbmRpbmcgY2xvc2VkIiksdGhpcy4jdC5yZXNldD8u KCl9Zmx1c2goZSl7dGhpcy5lbmRlZHx8KHR5cGVvZiBlIT0ibnVtYmVyIiYmKGU9dGhpcy4jciks dGhpcy53cml0ZShPYmplY3QuYXNzaWduKExlLkJ1ZmZlci5hbGxvYygwKSx7W2ZzXTplfSkpKX1l bmQoZSx0LGkpe3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGk9ZSx0PXZvaWQgMCxlPXZv aWQgMCksdHlwZW9mIHQ9PSJmdW5jdGlvbiImJihpPXQsdD12b2lkIDApLGUmJih0P3RoaXMud3Jp dGUoZSx0KTp0aGlzLndyaXRlKGUpKSx0aGlzLmZsdXNoKHRoaXMuI24pLHRoaXMuI2k9ITAsc3Vw ZXIuZW5kKGkpfWdldCBlbmRlZCgpe3JldHVybiB0aGlzLiNpfVtBZV0oZSl7cmV0dXJuIHN1cGVy LndyaXRlKGUpfXdyaXRlKGUsdCxpKXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIiYmKGk9dCx0PSJ1 dGY4IiksdHlwZW9mIGU9PSJzdHJpbmciJiYoZT1MZS5CdWZmZXIuZnJvbShlLHQpKSx0aGlzLiNl KXJldHVybjsoMCxkcy5kZWZhdWx0KSh0aGlzLiN0LCJ6bGliIGJpbmRpbmcgY2xvc2VkIik7bGV0 IHI9dGhpcy4jdC5faGFuZGxlLG49ci5jbG9zZTtyLmNsb3NlPSgpPT57fTtsZXQgbz10aGlzLiN0 LmNsb3NlO3RoaXMuI3QuY2xvc2U9KCk9Pnt9LGNzKCEwKTtsZXQgYTt0cnl7bGV0IGw9dHlwZW9m IGVbZnNdPT0ibnVtYmVyIj9lW2ZzXTp0aGlzLiNzO2E9dGhpcy4jdC5fcHJvY2Vzc0NodW5rKGUs bCksY3MoITEpfWNhdGNoKGwpe2NzKCExKSx0aGlzLiNvKG5ldyBJZShsLHRoaXMud3JpdGUpKX1m aW5hbGx5e3RoaXMuI3QmJih0aGlzLiN0Ll9oYW5kbGU9cixyLmNsb3NlPW4sdGhpcy4jdC5jbG9z ZT1vLHRoaXMuI3QucmVtb3ZlQWxsTGlzdGVuZXJzKCJlcnJvciIpKX10aGlzLiN0JiZ0aGlzLiN0 Lm9uKCJlcnJvciIsbD0+dGhpcy4jbyhuZXcgSWUobCx0aGlzLndyaXRlKSkpO2xldCBoO2lmKGEp aWYoQXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MCl7bGV0IGw9YVswXTtoPXRoaXNbQWVdKExl LkJ1ZmZlci5mcm9tKGwpKTtmb3IobGV0IHU9MTt1PGEubGVuZ3RoO3UrKyloPXRoaXNbQWVdKGFb dV0pfWVsc2UgaD10aGlzW0FlXShMZS5CdWZmZXIuZnJvbShhKSk7cmV0dXJuIGkmJmkoKSxofX0s aWU9Y2xhc3MgZXh0ZW5kcyBidHsjZTsjaTtjb25zdHJ1Y3RvcihlLHQpe2U9ZXx8e30sZS5mbHVz aD1lLmZsdXNofHx0ZS5jb25zdGFudHMuWl9OT19GTFVTSCxlLmZpbmlzaEZsdXNoPWUuZmluaXNo Rmx1c2h8fHRlLmNvbnN0YW50cy5aX0ZJTklTSCxlLmZ1bGxGbHVzaEZsYWc9dGUuY29uc3RhbnRz LlpfRlVMTF9GTFVTSCxzdXBlcihlLHQpLHRoaXMuI2U9ZS5sZXZlbCx0aGlzLiNpPWUuc3RyYXRl Z3l9cGFyYW1zKGUsdCl7aWYoIXRoaXMuc2F3RXJyb3Ipe2lmKCF0aGlzLmhhbmRsZSl0aHJvdyBu ZXcgRXJyb3IoImNhbm5vdCBzd2l0Y2ggcGFyYW1zIHdoZW4gYmluZGluZyBpcyBjbG9zZWQiKTtp ZighdGhpcy5oYW5kbGUucGFyYW1zKXRocm93IG5ldyBFcnJvcigibm90IHN1cHBvcnRlZCBpbiB0 aGlzIGltcGxlbWVudGF0aW9uIik7aWYodGhpcy4jZSE9PWV8fHRoaXMuI2khPT10KXt0aGlzLmZs dXNoKHRlLmNvbnN0YW50cy5aX1NZTkNfRkxVU0gpLCgwLGRzLmRlZmF1bHQpKHRoaXMuaGFuZGxl LCJ6bGliIGJpbmRpbmcgY2xvc2VkIik7bGV0IGk9dGhpcy5oYW5kbGUuZmx1c2g7dGhpcy5oYW5k bGUuZmx1c2g9KHIsbik9Pnt0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXRoaXMuZmx1c2hG bGFnKSx0aGlzLmZsdXNoKHIpLG4/LigpfTt0cnl7dGhpcy5oYW5kbGUucGFyYW1zKGUsdCl9Zmlu YWxseXt0aGlzLmhhbmRsZS5mbHVzaD1pfXRoaXMuaGFuZGxlJiYodGhpcy4jZT1lLHRoaXMuI2k9 dCl9fX19O2YuWmxpYj1pZTt2YXIgbXM9Y2xhc3MgZXh0ZW5kcyBpZXtjb25zdHJ1Y3RvcihlKXtz dXBlcihlLCJEZWZsYXRlIil9fTtmLkRlZmxhdGU9bXM7dmFyIHBzPWNsYXNzIGV4dGVuZHMgaWV7 Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiSW5mbGF0ZSIpfX07Zi5JbmZsYXRlPXBzO3ZhciBfcz1j bGFzcyBleHRlbmRzIGlleyNlO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkd6aXAiKSx0aGlzLiNl PWUmJiEhZS5wb3J0YWJsZX1bQWVdKGUpe3JldHVybiB0aGlzLiNlPyh0aGlzLiNlPSExLGVbOV09 MjU1LHN1cGVyW0FlXShlKSk6c3VwZXJbQWVdKGUpfX07Zi5HemlwPV9zO3ZhciB3cz1jbGFzcyBl eHRlbmRzIGlle2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkd1bnppcCIpfX07Zi5HdW56aXA9d3M7 dmFyIHlzPWNsYXNzIGV4dGVuZHMgaWV7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiRGVmbGF0ZVJh dyIpfX07Zi5EZWZsYXRlUmF3PXlzO3ZhciBFcz1jbGFzcyBleHRlbmRzIGlle2NvbnN0cnVjdG9y KGUpe3N1cGVyKGUsIkluZmxhdGVSYXciKX19O2YuSW5mbGF0ZVJhdz1Fczt2YXIgYnM9Y2xhc3Mg ZXh0ZW5kcyBpZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJVbnppcCIpfX07Zi5VbnppcD1iczt2 YXIgWHQ9Y2xhc3MgZXh0ZW5kcyBidHtjb25zdHJ1Y3RvcihlLHQpe2U9ZXx8e30sZS5mbHVzaD1l LmZsdXNofHx0ZS5jb25zdGFudHMuQlJPVExJX09QRVJBVElPTl9QUk9DRVNTLGUuZmluaXNoRmx1 c2g9ZS5maW5pc2hGbHVzaHx8dGUuY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJT05fRklOSVNILGUu ZnVsbEZsdXNoRmxhZz10ZS5jb25zdGFudHMuQlJPVExJX09QRVJBVElPTl9GTFVTSCxzdXBlcihl LHQpfX0sU3M9Y2xhc3MgZXh0ZW5kcyBYdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJCcm90bGlD b21wcmVzcyIpfX07Zi5Ccm90bGlDb21wcmVzcz1Tczt2YXIgZ3M9Y2xhc3MgZXh0ZW5kcyBYdHtj b25zdHJ1Y3RvcihlKXtzdXBlcihlLCJCcm90bGlEZWNvbXByZXNzIil9fTtmLkJyb3RsaURlY29t cHJlc3M9Z3M7dmFyIFF0PWNsYXNzIGV4dGVuZHMgYnR7Y29uc3RydWN0b3IoZSx0KXtlPWV8fHt9 LGUuZmx1c2g9ZS5mbHVzaHx8dGUuY29uc3RhbnRzLlpTVERfZV9jb250aW51ZSxlLmZpbmlzaEZs dXNoPWUuZmluaXNoRmx1c2h8fHRlLmNvbnN0YW50cy5aU1REX2VfZW5kLGUuZnVsbEZsdXNoRmxh Zz10ZS5jb25zdGFudHMuWlNURF9lX2ZsdXNoLHN1cGVyKGUsdCl9fSxScz1jbGFzcyBleHRlbmRz IFF0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlpzdGRDb21wcmVzcyIpfX07Zi5ac3RkQ29tcHJl c3M9UnM7dmFyIE9zPWNsYXNzIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiWnN0 ZERlY29tcHJlc3MiKX19O2YuWnN0ZERlY29tcHJlc3M9T3N9KTt2YXIgR3I9ZChYZT0+eyJ1c2Ug c3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p O1hlLnBhcnNlPVhlLmVuY29kZT12b2lkIDA7dmFyIHRhPShzLGUpPT57aWYoTnVtYmVyLmlzU2Fm ZUludGVnZXIocykpczwwP3NhKHMsZSk6aWEocyxlKTtlbHNlIHRocm93IEVycm9yKCJjYW5ub3Qg ZW5jb2RlIG51bWJlciBvdXRzaWRlIG9mIGphdmFzY3JpcHQgc2FmZSBpbnRlZ2VyIHJhbmdlIik7 cmV0dXJuIGV9O1hlLmVuY29kZT10YTt2YXIgaWE9KHMsZSk9PntlWzBdPTEyODtmb3IodmFyIHQ9 ZS5sZW5ndGg7dD4xO3QtLSllW3QtMV09cyYyNTUscz1NYXRoLmZsb29yKHMvMjU2KX0sc2E9KHMs ZSk9PntlWzBdPTI1NTt2YXIgdD0hMTtzPXMqLTE7Zm9yKHZhciBpPWUubGVuZ3RoO2k+MTtpLS0p e3ZhciByPXMmMjU1O3M9TWF0aC5mbG9vcihzLzI1NiksdD9lW2ktMV09SHIocik6cj09PTA/ZVtp LTFdPTA6KHQ9ITAsZVtpLTFdPVpyKHIpKX19LHJhPXM9PntsZXQgZT1zWzBdLHQ9ZT09PTEyOD9v YShzLnN1YmFycmF5KDEscy5sZW5ndGgpKTplPT09MjU1P25hKHMpOm51bGw7aWYodD09PW51bGwp dGhyb3cgRXJyb3IoImludmFsaWQgYmFzZTI1NiBlbmNvZGluZyIpO2lmKCFOdW1iZXIuaXNTYWZl SW50ZWdlcih0KSl0aHJvdyBFcnJvcigicGFyc2VkIG51bWJlciBvdXRzaWRlIG9mIGphdmFzY3Jp cHQgc2FmZSBpbnRlZ2VyIHJhbmdlIik7cmV0dXJuIHR9O1hlLnBhcnNlPXJhO3ZhciBuYT1zPT57 Zm9yKHZhciBlPXMubGVuZ3RoLHQ9MCxpPSExLHI9ZS0xO3I+LTE7ci0tKXt2YXIgbj1OdW1iZXIo c1tyXSksbztpP289SHIobik6bj09PTA/bz1uOihpPSEwLG89WnIobikpLG8hPT0wJiYodC09bypN YXRoLnBvdygyNTYsZS1yLTEpKX1yZXR1cm4gdH0sb2E9cz0+e2Zvcih2YXIgZT1zLmxlbmd0aCx0 PTAsaT1lLTE7aT4tMTtpLS0pe3ZhciByPU51bWJlcihzW2ldKTtyIT09MCYmKHQrPXIqTWF0aC5w b3coMjU2LGUtaS0xKSl9cmV0dXJuIHR9LEhyPXM9PigyNTVecykmMjU1LFpyPXM9PigyNTVecykr MSYyNTV9KTt2YXIgVHM9ZChqPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShq LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtqLmNvZGU9ai5uYW1lPWouaXNOYW1lPWouaXNDb2Rl PXZvaWQgMDt2YXIgYWE9cz0+ai5uYW1lLmhhcyhzKTtqLmlzQ29kZT1hYTt2YXIgaGE9cz0+ai5j b2RlLmhhcyhzKTtqLmlzTmFtZT1oYTtqLm5hbWU9bmV3IE1hcChbWyIwIiwiRmlsZSJdLFsiIiwi T2xkRmlsZSJdLFsiMSIsIkxpbmsiXSxbIjIiLCJTeW1ib2xpY0xpbmsiXSxbIjMiLCJDaGFyYWN0 ZXJEZXZpY2UiXSxbIjQiLCJCbG9ja0RldmljZSJdLFsiNSIsIkRpcmVjdG9yeSJdLFsiNiIsIkZJ Rk8iXSxbIjciLCJDb250aWd1b3VzRmlsZSJdLFsiZyIsIkdsb2JhbEV4dGVuZGVkSGVhZGVyIl0s WyJ4IiwiRXh0ZW5kZWRIZWFkZXIiXSxbIkEiLCJTb2xhcmlzQUNMIl0sWyJEIiwiR05VRHVtcERp ciJdLFsiSSIsIklub2RlIl0sWyJLIiwiTmV4dEZpbGVIYXNMb25nTGlua3BhdGgiXSxbIkwiLCJO ZXh0RmlsZUhhc0xvbmdQYXRoIl0sWyJNIiwiQ29udGludWF0aW9uRmlsZSJdLFsiTiIsIk9sZEdu dUxvbmdQYXRoIl0sWyJTIiwiU3BhcnNlRmlsZSJdLFsiViIsIlRhcGVWb2x1bWVIZWFkZXIiXSxb IlgiLCJPbGRFeHRlbmRlZEhlYWRlciJdXSk7ai5jb2RlPW5ldyBNYXAoQXJyYXkuZnJvbShqLm5h bWUpLm1hcChzPT5bc1sxXSxzWzBdXSkpfSk7dmFyIEplPWQoc2U9PnsidXNlIHN0cmljdCI7dmFy IGxhPXNlJiZzZS5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlvbihzLGUs dCxpKXtpPT09dm9pZCAwJiYoaT10KTt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw dG9yKGUsdCk7KCFyfHwoImdldCJpbiByPyFlLl9fZXNNb2R1bGU6ci53cml0YWJsZXx8ci5jb25m aWd1cmFibGUpKSYmKHI9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbdF19 fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsaSxyKX0pOihmdW5jdGlvbihzLGUsdCxpKXtpPT09 dm9pZCAwJiYoaT10KSxzW2ldPWVbdF19KSksdWE9c2UmJnNlLl9fc2V0TW9kdWxlRGVmYXVsdHx8 KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHMsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHMsImRl ZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KX0pOmZ1bmN0aW9uKHMsZSl7cy5kZWZhdWx0 PWV9KSxZcj1zZSYmc2UuX19pbXBvcnRTdGFyfHwoZnVuY3Rpb24oKXt2YXIgcz1mdW5jdGlvbihl KXtyZXR1cm4gcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7dmFyIGk9 W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQs cikmJihpW2kubGVuZ3RoXT1yKTtyZXR1cm4gaX0scyhlKX07cmV0dXJuIGZ1bmN0aW9uKGUpe2lm KGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2YXIgaT1z KGUpLHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdIT09ImRlZmF1bHQiJiZsYSh0LGUsaVtyXSk7cmV0 dXJuIHVhKHQsZSksdH19KSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzZSwiX19lc01vZHVsZSIs e3ZhbHVlOiEwfSk7c2UuSGVhZGVyPXZvaWQgMDt2YXIgUWU9cmVxdWlyZSgibm9kZTpwYXRoIiks S3I9WXIoR3IoKSksU3Q9WXIoVHMoKSksTnM9Y2xhc3N7Y2tzdW1WYWxpZD0hMTtuZWVkUGF4PSEx O251bGxCbG9jaz0hMTtibG9jaztwYXRoO21vZGU7dWlkO2dpZDtzaXplO2Nrc3VtOyNlPSJVbnN1 cHBvcnRlZCI7bGlua3BhdGg7dW5hbWU7Z25hbWU7ZGV2bWFqPTA7ZGV2bWluPTA7YXRpbWU7Y3Rp bWU7bXRpbWU7Y2hhcnNldDtjb21tZW50O2NvbnN0cnVjdG9yKGUsdD0wLGkscil7QnVmZmVyLmlz QnVmZmVyKGUpP3RoaXMuZGVjb2RlKGUsdHx8MCxpLHIpOmUmJnRoaXMuI2koZSl9ZGVjb2RlKGUs dCxpLHIpe2lmKHR8fCh0PTApLCFlfHwhKGUubGVuZ3RoPj10KzUxMikpdGhyb3cgbmV3IEVycm9y KCJuZWVkIDUxMiBieXRlcyBmb3IgaGVhZGVyIik7dGhpcy5wYXRoPWk/LnBhdGg/P0NlKGUsdCwx MDApLHRoaXMubW9kZT1pPy5tb2RlPz9yPy5tb2RlPz9iZShlLHQrMTAwLDgpLHRoaXMudWlkPWk/ LnVpZD8/cj8udWlkPz9iZShlLHQrMTA4LDgpLHRoaXMuZ2lkPWk/LmdpZD8/cj8uZ2lkPz9iZShl LHQrMTE2LDgpLHRoaXMuc2l6ZT1pPy5zaXplPz9yPy5zaXplPz9iZShlLHQrMTI0LDEyKSx0aGlz Lm10aW1lPWk/Lm10aW1lPz9yPy5tdGltZT8/RHMoZSx0KzEzNiwxMiksdGhpcy5ja3N1bT1iZShl LHQrMTQ4LDEyKSxyJiZ0aGlzLiNpKHIsITApLGkmJnRoaXMuI2koaSk7bGV0IG49Q2UoZSx0KzE1 NiwxKTtpZihTdC5pc0NvZGUobikmJih0aGlzLiNlPW58fCIwIiksdGhpcy4jZT09PSIwIiYmdGhp cy5wYXRoLnNsaWNlKC0xKT09PSIvIiYmKHRoaXMuI2U9IjUiKSx0aGlzLiNlPT09IjUiJiYodGhp cy5zaXplPTApLHRoaXMubGlua3BhdGg9Q2UoZSx0KzE1NywxMDApLGUuc3ViYXJyYXkodCsyNTcs dCsyNjUpLnRvU3RyaW5nKCk9PT0idXN0YXJceDAwMDAiKWlmKHRoaXMudW5hbWU9aT8udW5hbWU/ P3I/LnVuYW1lPz9DZShlLHQrMjY1LDMyKSx0aGlzLmduYW1lPWk/LmduYW1lPz9yPy5nbmFtZT8/ Q2UoZSx0KzI5NywzMiksdGhpcy5kZXZtYWo9aT8uZGV2bWFqPz9yPy5kZXZtYWo/P2JlKGUsdCsz MjksOCk/PzAsdGhpcy5kZXZtaW49aT8uZGV2bWluPz9yPy5kZXZtaW4/P2JlKGUsdCszMzcsOCk/ PzAsZVt0KzQ3NV0hPT0wKXtsZXQgYT1DZShlLHQrMzQ1LDE1NSk7dGhpcy5wYXRoPWErIi8iK3Ro aXMucGF0aH1lbHNle2xldCBhPUNlKGUsdCszNDUsMTMwKTthJiYodGhpcy5wYXRoPWErIi8iK3Ro aXMucGF0aCksdGhpcy5hdGltZT1pPy5hdGltZT8/cj8uYXRpbWU/P0RzKGUsdCs0NzYsMTIpLHRo aXMuY3RpbWU9aT8uY3RpbWU/P3I/LmN0aW1lPz9EcyhlLHQrNDg4LDEyKX1sZXQgbz0yNTY7Zm9y KGxldCBhPXQ7YTx0KzE0ODthKyspbys9ZVthXTtmb3IobGV0IGE9dCsxNTY7YTx0KzUxMjthKysp bys9ZVthXTt0aGlzLmNrc3VtVmFsaWQ9bz09PXRoaXMuY2tzdW0sdGhpcy5ja3N1bT09PXZvaWQg MCYmbz09PTI1NiYmKHRoaXMubnVsbEJsb2NrPSEwKX0jaShlLHQ9ITEpe09iamVjdC5hc3NpZ24o dGhpcyxPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbaSxyXSk9 PiEocj09bnVsbHx8aT09PSJwYXRoIiYmdHx8aT09PSJsaW5rcGF0aCImJnR8fGk9PT0iZ2xvYmFs IikpKSl9ZW5jb2RlKGUsdD0wKXtpZihlfHwoZT10aGlzLmJsb2NrPUJ1ZmZlci5hbGxvYyg1MTIp KSx0aGlzLiNlPT09IlVuc3VwcG9ydGVkIiYmKHRoaXMuI2U9IjAiKSwhKGUubGVuZ3RoPj10KzUx MikpdGhyb3cgbmV3IEVycm9yKCJuZWVkIDUxMiBieXRlcyBmb3IgaGVhZGVyIik7bGV0IGk9dGhp cy5jdGltZXx8dGhpcy5hdGltZT8xMzA6MTU1LHI9Y2EodGhpcy5wYXRofHwiIixpKSxuPXJbMF0s bz1yWzFdO3RoaXMubmVlZFBheD0hIXJbMl0sdGhpcy5uZWVkUGF4PUZlKGUsdCwxMDAsbil8fHRo aXMubmVlZFBheCx0aGlzLm5lZWRQYXg9U2UoZSx0KzEwMCw4LHRoaXMubW9kZSl8fHRoaXMubmVl ZFBheCx0aGlzLm5lZWRQYXg9U2UoZSx0KzEwOCw4LHRoaXMudWlkKXx8dGhpcy5uZWVkUGF4LHRo aXMubmVlZFBheD1TZShlLHQrMTE2LDgsdGhpcy5naWQpfHx0aGlzLm5lZWRQYXgsdGhpcy5uZWVk UGF4PVNlKGUsdCsxMjQsMTIsdGhpcy5zaXplKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1Q cyhlLHQrMTM2LDEyLHRoaXMubXRpbWUpfHx0aGlzLm5lZWRQYXgsZVt0KzE1Nl09dGhpcy4jZS5j aGFyQ29kZUF0KDApLHRoaXMubmVlZFBheD1GZShlLHQrMTU3LDEwMCx0aGlzLmxpbmtwYXRoKXx8 dGhpcy5uZWVkUGF4LGUud3JpdGUoInVzdGFyXHgwMDAwIix0KzI1Nyw4KSx0aGlzLm5lZWRQYXg9 RmUoZSx0KzI2NSwzMix0aGlzLnVuYW1lKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1GZShl LHQrMjk3LDMyLHRoaXMuZ25hbWUpfHx0aGlzLm5lZWRQYXgsdGhpcy5uZWVkUGF4PVNlKGUsdCsz MjksOCx0aGlzLmRldm1hail8fHRoaXMubmVlZFBheCx0aGlzLm5lZWRQYXg9U2UoZSx0KzMzNyw4 LHRoaXMuZGV2bWluKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1GZShlLHQrMzQ1LGksbyl8 fHRoaXMubmVlZFBheCxlW3QrNDc1XSE9PTA/dGhpcy5uZWVkUGF4PUZlKGUsdCszNDUsMTU1LG8p fHx0aGlzLm5lZWRQYXg6KHRoaXMubmVlZFBheD1GZShlLHQrMzQ1LDEzMCxvKXx8dGhpcy5uZWVk UGF4LHRoaXMubmVlZFBheD1QcyhlLHQrNDc2LDEyLHRoaXMuYXRpbWUpfHx0aGlzLm5lZWRQYXgs dGhpcy5uZWVkUGF4PVBzKGUsdCs0ODgsMTIsdGhpcy5jdGltZSl8fHRoaXMubmVlZFBheCk7bGV0 IGE9MjU2O2ZvcihsZXQgaD10O2g8dCsxNDg7aCsrKWErPWVbaF07Zm9yKGxldCBoPXQrMTU2O2g8 dCs1MTI7aCsrKWErPWVbaF07cmV0dXJuIHRoaXMuY2tzdW09YSxTZShlLHQrMTQ4LDgsdGhpcy5j a3N1bSksdGhpcy5ja3N1bVZhbGlkPSEwLHRoaXMubmVlZFBheH1nZXQgdHlwZSgpe3JldHVybiB0 aGlzLiNlPT09IlVuc3VwcG9ydGVkIj90aGlzLiNlOlN0Lm5hbWUuZ2V0KHRoaXMuI2UpfWdldCB0 eXBlS2V5KCl7cmV0dXJuIHRoaXMuI2V9c2V0IHR5cGUoZSl7bGV0IHQ9U3RyaW5nKFN0LmNvZGUu Z2V0KGUpKTtpZihTdC5pc0NvZGUodCl8fHQ9PT0iVW5zdXBwb3J0ZWQiKXRoaXMuI2U9dDtlbHNl IGlmKFN0LmlzQ29kZShlKSl0aGlzLiNlPWU7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZh bGlkIGVudHJ5IHR5cGU6ICIrZSl9fTtzZS5IZWFkZXI9TnM7dmFyIGNhPShzLGUpPT57bGV0IGk9 cyxyPSIiLG4sbz1RZS5wb3NpeC5wYXJzZShzKS5yb290fHwiLiI7aWYoQnVmZmVyLmJ5dGVMZW5n dGgoaSk8MTAwKW49W2ksciwhMV07ZWxzZXtyPVFlLnBvc2l4LmRpcm5hbWUoaSksaT1RZS5wb3Np eC5iYXNlbmFtZShpKTtkbyBCdWZmZXIuYnl0ZUxlbmd0aChpKTw9MTAwJiZCdWZmZXIuYnl0ZUxl bmd0aChyKTw9ZT9uPVtpLHIsITFdOkJ1ZmZlci5ieXRlTGVuZ3RoKGkpPjEwMCYmQnVmZmVyLmJ5 dGVMZW5ndGgocik8PWU/bj1baS5zbGljZSgwLDk5KSxyLCEwXTooaT1RZS5wb3NpeC5qb2luKFFl LnBvc2l4LmJhc2VuYW1lKHIpLGkpLHI9UWUucG9zaXguZGlybmFtZShyKSk7d2hpbGUociE9PW8m Jm49PT12b2lkIDApO258fChuPVtzLnNsaWNlKDAsOTkpLCIiLCEwXSl9cmV0dXJuIG59LENlPShz LGUsdCk9PnMuc3ViYXJyYXkoZSxlK3QpLnRvU3RyaW5nKCJ1dGY4IikucmVwbGFjZSgvXDAuKi8s IiIpLERzPShzLGUsdCk9PmZhKGJlKHMsZSx0KSksZmE9cz0+cz09PXZvaWQgMD92b2lkIDA6bmV3 IERhdGUocyoxZTMpLGJlPShzLGUsdCk9Pk51bWJlcihzW2VdKSYxMjg/S3IucGFyc2Uocy5zdWJh cnJheShlLGUrdCkpOm1hKHMsZSx0KSxkYT1zPT5pc05hTihzKT92b2lkIDA6cyxtYT0ocyxlLHQp PT5kYShwYXJzZUludChzLnN1YmFycmF5KGUsZSt0KS50b1N0cmluZygidXRmOCIpLnJlcGxhY2Uo L1wwLiokLywiIikudHJpbSgpLDgpKSxwYT17MTI6ODU4OTkzNDU5MSw4OjIwOTcxNTF9LFNlPShz LGUsdCxpKT0+aT09PXZvaWQgMD8hMTppPnBhW3RdfHxpPDA/KEtyLmVuY29kZShpLHMuc3ViYXJy YXkoZSxlK3QpKSwhMCk6KF9hKHMsZSx0LGkpLCExKSxfYT0ocyxlLHQsaSk9PnMud3JpdGUod2Eo aSx0KSxlLHQsImFzY2lpIiksd2E9KHMsZSk9PnlhKE1hdGguZmxvb3IocykudG9TdHJpbmcoOCks ZSkseWE9KHMsZSk9PihzLmxlbmd0aD09PWUtMT9zOm5ldyBBcnJheShlLXMubGVuZ3RoLTEpLmpv aW4oIjAiKStzKyIgIikrIlwwIixQcz0ocyxlLHQsaSk9Pmk9PT12b2lkIDA/ITE6U2UocyxlLHQs aS5nZXRUaW1lKCkvMWUzKSxFYT1uZXcgQXJyYXkoMTU2KS5qb2luKCJcMCIpLEZlPShzLGUsdCxp KT0+aT09PXZvaWQgMD8hMToocy53cml0ZShpK0VhLGUsdCwidXRmOCIpLGkubGVuZ3RoIT09QnVm ZmVyLmJ5dGVMZW5ndGgoaSl8fGkubGVuZ3RoPnQpfSk7dmFyIGVpPWQoSnQ9PnsidXNlIHN0cmlj dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEp0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtKdC5Q YXg9dm9pZCAwO3ZhciBiYT1yZXF1aXJlKCJub2RlOnBhdGgiKSxTYT1KZSgpLE1zPWNsYXNzIHN7 YXRpbWU7bXRpbWU7Y3RpbWU7Y2hhcnNldDtjb21tZW50O2dpZDt1aWQ7Z25hbWU7dW5hbWU7bGlu a3BhdGg7ZGV2O2lubztubGluaztwYXRoO3NpemU7bW9kZTtnbG9iYWw7Y29uc3RydWN0b3IoZSx0 PSExKXt0aGlzLmF0aW1lPWUuYXRpbWUsdGhpcy5jaGFyc2V0PWUuY2hhcnNldCx0aGlzLmNvbW1l bnQ9ZS5jb21tZW50LHRoaXMuY3RpbWU9ZS5jdGltZSx0aGlzLmRldj1lLmRldix0aGlzLmdpZD1l LmdpZCx0aGlzLmdsb2JhbD10LHRoaXMuZ25hbWU9ZS5nbmFtZSx0aGlzLmlubz1lLmlubyx0aGlz LmxpbmtwYXRoPWUubGlua3BhdGgsdGhpcy5tdGltZT1lLm10aW1lLHRoaXMubmxpbms9ZS5ubGlu ayx0aGlzLnBhdGg9ZS5wYXRoLHRoaXMuc2l6ZT1lLnNpemUsdGhpcy51aWQ9ZS51aWQsdGhpcy51 bmFtZT1lLnVuYW1lfWVuY29kZSgpe2xldCBlPXRoaXMuZW5jb2RlQm9keSgpO2lmKGU9PT0iIily ZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKDApO2xldCB0PUJ1ZmZlci5ieXRlTGVuZ3RoKGUpLGk9 NTEyKk1hdGguY2VpbCgxK3QvNTEyKSxyPUJ1ZmZlci5hbGxvY1Vuc2FmZShpKTtmb3IobGV0IG49 MDtuPDUxMjtuKyspcltuXT0wO25ldyBTYS5IZWFkZXIoe3BhdGg6KCJQYXhIZWFkZXIvIisoMCxi YS5iYXNlbmFtZSkodGhpcy5wYXRoPz8iIikpLnNsaWNlKDAsOTkpLG1vZGU6dGhpcy5tb2RlfHw0 MjAsdWlkOnRoaXMudWlkLGdpZDp0aGlzLmdpZCxzaXplOnQsbXRpbWU6dGhpcy5tdGltZSx0eXBl OnRoaXMuZ2xvYmFsPyJHbG9iYWxFeHRlbmRlZEhlYWRlciI6IkV4dGVuZGVkSGVhZGVyIixsaW5r cGF0aDoiIix1bmFtZTp0aGlzLnVuYW1lfHwiIixnbmFtZTp0aGlzLmduYW1lfHwiIixkZXZtYWo6 MCxkZXZtaW46MCxhdGltZTp0aGlzLmF0aW1lLGN0aW1lOnRoaXMuY3RpbWV9KS5lbmNvZGUociks ci53cml0ZShlLDUxMix0LCJ1dGY4Iik7Zm9yKGxldCBuPXQrNTEyO248ci5sZW5ndGg7bisrKXJb bl09MDtyZXR1cm4gcn1lbmNvZGVCb2R5KCl7cmV0dXJuIHRoaXMuZW5jb2RlRmllbGQoInBhdGgi KSt0aGlzLmVuY29kZUZpZWxkKCJjdGltZSIpK3RoaXMuZW5jb2RlRmllbGQoImF0aW1lIikrdGhp cy5lbmNvZGVGaWVsZCgiZGV2IikrdGhpcy5lbmNvZGVGaWVsZCgiaW5vIikrdGhpcy5lbmNvZGVG aWVsZCgibmxpbmsiKSt0aGlzLmVuY29kZUZpZWxkKCJjaGFyc2V0IikrdGhpcy5lbmNvZGVGaWVs ZCgiY29tbWVudCIpK3RoaXMuZW5jb2RlRmllbGQoImdpZCIpK3RoaXMuZW5jb2RlRmllbGQoImdu YW1lIikrdGhpcy5lbmNvZGVGaWVsZCgibGlua3BhdGgiKSt0aGlzLmVuY29kZUZpZWxkKCJtdGlt ZSIpK3RoaXMuZW5jb2RlRmllbGQoInNpemUiKSt0aGlzLmVuY29kZUZpZWxkKCJ1aWQiKSt0aGlz LmVuY29kZUZpZWxkKCJ1bmFtZSIpfWVuY29kZUZpZWxkKGUpe2lmKHRoaXNbZV09PT12b2lkIDAp cmV0dXJuIiI7bGV0IHQ9dGhpc1tlXSxpPXQgaW5zdGFuY2VvZiBEYXRlP3QuZ2V0VGltZSgpLzFl Mzp0LHI9IiAiKyhlPT09ImRldiJ8fGU9PT0iaW5vInx8ZT09PSJubGluayI/IlNDSElMWS4iOiIi KStlKyI9IitpK2AKKy1gLG49QnVmZmVyLmJ5dGVMZW5ndGgociksbz1NYXRoLmZsb29yKE1hdGgu bG9nKG4pL01hdGgubG9nKDEwKSkrMTtyZXR1cm4gbitvPj1NYXRoLnBvdygxMCxvKSYmKG8rPTEp LG8rbityfXN0YXRpYyBwYXJzZShlLHQsaT0hMSl7cmV0dXJuIG5ldyBzKGdhKFJhKGUpLHQpLGkp fX07SnQuUGF4PU1zO3ZhciBnYT0ocyxlKT0+ZT9PYmplY3QuYXNzaWduKHt9LGUscyk6cyxSYT1z PT5zLnJlcGxhY2UoL1xuJC8sIiIpLnNwbGl0KGAKKy1gKS5yZWR1Y2UoT2EsT2JqZWN0LmNyZWF0 ZShudWxsKSksT2E9KHMsZSk9PntsZXQgdD1wYXJzZUludChlLDEwKTtpZih0IT09QnVmZmVyLmJ5 dGVMZW5ndGgoZSkrMSlyZXR1cm4gcztlPWUuc2xpY2UoKHQrIiAiKS5sZW5ndGgpO2xldCBpPWUu c3BsaXQoIj0iKSxyPWkuc2hpZnQoKTtpZighcilyZXR1cm4gcztsZXQgbj1yLnJlcGxhY2UoL15T Q0hJTFlcLihkZXZ8aW5vfG5saW5rKS8sIiQxIiksbz1pLmpvaW4oIj0iKTtyZXR1cm4gc1tuXT0v XihbQS1aXStcLik/KFttYWNdfGJpcnRofGNyZWF0aW9uKXRpbWUkLy50ZXN0KG4pP25ldyBEYXRl KE51bWJlcihvKSoxZTMpOi9eWzAtOV0rJC8udGVzdChvKT8rbzpvLHN9fSk7dmFyIGV0PWQodGk9 PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRpLCJfX2VzTW9kdWxlIix7dmFs dWU6ITB9KTt0aS5ub3JtYWxpemVXaW5kb3dzUGF0aD12b2lkIDA7dmFyIHZhPXByb2Nlc3MuZW52 LlRFU1RJTkdfVEFSX0ZBS0VfUExBVEZPUk18fHByb2Nlc3MucGxhdGZvcm07dGkubm9ybWFsaXpl V2luZG93c1BhdGg9dmEhPT0id2luMzIiP3M9PnM6cz0+cyYmcy5yZXBsYWNlKC9cXC9nLCIvIil9 KTt2YXIgcmk9ZChzaT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2ksIl9f ZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3NpLlJlYWRFbnRyeT12b2lkIDA7dmFyIFRhPVdlKCksaWk9 ZXQoKSxMcz1jbGFzcyBleHRlbmRzIFRhLk1pbmlwYXNze2V4dGVuZGVkO2dsb2JhbEV4dGVuZGVk O2hlYWRlcjtzdGFydEJsb2NrU2l6ZTtibG9ja1JlbWFpbjtyZW1haW47dHlwZTttZXRhPSExO2ln bm9yZT0hMTtwYXRoO21vZGU7dWlkO2dpZDt1bmFtZTtnbmFtZTtzaXplPTA7bXRpbWU7YXRpbWU7 Y3RpbWU7bGlua3BhdGg7ZGV2O2lubztubGluaztpbnZhbGlkPSExO2Fic29sdXRlO3Vuc3VwcG9y dGVkPSExO2NvbnN0cnVjdG9yKGUsdCxpKXtzd2l0Y2goc3VwZXIoe30pLHRoaXMucGF1c2UoKSx0 aGlzLmV4dGVuZGVkPXQsdGhpcy5nbG9iYWxFeHRlbmRlZD1pLHRoaXMuaGVhZGVyPWUsdGhpcy5y ZW1haW49ZS5zaXplPz8wLHRoaXMuc3RhcnRCbG9ja1NpemU9NTEyKk1hdGguY2VpbCh0aGlzLnJl bWFpbi81MTIpLHRoaXMuYmxvY2tSZW1haW49dGhpcy5zdGFydEJsb2NrU2l6ZSx0aGlzLnR5cGU9 ZS50eXBlLHRoaXMudHlwZSl7Y2FzZSJGaWxlIjpjYXNlIk9sZEZpbGUiOmNhc2UiTGluayI6Y2Fz ZSJTeW1ib2xpY0xpbmsiOmNhc2UiQ2hhcmFjdGVyRGV2aWNlIjpjYXNlIkJsb2NrRGV2aWNlIjpj YXNlIkRpcmVjdG9yeSI6Y2FzZSJGSUZPIjpjYXNlIkNvbnRpZ3VvdXNGaWxlIjpjYXNlIkdOVUR1 bXBEaXIiOmJyZWFrO2Nhc2UiTmV4dEZpbGVIYXNMb25nTGlua3BhdGgiOmNhc2UiTmV4dEZpbGVI YXNMb25nUGF0aCI6Y2FzZSJPbGRHbnVMb25nUGF0aCI6Y2FzZSJHbG9iYWxFeHRlbmRlZEhlYWRl ciI6Y2FzZSJFeHRlbmRlZEhlYWRlciI6Y2FzZSJPbGRFeHRlbmRlZEhlYWRlciI6dGhpcy5tZXRh PSEwO2JyZWFrO2RlZmF1bHQ6dGhpcy5pZ25vcmU9ITB9aWYoIWUucGF0aCl0aHJvdyBuZXcgRXJy b3IoIm5vIHBhdGggcHJvdmlkZWQgZm9yIHRhci5SZWFkRW50cnkiKTt0aGlzLnBhdGg9KDAsaWku bm9ybWFsaXplV2luZG93c1BhdGgpKGUucGF0aCksdGhpcy5tb2RlPWUubW9kZSx0aGlzLm1vZGUm Jih0aGlzLm1vZGU9dGhpcy5tb2RlJjQwOTUpLHRoaXMudWlkPWUudWlkLHRoaXMuZ2lkPWUuZ2lk LHRoaXMudW5hbWU9ZS51bmFtZSx0aGlzLmduYW1lPWUuZ25hbWUsdGhpcy5zaXplPXRoaXMucmVt YWluLHRoaXMubXRpbWU9ZS5tdGltZSx0aGlzLmF0aW1lPWUuYXRpbWUsdGhpcy5jdGltZT1lLmN0 aW1lLHRoaXMubGlua3BhdGg9ZS5saW5rcGF0aD8oMCxpaS5ub3JtYWxpemVXaW5kb3dzUGF0aCko ZS5saW5rcGF0aCk6dm9pZCAwLHRoaXMudW5hbWU9ZS51bmFtZSx0aGlzLmduYW1lPWUuZ25hbWUs dCYmdGhpcy4jZSh0KSxpJiZ0aGlzLiNlKGksITApfXdyaXRlKGUpe2xldCB0PWUubGVuZ3RoO2lm KHQ+dGhpcy5ibG9ja1JlbWFpbil0aHJvdyBuZXcgRXJyb3IoIndyaXRpbmcgbW9yZSB0byBlbnRy eSB0aGFuIGlzIGFwcHJvcHJpYXRlIik7bGV0IGk9dGhpcy5yZW1haW4scj10aGlzLmJsb2NrUmVt YWluO3JldHVybiB0aGlzLnJlbWFpbj1NYXRoLm1heCgwLGktdCksdGhpcy5ibG9ja1JlbWFpbj1N YXRoLm1heCgwLHItdCksdGhpcy5pZ25vcmU/ITA6aT49dD9zdXBlci53cml0ZShlKTpzdXBlci53 cml0ZShlLnN1YmFycmF5KDAsaSkpfSNlKGUsdD0hMSl7ZS5wYXRoJiYoZS5wYXRoPSgwLGlpLm5v cm1hbGl6ZVdpbmRvd3NQYXRoKShlLnBhdGgpKSxlLmxpbmtwYXRoJiYoZS5saW5rcGF0aD0oMCxp aS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZS5saW5rcGF0aCkpLE9iamVjdC5hc3NpZ24odGhpcyxP YmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbaSxyXSk9PiEocj09 bnVsbHx8aT09PSJwYXRoIiYmdCkpKSl9fTtzaS5SZWFkRW50cnk9THN9KTt2YXIgb2k9ZChuaT0+ eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobmksIl9fZXNNb2R1bGUiLHt2YWx1 ZTohMH0pO25pLndhcm5NZXRob2Q9dm9pZCAwO3ZhciBEYT0ocyxlLHQsaT17fSk9PntzLmZpbGUm JihpLmZpbGU9cy5maWxlKSxzLmN3ZCYmKGkuY3dkPXMuY3dkKSxpLmNvZGU9dCBpbnN0YW5jZW9m IEVycm9yJiZ0LmNvZGV8fGUsaS50YXJDb2RlPWUsIXMuc3RyaWN0JiZpLnJlY292ZXJhYmxlIT09 ITE/KHQgaW5zdGFuY2VvZiBFcnJvciYmKGk9T2JqZWN0LmFzc2lnbih0LGkpLHQ9dC5tZXNzYWdl KSxzLmVtaXQoIndhcm4iLGUsdCxpKSk6dCBpbnN0YW5jZW9mIEVycm9yP3MuZW1pdCgiZXJyb3Ii LE9iamVjdC5hc3NpZ24odCxpKSk6cy5lbWl0KCJlcnJvciIsT2JqZWN0LmFzc2lnbihuZXcgRXJy b3IoYCR7ZX06ICR7dH1gKSxpKSl9O25pLndhcm5NZXRob2Q9RGF9KTt2YXIgbWk9ZChkaT0+eyJ1 c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZGksIl9fZXNNb2R1bGUiLHt2YWx1ZToh MH0pO2RpLlBhcnNlcj12b2lkIDA7dmFyIFBhPXJlcXVpcmUoImV2ZW50cyIpLEFzPXZzKCksVnI9 SmUoKSwkcj1laSgpLE5hPXJpKCksTWE9b2koKSxMYT0xMDI0KjEwMjQsenM9QnVmZmVyLmZyb20o WzMxLDEzOV0pLGtzPUJ1ZmZlci5mcm9tKFs0MCwxODEsNDcsMjUzXSksQWE9TWF0aC5tYXgoenMu bGVuZ3RoLGtzLmxlbmd0aCksSD1TeW1ib2woInN0YXRlIiksQmU9U3ltYm9sKCJ3cml0ZUVudHJ5 IiksZGU9U3ltYm9sKCJyZWFkRW50cnkiKSxJcz1TeW1ib2woIm5leHRFbnRyeSIpLFhyPVN5bWJv bCgicHJvY2Vzc0VudHJ5IikscmU9U3ltYm9sKCJleHRlbmRlZEhlYWRlciIpLGd0PVN5bWJvbCgi Z2xvYmFsRXh0ZW5kZWRIZWFkZXIiKSxnZT1TeW1ib2woIm1ldGEiKSxRcj1TeW1ib2woImVtaXRN ZXRhIiksXz1TeW1ib2woImJ1ZmZlciIpLG1lPVN5bWJvbCgicXVldWUiKSxSZT1TeW1ib2woImVu ZGVkIiksQ3M9U3ltYm9sKCJlbWl0dGVkRW5kIiksemU9U3ltYm9sKCJlbWl0IiksUz1TeW1ib2wo InVuemlwIiksYWk9U3ltYm9sKCJjb25zdW1lQ2h1bmsiKSxoaT1TeW1ib2woImNvbnN1bWVDaHVu a1N1YiIpLEZzPVN5bWJvbCgiY29uc3VtZUJvZHkiKSxKcj1TeW1ib2woImNvbnN1bWVNZXRhIiks ZW49U3ltYm9sKCJjb25zdW1lSGVhZGVyIiksUnQ9U3ltYm9sKCJjb25zdW1pbmciKSxCcz1TeW1i b2woImJ1ZmZlckNvbmNhdCIpLGxpPVN5bWJvbCgibWF5YmVFbmQiKSx0dD1TeW1ib2woIndyaXRp bmciKSxPZT1TeW1ib2woImFib3J0ZWQiKSx1aT1TeW1ib2woIm9uRG9uZSIpLGtlPVN5bWJvbCgi c2F3VmFsaWRFbnRyeSIpLGNpPVN5bWJvbCgic2F3TnVsbEJsb2NrIiksZmk9U3ltYm9sKCJzYXdF T0YiKSx0bj1TeW1ib2woImNsb3NlU3RyZWFtIiksSWE9KCk9PiEwLGpzPWNsYXNzIGV4dGVuZHMg UGEuRXZlbnRFbWl0dGVye2ZpbGU7c3RyaWN0O21heE1ldGFFbnRyeVNpemU7ZmlsdGVyO2Jyb3Rs aTt6c3RkO3dyaXRhYmxlPSEwO3JlYWRhYmxlPSExO1ttZV09W107W19dO1tkZV07W0JlXTtbSF09 ImJlZ2luIjtbZ2VdPSIiO1tyZV07W2d0XTtbUmVdPSExO1tTXTtbT2VdPSExO1trZV07W2NpXT0h MTtbZmldPSExO1t0dF09ITE7W1J0XT0hMTtbQ3NdPSExO2NvbnN0cnVjdG9yKGU9e30pe3N1cGVy KCksdGhpcy5maWxlPWUuZmlsZXx8IiIsdGhpcy5vbih1aSwoKT0+eyh0aGlzW0hdPT09ImJlZ2lu Inx8dGhpc1trZV09PT0hMSkmJnRoaXMud2FybigiVEFSX0JBRF9BUkNISVZFIiwiVW5yZWNvZ25p emVkIGFyY2hpdmUgZm9ybWF0Iil9KSxlLm9uZG9uZT90aGlzLm9uKHVpLGUub25kb25lKTp0aGlz Lm9uKHVpLCgpPT57dGhpcy5lbWl0KCJwcmVmaW5pc2giKSx0aGlzLmVtaXQoImZpbmlzaCIpLHRo aXMuZW1pdCgiZW5kIil9KSx0aGlzLnN0cmljdD0hIWUuc3RyaWN0LHRoaXMubWF4TWV0YUVudHJ5 U2l6ZT1lLm1heE1ldGFFbnRyeVNpemV8fExhLHRoaXMuZmlsdGVyPXR5cGVvZiBlLmZpbHRlcj09 ImZ1bmN0aW9uIj9lLmZpbHRlcjpJYTtsZXQgdD1lLmZpbGUmJihlLmZpbGUuZW5kc1dpdGgoIi50 YXIuYnIiKXx8ZS5maWxlLmVuZHNXaXRoKCIudGJyIikpO3RoaXMuYnJvdGxpPSEoZS5nemlwfHxl LnpzdGQpJiZlLmJyb3RsaSE9PXZvaWQgMD9lLmJyb3RsaTp0P3ZvaWQgMDohMTtsZXQgaT1lLmZp bGUmJihlLmZpbGUuZW5kc1dpdGgoIi50YXIuenN0Iil8fGUuZmlsZS5lbmRzV2l0aCgiLnR6c3Qi KSk7dGhpcy56c3RkPSEoZS5nemlwfHxlLmJyb3RsaSkmJmUuenN0ZCE9PXZvaWQgMD9lLnpzdGQ6 aT8hMDp2b2lkIDAsdGhpcy5vbigiZW5kIiwoKT0+dGhpc1t0bl0oKSksdHlwZW9mIGUub253YXJu PT0iZnVuY3Rpb24iJiZ0aGlzLm9uKCJ3YXJuIixlLm9ud2FybiksdHlwZW9mIGUub25SZWFkRW50 cnk9PSJmdW5jdGlvbiImJnRoaXMub24oImVudHJ5IixlLm9uUmVhZEVudHJ5KX13YXJuKGUsdCxp PXt9KXsoMCxNYS53YXJuTWV0aG9kKSh0aGlzLGUsdCxpKX1bZW5dKGUsdCl7dGhpc1trZV09PT12 b2lkIDAmJih0aGlzW2tlXT0hMSk7bGV0IGk7dHJ5e2k9bmV3IFZyLkhlYWRlcihlLHQsdGhpc1ty ZV0sdGhpc1tndF0pfWNhdGNoKHIpe3JldHVybiB0aGlzLndhcm4oIlRBUl9FTlRSWV9JTlZBTElE IixyKX1pZihpLm51bGxCbG9jayl0aGlzW2NpXT8odGhpc1tmaV09ITAsdGhpc1tIXT09PSJiZWdp biImJih0aGlzW0hdPSJoZWFkZXIiKSx0aGlzW3plXSgiZW9mIikpOih0aGlzW2NpXT0hMCx0aGlz W3plXSgibnVsbEJsb2NrIikpO2Vsc2UgaWYodGhpc1tjaV09ITEsIWkuY2tzdW1WYWxpZCl0aGlz Lndhcm4oIlRBUl9FTlRSWV9JTlZBTElEIiwiY2hlY2tzdW0gZmFpbHVyZSIse2hlYWRlcjppfSk7 ZWxzZSBpZighaS5wYXRoKXRoaXMud2FybigiVEFSX0VOVFJZX0lOVkFMSUQiLCJwYXRoIGlzIHJl cXVpcmVkIix7aGVhZGVyOml9KTtlbHNle2xldCByPWkudHlwZTtpZigvXihTeW1ib2xpYyk/TGlu ayQvLnRlc3QocikmJiFpLmxpbmtwYXRoKXRoaXMud2FybigiVEFSX0VOVFJZX0lOVkFMSUQiLCJs aW5rcGF0aCByZXF1aXJlZCIse2hlYWRlcjppfSk7ZWxzZSBpZighL14oU3ltYm9saWMpP0xpbmsk Ly50ZXN0KHIpJiYhL14oR2xvYmFsKT9FeHRlbmRlZEhlYWRlciQvLnRlc3QocikmJmkubGlua3Bh dGgpdGhpcy53YXJuKCJUQVJfRU5UUllfSU5WQUxJRCIsImxpbmtwYXRoIGZvcmJpZGRlbiIse2hl YWRlcjppfSk7ZWxzZXtsZXQgbj10aGlzW0JlXT1uZXcgTmEuUmVhZEVudHJ5KGksdGhpc1tyZV0s dGhpc1tndF0pO2lmKCF0aGlzW2tlXSlpZihuLnJlbWFpbil7bGV0IG89KCk9PntuLmludmFsaWR8 fCh0aGlzW2tlXT0hMCl9O24ub24oImVuZCIsbyl9ZWxzZSB0aGlzW2tlXT0hMDtuLm1ldGE/bi5z aXplPnRoaXMubWF4TWV0YUVudHJ5U2l6ZT8obi5pZ25vcmU9ITAsdGhpc1t6ZV0oImlnbm9yZWRF bnRyeSIsbiksdGhpc1tIXT0iaWdub3JlIixuLnJlc3VtZSgpKTpuLnNpemU+MCYmKHRoaXNbZ2Vd PSIiLG4ub24oImRhdGEiLG89PnRoaXNbZ2VdKz1vKSx0aGlzW0hdPSJtZXRhIik6KHRoaXNbcmVd PXZvaWQgMCxuLmlnbm9yZT1uLmlnbm9yZXx8IXRoaXMuZmlsdGVyKG4ucGF0aCxuKSxuLmlnbm9y ZT8odGhpc1t6ZV0oImlnbm9yZWRFbnRyeSIsbiksdGhpc1tIXT1uLnJlbWFpbj8iaWdub3JlIjoi aGVhZGVyIixuLnJlc3VtZSgpKToobi5yZW1haW4/dGhpc1tIXT0iYm9keSI6KHRoaXNbSF09Imhl YWRlciIsbi5lbmQoKSksdGhpc1tkZV0/dGhpc1ttZV0ucHVzaChuKToodGhpc1ttZV0ucHVzaChu KSx0aGlzW0lzXSgpKSkpfX19W3RuXSgpe3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLmVtaXQoImNs b3NlIikpfVtYcl0oZSl7bGV0IHQ9ITA7aWYoIWUpdGhpc1tkZV09dm9pZCAwLHQ9ITE7ZWxzZSBp ZihBcnJheS5pc0FycmF5KGUpKXtsZXRbaSwuLi5yXT1lO3RoaXMuZW1pdChpLC4uLnIpfWVsc2Ug dGhpc1tkZV09ZSx0aGlzLmVtaXQoImVudHJ5IixlKSxlLmVtaXR0ZWRFbmR8fChlLm9uKCJlbmQi LCgpPT50aGlzW0lzXSgpKSx0PSExKTtyZXR1cm4gdH1bSXNdKCl7ZG87d2hpbGUodGhpc1tYcl0o dGhpc1ttZV0uc2hpZnQoKSkpO2lmKCF0aGlzW21lXS5sZW5ndGgpe2xldCBlPXRoaXNbZGVdOyFl fHxlLmZsb3dpbmd8fGUuc2l6ZT09PWUucmVtYWluP3RoaXNbdHRdfHx0aGlzLmVtaXQoImRyYWlu Iik6ZS5vbmNlKCJkcmFpbiIsKCk9PnRoaXMuZW1pdCgiZHJhaW4iKSl9fVtGc10oZSx0KXtsZXQg aT10aGlzW0JlXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoImF0dGVtcHQgdG8gY29uc3VtZSBib2R5 IHdpdGhvdXQgZW50cnk/PyIpO2xldCByPWkuYmxvY2tSZW1haW4/PzAsbj1yPj1lLmxlbmd0aCYm dD09PTA/ZTplLnN1YmFycmF5KHQsdCtyKTtyZXR1cm4gaS53cml0ZShuKSxpLmJsb2NrUmVtYWlu fHwodGhpc1tIXT0iaGVhZGVyIix0aGlzW0JlXT12b2lkIDAsaS5lbmQoKSksbi5sZW5ndGh9W0py XShlLHQpe2xldCBpPXRoaXNbQmVdLHI9dGhpc1tGc10oZSx0KTtyZXR1cm4hdGhpc1tCZV0mJmkm JnRoaXNbUXJdKGkpLHJ9W3plXShlLHQsaSl7IXRoaXNbbWVdLmxlbmd0aCYmIXRoaXNbZGVdP3Ro aXMuZW1pdChlLHQsaSk6dGhpc1ttZV0ucHVzaChbZSx0LGldKX1bUXJdKGUpe3N3aXRjaCh0aGlz W3plXSgibWV0YSIsdGhpc1tnZV0pLGUudHlwZSl7Y2FzZSJFeHRlbmRlZEhlYWRlciI6Y2FzZSJP bGRFeHRlbmRlZEhlYWRlciI6dGhpc1tyZV09JHIuUGF4LnBhcnNlKHRoaXNbZ2VdLHRoaXNbcmVd LCExKTticmVhaztjYXNlIkdsb2JhbEV4dGVuZGVkSGVhZGVyIjp0aGlzW2d0XT0kci5QYXgucGFy c2UodGhpc1tnZV0sdGhpc1tndF0sITApO2JyZWFrO2Nhc2UiTmV4dEZpbGVIYXNMb25nUGF0aCI6 Y2FzZSJPbGRHbnVMb25nUGF0aCI6e2xldCB0PXRoaXNbcmVdPz9PYmplY3QuY3JlYXRlKG51bGwp O3RoaXNbcmVdPXQsdC5wYXRoPXRoaXNbZ2VdLnJlcGxhY2UoL1wwLiovLCIiKTticmVha31jYXNl Ik5leHRGaWxlSGFzTG9uZ0xpbmtwYXRoIjp7bGV0IHQ9dGhpc1tyZV18fE9iamVjdC5jcmVhdGUo bnVsbCk7dGhpc1tyZV09dCx0LmxpbmtwYXRoPXRoaXNbZ2VdLnJlcGxhY2UoL1wwLiovLCIiKTti cmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBtZXRhOiAiK2UudHlwZSl9fWFi b3J0KGUpe3RoaXNbT2VdPSEwLHRoaXMuZW1pdCgiYWJvcnQiLGUpLHRoaXMud2FybigiVEFSX0FC T1JUIixlLHtyZWNvdmVyYWJsZTohMX0pfXdyaXRlKGUsdCxpKXtpZih0eXBlb2YgdD09ImZ1bmN0 aW9uIiYmKGk9dCx0PXZvaWQgMCksdHlwZW9mIGU9PSJzdHJpbmciJiYoZT1CdWZmZXIuZnJvbShl LHR5cGVvZiB0PT0ic3RyaW5nIj90OiJ1dGY4IikpLHRoaXNbT2VdKXJldHVybiBpPy4oKSwhMTtp ZigodGhpc1tTXT09PXZvaWQgMHx8dGhpcy5icm90bGk9PT12b2lkIDAmJnRoaXNbU109PT0hMSkm JmUpe2lmKHRoaXNbX10mJihlPUJ1ZmZlci5jb25jYXQoW3RoaXNbX10sZV0pLHRoaXNbX109dm9p ZCAwKSxlLmxlbmd0aDxBYSlyZXR1cm4gdGhpc1tfXT1lLGk/LigpLCEwO2ZvcihsZXQgaD0wO3Ro aXNbU109PT12b2lkIDAmJmg8enMubGVuZ3RoO2grKyllW2hdIT09enNbaF0mJih0aGlzW1NdPSEx KTtsZXQgbz0hMTtpZih0aGlzW1NdPT09ITEmJnRoaXMuenN0ZCE9PSExKXtvPSEwO2ZvcihsZXQg aD0wO2g8a3MubGVuZ3RoO2grKylpZihlW2hdIT09a3NbaF0pe289ITE7YnJlYWt9fWxldCBhPXRo aXMuYnJvdGxpPT09dm9pZCAwJiYhbztpZih0aGlzW1NdPT09ITEmJmEpaWYoZS5sZW5ndGg8NTEy KWlmKHRoaXNbUmVdKXRoaXMuYnJvdGxpPSEwO2Vsc2UgcmV0dXJuIHRoaXNbX109ZSxpPy4oKSwh MDtlbHNlIHRyeXtuZXcgVnIuSGVhZGVyKGUuc3ViYXJyYXkoMCw1MTIpKSx0aGlzLmJyb3RsaT0h MX1jYXRjaHt0aGlzLmJyb3RsaT0hMH1pZih0aGlzW1NdPT09dm9pZCAwfHx0aGlzW1NdPT09ITEm Jih0aGlzLmJyb3RsaXx8bykpe2xldCBoPXRoaXNbUmVdO3RoaXNbUmVdPSExLHRoaXNbU109dGhp c1tTXT09PXZvaWQgMD9uZXcgQXMuVW56aXAoe30pOm8/bmV3IEFzLlpzdGREZWNvbXByZXNzKHt9 KTpuZXcgQXMuQnJvdGxpRGVjb21wcmVzcyh7fSksdGhpc1tTXS5vbigiZGF0YSIsdT0+dGhpc1th aV0odSkpLHRoaXNbU10ub24oImVycm9yIix1PT50aGlzLmFib3J0KHUpKSx0aGlzW1NdLm9uKCJl bmQiLCgpPT57dGhpc1tSZV09ITAsdGhpc1thaV0oKX0pLHRoaXNbdHRdPSEwO2xldCBsPSEhdGhp c1tTXVtoPyJlbmQiOiJ3cml0ZSJdKGUpO3JldHVybiB0aGlzW3R0XT0hMSxpPy4oKSxsfX10aGlz W3R0XT0hMCx0aGlzW1NdP3RoaXNbU10ud3JpdGUoZSk6dGhpc1thaV0oZSksdGhpc1t0dF09ITE7 bGV0IG49dGhpc1ttZV0ubGVuZ3RoPyExOnRoaXNbZGVdP3RoaXNbZGVdLmZsb3dpbmc6ITA7cmV0 dXJuIW4mJiF0aGlzW21lXS5sZW5ndGgmJnRoaXNbZGVdPy5vbmNlKCJkcmFpbiIsKCk9PnRoaXMu ZW1pdCgiZHJhaW4iKSksaT8uKCksbn1bQnNdKGUpe2UmJiF0aGlzW09lXSYmKHRoaXNbX109dGhp c1tfXT9CdWZmZXIuY29uY2F0KFt0aGlzW19dLGVdKTplKX1bbGldKCl7aWYodGhpc1tSZV0mJiF0 aGlzW0NzXSYmIXRoaXNbT2VdJiYhdGhpc1tSdF0pe3RoaXNbQ3NdPSEwO2xldCBlPXRoaXNbQmVd O2lmKGUmJmUuYmxvY2tSZW1haW4pe2xldCB0PXRoaXNbX10/dGhpc1tfXS5sZW5ndGg6MDt0aGlz Lndhcm4oIlRBUl9CQURfQVJDSElWRSIsYFRydW5jYXRlZCBpbnB1dCAobmVlZGVkICR7ZS5ibG9j a1JlbWFpbn0gbW9yZSBieXRlcywgb25seSAke3R9IGF2YWlsYWJsZSlgLHtlbnRyeTplfSksdGhp c1tfXSYmZS53cml0ZSh0aGlzW19dKSxlLmVuZCgpfXRoaXNbemVdKHVpKX19W2FpXShlKXtpZih0 aGlzW1J0XSYmZSl0aGlzW0JzXShlKTtlbHNlIGlmKCFlJiYhdGhpc1tfXSl0aGlzW2xpXSgpO2Vs c2UgaWYoZSl7aWYodGhpc1tSdF09ITAsdGhpc1tfXSl7dGhpc1tCc10oZSk7bGV0IHQ9dGhpc1tf XTt0aGlzW19dPXZvaWQgMCx0aGlzW2hpXSh0KX1lbHNlIHRoaXNbaGldKGUpO2Zvcig7dGhpc1tf XSYmdGhpc1tfXT8ubGVuZ3RoPj01MTImJiF0aGlzW09lXSYmIXRoaXNbZmldOyl7bGV0IHQ9dGhp c1tfXTt0aGlzW19dPXZvaWQgMCx0aGlzW2hpXSh0KX10aGlzW1J0XT0hMX0oIXRoaXNbX118fHRo aXNbUmVdKSYmdGhpc1tsaV0oKX1baGldKGUpe2xldCB0PTAsaT1lLmxlbmd0aDtmb3IoO3QrNTEy PD1pJiYhdGhpc1tPZV0mJiF0aGlzW2ZpXTspc3dpdGNoKHRoaXNbSF0pe2Nhc2UiYmVnaW4iOmNh c2UiaGVhZGVyIjp0aGlzW2VuXShlLHQpLHQrPTUxMjticmVhaztjYXNlImlnbm9yZSI6Y2FzZSJi b2R5Ijp0Kz10aGlzW0ZzXShlLHQpO2JyZWFrO2Nhc2UibWV0YSI6dCs9dGhpc1tKcl0oZSx0KTti cmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzdGF0ZTogIit0aGlzW0hdKX10 PGkmJih0aGlzW19dP3RoaXNbX109QnVmZmVyLmNvbmNhdChbZS5zdWJhcnJheSh0KSx0aGlzW19d XSk6dGhpc1tfXT1lLnN1YmFycmF5KHQpKX1lbmQoZSx0LGkpe3JldHVybiB0eXBlb2YgZT09ImZ1 bmN0aW9uIiYmKGk9ZSx0PXZvaWQgMCxlPXZvaWQgMCksdHlwZW9mIHQ9PSJmdW5jdGlvbiImJihp PXQsdD12b2lkIDApLHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9QnVmZmVyLmZyb20oZSx0KSksaSYm dGhpcy5vbmNlKCJmaW5pc2giLGkpLHRoaXNbT2VdfHwodGhpc1tTXT8oZSYmdGhpc1tTXS53cml0 ZShlKSx0aGlzW1NdLmVuZCgpKToodGhpc1tSZV09ITAsKHRoaXMuYnJvdGxpPT09dm9pZCAwfHx0 aGlzLnpzdGQ9PT12b2lkIDApJiYoZT1lfHxCdWZmZXIuYWxsb2MoMCkpLGUmJnRoaXMud3JpdGUo ZSksdGhpc1tsaV0oKSkpLHRoaXN9fTtkaS5QYXJzZXI9anN9KTt2YXIgX2k9ZChwaT0+eyJ1c2Ug c3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocGksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p O3BpLnN0cmlwVHJhaWxpbmdTbGFzaGVzPXZvaWQgMDt2YXIgQ2E9cz0+e2xldCBlPXMubGVuZ3Ro LTEsdD0tMTtmb3IoO2U+LTEmJnMuY2hhckF0KGUpPT09Ii8iOyl0PWUsZS0tO3JldHVybiB0PT09 LTE/czpzLnNsaWNlKDAsdCl9O3BpLnN0cmlwVHJhaWxpbmdTbGFzaGVzPUNhfSk7dmFyIHN0PWQo Rj0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRmE9RiYmRi5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3Jl YXRlPyhmdW5jdGlvbihzLGUsdCxpKXtpPT09dm9pZCAwJiYoaT10KTt2YXIgcj1PYmplY3QuZ2V0 T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCk7KCFyfHwoImdldCJpbiByPyFlLl9fZXNNb2R1bGU6 ci53cml0YWJsZXx8ci5jb25maWd1cmFibGUpKSYmKHI9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0 aW9uKCl7cmV0dXJuIGVbdF19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsaSxyKX0pOihmdW5j dGlvbihzLGUsdCxpKXtpPT09dm9pZCAwJiYoaT10KSxzW2ldPWVbdF19KSksQmE9RiYmRi5fX3Nl dE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlvbihzLGUpe09iamVjdC5kZWZp bmVQcm9wZXJ0eShzLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSl9KTpmdW5jdGlv bihzLGUpe3MuZGVmYXVsdD1lfSksemE9RiYmRi5fX2ltcG9ydFN0YXJ8fChmdW5jdGlvbigpe3Zh ciBzPWZ1bmN0aW9uKGUpe3JldHVybiBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5j dGlvbih0KXt2YXIgaT1bXTtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blBy b3BlcnR5LmNhbGwodCxyKSYmKGlbaS5sZW5ndGhdPXIpO3JldHVybiBpfSxzKGUpfTtyZXR1cm4g ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKGUhPW51 bGwpZm9yKHZhciBpPXMoZSkscj0wO3I8aS5sZW5ndGg7cisrKWlbcl0hPT0iZGVmYXVsdCImJkZh KHQsZSxpW3JdKTtyZXR1cm4gQmEodCxlKSx0fX0pKCksa2E9RiYmRi5fX2ltcG9ydERlZmF1bHR8 fGZ1bmN0aW9uKHMpe3JldHVybiBzJiZzLl9fZXNNb2R1bGU/czp7ZGVmYXVsdDpzfX07T2JqZWN0 LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0YubGlzdD1GLmZpbGVz RmlsdGVyPXZvaWQgMDt2YXIgamE9emEoS2UoKSksaXQ9a2EocmVxdWlyZSgibm9kZTpmcyIpKSxz bj1yZXF1aXJlKCJwYXRoIikseGE9VmUoKSx3aT1taSgpLHhzPV9pKCksVWE9cz0+e2xldCBlPXMu b25SZWFkRW50cnk7cy5vblJlYWRFbnRyeT1lP3Q9PntlKHQpLHQucmVzdW1lKCl9OnQ9PnQucmVz dW1lKCl9LHFhPShzLGUpPT57bGV0IHQ9bmV3IE1hcChlLm1hcChuPT5bKDAseHMuc3RyaXBUcmFp bGluZ1NsYXNoZXMpKG4pLCEwXSkpLGk9cy5maWx0ZXIscj0obixvPSIiKT0+e2xldCBhPW98fCgw LHNuLnBhcnNlKShuKS5yb290fHwiLiIsaDtpZihuPT09YSloPSExO2Vsc2V7bGV0IGw9dC5nZXQo bik7bCE9PXZvaWQgMD9oPWw6aD1yKCgwLHNuLmRpcm5hbWUpKG4pLGEpfXJldHVybiB0LnNldChu LGgpLGh9O3MuZmlsdGVyPWk/KG4sbyk9PmkobixvKSYmcigoMCx4cy5zdHJpcFRyYWlsaW5nU2xh c2hlcykobikpOm49PnIoKDAseHMuc3RyaXBUcmFpbGluZ1NsYXNoZXMpKG4pKX07Ri5maWxlc0Zp bHRlcj1xYTt2YXIgV2E9cz0+e2xldCBlPW5ldyB3aS5QYXJzZXIocyksdD1zLmZpbGUsaTt0cnl7 aT1pdC5kZWZhdWx0Lm9wZW5TeW5jKHQsInIiKTtsZXQgcj1pdC5kZWZhdWx0LmZzdGF0U3luYyhp KSxuPXMubWF4UmVhZFNpemV8fDE2KjEwMjQqMTAyNDtpZihyLnNpemU8bil7bGV0IG89QnVmZmVy LmFsbG9jVW5zYWZlKHIuc2l6ZSksYT1pdC5kZWZhdWx0LnJlYWRTeW5jKGksbywwLHIuc2l6ZSww KTtlLmVuZChhPT09by5ieXRlTGVuZ3RoP286by5zdWJhcnJheSgwLGEpKX1lbHNle2xldCBvPTAs YT1CdWZmZXIuYWxsb2NVbnNhZmUobik7Zm9yKDtvPHIuc2l6ZTspe2xldCBoPWl0LmRlZmF1bHQu cmVhZFN5bmMoaSxhLDAsbixvKTtpZihoPT09MClicmVhaztvKz1oLGUud3JpdGUoYS5zdWJhcnJh eSgwLGgpKX1lLmVuZCgpfX1maW5hbGx5e2lmKHR5cGVvZiBpPT0ibnVtYmVyIil0cnl7aXQuZGVm YXVsdC5jbG9zZVN5bmMoaSl9Y2F0Y2h7fX19LEhhPShzLGUpPT57bGV0IHQ9bmV3IHdpLlBhcnNl cihzKSxpPXMubWF4UmVhZFNpemV8fDE2KjEwMjQqMTAyNCxyPXMuZmlsZTtyZXR1cm4gbmV3IFBy b21pc2UoKG8sYSk9Pnt0Lm9uKCJlcnJvciIsYSksdC5vbigiZW5kIixvKSxpdC5kZWZhdWx0LnN0 YXQociwoaCxsKT0+e2lmKGgpYShoKTtlbHNle2xldCB1PW5ldyBqYS5SZWFkU3RyZWFtKHIse3Jl YWRTaXplOmksc2l6ZTpsLnNpemV9KTt1Lm9uKCJlcnJvciIsYSksdS5waXBlKHQpfX0pfSl9O0Yu bGlzdD0oMCx4YS5tYWtlQ29tbWFuZCkoV2EsSGEscz0+bmV3IHdpLlBhcnNlcihzKSxzPT5uZXcg d2kuUGFyc2VyKHMpLChzLGUpPT57ZT8ubGVuZ3RoJiYoMCxGLmZpbGVzRmlsdGVyKShzLGUpLHMu bm9SZXN1bWV8fFVhKHMpfSl9KTt2YXIgcm49ZCh5aT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm aW5lUHJvcGVydHkoeWksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3lpLm1vZGVGaXg9dm9pZCAw O3ZhciBaYT0ocyxlLHQpPT4ocyY9NDA5NSx0JiYocz0oc3wzODQpJi0xOSksZSYmKHMmMjU2JiYo c3w9NjQpLHMmMzImJihzfD04KSxzJjQmJihzfD0xKSkscyk7eWkubW9kZUZpeD1aYX0pO3ZhciBV cz1kKEVpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShFaSwiX19lc01vZHVs ZSIse3ZhbHVlOiEwfSk7RWkuc3RyaXBBYnNvbHV0ZVBhdGg9dm9pZCAwO3ZhciBHYT1yZXF1aXJl KCJub2RlOnBhdGgiKSx7aXNBYnNvbHV0ZTpZYSxwYXJzZTpubn09R2Eud2luMzIsS2E9cz0+e2xl dCBlPSIiLHQ9bm4ocyk7Zm9yKDtZYShzKXx8dC5yb290Oyl7bGV0IGk9cy5jaGFyQXQoMCk9PT0i LyImJnMuc2xpY2UoMCw0KSE9PSIvLz8vIj8iLyI6dC5yb290O3M9cy5zbGljZShpLmxlbmd0aCks ZSs9aSx0PW5uKHMpfXJldHVybltlLHNdfTtFaS5zdHJpcEFic29sdXRlUGF0aD1LYX0pO3ZhciBX cz1kKHJ0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShydCwiX19lc01vZHVs ZSIse3ZhbHVlOiEwfSk7cnQuZGVjb2RlPXJ0LmVuY29kZT12b2lkIDA7dmFyIGJpPVsifCIsIjwi LCI+IiwiPyIsIjoiXSxxcz1iaS5tYXAocz0+U3RyaW5nLmZyb21DaGFyQ29kZSg2MTQ0MCtzLmNo YXJDb2RlQXQoMCkpKSxWYT1uZXcgTWFwKGJpLm1hcCgocyxlKT0+W3MscXNbZV1dKSksJGE9bmV3 IE1hcChxcy5tYXAoKHMsZSk9PltzLGJpW2VdXSkpLFhhPXM9PmJpLnJlZHVjZSgoZSx0KT0+ZS5z cGxpdCh0KS5qb2luKFZhLmdldCh0KSkscyk7cnQuZW5jb2RlPVhhO3ZhciBRYT1zPT5xcy5yZWR1 Y2UoKGUsdCk9PmUuc3BsaXQodCkuam9pbigkYS5nZXQodCkpLHMpO3J0LmRlY29kZT1RYX0pO3Zh ciBlcj1kKE09PnsidXNlIHN0cmljdCI7dmFyIEphPU0mJk0uX19jcmVhdGVCaW5kaW5nfHwoT2Jq ZWN0LmNyZWF0ZT8oZnVuY3Rpb24ocyxlLHQsaSl7aT09PXZvaWQgMCYmKGk9dCk7dmFyIHI9T2Jq ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpOyghcnx8KCJnZXQiaW4gcj8hZS5fX2Vz TW9kdWxlOnIud3JpdGFibGV8fHIuY29uZmlndXJhYmxlKSkmJihyPXtlbnVtZXJhYmxlOiEwLGdl dDpmdW5jdGlvbigpe3JldHVybiBlW3RdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGkscil9 KTooZnVuY3Rpb24ocyxlLHQsaSl7aT09PXZvaWQgMCYmKGk9dCksc1tpXT1lW3RdfSkpLGVoPU0m Jk0uX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24ocyxlKXtPYmpl Y3QuZGVmaW5lUHJvcGVydHkocywiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pfSk6 ZnVuY3Rpb24ocyxlKXtzLmRlZmF1bHQ9ZX0pLHRoPU0mJk0uX19pbXBvcnRTdGFyfHwoZnVuY3Rp b24oKXt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4gcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1l c3x8ZnVuY3Rpb24odCl7dmFyIGk9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5o YXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihpW2kubGVuZ3RoXT1yKTtyZXR1cm4gaX0scyhlKX07 cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtp ZihlIT1udWxsKWZvcih2YXIgaT1zKGUpLHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdIT09ImRlZmF1 bHQiJiZKYSh0LGUsaVtyXSk7cmV0dXJuIGVoKHQsZSksdH19KSgpLGNuPU0mJk0uX19pbXBvcnRE ZWZhdWx0fHxmdW5jdGlvbihzKXtyZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6e2RlZmF1bHQ6c319 O09iamVjdC5kZWZpbmVQcm9wZXJ0eShNLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtNLldyaXRl RW50cnlUYXI9TS5Xcml0ZUVudHJ5U3luYz1NLldyaXRlRW50cnk9dm9pZCAwO3ZhciBvZT1jbihy ZXF1aXJlKCJmcyIpKSxmbj1XZSgpLG9uPWNuKHJlcXVpcmUoInBhdGgiKSksZG49SmUoKSxtbj1y bigpLG5lPWV0KCkscG49VnQoKSxfbj1laSgpLHduPVVzKCksaWg9X2koKSx5bj1vaSgpLHNoPXRo KFdzKCkpLEVuPShzLGUpPT5lPyhzPSgwLG5lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShzKS5yZXBs YWNlKC9eXC4oXC98JCkvLCIiKSwoMCxpaC5zdHJpcFRyYWlsaW5nU2xhc2hlcykoZSkrIi8iK3Mp OigwLG5lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShzKSxyaD0xNioxMDI0KjEwMjQsYW49U3ltYm9s KCJwcm9jZXNzIiksaG49U3ltYm9sKCJmaWxlIiksbG49U3ltYm9sKCJkaXJlY3RvcnkiKSxacz1T eW1ib2woInN5bWxpbmsiKSx1bj1TeW1ib2woImhhcmRsaW5rIiksT3Q9U3ltYm9sKCJoZWFkZXIi KSxTaT1TeW1ib2woInJlYWQiKSxHcz1TeW1ib2woImxzdGF0IiksZ2k9U3ltYm9sKCJvbmxzdGF0 IiksWXM9U3ltYm9sKCJvbnJlYWQiKSxLcz1TeW1ib2woIm9ucmVhZGxpbmsiKSxWcz1TeW1ib2wo Im9wZW5maWxlIiksJHM9U3ltYm9sKCJvbm9wZW5maWxlIiksdmU9U3ltYm9sKCJjbG9zZSIpLFJp PVN5bWJvbCgibW9kZSIpLFhzPVN5bWJvbCgiYXdhaXREcmFpbiIpLEhzPVN5bWJvbCgib25kcmFp biIpLGFlPVN5bWJvbCgicHJlZml4IiksT2k9Y2xhc3MgZXh0ZW5kcyBmbi5NaW5pcGFzc3twYXRo O3BvcnRhYmxlO215dWlkPXByb2Nlc3MuZ2V0dWlkJiZwcm9jZXNzLmdldHVpZCgpfHwwO215dXNl cj1wcm9jZXNzLmVudi5VU0VSfHwiIjttYXhSZWFkU2l6ZTtsaW5rQ2FjaGU7c3RhdENhY2hlO3By ZXNlcnZlUGF0aHM7Y3dkO3N0cmljdDttdGltZTtub1BheDtub010aW1lO3ByZWZpeDtmZDtibG9j a0xlbj0wO2Jsb2NrUmVtYWluPTA7YnVmO3Bvcz0wO3JlbWFpbj0wO2xlbmd0aD0wO29mZnNldD0w O3dpbjMyO2Fic29sdXRlO2hlYWRlcjt0eXBlO2xpbmtwYXRoO3N0YXQ7b25Xcml0ZUVudHJ5OyNl PSExO2NvbnN0cnVjdG9yKGUsdD17fSl7bGV0IGk9KDAscG4uZGVhbGlhcykodCk7c3VwZXIoKSx0 aGlzLnBhdGg9KDAsbmUubm9ybWFsaXplV2luZG93c1BhdGgpKGUpLHRoaXMucG9ydGFibGU9ISFp LnBvcnRhYmxlLHRoaXMubWF4UmVhZFNpemU9aS5tYXhSZWFkU2l6ZXx8cmgsdGhpcy5saW5rQ2Fj aGU9aS5saW5rQ2FjaGV8fG5ldyBNYXAsdGhpcy5zdGF0Q2FjaGU9aS5zdGF0Q2FjaGV8fG5ldyBN YXAsdGhpcy5wcmVzZXJ2ZVBhdGhzPSEhaS5wcmVzZXJ2ZVBhdGhzLHRoaXMuY3dkPSgwLG5lLm5v cm1hbGl6ZVdpbmRvd3NQYXRoKShpLmN3ZHx8cHJvY2Vzcy5jd2QoKSksdGhpcy5zdHJpY3Q9ISFp LnN0cmljdCx0aGlzLm5vUGF4PSEhaS5ub1BheCx0aGlzLm5vTXRpbWU9ISFpLm5vTXRpbWUsdGhp cy5tdGltZT1pLm10aW1lLHRoaXMucHJlZml4PWkucHJlZml4PygwLG5lLm5vcm1hbGl6ZVdpbmRv d3NQYXRoKShpLnByZWZpeCk6dm9pZCAwLHRoaXMub25Xcml0ZUVudHJ5PWkub25Xcml0ZUVudHJ5 LHR5cGVvZiBpLm9ud2Fybj09ImZ1bmN0aW9uIiYmdGhpcy5vbigid2FybiIsaS5vbndhcm4pO2xl dCByPSExO2lmKCF0aGlzLnByZXNlcnZlUGF0aHMpe2xldFtvLGFdPSgwLHduLnN0cmlwQWJzb2x1 dGVQYXRoKSh0aGlzLnBhdGgpO28mJnR5cGVvZiBhPT0ic3RyaW5nIiYmKHRoaXMucGF0aD1hLHI9 byl9dGhpcy53aW4zMj0hIWkud2luMzJ8fHByb2Nlc3MucGxhdGZvcm09PT0id2luMzIiLHRoaXMu d2luMzImJih0aGlzLnBhdGg9c2guZGVjb2RlKHRoaXMucGF0aC5yZXBsYWNlKC9cXC9nLCIvIikp LGU9ZS5yZXBsYWNlKC9cXC9nLCIvIikpLHRoaXMuYWJzb2x1dGU9KDAsbmUubm9ybWFsaXplV2lu ZG93c1BhdGgpKGkuYWJzb2x1dGV8fG9uLmRlZmF1bHQucmVzb2x2ZSh0aGlzLmN3ZCxlKSksdGhp cy5wYXRoPT09IiImJih0aGlzLnBhdGg9Ii4vIiksciYmdGhpcy53YXJuKCJUQVJfRU5UUllfSU5G TyIsYHN0cmlwcGluZyAke3J9IGZyb20gYWJzb2x1dGUgcGF0aGAse2VudHJ5OnRoaXMscGF0aDpy K3RoaXMucGF0aH0pO2xldCBuPXRoaXMuc3RhdENhY2hlLmdldCh0aGlzLmFic29sdXRlKTtuP3Ro aXNbZ2ldKG4pOnRoaXNbR3NdKCl9d2FybihlLHQsaT17fSl7cmV0dXJuKDAseW4ud2Fybk1ldGhv ZCkodGhpcyxlLHQsaSl9ZW1pdChlLC4uLnQpe3JldHVybiBlPT09ImVycm9yIiYmKHRoaXMuI2U9 ITApLHN1cGVyLmVtaXQoZSwuLi50KX1bR3NdKCl7b2UuZGVmYXVsdC5sc3RhdCh0aGlzLmFic29s dXRlLChlLHQpPT57aWYoZSlyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsZSk7dGhpc1tnaV0odCl9 KX1bZ2ldKGUpe3RoaXMuc3RhdENhY2hlLnNldCh0aGlzLmFic29sdXRlLGUpLHRoaXMuc3RhdD1l LGUuaXNGaWxlKCl8fChlLnNpemU9MCksdGhpcy50eXBlPW5oKGUpLHRoaXMuZW1pdCgic3RhdCIs ZSksdGhpc1thbl0oKX1bYW5dKCl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSJGaWxlIjpyZXR1cm4g dGhpc1tobl0oKTtjYXNlIkRpcmVjdG9yeSI6cmV0dXJuIHRoaXNbbG5dKCk7Y2FzZSJTeW1ib2xp Y0xpbmsiOnJldHVybiB0aGlzW1pzXSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuZW5kKCl9fVtSaV0o ZSl7cmV0dXJuKDAsbW4ubW9kZUZpeCkoZSx0aGlzLnR5cGU9PT0iRGlyZWN0b3J5Iix0aGlzLnBv cnRhYmxlKX1bYWVdKGUpe3JldHVybiBFbihlLHRoaXMucHJlZml4KX1bT3RdKCl7aWYoIXRoaXMu c3RhdCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCB3cml0ZSBoZWFkZXIgYmVmb3JlIHN0YXQiKTt0 aGlzLnR5cGU9PT0iRGlyZWN0b3J5IiYmdGhpcy5wb3J0YWJsZSYmKHRoaXMubm9NdGltZT0hMCks dGhpcy5vbldyaXRlRW50cnk/Lih0aGlzKSx0aGlzLmhlYWRlcj1uZXcgZG4uSGVhZGVyKHtwYXRo OnRoaXNbYWVdKHRoaXMucGF0aCksbGlua3BhdGg6dGhpcy50eXBlPT09IkxpbmsiJiZ0aGlzLmxp bmtwYXRoIT09dm9pZCAwP3RoaXNbYWVdKHRoaXMubGlua3BhdGgpOnRoaXMubGlua3BhdGgsbW9k ZTp0aGlzW1JpXSh0aGlzLnN0YXQubW9kZSksdWlkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMu c3RhdC51aWQsZ2lkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuc3RhdC5naWQsc2l6ZTp0aGlz LnN0YXQuc2l6ZSxtdGltZTp0aGlzLm5vTXRpbWU/dm9pZCAwOnRoaXMubXRpbWV8fHRoaXMuc3Rh dC5tdGltZSx0eXBlOnRoaXMudHlwZT09PSJVbnN1cHBvcnRlZCI/dm9pZCAwOnRoaXMudHlwZSx1 bmFtZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQudWlkPT09dGhpcy5teXVpZD90aGlz Lm15dXNlcjoiIixhdGltZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQuYXRpbWUsY3Rp bWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5zdGF0LmN0aW1lfSksdGhpcy5oZWFkZXIuZW5j b2RlKCkmJiF0aGlzLm5vUGF4JiZzdXBlci53cml0ZShuZXcgX24uUGF4KHthdGltZTp0aGlzLnBv cnRhYmxlP3ZvaWQgMDp0aGlzLmhlYWRlci5hdGltZSxjdGltZTp0aGlzLnBvcnRhYmxlP3ZvaWQg MDp0aGlzLmhlYWRlci5jdGltZSxnaWQ6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5oZWFkZXIu Z2lkLG10aW1lOnRoaXMubm9NdGltZT92b2lkIDA6dGhpcy5tdGltZXx8dGhpcy5oZWFkZXIubXRp bWUscGF0aDp0aGlzW2FlXSh0aGlzLnBhdGgpLGxpbmtwYXRoOnRoaXMudHlwZT09PSJMaW5rIiYm dGhpcy5saW5rcGF0aCE9PXZvaWQgMD90aGlzW2FlXSh0aGlzLmxpbmtwYXRoKTp0aGlzLmxpbmtw YXRoLHNpemU6dGhpcy5oZWFkZXIuc2l6ZSx1aWQ6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5o ZWFkZXIudWlkLHVuYW1lOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuaGVhZGVyLnVuYW1lLGRl djp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQuZGV2LGlubzp0aGlzLnBvcnRhYmxlP3Zv aWQgMDp0aGlzLnN0YXQuaW5vLG5saW5rOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuc3RhdC5u bGlua30pLmVuY29kZSgpKTtsZXQgZT10aGlzLmhlYWRlcj8uYmxvY2s7aWYoIWUpdGhyb3cgbmV3 IEVycm9yKCJmYWlsZWQgdG8gZW5jb2RlIGhlYWRlciIpO3N1cGVyLndyaXRlKGUpfVtsbl0oKXtp ZighdGhpcy5zdGF0KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgZW50 cnkgd2l0aG91dCBzdGF0Iik7dGhpcy5wYXRoLnNsaWNlKC0xKSE9PSIvIiYmKHRoaXMucGF0aCs9 Ii8iKSx0aGlzLnN0YXQuc2l6ZT0wLHRoaXNbT3RdKCksdGhpcy5lbmQoKX1bWnNdKCl7b2UuZGVm YXVsdC5yZWFkbGluayh0aGlzLmFic29sdXRlLChlLHQpPT57aWYoZSlyZXR1cm4gdGhpcy5lbWl0 KCJlcnJvciIsZSk7dGhpc1tLc10odCl9KX1bS3NdKGUpe3RoaXMubGlua3BhdGg9KDAsbmUubm9y bWFsaXplV2luZG93c1BhdGgpKGUpLHRoaXNbT3RdKCksdGhpcy5lbmQoKX1bdW5dKGUpe2lmKCF0 aGlzLnN0YXQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgY3JlYXRlIGxpbmsgZW50cnkgd2l0aG91 dCBzdGF0Iik7dGhpcy50eXBlPSJMaW5rIix0aGlzLmxpbmtwYXRoPSgwLG5lLm5vcm1hbGl6ZVdp bmRvd3NQYXRoKShvbi5kZWZhdWx0LnJlbGF0aXZlKHRoaXMuY3dkLGUpKSx0aGlzLnN0YXQuc2l6 ZT0wLHRoaXNbT3RdKCksdGhpcy5lbmQoKX1baG5dKCl7aWYoIXRoaXMuc3RhdCl0aHJvdyBuZXcg RXJyb3IoImNhbm5vdCBjcmVhdGUgZmlsZSBlbnRyeSB3aXRob3V0IHN0YXQiKTtpZih0aGlzLnN0 YXQubmxpbms+MSl7bGV0IGU9YCR7dGhpcy5zdGF0LmRldn06JHt0aGlzLnN0YXQuaW5vfWAsdD10 aGlzLmxpbmtDYWNoZS5nZXQoZSk7aWYodD8uaW5kZXhPZih0aGlzLmN3ZCk9PT0wKXJldHVybiB0 aGlzW3VuXSh0KTt0aGlzLmxpbmtDYWNoZS5zZXQoZSx0aGlzLmFic29sdXRlKX1pZih0aGlzW090 XSgpLHRoaXMuc3RhdC5zaXplPT09MClyZXR1cm4gdGhpcy5lbmQoKTt0aGlzW1ZzXSgpfVtWc10o KXtvZS5kZWZhdWx0Lm9wZW4odGhpcy5hYnNvbHV0ZSwiciIsKGUsdCk9PntpZihlKXJldHVybiB0 aGlzLmVtaXQoImVycm9yIixlKTt0aGlzWyRzXSh0KX0pfVskc10oZSl7aWYodGhpcy5mZD1lLHRo aXMuI2UpcmV0dXJuIHRoaXNbdmVdKCk7aWYoIXRoaXMuc3RhdCl0aHJvdyBuZXcgRXJyb3IoInNo b3VsZCBzdGF0IGJlZm9yZSBjYWxsaW5nIG9ub3BlbmZpbGUiKTt0aGlzLmJsb2NrTGVuPTUxMipN YXRoLmNlaWwodGhpcy5zdGF0LnNpemUvNTEyKSx0aGlzLmJsb2NrUmVtYWluPXRoaXMuYmxvY2tM ZW47bGV0IHQ9TWF0aC5taW4odGhpcy5ibG9ja0xlbix0aGlzLm1heFJlYWRTaXplKTt0aGlzLmJ1 Zj1CdWZmZXIuYWxsb2NVbnNhZmUodCksdGhpcy5vZmZzZXQ9MCx0aGlzLnBvcz0wLHRoaXMucmVt YWluPXRoaXMuc3RhdC5zaXplLHRoaXMubGVuZ3RoPXRoaXMuYnVmLmxlbmd0aCx0aGlzW1NpXSgp fVtTaV0oKXtsZXR7ZmQ6ZSxidWY6dCxvZmZzZXQ6aSxsZW5ndGg6cixwb3M6bn09dGhpcztpZihl PT09dm9pZCAwfHx0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJlYWQgZmlsZSB3 aXRob3V0IGZpcnN0IG9wZW5pbmciKTtvZS5kZWZhdWx0LnJlYWQoZSx0LGkscixuLChvLGEpPT57 aWYobylyZXR1cm4gdGhpc1t2ZV0oKCk9PnRoaXMuZW1pdCgiZXJyb3IiLG8pKTt0aGlzW1lzXShh KX0pfVt2ZV0oZT0oKT0+e30pe3RoaXMuZmQhPT12b2lkIDAmJm9lLmRlZmF1bHQuY2xvc2UodGhp cy5mZCxlKX1bWXNdKGUpe2lmKGU8PTAmJnRoaXMucmVtYWluPjApe2xldCByPU9iamVjdC5hc3Np Z24obmV3IEVycm9yKCJlbmNvdW50ZXJlZCB1bmV4cGVjdGVkIEVPRiIpLHtwYXRoOnRoaXMuYWJz b2x1dGUsc3lzY2FsbDoicmVhZCIsY29kZToiRU9GIn0pO3JldHVybiB0aGlzW3ZlXSgoKT0+dGhp cy5lbWl0KCJlcnJvciIscikpfWlmKGU+dGhpcy5yZW1haW4pe2xldCByPU9iamVjdC5hc3NpZ24o bmV3IEVycm9yKCJkaWQgbm90IGVuY291bnRlciBleHBlY3RlZCBFT0YiKSx7cGF0aDp0aGlzLmFi c29sdXRlLHN5c2NhbGw6InJlYWQiLGNvZGU6IkVPRiJ9KTtyZXR1cm4gdGhpc1t2ZV0oKCk9PnRo aXMuZW1pdCgiZXJyb3IiLHIpKX1pZighdGhpcy5idWYpdGhyb3cgbmV3IEVycm9yKCJzaG91bGQg aGF2ZSBjcmVhdGVkIGJ1ZmZlciBwcmlvciB0byByZWFkaW5nIik7aWYoZT09PXRoaXMucmVtYWlu KWZvcihsZXQgcj1lO3I8dGhpcy5sZW5ndGgmJmU8dGhpcy5ibG9ja1JlbWFpbjtyKyspdGhpcy5i dWZbcit0aGlzLm9mZnNldF09MCxlKyssdGhpcy5yZW1haW4rKztsZXQgdD10aGlzLm9mZnNldD09 PTAmJmU9PT10aGlzLmJ1Zi5sZW5ndGg/dGhpcy5idWY6dGhpcy5idWYuc3ViYXJyYXkodGhpcy5v ZmZzZXQsdGhpcy5vZmZzZXQrZSk7dGhpcy53cml0ZSh0KT90aGlzW0hzXSgpOnRoaXNbWHNdKCgp PT50aGlzW0hzXSgpKX1bWHNdKGUpe3RoaXMub25jZSgiZHJhaW4iLGUpfXdyaXRlKGUsdCxpKXtp Zih0eXBlb2YgdD09ImZ1bmN0aW9uIiYmKGk9dCx0PXZvaWQgMCksdHlwZW9mIGU9PSJzdHJpbmci JiYoZT1CdWZmZXIuZnJvbShlLHR5cGVvZiB0PT0ic3RyaW5nIj90OiJ1dGY4IikpLHRoaXMuYmxv Y2tSZW1haW48ZS5sZW5ndGgpe2xldCByPU9iamVjdC5hc3NpZ24obmV3IEVycm9yKCJ3cml0aW5n IG1vcmUgZGF0YSB0aGFuIGV4cGVjdGVkIikse3BhdGg6dGhpcy5hYnNvbHV0ZX0pO3JldHVybiB0 aGlzLmVtaXQoImVycm9yIixyKX1yZXR1cm4gdGhpcy5yZW1haW4tPWUubGVuZ3RoLHRoaXMuYmxv Y2tSZW1haW4tPWUubGVuZ3RoLHRoaXMucG9zKz1lLmxlbmd0aCx0aGlzLm9mZnNldCs9ZS5sZW5n dGgsc3VwZXIud3JpdGUoZSxudWxsLGkpfVtIc10oKXtpZighdGhpcy5yZW1haW4pcmV0dXJuIHRo aXMuYmxvY2tSZW1haW4mJnN1cGVyLndyaXRlKEJ1ZmZlci5hbGxvYyh0aGlzLmJsb2NrUmVtYWlu KSksdGhpc1t2ZV0oZT0+ZT90aGlzLmVtaXQoImVycm9yIixlKTp0aGlzLmVuZCgpKTtpZighdGhp cy5idWYpdGhyb3cgbmV3IEVycm9yKCJidWZmZXIgbG9zdCBzb21laG93IGluIE9ORFJBSU4iKTt0 aGlzLm9mZnNldD49dGhpcy5sZW5ndGgmJih0aGlzLmJ1Zj1CdWZmZXIuYWxsb2NVbnNhZmUoTWF0 aC5taW4odGhpcy5ibG9ja1JlbWFpbix0aGlzLmJ1Zi5sZW5ndGgpKSx0aGlzLm9mZnNldD0wKSx0 aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGgtdGhpcy5vZmZzZXQsdGhpc1tTaV0oKX19O00uV3Jp dGVFbnRyeT1PaTt2YXIgUXM9Y2xhc3MgZXh0ZW5kcyBPaXtzeW5jPSEwO1tHc10oKXt0aGlzW2dp XShvZS5kZWZhdWx0LmxzdGF0U3luYyh0aGlzLmFic29sdXRlKSl9W1pzXSgpe3RoaXNbS3NdKG9l LmRlZmF1bHQucmVhZGxpbmtTeW5jKHRoaXMuYWJzb2x1dGUpKX1bVnNdKCl7dGhpc1skc10ob2Uu ZGVmYXVsdC5vcGVuU3luYyh0aGlzLmFic29sdXRlLCJyIikpfVtTaV0oKXtsZXQgZT0hMDt0cnl7 bGV0e2ZkOnQsYnVmOmksb2Zmc2V0OnIsbGVuZ3RoOm4scG9zOm99PXRoaXM7aWYodD09PXZvaWQg MHx8aT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImZkIGFuZCBidWYgbXVzdCBiZSBzZXQgaW4g UkVBRCBtZXRob2QiKTtsZXQgYT1vZS5kZWZhdWx0LnJlYWRTeW5jKHQsaSxyLG4sbyk7dGhpc1tZ c10oYSksZT0hMX1maW5hbGx5e2lmKGUpdHJ5e3RoaXNbdmVdKCgpPT57fSl9Y2F0Y2h7fX19W1hz XShlKXtlKCl9W3ZlXShlPSgpPT57fSl7dGhpcy5mZCE9PXZvaWQgMCYmb2UuZGVmYXVsdC5jbG9z ZVN5bmModGhpcy5mZCksZSgpfX07TS5Xcml0ZUVudHJ5U3luYz1Rczt2YXIgSnM9Y2xhc3MgZXh0 ZW5kcyBmbi5NaW5pcGFzc3tibG9ja0xlbj0wO2Jsb2NrUmVtYWluPTA7YnVmPTA7cG9zPTA7cmVt YWluPTA7bGVuZ3RoPTA7cHJlc2VydmVQYXRocztwb3J0YWJsZTtzdHJpY3Q7bm9QYXg7bm9NdGlt ZTtyZWFkRW50cnk7dHlwZTtwcmVmaXg7cGF0aDttb2RlO3VpZDtnaWQ7dW5hbWU7Z25hbWU7aGVh ZGVyO210aW1lO2F0aW1lO2N0aW1lO2xpbmtwYXRoO3NpemU7b25Xcml0ZUVudHJ5O3dhcm4oZSx0 LGk9e30pe3JldHVybigwLHluLndhcm5NZXRob2QpKHRoaXMsZSx0LGkpfWNvbnN0cnVjdG9yKGUs dD17fSl7bGV0IGk9KDAscG4uZGVhbGlhcykodCk7c3VwZXIoKSx0aGlzLnByZXNlcnZlUGF0aHM9 ISFpLnByZXNlcnZlUGF0aHMsdGhpcy5wb3J0YWJsZT0hIWkucG9ydGFibGUsdGhpcy5zdHJpY3Q9 ISFpLnN0cmljdCx0aGlzLm5vUGF4PSEhaS5ub1BheCx0aGlzLm5vTXRpbWU9ISFpLm5vTXRpbWUs dGhpcy5vbldyaXRlRW50cnk9aS5vbldyaXRlRW50cnksdGhpcy5yZWFkRW50cnk9ZTtsZXR7dHlw ZTpyfT1lO2lmKHI9PT0iVW5zdXBwb3J0ZWQiKXRocm93IG5ldyBFcnJvcigid3JpdGluZyBlbnRy eSB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIik7dGhpcy50eXBlPXIsdGhpcy50eXBlPT09IkRpcmVj dG9yeSImJnRoaXMucG9ydGFibGUmJih0aGlzLm5vTXRpbWU9ITApLHRoaXMucHJlZml4PWkucHJl Zml4LHRoaXMucGF0aD0oMCxuZS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZS5wYXRoKSx0aGlzLm1v ZGU9ZS5tb2RlIT09dm9pZCAwP3RoaXNbUmldKGUubW9kZSk6dm9pZCAwLHRoaXMudWlkPXRoaXMu cG9ydGFibGU/dm9pZCAwOmUudWlkLHRoaXMuZ2lkPXRoaXMucG9ydGFibGU/dm9pZCAwOmUuZ2lk LHRoaXMudW5hbWU9dGhpcy5wb3J0YWJsZT92b2lkIDA6ZS51bmFtZSx0aGlzLmduYW1lPXRoaXMu cG9ydGFibGU/dm9pZCAwOmUuZ25hbWUsdGhpcy5zaXplPWUuc2l6ZSx0aGlzLm10aW1lPXRoaXMu bm9NdGltZT92b2lkIDA6aS5tdGltZXx8ZS5tdGltZSx0aGlzLmF0aW1lPXRoaXMucG9ydGFibGU/ dm9pZCAwOmUuYXRpbWUsdGhpcy5jdGltZT10aGlzLnBvcnRhYmxlP3ZvaWQgMDplLmN0aW1lLHRo aXMubGlua3BhdGg9ZS5saW5rcGF0aCE9PXZvaWQgMD8oMCxuZS5ub3JtYWxpemVXaW5kb3dzUGF0 aCkoZS5saW5rcGF0aCk6dm9pZCAwLHR5cGVvZiBpLm9ud2Fybj09ImZ1bmN0aW9uIiYmdGhpcy5v bigid2FybiIsaS5vbndhcm4pO2xldCBuPSExO2lmKCF0aGlzLnByZXNlcnZlUGF0aHMpe2xldFth LGhdPSgwLHduLnN0cmlwQWJzb2x1dGVQYXRoKSh0aGlzLnBhdGgpO2EmJnR5cGVvZiBoPT0ic3Ry aW5nIiYmKHRoaXMucGF0aD1oLG49YSl9dGhpcy5yZW1haW49ZS5zaXplLHRoaXMuYmxvY2tSZW1h aW49ZS5zdGFydEJsb2NrU2l6ZSx0aGlzLm9uV3JpdGVFbnRyeT8uKHRoaXMpLHRoaXMuaGVhZGVy PW5ldyBkbi5IZWFkZXIoe3BhdGg6dGhpc1thZV0odGhpcy5wYXRoKSxsaW5rcGF0aDp0aGlzLnR5 cGU9PT0iTGluayImJnRoaXMubGlua3BhdGghPT12b2lkIDA/dGhpc1thZV0odGhpcy5saW5rcGF0 aCk6dGhpcy5saW5rcGF0aCxtb2RlOnRoaXMubW9kZSx1aWQ6dGhpcy5wb3J0YWJsZT92b2lkIDA6 dGhpcy51aWQsZ2lkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuZ2lkLHNpemU6dGhpcy5zaXpl LG10aW1lOnRoaXMubm9NdGltZT92b2lkIDA6dGhpcy5tdGltZSx0eXBlOnRoaXMudHlwZSx1bmFt ZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnVuYW1lLGF0aW1lOnRoaXMucG9ydGFibGU/dm9p ZCAwOnRoaXMuYXRpbWUsY3RpbWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5jdGltZX0pLG4m JnRoaXMud2FybigiVEFSX0VOVFJZX0lORk8iLGBzdHJpcHBpbmcgJHtufSBmcm9tIGFic29sdXRl IHBhdGhgLHtlbnRyeTp0aGlzLHBhdGg6bit0aGlzLnBhdGh9KSx0aGlzLmhlYWRlci5lbmNvZGUo KSYmIXRoaXMubm9QYXgmJnN1cGVyLndyaXRlKG5ldyBfbi5QYXgoe2F0aW1lOnRoaXMucG9ydGFi bGU/dm9pZCAwOnRoaXMuYXRpbWUsY3RpbWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5jdGlt ZSxnaWQ6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5naWQsbXRpbWU6dGhpcy5ub010aW1lP3Zv aWQgMDp0aGlzLm10aW1lLHBhdGg6dGhpc1thZV0odGhpcy5wYXRoKSxsaW5rcGF0aDp0aGlzLnR5 cGU9PT0iTGluayImJnRoaXMubGlua3BhdGghPT12b2lkIDA/dGhpc1thZV0odGhpcy5saW5rcGF0 aCk6dGhpcy5saW5rcGF0aCxzaXplOnRoaXMuc2l6ZSx1aWQ6dGhpcy5wb3J0YWJsZT92b2lkIDA6 dGhpcy51aWQsdW5hbWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy51bmFtZSxkZXY6dGhpcy5w b3J0YWJsZT92b2lkIDA6dGhpcy5yZWFkRW50cnkuZGV2LGlubzp0aGlzLnBvcnRhYmxlP3ZvaWQg MDp0aGlzLnJlYWRFbnRyeS5pbm8sbmxpbms6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5yZWFk RW50cnkubmxpbmt9KS5lbmNvZGUoKSk7bGV0IG89dGhpcy5oZWFkZXI/LmJsb2NrO2lmKCFvKXRo cm93IG5ldyBFcnJvcigiZmFpbGVkIHRvIGVuY29kZSBoZWFkZXIiKTtzdXBlci53cml0ZShvKSxl LnBpcGUodGhpcyl9W2FlXShlKXtyZXR1cm4gRW4oZSx0aGlzLnByZWZpeCl9W1JpXShlKXtyZXR1 cm4oMCxtbi5tb2RlRml4KShlLHRoaXMudHlwZT09PSJEaXJlY3RvcnkiLHRoaXMucG9ydGFibGUp fXdyaXRlKGUsdCxpKXt0eXBlb2YgdD09ImZ1bmN0aW9uIiYmKGk9dCx0PXZvaWQgMCksdHlwZW9m IGU9PSJzdHJpbmciJiYoZT1CdWZmZXIuZnJvbShlLHR5cGVvZiB0PT0ic3RyaW5nIj90OiJ1dGY4 IikpO2xldCByPWUubGVuZ3RoO2lmKHI+dGhpcy5ibG9ja1JlbWFpbil0aHJvdyBuZXcgRXJyb3Io IndyaXRpbmcgbW9yZSB0byBlbnRyeSB0aGFuIGlzIGFwcHJvcHJpYXRlIik7cmV0dXJuIHRoaXMu YmxvY2tSZW1haW4tPXIsc3VwZXIud3JpdGUoZSxpKX1lbmQoZSx0LGkpe3JldHVybiB0aGlzLmJs b2NrUmVtYWluJiZzdXBlci53cml0ZShCdWZmZXIuYWxsb2ModGhpcy5ibG9ja1JlbWFpbikpLHR5 cGVvZiBlPT0iZnVuY3Rpb24iJiYoaT1lLHQ9dm9pZCAwLGU9dm9pZCAwKSx0eXBlb2YgdD09ImZ1 bmN0aW9uIiYmKGk9dCx0PXZvaWQgMCksdHlwZW9mIGU9PSJzdHJpbmciJiYoZT1CdWZmZXIuZnJv bShlLHQ/PyJ1dGY4IikpLGkmJnRoaXMub25jZSgiZmluaXNoIixpKSxlP3N1cGVyLmVuZChlLGkp OnN1cGVyLmVuZChpKSx0aGlzfX07TS5Xcml0ZUVudHJ5VGFyPUpzO3ZhciBuaD1zPT5zLmlzRmls ZSgpPyJGaWxlIjpzLmlzRGlyZWN0b3J5KCk/IkRpcmVjdG9yeSI6cy5pc1N5bWJvbGljTGluaygp PyJTeW1ib2xpY0xpbmsiOiJVbnN1cHBvcnRlZCJ9KTt2YXIgYm49ZChvdD0+eyJ1c2Ugc3RyaWN0 IjtPYmplY3QuZGVmaW5lUHJvcGVydHkob3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO290Lk5v ZGU9b3QuWWFsbGlzdD12b2lkIDA7dmFyIHRyPWNsYXNzIHN7dGFpbDtoZWFkO2xlbmd0aD0wO3N0 YXRpYyBjcmVhdGUoZT1bXSl7cmV0dXJuIG5ldyBzKGUpfWNvbnN0cnVjdG9yKGU9W10pe2Zvcihs ZXQgdCBvZiBlKXRoaXMucHVzaCh0KX0qW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IobGV0IGU9dGhp cy5oZWFkO2U7ZT1lLm5leHQpeWllbGQgZS52YWx1ZX1yZW1vdmVOb2RlKGUpe2lmKGUubGlzdCE9 PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJyZW1vdmluZyBub2RlIHdoaWNoIGRvZXMgbm90IGJlbG9u ZyB0byB0aGlzIGxpc3QiKTtsZXQgdD1lLm5leHQsaT1lLnByZXY7cmV0dXJuIHQmJih0LnByZXY9 aSksaSYmKGkubmV4dD10KSxlPT09dGhpcy5oZWFkJiYodGhpcy5oZWFkPXQpLGU9PT10aGlzLnRh aWwmJih0aGlzLnRhaWw9aSksdGhpcy5sZW5ndGgtLSxlLm5leHQ9dm9pZCAwLGUucHJldj12b2lk IDAsZS5saXN0PXZvaWQgMCx0fXVuc2hpZnROb2RlKGUpe2lmKGU9PT10aGlzLmhlYWQpcmV0dXJu O2UubGlzdCYmZS5saXN0LnJlbW92ZU5vZGUoZSk7bGV0IHQ9dGhpcy5oZWFkO2UubGlzdD10aGlz LGUubmV4dD10LHQmJih0LnByZXY9ZSksdGhpcy5oZWFkPWUsdGhpcy50YWlsfHwodGhpcy50YWls PWUpLHRoaXMubGVuZ3RoKyt9cHVzaE5vZGUoZSl7aWYoZT09PXRoaXMudGFpbClyZXR1cm47ZS5s aXN0JiZlLmxpc3QucmVtb3ZlTm9kZShlKTtsZXQgdD10aGlzLnRhaWw7ZS5saXN0PXRoaXMsZS5w cmV2PXQsdCYmKHQubmV4dD1lKSx0aGlzLnRhaWw9ZSx0aGlzLmhlYWR8fCh0aGlzLmhlYWQ9ZSks dGhpcy5sZW5ndGgrK31wdXNoKC4uLmUpe2ZvcihsZXQgdD0wLGk9ZS5sZW5ndGg7dDxpO3QrKylh aCh0aGlzLGVbdF0pO3JldHVybiB0aGlzLmxlbmd0aH11bnNoaWZ0KC4uLmUpe2Zvcih2YXIgdD0w LGk9ZS5sZW5ndGg7dDxpO3QrKyloaCh0aGlzLGVbdF0pO3JldHVybiB0aGlzLmxlbmd0aH1wb3Ao KXtpZighdGhpcy50YWlsKXJldHVybjtsZXQgZT10aGlzLnRhaWwudmFsdWUsdD10aGlzLnRhaWw7 cmV0dXJuIHRoaXMudGFpbD10aGlzLnRhaWwucHJldix0aGlzLnRhaWw/dGhpcy50YWlsLm5leHQ9 dm9pZCAwOnRoaXMuaGVhZD12b2lkIDAsdC5saXN0PXZvaWQgMCx0aGlzLmxlbmd0aC0tLGV9c2hp ZnQoKXtpZighdGhpcy5oZWFkKXJldHVybjtsZXQgZT10aGlzLmhlYWQudmFsdWUsdD10aGlzLmhl YWQ7cmV0dXJuIHRoaXMuaGVhZD10aGlzLmhlYWQubmV4dCx0aGlzLmhlYWQ/dGhpcy5oZWFkLnBy ZXY9dm9pZCAwOnRoaXMudGFpbD12b2lkIDAsdC5saXN0PXZvaWQgMCx0aGlzLmxlbmd0aC0tLGV9 Zm9yRWFjaChlLHQpe3Q9dHx8dGhpcztmb3IobGV0IGk9dGhpcy5oZWFkLHI9MDtpO3IrKyllLmNh bGwodCxpLnZhbHVlLHIsdGhpcyksaT1pLm5leHR9Zm9yRWFjaFJldmVyc2UoZSx0KXt0PXR8fHRo aXM7Zm9yKGxldCBpPXRoaXMudGFpbCxyPXRoaXMubGVuZ3RoLTE7aTtyLS0pZS5jYWxsKHQsaS52 YWx1ZSxyLHRoaXMpLGk9aS5wcmV2fWdldChlKXtsZXQgdD0wLGk9dGhpcy5oZWFkO2Zvcig7aSYm dDxlO3QrKylpPWkubmV4dDtpZih0PT09ZSYmaSlyZXR1cm4gaS52YWx1ZX1nZXRSZXZlcnNlKGUp e2xldCB0PTAsaT10aGlzLnRhaWw7Zm9yKDtpJiZ0PGU7dCsrKWk9aS5wcmV2O2lmKHQ9PT1lJiZp KXJldHVybiBpLnZhbHVlfW1hcChlLHQpe3Q9dHx8dGhpcztsZXQgaT1uZXcgcztmb3IobGV0IHI9 dGhpcy5oZWFkO3I7KWkucHVzaChlLmNhbGwodCxyLnZhbHVlLHRoaXMpKSxyPXIubmV4dDtyZXR1 cm4gaX1tYXBSZXZlcnNlKGUsdCl7dD10fHx0aGlzO3ZhciBpPW5ldyBzO2ZvcihsZXQgcj10aGlz LnRhaWw7cjspaS5wdXNoKGUuY2FsbCh0LHIudmFsdWUsdGhpcykpLHI9ci5wcmV2O3JldHVybiBp fXJlZHVjZShlLHQpe2xldCBpLHI9dGhpcy5oZWFkO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlpPXQ7 ZWxzZSBpZih0aGlzLmhlYWQpcj10aGlzLmhlYWQubmV4dCxpPXRoaXMuaGVhZC52YWx1ZTtlbHNl IHRocm93IG5ldyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBsaXN0IHdpdGggbm8gaW5pdGlh bCB2YWx1ZSIpO2Zvcih2YXIgbj0wO3I7bisrKWk9ZShpLHIudmFsdWUsbikscj1yLm5leHQ7cmV0 dXJuIGl9cmVkdWNlUmV2ZXJzZShlLHQpe2xldCBpLHI9dGhpcy50YWlsO2lmKGFyZ3VtZW50cy5s ZW5ndGg+MSlpPXQ7ZWxzZSBpZih0aGlzLnRhaWwpcj10aGlzLnRhaWwucHJldixpPXRoaXMudGFp bC52YWx1ZTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBsaXN0IHdp dGggbm8gaW5pdGlhbCB2YWx1ZSIpO2ZvcihsZXQgbj10aGlzLmxlbmd0aC0xO3I7bi0tKWk9ZShp LHIudmFsdWUsbikscj1yLnByZXY7cmV0dXJuIGl9dG9BcnJheSgpe2xldCBlPW5ldyBBcnJheSh0 aGlzLmxlbmd0aCk7Zm9yKGxldCB0PTAsaT10aGlzLmhlYWQ7aTt0KyspZVt0XT1pLnZhbHVlLGk9 aS5uZXh0O3JldHVybiBlfXRvQXJyYXlSZXZlcnNlKCl7bGV0IGU9bmV3IEFycmF5KHRoaXMubGVu Z3RoKTtmb3IobGV0IHQ9MCxpPXRoaXMudGFpbDtpO3QrKyllW3RdPWkudmFsdWUsaT1pLnByZXY7 cmV0dXJuIGV9c2xpY2UoZT0wLHQ9dGhpcy5sZW5ndGgpe3Q8MCYmKHQrPXRoaXMubGVuZ3RoKSxl PDAmJihlKz10aGlzLmxlbmd0aCk7bGV0IGk9bmV3IHM7aWYodDxlfHx0PDApcmV0dXJuIGk7ZTww JiYoZT0wKSx0PnRoaXMubGVuZ3RoJiYodD10aGlzLmxlbmd0aCk7bGV0IHI9dGhpcy5oZWFkLG49 MDtmb3Iobj0wO3ImJm48ZTtuKyspcj1yLm5leHQ7Zm9yKDtyJiZuPHQ7bisrLHI9ci5uZXh0KWku cHVzaChyLnZhbHVlKTtyZXR1cm4gaX1zbGljZVJldmVyc2UoZT0wLHQ9dGhpcy5sZW5ndGgpe3Q8 MCYmKHQrPXRoaXMubGVuZ3RoKSxlPDAmJihlKz10aGlzLmxlbmd0aCk7bGV0IGk9bmV3IHM7aWYo dDxlfHx0PDApcmV0dXJuIGk7ZTwwJiYoZT0wKSx0PnRoaXMubGVuZ3RoJiYodD10aGlzLmxlbmd0 aCk7bGV0IHI9dGhpcy5sZW5ndGgsbj10aGlzLnRhaWw7Zm9yKDtuJiZyPnQ7ci0tKW49bi5wcmV2 O2Zvcig7biYmcj5lO3ItLSxuPW4ucHJldilpLnB1c2gobi52YWx1ZSk7cmV0dXJuIGl9c3BsaWNl KGUsdD0wLC4uLmkpe2U+dGhpcy5sZW5ndGgmJihlPXRoaXMubGVuZ3RoLTEpLGU8MCYmKGU9dGhp cy5sZW5ndGgrZSk7bGV0IHI9dGhpcy5oZWFkO2ZvcihsZXQgbz0wO3ImJm88ZTtvKyspcj1yLm5l eHQ7bGV0IG49W107Zm9yKGxldCBvPTA7ciYmbzx0O28rKyluLnB1c2goci52YWx1ZSkscj10aGlz LnJlbW92ZU5vZGUocik7cj9yIT09dGhpcy50YWlsJiYocj1yLnByZXYpOnI9dGhpcy50YWlsO2Zv cihsZXQgbyBvZiBpKXI9b2godGhpcyxyLG8pO3JldHVybiBufXJldmVyc2UoKXtsZXQgZT10aGlz LmhlYWQsdD10aGlzLnRhaWw7Zm9yKGxldCBpPWU7aTtpPWkucHJldil7bGV0IHI9aS5wcmV2O2ku cHJldj1pLm5leHQsaS5uZXh0PXJ9cmV0dXJuIHRoaXMuaGVhZD10LHRoaXMudGFpbD1lLHRoaXN9 fTtvdC5ZYWxsaXN0PXRyO2Z1bmN0aW9uIG9oKHMsZSx0KXtsZXQgaT1lLHI9ZT9lLm5leHQ6cy5o ZWFkLG49bmV3IG50KHQsaSxyLHMpO3JldHVybiBuLm5leHQ9PT12b2lkIDAmJihzLnRhaWw9biks bi5wcmV2PT09dm9pZCAwJiYocy5oZWFkPW4pLHMubGVuZ3RoKyssbn1mdW5jdGlvbiBhaChzLGUp e3MudGFpbD1uZXcgbnQoZSxzLnRhaWwsdm9pZCAwLHMpLHMuaGVhZHx8KHMuaGVhZD1zLnRhaWwp LHMubGVuZ3RoKyt9ZnVuY3Rpb24gaGgocyxlKXtzLmhlYWQ9bmV3IG50KGUsdm9pZCAwLHMuaGVh ZCxzKSxzLnRhaWx8fChzLnRhaWw9cy5oZWFkKSxzLmxlbmd0aCsrfXZhciBudD1jbGFzc3tsaXN0 O25leHQ7cHJldjt2YWx1ZTtjb25zdHJ1Y3RvcihlLHQsaSxyKXt0aGlzLmxpc3Q9cix0aGlzLnZh bHVlPWUsdD8odC5uZXh0PXRoaXMsdGhpcy5wcmV2PXQpOnRoaXMucHJldj12b2lkIDAsaT8oaS5w cmV2PXRoaXMsdGhpcy5uZXh0PWkpOnRoaXMubmV4dD12b2lkIDB9fTtvdC5Ob2RlPW50fSk7dmFy IEFpPWQoTD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbGg9TCYmTC5fX2NyZWF0ZUJpbmRpbmd8fChPYmpl Y3QuY3JlYXRlPyhmdW5jdGlvbihzLGUsdCxpKXtpPT09dm9pZCAwJiYoaT10KTt2YXIgcj1PYmpl Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCk7KCFyfHwoImdldCJpbiByPyFlLl9fZXNN b2R1bGU6ci53cml0YWJsZXx8ci5jb25maWd1cmFibGUpKSYmKHI9e2VudW1lcmFibGU6ITAsZ2V0 OmZ1bmN0aW9uKCl7cmV0dXJuIGVbdF19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsaSxyKX0p OihmdW5jdGlvbihzLGUsdCxpKXtpPT09dm9pZCAwJiYoaT10KSxzW2ldPWVbdF19KSksdWg9TCYm TC5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlvbihzLGUpe09iamVj dC5kZWZpbmVQcm9wZXJ0eShzLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSl9KTpm dW5jdGlvbihzLGUpe3MuZGVmYXVsdD1lfSksY2g9TCYmTC5fX2ltcG9ydFN0YXJ8fChmdW5jdGlv bigpe3ZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz fHxmdW5jdGlvbih0KXt2YXIgaT1bXTtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhh c093blByb3BlcnR5LmNhbGwodCxyKSYmKGlbaS5sZW5ndGhdPXIpO3JldHVybiBpfSxzKGUpfTty ZXR1cm4gZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lm KGUhPW51bGwpZm9yKHZhciBpPXMoZSkscj0wO3I8aS5sZW5ndGg7cisrKWlbcl0hPT0iZGVmYXVs dCImJmxoKHQsZSxpW3JdKTtyZXR1cm4gdWgodCxlKSx0fX0pKCksdm49TCYmTC5fX2ltcG9ydERl ZmF1bHR8fGZ1bmN0aW9uKHMpe3JldHVybiBzJiZzLl9fZXNNb2R1bGU/czp7ZGVmYXVsdDpzfX07 T2JqZWN0LmRlZmluZVByb3BlcnR5KEwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0wuUGFja1N5 bmM9TC5QYWNrPUwuUGFja0pvYj12b2lkIDA7dmFyIE1pPXZuKHJlcXVpcmUoImZzIikpLGhyPWVy KCksRHQ9Y2xhc3N7cGF0aDthYnNvbHV0ZTtlbnRyeTtzdGF0O3JlYWRkaXI7cGVuZGluZz0hMTtp Z25vcmU9ITE7cGlwZWQ9ITE7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnBhdGg9ZXx8Ii4vIix0aGlz LmFic29sdXRlPXR9fTtMLlBhY2tKb2I9RHQ7dmFyIGZoPVdlKCksaXI9Y2godnMoKSksZGg9Ym4o KSxtaD1yaSgpLHBoPW9pKCksU249QnVmZmVyLmFsbG9jKDEwMjQpLHZpPVN5bWJvbCgib25TdGF0 IiksdnQ9U3ltYm9sKCJlbmRlZCIpLFg9U3ltYm9sKCJxdWV1ZSIpLGplPVN5bWJvbCgiY3VycmVu dCIpLHhlPVN5bWJvbCgicHJvY2VzcyIpLFR0PVN5bWJvbCgicHJvY2Vzc2luZyIpLHNyPVN5bWJv bCgicHJvY2Vzc0pvYiIpLFE9U3ltYm9sKCJqb2JzIikscnI9U3ltYm9sKCJqb2JEb25lIiksVGk9 U3ltYm9sKCJhZGRGU0VudHJ5IiksZ249U3ltYm9sKCJhZGRUYXJFbnRyeSIpLGxyPVN5bWJvbCgi c3RhdCIpLHVyPVN5bWJvbCgicmVhZGRpciIpLERpPVN5bWJvbCgib25yZWFkZGlyIiksUGk9U3lt Ym9sKCJwaXBlIiksUm49U3ltYm9sKCJlbnRyeSIpLG5yPVN5bWJvbCgiZW50cnlPcHQiKSxOaT1T eW1ib2woIndyaXRlRW50cnlDbGFzcyIpLFRuPVN5bWJvbCgid3JpdGUiKSxvcj1TeW1ib2woIm9u ZHJhaW4iKSxPbj12bihyZXF1aXJlKCJwYXRoIikpLGFyPWV0KCksTGk9Y2xhc3MgZXh0ZW5kcyBm aC5NaW5pcGFzc3tzeW5jPSExO29wdDtjd2Q7bWF4UmVhZFNpemU7cHJlc2VydmVQYXRocztzdHJp Y3Q7bm9QYXg7cHJlZml4O2xpbmtDYWNoZTtzdGF0Q2FjaGU7ZmlsZTtwb3J0YWJsZTt6aXA7cmVh ZGRpckNhY2hlO25vRGlyUmVjdXJzZTtmb2xsb3c7bm9NdGltZTttdGltZTtmaWx0ZXI7am9icztb TmldO29uV3JpdGVFbnRyeTtbWF07W1FdPTA7W1R0XT0hMTtbdnRdPSExO2NvbnN0cnVjdG9yKGU9 e30pe2lmKHN1cGVyKCksdGhpcy5vcHQ9ZSx0aGlzLmZpbGU9ZS5maWxlfHwiIix0aGlzLmN3ZD1l LmN3ZHx8cHJvY2Vzcy5jd2QoKSx0aGlzLm1heFJlYWRTaXplPWUubWF4UmVhZFNpemUsdGhpcy5w cmVzZXJ2ZVBhdGhzPSEhZS5wcmVzZXJ2ZVBhdGhzLHRoaXMuc3RyaWN0PSEhZS5zdHJpY3QsdGhp cy5ub1BheD0hIWUubm9QYXgsdGhpcy5wcmVmaXg9KDAsYXIubm9ybWFsaXplV2luZG93c1BhdGgp KGUucHJlZml4fHwiIiksdGhpcy5saW5rQ2FjaGU9ZS5saW5rQ2FjaGV8fG5ldyBNYXAsdGhpcy5z dGF0Q2FjaGU9ZS5zdGF0Q2FjaGV8fG5ldyBNYXAsdGhpcy5yZWFkZGlyQ2FjaGU9ZS5yZWFkZGly Q2FjaGV8fG5ldyBNYXAsdGhpcy5vbldyaXRlRW50cnk9ZS5vbldyaXRlRW50cnksdGhpc1tOaV09 aHIuV3JpdGVFbnRyeSx0eXBlb2YgZS5vbndhcm49PSJmdW5jdGlvbiImJnRoaXMub24oIndhcm4i LGUub253YXJuKSx0aGlzLnBvcnRhYmxlPSEhZS5wb3J0YWJsZSxlLmd6aXB8fGUuYnJvdGxpfHxl LnpzdGQpe2lmKChlLmd6aXA/MTowKSsoZS5icm90bGk/MTowKSsoZS56c3RkPzE6MCk+MSl0aHJv dyBuZXcgVHlwZUVycm9yKCJnemlwLCBicm90bGksIHpzdGQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2 ZSIpO2lmKGUuZ3ppcCYmKHR5cGVvZiBlLmd6aXAhPSJvYmplY3QiJiYoZS5nemlwPXt9KSx0aGlz LnBvcnRhYmxlJiYoZS5nemlwLnBvcnRhYmxlPSEwKSx0aGlzLnppcD1uZXcgaXIuR3ppcChlLmd6 aXApKSxlLmJyb3RsaSYmKHR5cGVvZiBlLmJyb3RsaSE9Im9iamVjdCImJihlLmJyb3RsaT17fSks dGhpcy56aXA9bmV3IGlyLkJyb3RsaUNvbXByZXNzKGUuYnJvdGxpKSksZS56c3RkJiYodHlwZW9m IGUuenN0ZCE9Im9iamVjdCImJihlLnpzdGQ9e30pLHRoaXMuemlwPW5ldyBpci5ac3RkQ29tcHJl c3MoZS56c3RkKSksIXRoaXMuemlwKXRocm93IG5ldyBFcnJvcigiaW1wb3NzaWJsZSIpO2xldCB0 PXRoaXMuemlwO3Qub24oImRhdGEiLGk9PnN1cGVyLndyaXRlKGkpKSx0Lm9uKCJlbmQiLCgpPT5z dXBlci5lbmQoKSksdC5vbigiZHJhaW4iLCgpPT50aGlzW29yXSgpKSx0aGlzLm9uKCJyZXN1bWUi LCgpPT50LnJlc3VtZSgpKX1lbHNlIHRoaXMub24oImRyYWluIix0aGlzW29yXSk7dGhpcy5ub0Rp clJlY3Vyc2U9ISFlLm5vRGlyUmVjdXJzZSx0aGlzLmZvbGxvdz0hIWUuZm9sbG93LHRoaXMubm9N dGltZT0hIWUubm9NdGltZSxlLm10aW1lJiYodGhpcy5tdGltZT1lLm10aW1lKSx0aGlzLmZpbHRl cj10eXBlb2YgZS5maWx0ZXI9PSJmdW5jdGlvbiI/ZS5maWx0ZXI6KCk9PiEwLHRoaXNbWF09bmV3 IGRoLllhbGxpc3QsdGhpc1tRXT0wLHRoaXMuam9icz1OdW1iZXIoZS5qb2JzKXx8NCx0aGlzW1R0 XT0hMSx0aGlzW3Z0XT0hMX1bVG5dKGUpe3JldHVybiBzdXBlci53cml0ZShlKX1hZGQoZSl7cmV0 dXJuIHRoaXMud3JpdGUoZSksdGhpc31lbmQoZSx0LGkpe3JldHVybiB0eXBlb2YgZT09ImZ1bmN0 aW9uIiYmKGk9ZSxlPXZvaWQgMCksdHlwZW9mIHQ9PSJmdW5jdGlvbiImJihpPXQsdD12b2lkIDAp LGUmJnRoaXMuYWRkKGUpLHRoaXNbdnRdPSEwLHRoaXNbeGVdKCksaSYmaSgpLHRoaXN9d3JpdGUo ZSl7aWYodGhpc1t2dF0pdGhyb3cgbmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTtyZXR1cm4g ZSBpbnN0YW5jZW9mIG1oLlJlYWRFbnRyeT90aGlzW2duXShlKTp0aGlzW1RpXShlKSx0aGlzLmZs b3dpbmd9W2duXShlKXtsZXQgdD0oMCxhci5ub3JtYWxpemVXaW5kb3dzUGF0aCkoT24uZGVmYXVs dC5yZXNvbHZlKHRoaXMuY3dkLGUucGF0aCkpO2lmKCF0aGlzLmZpbHRlcihlLnBhdGgsZSkpZS5y ZXN1bWUoKTtlbHNle2xldCBpPW5ldyBEdChlLnBhdGgsdCk7aS5lbnRyeT1uZXcgaHIuV3JpdGVF bnRyeVRhcihlLHRoaXNbbnJdKGkpKSxpLmVudHJ5Lm9uKCJlbmQiLCgpPT50aGlzW3JyXShpKSks dGhpc1tRXSs9MSx0aGlzW1hdLnB1c2goaSl9dGhpc1t4ZV0oKX1bVGldKGUpe2xldCB0PSgwLGFy Lm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShPbi5kZWZhdWx0LnJlc29sdmUodGhpcy5jd2QsZSkpO3Ro aXNbWF0ucHVzaChuZXcgRHQoZSx0KSksdGhpc1t4ZV0oKX1bbHJdKGUpe2UucGVuZGluZz0hMCx0 aGlzW1FdKz0xO2xldCB0PXRoaXMuZm9sbG93PyJzdGF0IjoibHN0YXQiO01pLmRlZmF1bHRbdF0o ZS5hYnNvbHV0ZSwoaSxyKT0+e2UucGVuZGluZz0hMSx0aGlzW1FdLT0xLGk/dGhpcy5lbWl0KCJl cnJvciIsaSk6dGhpc1t2aV0oZSxyKX0pfVt2aV0oZSx0KXt0aGlzLnN0YXRDYWNoZS5zZXQoZS5h YnNvbHV0ZSx0KSxlLnN0YXQ9dCx0aGlzLmZpbHRlcihlLnBhdGgsdCk/dC5pc0ZpbGUoKSYmdC5u bGluaz4xJiZlPT09dGhpc1tqZV0mJiF0aGlzLmxpbmtDYWNoZS5nZXQoYCR7dC5kZXZ9OiR7dC5p bm99YCkmJiF0aGlzLnN5bmMmJnRoaXNbc3JdKGUpOmUuaWdub3JlPSEwLHRoaXNbeGVdKCl9W3Vy XShlKXtlLnBlbmRpbmc9ITAsdGhpc1tRXSs9MSxNaS5kZWZhdWx0LnJlYWRkaXIoZS5hYnNvbHV0 ZSwodCxpKT0+e2lmKGUucGVuZGluZz0hMSx0aGlzW1FdLT0xLHQpcmV0dXJuIHRoaXMuZW1pdCgi ZXJyb3IiLHQpO3RoaXNbRGldKGUsaSl9KX1bRGldKGUsdCl7dGhpcy5yZWFkZGlyQ2FjaGUuc2V0 KGUuYWJzb2x1dGUsdCksZS5yZWFkZGlyPXQsdGhpc1t4ZV0oKX1beGVdKCl7aWYoIXRoaXNbVHRd KXt0aGlzW1R0XT0hMDtmb3IobGV0IGU9dGhpc1tYXS5oZWFkO2UmJnRoaXNbUV08dGhpcy5qb2Jz O2U9ZS5uZXh0KWlmKHRoaXNbc3JdKGUudmFsdWUpLGUudmFsdWUuaWdub3JlKXtsZXQgdD1lLm5l eHQ7dGhpc1tYXS5yZW1vdmVOb2RlKGUpLGUubmV4dD10fXRoaXNbVHRdPSExLHRoaXNbdnRdJiYh dGhpc1tYXS5sZW5ndGgmJnRoaXNbUV09PT0wJiYodGhpcy56aXA/dGhpcy56aXAuZW5kKFNuKToo c3VwZXIud3JpdGUoU24pLHN1cGVyLmVuZCgpKSl9fWdldFtqZV0oKXtyZXR1cm4gdGhpc1tYXSYm dGhpc1tYXS5oZWFkJiZ0aGlzW1hdLmhlYWQudmFsdWV9W3JyXShlKXt0aGlzW1hdLnNoaWZ0KCks dGhpc1tRXS09MSx0aGlzW3hlXSgpfVtzcl0oZSl7aWYoIWUucGVuZGluZyl7aWYoZS5lbnRyeSl7 ZT09PXRoaXNbamVdJiYhZS5waXBlZCYmdGhpc1tQaV0oZSk7cmV0dXJufWlmKCFlLnN0YXQpe2xl dCB0PXRoaXMuc3RhdENhY2hlLmdldChlLmFic29sdXRlKTt0P3RoaXNbdmldKGUsdCk6dGhpc1ts cl0oZSl9aWYoZS5zdGF0JiYhZS5pZ25vcmUpe2lmKCF0aGlzLm5vRGlyUmVjdXJzZSYmZS5zdGF0 LmlzRGlyZWN0b3J5KCkmJiFlLnJlYWRkaXIpe2xldCB0PXRoaXMucmVhZGRpckNhY2hlLmdldChl LmFic29sdXRlKTtpZih0P3RoaXNbRGldKGUsdCk6dGhpc1t1cl0oZSksIWUucmVhZGRpcilyZXR1 cm59aWYoZS5lbnRyeT10aGlzW1JuXShlKSwhZS5lbnRyeSl7ZS5pZ25vcmU9ITA7cmV0dXJufWU9 PT10aGlzW2plXSYmIWUucGlwZWQmJnRoaXNbUGldKGUpfX19W25yXShlKXtyZXR1cm57b253YXJu Oih0LGkscik9PnRoaXMud2Fybih0LGksciksbm9QYXg6dGhpcy5ub1BheCxjd2Q6dGhpcy5jd2Qs YWJzb2x1dGU6ZS5hYnNvbHV0ZSxwcmVzZXJ2ZVBhdGhzOnRoaXMucHJlc2VydmVQYXRocyxtYXhS ZWFkU2l6ZTp0aGlzLm1heFJlYWRTaXplLHN0cmljdDp0aGlzLnN0cmljdCxwb3J0YWJsZTp0aGlz LnBvcnRhYmxlLGxpbmtDYWNoZTp0aGlzLmxpbmtDYWNoZSxzdGF0Q2FjaGU6dGhpcy5zdGF0Q2Fj aGUsbm9NdGltZTp0aGlzLm5vTXRpbWUsbXRpbWU6dGhpcy5tdGltZSxwcmVmaXg6dGhpcy5wcmVm aXgsb25Xcml0ZUVudHJ5OnRoaXMub25Xcml0ZUVudHJ5fX1bUm5dKGUpe3RoaXNbUV0rPTE7dHJ5 e3JldHVybiBuZXcgdGhpc1tOaV0oZS5wYXRoLHRoaXNbbnJdKGUpKS5vbigiZW5kIiwoKT0+dGhp c1tycl0oZSkpLm9uKCJlcnJvciIsaT0+dGhpcy5lbWl0KCJlcnJvciIsaSkpfWNhdGNoKHQpe3Ro aXMuZW1pdCgiZXJyb3IiLHQpfX1bb3JdKCl7dGhpc1tqZV0mJnRoaXNbamVdLmVudHJ5JiZ0aGlz W2plXS5lbnRyeS5yZXN1bWUoKX1bUGldKGUpe2UucGlwZWQ9ITAsZS5yZWFkZGlyJiZlLnJlYWRk aXIuZm9yRWFjaChyPT57bGV0IG49ZS5wYXRoLG89bj09PSIuLyI/IiI6bi5yZXBsYWNlKC9cLyok LywiLyIpO3RoaXNbVGldKG8rcil9KTtsZXQgdD1lLmVudHJ5LGk9dGhpcy56aXA7aWYoIXQpdGhy b3cgbmV3IEVycm9yKCJjYW5ub3QgcGlwZSB3aXRob3V0IHNvdXJjZSIpO2k/dC5vbigiZGF0YSIs cj0+e2kud3JpdGUocil8fHQucGF1c2UoKX0pOnQub24oImRhdGEiLHI9PntzdXBlci53cml0ZShy KXx8dC5wYXVzZSgpfSl9cGF1c2UoKXtyZXR1cm4gdGhpcy56aXAmJnRoaXMuemlwLnBhdXNlKCks c3VwZXIucGF1c2UoKX13YXJuKGUsdCxpPXt9KXsoMCxwaC53YXJuTWV0aG9kKSh0aGlzLGUsdCxp KX19O0wuUGFjaz1MaTt2YXIgY3I9Y2xhc3MgZXh0ZW5kcyBMaXtzeW5jPSEwO2NvbnN0cnVjdG9y KGUpe3N1cGVyKGUpLHRoaXNbTmldPWhyLldyaXRlRW50cnlTeW5jfXBhdXNlKCl7fXJlc3VtZSgp e31bbHJdKGUpe2xldCB0PXRoaXMuZm9sbG93PyJzdGF0U3luYyI6ImxzdGF0U3luYyI7dGhpc1t2 aV0oZSxNaS5kZWZhdWx0W3RdKGUuYWJzb2x1dGUpKX1bdXJdKGUpe3RoaXNbRGldKGUsTWkuZGVm YXVsdC5yZWFkZGlyU3luYyhlLmFic29sdXRlKSl9W1BpXShlKXtsZXQgdD1lLmVudHJ5LGk9dGhp cy56aXA7aWYoZS5yZWFkZGlyJiZlLnJlYWRkaXIuZm9yRWFjaChyPT57bGV0IG49ZS5wYXRoLG89 bj09PSIuLyI/IiI6bi5yZXBsYWNlKC9cLyokLywiLyIpO3RoaXNbVGldKG8rcil9KSwhdCl0aHJv dyBuZXcgRXJyb3IoIkNhbm5vdCBwaXBlIHdpdGhvdXQgc291cmNlIik7aT90Lm9uKCJkYXRhIixy PT57aS53cml0ZShyKX0pOnQub24oImRhdGEiLHI9PntzdXBlcltUbl0ocil9KX19O0wuUGFja1N5 bmM9Y3J9KTt2YXIgZnI9ZChhdD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgX2g9YXQmJmF0Ll9faW1wb3J0 RGVmYXVsdHx8ZnVuY3Rpb24ocyl7cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntkZWZhdWx0OnN9 fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2F0LmNy ZWF0ZT12b2lkIDA7dmFyIERuPUtlKCksUG49X2gocmVxdWlyZSgibm9kZTpwYXRoIikpLE5uPXN0 KCksd2g9VmUoKSxJaT1BaSgpLHloPShzLGUpPT57bGV0IHQ9bmV3IElpLlBhY2tTeW5jKHMpLGk9 bmV3IERuLldyaXRlU3RyZWFtU3luYyhzLmZpbGUse21vZGU6cy5tb2RlfHw0Mzh9KTt0LnBpcGUo aSksTW4odCxlKX0sRWg9KHMsZSk9PntsZXQgdD1uZXcgSWkuUGFjayhzKSxpPW5ldyBEbi5Xcml0 ZVN0cmVhbShzLmZpbGUse21vZGU6cy5tb2RlfHw0Mzh9KTt0LnBpcGUoaSk7bGV0IHI9bmV3IFBy b21pc2UoKG4sbyk9PntpLm9uKCJlcnJvciIsbyksaS5vbigiY2xvc2UiLG4pLHQub24oImVycm9y IixvKX0pO3JldHVybiBMbih0LGUpLHJ9LE1uPShzLGUpPT57ZS5mb3JFYWNoKHQ9Pnt0LmNoYXJB dCgwKT09PSJAIj8oMCxObi5saXN0KSh7ZmlsZTpQbi5kZWZhdWx0LnJlc29sdmUocy5jd2QsdC5z bGljZSgxKSksc3luYzohMCxub1Jlc3VtZTohMCxvblJlYWRFbnRyeTppPT5zLmFkZChpKX0pOnMu YWRkKHQpfSkscy5lbmQoKX0sTG49YXN5bmMocyxlKT0+e2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7 dCsrKXtsZXQgaT1TdHJpbmcoZVt0XSk7aS5jaGFyQXQoMCk9PT0iQCI/YXdhaXQoMCxObi5saXN0 KSh7ZmlsZTpQbi5kZWZhdWx0LnJlc29sdmUoU3RyaW5nKHMuY3dkKSxpLnNsaWNlKDEpKSxub1Jl c3VtZTohMCxvblJlYWRFbnRyeTpyPT57cy5hZGQocil9fSk6cy5hZGQoaSl9cy5lbmQoKX0sYmg9 KHMsZSk9PntsZXQgdD1uZXcgSWkuUGFja1N5bmMocyk7cmV0dXJuIE1uKHQsZSksdH0sU2g9KHMs ZSk9PntsZXQgdD1uZXcgSWkuUGFjayhzKTtyZXR1cm4gTG4odCxlKSx0fTthdC5jcmVhdGU9KDAs d2gubWFrZUNvbW1hbmQpKHloLEVoLGJoLFNoLChzLGUpPT57aWYoIWU/Lmxlbmd0aCl0aHJvdyBu ZXcgVHlwZUVycm9yKCJubyBwYXRocyBzcGVjaWZpZWQgdG8gYWRkIHRvIGFyY2hpdmUiKX0pfSk7 dmFyIENuPWQoaHQ9PnsidXNlIHN0cmljdCI7dmFyIGdoPWh0JiZodC5fX2ltcG9ydERlZmF1bHR8 fGZ1bmN0aW9uKHMpe3JldHVybiBzJiZzLl9fZXNNb2R1bGU/czp7ZGVmYXVsdDpzfX07T2JqZWN0 LmRlZmluZVByb3BlcnR5KGh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtodC5nZXRXcml0ZUZs YWc9dm9pZCAwO3ZhciBBbj1naChyZXF1aXJlKCJmcyIpKSxSaD1wcm9jZXNzLmVudi5fX0ZBS0Vf UExBVEZPUk1fX3x8cHJvY2Vzcy5wbGF0Zm9ybSxPaD1SaD09PSJ3aW4zMiIse09fQ1JFQVQ6dmgs T19UUlVOQzpUaCxPX1dST05MWTpEaH09QW4uZGVmYXVsdC5jb25zdGFudHMsSW49TnVtYmVyKHBy b2Nlc3MuZW52Ll9fRkFLRV9GU19PX0ZJTEVOQU1FX18pfHxBbi5kZWZhdWx0LmNvbnN0YW50cy5V Vl9GU19PX0ZJTEVNQVB8fDAsUGg9T2gmJiEhSW4sTmg9NTEyKjEwMjQsTWg9SW58VGh8dmh8RGg7 aHQuZ2V0V3JpdGVGbGFnPVBoP3M9PnM8Tmg/TWg6InciOigpPT4idyJ9KTt2YXIgQm49ZChoZT0+ eyJ1c2Ugc3RyaWN0Ijt2YXIgRm49aGUmJmhlLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocyl7 cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntkZWZhdWx0OnN9fTtPYmplY3QuZGVmaW5lUHJvcGVy dHkoaGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2hlLmNob3duclN5bmM9aGUuY2hvd25yPXZv aWQgMDt2YXIgRmk9Rm4ocmVxdWlyZSgibm9kZTpmcyIpKSxQdD1GbihyZXF1aXJlKCJub2RlOnBh dGgiKSksZHI9KHMsZSx0KT0+e3RyeXtyZXR1cm4gRmkuZGVmYXVsdC5sY2hvd25TeW5jKHMsZSx0 KX1jYXRjaChpKXtpZihpPy5jb2RlIT09IkVOT0VOVCIpdGhyb3cgaX19LENpPShzLGUsdCxpKT0+ e0ZpLmRlZmF1bHQubGNob3duKHMsZSx0LHI9PntpKHImJnI/LmNvZGUhPT0iRU5PRU5UIj9yOm51 bGwpfSl9LExoPShzLGUsdCxpLHIpPT57aWYoZS5pc0RpcmVjdG9yeSgpKSgwLGhlLmNob3duciko UHQuZGVmYXVsdC5yZXNvbHZlKHMsZS5uYW1lKSx0LGksbj0+e2lmKG4pcmV0dXJuIHIobik7bGV0 IG89UHQuZGVmYXVsdC5yZXNvbHZlKHMsZS5uYW1lKTtDaShvLHQsaSxyKX0pO2Vsc2V7bGV0IG49 UHQuZGVmYXVsdC5yZXNvbHZlKHMsZS5uYW1lKTtDaShuLHQsaSxyKX19LEFoPShzLGUsdCxpKT0+ e0ZpLmRlZmF1bHQucmVhZGRpcihzLHt3aXRoRmlsZVR5cGVzOiEwfSwocixuKT0+e2lmKHIpe2lm KHIuY29kZT09PSJFTk9FTlQiKXJldHVybiBpKCk7aWYoci5jb2RlIT09IkVOT1RESVIiJiZyLmNv ZGUhPT0iRU5PVFNVUCIpcmV0dXJuIGkocil9aWYocnx8IW4ubGVuZ3RoKXJldHVybiBDaShzLGUs dCxpKTtsZXQgbz1uLmxlbmd0aCxhPW51bGwsaD1sPT57aWYoIWEpe2lmKGwpcmV0dXJuIGkoYT1s KTtpZigtLW89PT0wKXJldHVybiBDaShzLGUsdCxpKX19O2ZvcihsZXQgbCBvZiBuKUxoKHMsbCxl LHQsaCl9KX07aGUuY2hvd25yPUFoO3ZhciBJaD0ocyxlLHQsaSk9PntlLmlzRGlyZWN0b3J5KCkm JigwLGhlLmNob3duclN5bmMpKFB0LmRlZmF1bHQucmVzb2x2ZShzLGUubmFtZSksdCxpKSxkcihQ dC5kZWZhdWx0LnJlc29sdmUocyxlLm5hbWUpLHQsaSl9LENoPShzLGUsdCk9PntsZXQgaTt0cnl7 aT1GaS5kZWZhdWx0LnJlYWRkaXJTeW5jKHMse3dpdGhGaWxlVHlwZXM6ITB9KX1jYXRjaChyKXts ZXQgbj1yO2lmKG4/LmNvZGU9PT0iRU5PRU5UIilyZXR1cm47aWYobj8uY29kZT09PSJFTk9URElS Inx8bj8uY29kZT09PSJFTk9UU1VQIilyZXR1cm4gZHIocyxlLHQpO3Rocm93IG59Zm9yKGxldCBy IG9mIGkpSWgocyxyLGUsdCk7cmV0dXJuIGRyKHMsZSx0KX07aGUuY2hvd25yU3luYz1DaH0pO3Zh ciB6bj1kKEJpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCaSwiX19lc01v ZHVsZSIse3ZhbHVlOiEwfSk7QmkuQ3dkRXJyb3I9dm9pZCAwO3ZhciBtcj1jbGFzcyBleHRlbmRz IEVycm9ye3BhdGg7Y29kZTtzeXNjYWxsPSJjaGRpciI7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihg JHt0fTogQ2Fubm90IGNkIGludG8gJyR7ZX0nYCksdGhpcy5wYXRoPWUsdGhpcy5jb2RlPXR9Z2V0 IG5hbWUoKXtyZXR1cm4iQ3dkRXJyb3IifX07QmkuQ3dkRXJyb3I9bXJ9KTt2YXIgX3I9ZCh6aT0+ eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoemksIl9fZXNNb2R1bGUiLHt2YWx1 ZTohMH0pO3ppLlN5bWxpbmtFcnJvcj12b2lkIDA7dmFyIHByPWNsYXNzIGV4dGVuZHMgRXJyb3J7 cGF0aDtzeW1saW5rO3N5c2NhbGw9InN5bWxpbmsiO2NvZGU9IlRBUl9TWU1MSU5LX0VSUk9SIjtj b25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJUQVJfU1lNTElOS19FUlJPUjogQ2Fubm90IGV4dHJhY3Qg dGhyb3VnaCBzeW1ib2xpYyBsaW5rIiksdGhpcy5zeW1saW5rPWUsdGhpcy5wYXRoPXR9Z2V0IG5h bWUoKXtyZXR1cm4iU3ltbGlua0Vycm9yIn19O3ppLlN5bWxpbmtFcnJvcj1wcn0pO3ZhciBxbj1k KFRlPT57InVzZSBzdHJpY3QiO3ZhciB5cj1UZSYmVGUuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlv bihzKXtyZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6e2RlZmF1bHQ6c319O09iamVjdC5kZWZpbmVQ cm9wZXJ0eShUZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7VGUubWtkaXJTeW5jPVRlLm1rZGly PXZvaWQgMDt2YXIga249Qm4oKSx4PXlyKHJlcXVpcmUoIm5vZGU6ZnMiKSksRmg9eXIocmVxdWly ZSgibm9kZTpmcy9wcm9taXNlcyIpKSxraT15cihyZXF1aXJlKCJub2RlOnBhdGgiKSksam49em4o KSxwZT1ldCgpLHhuPV9yKCksQmg9KHMsZSk9Pnt4LmRlZmF1bHQuc3RhdChzLCh0LGkpPT57KHR8 fCFpLmlzRGlyZWN0b3J5KCkpJiYodD1uZXcgam4uQ3dkRXJyb3Iocyx0Py5jb2RlfHwiRU5PVERJ UiIpKSxlKHQpfSl9LHpoPShzLGUsdCk9PntzPSgwLHBlLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShz KTtsZXQgaT1lLnVtYXNrPz8xOCxyPWUubW9kZXw0NDgsbj0ociZpKSE9PTAsbz1lLnVpZCxhPWUu Z2lkLGg9dHlwZW9mIG89PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJihvIT09ZS5wcm9j ZXNzVWlkfHxhIT09ZS5wcm9jZXNzR2lkKSxsPWUucHJlc2VydmUsdT1lLnVubGluayxjPSgwLHBl Lm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShlLmN3ZCksRT0odyxQKT0+e3c/dCh3KTpQJiZoPygwLGtu LmNob3ducikoUCxvLGEsQ3I9PkUoQ3IpKTpuP3guZGVmYXVsdC5jaG1vZChzLHIsdCk6dCgpfTtp ZihzPT09YylyZXR1cm4gQmgocyxFKTtpZihsKXJldHVybiBGaC5kZWZhdWx0Lm1rZGlyKHMse21v ZGU6cixyZWN1cnNpdmU6ITB9KS50aGVuKHc9PkUobnVsbCx3Pz92b2lkIDApLEUpO2xldCBBPSgw LHBlLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShraS5kZWZhdWx0LnJlbGF0aXZlKGMscykpLnNwbGl0 KCIvIik7d3IoYyxBLHIsdSxjLHZvaWQgMCxFKX07VGUubWtkaXI9emg7dmFyIHdyPShzLGUsdCxp LHIsbixvKT0+e2lmKCFlLmxlbmd0aClyZXR1cm4gbyhudWxsLG4pO2xldCBhPWUuc2hpZnQoKSxo PSgwLHBlLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShraS5kZWZhdWx0LnJlc29sdmUocysiLyIrYSkp O3guZGVmYXVsdC5ta2RpcihoLHQsVW4oaCxlLHQsaSxyLG4sbykpfSxVbj0ocyxlLHQsaSxyLG4s byk9PmE9PnthP3guZGVmYXVsdC5sc3RhdChzLChoLGwpPT57aWYoaCloLnBhdGg9aC5wYXRoJiYo MCxwZS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoaC5wYXRoKSxvKGgpO2Vsc2UgaWYobC5pc0RpcmVj dG9yeSgpKXdyKHMsZSx0LGkscixuLG8pO2Vsc2UgaWYoaSl4LmRlZmF1bHQudW5saW5rKHMsdT0+ e2lmKHUpcmV0dXJuIG8odSk7eC5kZWZhdWx0Lm1rZGlyKHMsdCxVbihzLGUsdCxpLHIsbixvKSl9 KTtlbHNle2lmKGwuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gbyhuZXcgeG4uU3ltbGlua0Vycm9y KHMscysiLyIrZS5qb2luKCIvIikpKTtvKGEpfX0pOihuPW58fHMsd3IocyxlLHQsaSxyLG4sbykp fSxraD1zPT57bGV0IGU9ITEsdDt0cnl7ZT14LmRlZmF1bHQuc3RhdFN5bmMocykuaXNEaXJlY3Rv cnkoKX1jYXRjaChpKXt0PWk/LmNvZGV9ZmluYWxseXtpZighZSl0aHJvdyBuZXcgam4uQ3dkRXJy b3Iocyx0Pz8iRU5PVERJUiIpfX0samg9KHMsZSk9PntzPSgwLHBlLm5vcm1hbGl6ZVdpbmRvd3NQ YXRoKShzKTtsZXQgdD1lLnVtYXNrPz8xOCxpPWUubW9kZXw0NDgscj0oaSZ0KSE9PTAsbj1lLnVp ZCxvPWUuZ2lkLGE9dHlwZW9mIG49PSJudW1iZXIiJiZ0eXBlb2Ygbz09Im51bWJlciImJihuIT09 ZS5wcm9jZXNzVWlkfHxvIT09ZS5wcm9jZXNzR2lkKSxoPWUucHJlc2VydmUsbD1lLnVubGluayx1 PSgwLHBlLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShlLmN3ZCksYz13PT57dyYmYSYmKDAsa24uY2hv d25yU3luYykodyxuLG8pLHImJnguZGVmYXVsdC5jaG1vZFN5bmMocyxpKX07aWYocz09PXUpcmV0 dXJuIGtoKHUpLGMoKTtpZihoKXJldHVybiBjKHguZGVmYXVsdC5ta2RpclN5bmMocyx7bW9kZTpp LHJlY3Vyc2l2ZTohMH0pPz92b2lkIDApO2xldCBEPSgwLHBlLm5vcm1hbGl6ZVdpbmRvd3NQYXRo KShraS5kZWZhdWx0LnJlbGF0aXZlKHUscykpLnNwbGl0KCIvIiksQTtmb3IobGV0IHc9RC5zaGlm dCgpLFA9dTt3JiYoUCs9Ii8iK3cpO3c9RC5zaGlmdCgpKXtQPSgwLHBlLm5vcm1hbGl6ZVdpbmRv d3NQYXRoKShraS5kZWZhdWx0LnJlc29sdmUoUCkpO3RyeXt4LmRlZmF1bHQubWtkaXJTeW5jKFAs aSksQT1BfHxQfWNhdGNoe2xldCBGcj14LmRlZmF1bHQubHN0YXRTeW5jKFApO2lmKEZyLmlzRGly ZWN0b3J5KCkpY29udGludWU7aWYobCl7eC5kZWZhdWx0LnVubGlua1N5bmMoUCkseC5kZWZhdWx0 Lm1rZGlyU3luYyhQLGkpLEE9QXx8UDtjb250aW51ZX1lbHNlIGlmKEZyLmlzU3ltYm9saWNMaW5r KCkpcmV0dXJuIG5ldyB4bi5TeW1saW5rRXJyb3IoUCxQKyIvIitELmpvaW4oIi8iKSl9fXJldHVy biBjKEEpfTtUZS5ta2RpclN5bmM9amh9KTt2YXIgSG49ZChqaT0+eyJ1c2Ugc3RyaWN0IjtPYmpl Y3QuZGVmaW5lUHJvcGVydHkoamksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2ppLm5vcm1hbGl6 ZVVuaWNvZGU9dm9pZCAwO3ZhciBFcj1PYmplY3QuY3JlYXRlKG51bGwpLFduPTFlNCxsdD1uZXcg U2V0LHhoPXM9PntsdC5oYXMocyk/bHQuZGVsZXRlKHMpOkVyW3NdPXMubm9ybWFsaXplKCJORkQi KS50b0xvY2FsZUxvd2VyQ2FzZSgiZW4iKS50b0xvY2FsZVVwcGVyQ2FzZSgiZW4iKSxsdC5hZGQo cyk7bGV0IGU9RXJbc10sdD1sdC5zaXplLVduO2lmKHQ+V24vMTApe2ZvcihsZXQgaSBvZiBsdClp ZihsdC5kZWxldGUoaSksZGVsZXRlIEVyW2ldLC0tdDw9MClicmVha31yZXR1cm4gZX07amkubm9y bWFsaXplVW5pY29kZT14aH0pO3ZhciBHbj1kKHhpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp bmVQcm9wZXJ0eSh4aSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7eGkuUGF0aFJlc2VydmF0aW9u cz12b2lkIDA7dmFyIFpuPXJlcXVpcmUoIm5vZGU6cGF0aCIpLFVoPUhuKCkscWg9X2koKSxXaD1w cm9jZXNzLmVudi5URVNUSU5HX1RBUl9GQUtFX1BMQVRGT1JNfHxwcm9jZXNzLnBsYXRmb3JtLEho PVdoPT09IndpbjMyIixaaD1zPT5zLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkucmVkdWNlKCh0LGkp PT57bGV0IHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gciE9PXZvaWQgMCYmKGk9KDAsWm4uam9pbiko cixpKSksdC5wdXNoKGl8fCIvIiksdH0sW10pLGJyPWNsYXNzeyNlPW5ldyBNYXA7I2k9bmV3IE1h cDsjcz1uZXcgU2V0O3Jlc2VydmUoZSx0KXtlPUhoP1sid2luMzIgcGFyYWxsZWxpemF0aW9uIGRp c2FibGVkIl06ZS5tYXAocj0+KDAscWguc3RyaXBUcmFpbGluZ1NsYXNoZXMpKCgwLFpuLmpvaW4p KCgwLFVoLm5vcm1hbGl6ZVVuaWNvZGUpKHIpKSkpO2xldCBpPW5ldyBTZXQoZS5tYXAocj0+Wmgo cikpLnJlZHVjZSgocixuKT0+ci5jb25jYXQobikpKTt0aGlzLiNpLnNldCh0LHtkaXJzOmkscGF0 aHM6ZX0pO2ZvcihsZXQgciBvZiBlKXtsZXQgbj10aGlzLiNlLmdldChyKTtuP24ucHVzaCh0KTp0 aGlzLiNlLnNldChyLFt0XSl9Zm9yKGxldCByIG9mIGkpe2xldCBuPXRoaXMuI2UuZ2V0KHIpO2lm KCFuKXRoaXMuI2Uuc2V0KHIsW25ldyBTZXQoW3RdKV0pO2Vsc2V7bGV0IG89bltuLmxlbmd0aC0x XTtvIGluc3RhbmNlb2YgU2V0P28uYWRkKHQpOm4ucHVzaChuZXcgU2V0KFt0XSkpfX1yZXR1cm4g dGhpcy4jcih0KX0jbihlKXtsZXQgdD10aGlzLiNpLmdldChlKTtpZighdCl0aHJvdyBuZXcgRXJy b3IoImZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYW55IHBhdGggcmVzZXJ2YXRpb25zIik7cmV0dXJu e3BhdGhzOnQucGF0aHMubWFwKGk9PnRoaXMuI2UuZ2V0KGkpKSxkaXJzOlsuLi50LmRpcnNdLm1h cChpPT50aGlzLiNlLmdldChpKSl9fWNoZWNrKGUpe2xldHtwYXRoczp0LGRpcnM6aX09dGhpcy4j bihlKTtyZXR1cm4gdC5ldmVyeShyPT5yJiZyWzBdPT09ZSkmJmkuZXZlcnkocj0+ciYmclswXWlu c3RhbmNlb2YgU2V0JiZyWzBdLmhhcyhlKSl9I3IoZSl7cmV0dXJuIHRoaXMuI3MuaGFzKGUpfHwh dGhpcy5jaGVjayhlKT8hMToodGhpcy4jcy5hZGQoZSksZSgoKT0+dGhpcy4jdChlKSksITApfSN0 KGUpe2lmKCF0aGlzLiNzLmhhcyhlKSlyZXR1cm4hMTtsZXQgdD10aGlzLiNpLmdldChlKTtpZigh dCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmVzZXJ2YXRpb24iKTtsZXR7cGF0aHM6aSxkaXJz OnJ9PXQsbj1uZXcgU2V0O2ZvcihsZXQgbyBvZiBpKXtsZXQgYT10aGlzLiNlLmdldChvKTtpZigh YXx8YT8uWzBdIT09ZSljb250aW51ZTtsZXQgaD1hWzFdO2lmKCFoKXt0aGlzLiNlLmRlbGV0ZShv KTtjb250aW51ZX1pZihhLnNoaWZ0KCksdHlwZW9mIGg9PSJmdW5jdGlvbiIpbi5hZGQoaCk7ZWxz ZSBmb3IobGV0IGwgb2YgaCluLmFkZChsKX1mb3IobGV0IG8gb2Ygcil7bGV0IGE9dGhpcy4jZS5n ZXQobyksaD1hPy5bMF07aWYoISghYXx8IShoIGluc3RhbmNlb2YgU2V0KSkpaWYoaC5zaXplPT09 MSYmYS5sZW5ndGg9PT0xKXt0aGlzLiNlLmRlbGV0ZShvKTtjb250aW51ZX1lbHNlIGlmKGguc2l6 ZT09PTEpe2Euc2hpZnQoKTtsZXQgbD1hWzBdO3R5cGVvZiBsPT0iZnVuY3Rpb24iJiZuLmFkZChs KX1lbHNlIGguZGVsZXRlKGUpfXJldHVybiB0aGlzLiNzLmRlbGV0ZShlKSxuLmZvckVhY2gobz0+ dGhpcy4jcihvKSksITB9fTt4aS5QYXRoUmVzZXJ2YXRpb25zPWJyfSk7dmFyIFluPWQoVWk9Pnsi dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVpLCJfX2VzTW9kdWxlIix7dmFsdWU6 ITB9KTtVaS51bWFzaz12b2lkIDA7dmFyIEdoPSgpPT5wcm9jZXNzLnVtYXNrKCk7VWkudW1hc2s9 R2h9KTt2YXIgTHI9ZCh6PT57InVzZSBzdHJpY3QiO3ZhciBZaD16JiZ6Ll9fY3JlYXRlQmluZGlu Z3x8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHMsZSx0LGkpe2k9PT12b2lkIDAmJihpPXQpO3Zh ciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KTsoIXJ8fCgiZ2V0ImluIHI/ IWUuX19lc01vZHVsZTpyLndyaXRhYmxlfHxyLmNvbmZpZ3VyYWJsZSkpJiYocj17ZW51bWVyYWJs ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVt0XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko cyxpLHIpfSk6KGZ1bmN0aW9uKHMsZSx0LGkpe2k9PT12b2lkIDAmJihpPXQpLHNbaV09ZVt0XX0p KSxLaD16JiZ6Ll9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHMs ZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHMsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVl OmV9KX0pOmZ1bmN0aW9uKHMsZSl7cy5kZWZhdWx0PWV9KSxzbz16JiZ6Ll9faW1wb3J0U3Rhcnx8 KGZ1bmN0aW9uKCl7dmFyIHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHM9T2JqZWN0LmdldE93blByb3Bl cnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3ZhciBpPVtdO2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90 b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoaVtpLmxlbmd0aF09cik7cmV0dXJuIGl9 LHMoZSl9O3JldHVybiBmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFy IHQ9e307aWYoZSE9bnVsbClmb3IodmFyIGk9cyhlKSxyPTA7cjxpLmxlbmd0aDtyKyspaVtyXSE9 PSJkZWZhdWx0IiYmWWgodCxlLGlbcl0pO3JldHVybiBLaCh0LGUpLHR9fSkoKSxNcj16JiZ6Ll9f aW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocyl7cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntkZWZh dWx0OnN9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoeiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7 ei5VbnBhY2tTeW5jPXouVW5wYWNrPXZvaWQgMDt2YXIgVmg9c28oS2UoKSksJGg9TXIocmVxdWly ZSgibm9kZTphc3NlcnQiKSkscm89cmVxdWlyZSgibm9kZTpjcnlwdG8iKSxtPU1yKHJlcXVpcmUo Im5vZGU6ZnMiKSksZz1NcihyZXF1aXJlKCJub2RlOnBhdGgiKSksbm89Q24oKSxvbz1xbigpLFU9 ZXQoKSxYaD1taSgpLFFoPVVzKCksS249c28oV3MoKSksSmg9R24oKSxhbz1fcigpLGVsPVluKCks Vm49U3ltYm9sKCJvbkVudHJ5IiksT3I9U3ltYm9sKCJjaGVja0ZzIiksJG49U3ltYm9sKCJjaGVj a0ZzMiIpLHZyPVN5bWJvbCgiaXNSZXVzYWJsZSIpLFo9U3ltYm9sKCJtYWtlRnMiKSxUcj1TeW1i b2woImZpbGUiKSxEcj1TeW1ib2woImRpcmVjdG9yeSIpLFdpPVN5bWJvbCgibGluayIpLFhuPVN5 bWJvbCgic3ltbGluayIpLFFuPVN5bWJvbCgiaGFyZGxpbmsiKSxNdD1TeW1ib2woImVuc3VyZU5v U3ltbGluayIpLEpuPVN5bWJvbCgidW5zdXBwb3J0ZWQiKSxlbz1TeW1ib2woImNoZWNrUGF0aCIp LFNyPVN5bWJvbCgic3RyaXBBYnNvbHV0ZVBhdGgiKSxEZT1TeW1ib2woIm1rZGlyIiksVD1TeW1i b2woIm9uRXJyb3IiKSxxaT1TeW1ib2woInBlbmRpbmciKSx0bz1TeW1ib2woInBlbmQiKSx1dD1T eW1ib2woInVucGVuZCIpLGdyPVN5bWJvbCgiZW5kZWQiKSxScj1TeW1ib2woIm1heWJlQ2xvc2Ui KSxQcj1TeW1ib2woInNraXAiKSxMdD1TeW1ib2woImRvQ2hvd24iKSxBdD1TeW1ib2woInVpZCIp LEl0PVN5bWJvbCgiZ2lkIiksQ3Q9U3ltYm9sKCJjaGVja2VkQ3dkIiksdGw9cHJvY2Vzcy5lbnYu VEVTVElOR19UQVJfRkFLRV9QTEFURk9STXx8cHJvY2Vzcy5wbGF0Zm9ybSxGdD10bD09PSJ3aW4z MiIsaWw9MTAyNCxzbD0ocyxlKT0+e2lmKCFGdClyZXR1cm4gbS5kZWZhdWx0LnVubGluayhzLGUp O2xldCB0PXMrIi5ERUxFVEUuIisoMCxyby5yYW5kb21CeXRlcykoMTYpLnRvU3RyaW5nKCJoZXgi KTttLmRlZmF1bHQucmVuYW1lKHMsdCxpPT57aWYoaSlyZXR1cm4gZShpKTttLmRlZmF1bHQudW5s aW5rKHQsZSl9KX0scmw9cz0+e2lmKCFGdClyZXR1cm4gbS5kZWZhdWx0LnVubGlua1N5bmMocyk7 bGV0IGU9cysiLkRFTEVURS4iKygwLHJvLnJhbmRvbUJ5dGVzKSgxNikudG9TdHJpbmcoImhleCIp O20uZGVmYXVsdC5yZW5hbWVTeW5jKHMsZSksbS5kZWZhdWx0LnVubGlua1N5bmMoZSl9LGlvPShz LGUsdCk9PnMhPT12b2lkIDAmJnM9PT1zPj4+MD9zOmUhPT12b2lkIDAmJmU9PT1lPj4+MD9lOnQs SGk9Y2xhc3MgZXh0ZW5kcyBYaC5QYXJzZXJ7W2dyXT0hMTtbQ3RdPSExO1txaV09MDtyZXNlcnZh dGlvbnM9bmV3IEpoLlBhdGhSZXNlcnZhdGlvbnM7dHJhbnNmb3JtO3dyaXRhYmxlPSEwO3JlYWRh YmxlPSExO3VpZDtnaWQ7c2V0T3duZXI7cHJlc2VydmVPd25lcjtwcm9jZXNzR2lkO3Byb2Nlc3NV aWQ7bWF4RGVwdGg7Zm9yY2VDaG93bjt3aW4zMjtuZXdlcjtrZWVwO25vTXRpbWU7cHJlc2VydmVQ YXRoczt1bmxpbms7Y3dkO3N0cmlwO3Byb2Nlc3NVbWFzazt1bWFzaztkbW9kZTtmbW9kZTtjaG1v ZDtjb25zdHJ1Y3RvcihlPXt9KXtpZihlLm9uZG9uZT0oKT0+e3RoaXNbZ3JdPSEwLHRoaXNbUnJd KCl9LHN1cGVyKGUpLHRoaXMudHJhbnNmb3JtPWUudHJhbnNmb3JtLHRoaXMuY2htb2Q9ISFlLmNo bW9kLHR5cGVvZiBlLnVpZD09Im51bWJlciJ8fHR5cGVvZiBlLmdpZD09Im51bWJlciIpe2lmKHR5 cGVvZiBlLnVpZCE9Im51bWJlciJ8fHR5cGVvZiBlLmdpZCE9Im51bWJlciIpdGhyb3cgbmV3IFR5 cGVFcnJvcigiY2Fubm90IHNldCBvd25lciB3aXRob3V0IG51bWJlciB1aWQgYW5kIGdpZCIpO2lm KGUucHJlc2VydmVPd25lcil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW5ub3QgcHJlc2VydmUgb3du ZXIgaW4gYXJjaGl2ZSBhbmQgYWxzbyBzZXQgb3duZXIgZXhwbGljaXRseSIpO3RoaXMudWlkPWUu dWlkLHRoaXMuZ2lkPWUuZ2lkLHRoaXMuc2V0T3duZXI9ITB9ZWxzZSB0aGlzLnVpZD12b2lkIDAs dGhpcy5naWQ9dm9pZCAwLHRoaXMuc2V0T3duZXI9ITE7ZS5wcmVzZXJ2ZU93bmVyPT09dm9pZCAw JiZ0eXBlb2YgZS51aWQhPSJudW1iZXIiP3RoaXMucHJlc2VydmVPd25lcj0hIShwcm9jZXNzLmdl dHVpZCYmcHJvY2Vzcy5nZXR1aWQoKT09PTApOnRoaXMucHJlc2VydmVPd25lcj0hIWUucHJlc2Vy dmVPd25lcix0aGlzLnByb2Nlc3NVaWQ9KHRoaXMucHJlc2VydmVPd25lcnx8dGhpcy5zZXRPd25l cikmJnByb2Nlc3MuZ2V0dWlkP3Byb2Nlc3MuZ2V0dWlkKCk6dm9pZCAwLHRoaXMucHJvY2Vzc0dp ZD0odGhpcy5wcmVzZXJ2ZU93bmVyfHx0aGlzLnNldE93bmVyKSYmcHJvY2Vzcy5nZXRnaWQ/cHJv Y2Vzcy5nZXRnaWQoKTp2b2lkIDAsdGhpcy5tYXhEZXB0aD10eXBlb2YgZS5tYXhEZXB0aD09Im51 bWJlciI/ZS5tYXhEZXB0aDppbCx0aGlzLmZvcmNlQ2hvd249ZS5mb3JjZUNob3duPT09ITAsdGhp cy53aW4zMj0hIWUud2luMzJ8fEZ0LHRoaXMubmV3ZXI9ISFlLm5ld2VyLHRoaXMua2VlcD0hIWUu a2VlcCx0aGlzLm5vTXRpbWU9ISFlLm5vTXRpbWUsdGhpcy5wcmVzZXJ2ZVBhdGhzPSEhZS5wcmVz ZXJ2ZVBhdGhzLHRoaXMudW5saW5rPSEhZS51bmxpbmssdGhpcy5jd2Q9KDAsVS5ub3JtYWxpemVX aW5kb3dzUGF0aCkoZy5kZWZhdWx0LnJlc29sdmUoZS5jd2R8fHByb2Nlc3MuY3dkKCkpKSx0aGlz LnN0cmlwPU51bWJlcihlLnN0cmlwKXx8MCx0aGlzLnByb2Nlc3NVbWFzaz10aGlzLmNobW9kP3R5 cGVvZiBlLnByb2Nlc3NVbWFzaz09Im51bWJlciI/ZS5wcm9jZXNzVW1hc2s6KDAsZWwudW1hc2sp KCk6MCx0aGlzLnVtYXNrPXR5cGVvZiBlLnVtYXNrPT0ibnVtYmVyIj9lLnVtYXNrOnRoaXMucHJv Y2Vzc1VtYXNrLHRoaXMuZG1vZGU9ZS5kbW9kZXx8NTExJn50aGlzLnVtYXNrLHRoaXMuZm1vZGU9 ZS5mbW9kZXx8NDM4Jn50aGlzLnVtYXNrLHRoaXMub24oImVudHJ5Iix0PT50aGlzW1ZuXSh0KSl9 d2FybihlLHQsaT17fSl7cmV0dXJuKGU9PT0iVEFSX0JBRF9BUkNISVZFInx8ZT09PSJUQVJfQUJP UlQiKSYmKGkucmVjb3ZlcmFibGU9ITEpLHN1cGVyLndhcm4oZSx0LGkpfVtScl0oKXt0aGlzW2dy XSYmdGhpc1txaV09PT0wJiYodGhpcy5lbWl0KCJwcmVmaW5pc2giKSx0aGlzLmVtaXQoImZpbmlz aCIpLHRoaXMuZW1pdCgiZW5kIikpfVtTcl0oZSx0KXtsZXQgaT1lW3RdLHt0eXBlOnJ9PWU7aWYo IWl8fHRoaXMucHJlc2VydmVQYXRocylyZXR1cm4hMDtsZXRbbixvXT0oMCxRaC5zdHJpcEFic29s dXRlUGF0aCkoaSksYT1vLnJlcGxhY2UoL1xcL2csIi8iKS5zcGxpdCgiLyIpO2lmKGEuaW5jbHVk ZXMoIi4uIil8fEZ0JiYvXlthLXpdOlwuXC4kL2kudGVzdChhWzBdPz8iIikpe2lmKHQ9PT0icGF0 aCJ8fHI9PT0iTGluayIpcmV0dXJuIHRoaXMud2FybigiVEFSX0VOVFJZX0VSUk9SIixgJHt0fSBj b250YWlucyAnLi4nYCx7ZW50cnk6ZSxbdF06aX0pLCExO3tsZXQgaD1nLmRlZmF1bHQucG9zaXgu ZGlybmFtZShlLnBhdGgpLGw9Zy5kZWZhdWx0LnBvc2l4Lm5vcm1hbGl6ZShnLmRlZmF1bHQucG9z aXguam9pbihoLGEuam9pbigiLyIpKSk7aWYobC5zdGFydHNXaXRoKCIuLi8iKXx8bD09PSIuLiIp cmV0dXJuIHRoaXMud2FybigiVEFSX0VOVFJZX0VSUk9SIixgJHt0fSBlc2NhcGVzIGV4dHJhY3Rp b24gZGlyZWN0b3J5YCx7ZW50cnk6ZSxbdF06aX0pLCExfX1yZXR1cm4gbiYmKGVbdF09U3RyaW5n KG8pLHRoaXMud2FybigiVEFSX0VOVFJZX0lORk8iLGBzdHJpcHBpbmcgJHtufSBmcm9tIGFic29s dXRlICR7dH1gLHtlbnRyeTplLFt0XTppfSkpLCEwfVtlb10oZSl7bGV0IHQ9KDAsVS5ub3JtYWxp emVXaW5kb3dzUGF0aCkoZS5wYXRoKSxpPXQuc3BsaXQoIi8iKTtpZih0aGlzLnN0cmlwKXtpZihp Lmxlbmd0aDx0aGlzLnN0cmlwKXJldHVybiExO2lmKGUudHlwZT09PSJMaW5rIil7bGV0IHI9KDAs VS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoU3RyaW5nKGUubGlua3BhdGgpKS5zcGxpdCgiLyIpO2lm KHIubGVuZ3RoPj10aGlzLnN0cmlwKWUubGlua3BhdGg9ci5zbGljZSh0aGlzLnN0cmlwKS5qb2lu KCIvIik7ZWxzZSByZXR1cm4hMX1pLnNwbGljZSgwLHRoaXMuc3RyaXApLGUucGF0aD1pLmpvaW4o Ii8iKX1pZihpc0Zpbml0ZSh0aGlzLm1heERlcHRoKSYmaS5sZW5ndGg+dGhpcy5tYXhEZXB0aCly ZXR1cm4gdGhpcy53YXJuKCJUQVJfRU5UUllfRVJST1IiLCJwYXRoIGV4Y2Vzc2l2ZWx5IGRlZXAi LHtlbnRyeTplLHBhdGg6dCxkZXB0aDppLmxlbmd0aCxtYXhEZXB0aDp0aGlzLm1heERlcHRofSks ITE7aWYoIXRoaXNbU3JdKGUsInBhdGgiKXx8IXRoaXNbU3JdKGUsImxpbmtwYXRoIikpcmV0dXJu ITE7aWYoZy5kZWZhdWx0LmlzQWJzb2x1dGUoZS5wYXRoKT9lLmFic29sdXRlPSgwLFUubm9ybWFs aXplV2luZG93c1BhdGgpKGcuZGVmYXVsdC5yZXNvbHZlKGUucGF0aCkpOmUuYWJzb2x1dGU9KDAs VS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZy5kZWZhdWx0LnJlc29sdmUodGhpcy5jd2QsZS5wYXRo KSksIXRoaXMucHJlc2VydmVQYXRocyYmdHlwZW9mIGUuYWJzb2x1dGU9PSJzdHJpbmciJiZlLmFi c29sdXRlLmluZGV4T2YodGhpcy5jd2QrIi8iKSE9PTAmJmUuYWJzb2x1dGUhPT10aGlzLmN3ZCly ZXR1cm4gdGhpcy53YXJuKCJUQVJfRU5UUllfRVJST1IiLCJwYXRoIGVzY2FwZWQgZXh0cmFjdGlv biB0YXJnZXQiLHtlbnRyeTplLHBhdGg6KDAsVS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZS5wYXRo KSxyZXNvbHZlZFBhdGg6ZS5hYnNvbHV0ZSxjd2Q6dGhpcy5jd2R9KSwhMTtpZihlLmFic29sdXRl PT09dGhpcy5jd2QmJmUudHlwZSE9PSJEaXJlY3RvcnkiJiZlLnR5cGUhPT0iR05VRHVtcERpciIp cmV0dXJuITE7aWYodGhpcy53aW4zMil7bGV0e3Jvb3Q6cn09Zy5kZWZhdWx0LndpbjMyLnBhcnNl KFN0cmluZyhlLmFic29sdXRlKSk7ZS5hYnNvbHV0ZT1yK0tuLmVuY29kZShTdHJpbmcoZS5hYnNv bHV0ZSkuc2xpY2Uoci5sZW5ndGgpKTtsZXR7cm9vdDpufT1nLmRlZmF1bHQud2luMzIucGFyc2Uo ZS5wYXRoKTtlLnBhdGg9bitLbi5lbmNvZGUoZS5wYXRoLnNsaWNlKG4ubGVuZ3RoKSl9cmV0dXJu ITB9W1ZuXShlKXtpZighdGhpc1tlb10oZSkpcmV0dXJuIGUucmVzdW1lKCk7c3dpdGNoKCRoLmRl ZmF1bHQuZXF1YWwodHlwZW9mIGUuYWJzb2x1dGUsInN0cmluZyIpLGUudHlwZSl7Y2FzZSJEaXJl Y3RvcnkiOmNhc2UiR05VRHVtcERpciI6ZS5tb2RlJiYoZS5tb2RlPWUubW9kZXw0NDgpO2Nhc2Ui RmlsZSI6Y2FzZSJPbGRGaWxlIjpjYXNlIkNvbnRpZ3VvdXNGaWxlIjpjYXNlIkxpbmsiOmNhc2Ui U3ltYm9saWNMaW5rIjpyZXR1cm4gdGhpc1tPcl0oZSk7ZGVmYXVsdDpyZXR1cm4gdGhpc1tKbl0o ZSl9fVtUXShlLHQpe2UubmFtZT09PSJDd2RFcnJvciI/dGhpcy5lbWl0KCJlcnJvciIsZSk6KHRo aXMud2FybigiVEFSX0VOVFJZX0VSUk9SIixlLHtlbnRyeTp0fSksdGhpc1t1dF0oKSx0LnJlc3Vt ZSgpKX1bRGVdKGUsdCxpKXsoMCxvby5ta2RpcikoKDAsVS5ub3JtYWxpemVXaW5kb3dzUGF0aCko ZSkse3VpZDp0aGlzLnVpZCxnaWQ6dGhpcy5naWQscHJvY2Vzc1VpZDp0aGlzLnByb2Nlc3NVaWQs cHJvY2Vzc0dpZDp0aGlzLnByb2Nlc3NHaWQsdW1hc2s6dGhpcy5wcm9jZXNzVW1hc2sscHJlc2Vy dmU6dGhpcy5wcmVzZXJ2ZVBhdGhzLHVubGluazp0aGlzLnVubGluayxjd2Q6dGhpcy5jd2QsbW9k ZTp0fSxpKX1bTHRdKGUpe3JldHVybiB0aGlzLmZvcmNlQ2hvd258fHRoaXMucHJlc2VydmVPd25l ciYmKHR5cGVvZiBlLnVpZD09Im51bWJlciImJmUudWlkIT09dGhpcy5wcm9jZXNzVWlkfHx0eXBl b2YgZS5naWQ9PSJudW1iZXIiJiZlLmdpZCE9PXRoaXMucHJvY2Vzc0dpZCl8fHR5cGVvZiB0aGlz LnVpZD09Im51bWJlciImJnRoaXMudWlkIT09dGhpcy5wcm9jZXNzVWlkfHx0eXBlb2YgdGhpcy5n aWQ9PSJudW1iZXIiJiZ0aGlzLmdpZCE9PXRoaXMucHJvY2Vzc0dpZH1bQXRdKGUpe3JldHVybiBp byh0aGlzLnVpZCxlLnVpZCx0aGlzLnByb2Nlc3NVaWQpfVtJdF0oZSl7cmV0dXJuIGlvKHRoaXMu Z2lkLGUuZ2lkLHRoaXMucHJvY2Vzc0dpZCl9W1RyXShlLHQpe2xldCBpPXR5cGVvZiBlLm1vZGU9 PSJudW1iZXIiP2UubW9kZSY0MDk1OnRoaXMuZm1vZGUscj1uZXcgVmguV3JpdGVTdHJlYW0oU3Ry aW5nKGUuYWJzb2x1dGUpLHtmbGFnczooMCxuby5nZXRXcml0ZUZsYWcpKGUuc2l6ZSksbW9kZTpp LGF1dG9DbG9zZTohMX0pO3Iub24oImVycm9yIixoPT57ci5mZCYmbS5kZWZhdWx0LmNsb3NlKHIu ZmQsKCk9Pnt9KSxyLndyaXRlPSgpPT4hMCx0aGlzW1RdKGgsZSksdCgpfSk7bGV0IG49MSxvPWg9 PntpZihoKXtyLmZkJiZtLmRlZmF1bHQuY2xvc2Uoci5mZCwoKT0+e30pLHRoaXNbVF0oaCxlKSx0 KCk7cmV0dXJufS0tbj09PTAmJnIuZmQhPT12b2lkIDAmJm0uZGVmYXVsdC5jbG9zZShyLmZkLGw9 PntsP3RoaXNbVF0obCxlKTp0aGlzW3V0XSgpLHQoKX0pfTtyLm9uKCJmaW5pc2giLCgpPT57bGV0 IGg9U3RyaW5nKGUuYWJzb2x1dGUpLGw9ci5mZDtpZih0eXBlb2YgbD09Im51bWJlciImJmUubXRp bWUmJiF0aGlzLm5vTXRpbWUpe24rKztsZXQgdT1lLmF0aW1lfHxuZXcgRGF0ZSxjPWUubXRpbWU7 bS5kZWZhdWx0LmZ1dGltZXMobCx1LGMsRT0+RT9tLmRlZmF1bHQudXRpbWVzKGgsdSxjLEQ9Pm8o RCYmRSkpOm8oKSl9aWYodHlwZW9mIGw9PSJudW1iZXIiJiZ0aGlzW0x0XShlKSl7bisrO2xldCB1 PXRoaXNbQXRdKGUpLGM9dGhpc1tJdF0oZSk7dHlwZW9mIHU9PSJudW1iZXIiJiZ0eXBlb2YgYz09 Im51bWJlciImJm0uZGVmYXVsdC5mY2hvd24obCx1LGMsRT0+RT9tLmRlZmF1bHQuY2hvd24oaCx1 LGMsRD0+byhEJiZFKSk6bygpKX1vKCl9KTtsZXQgYT10aGlzLnRyYW5zZm9ybSYmdGhpcy50cmFu c2Zvcm0oZSl8fGU7YSE9PWUmJihhLm9uKCJlcnJvciIsaD0+e3RoaXNbVF0oaCxlKSx0KCl9KSxl LnBpcGUoYSkpLGEucGlwZShyKX1bRHJdKGUsdCl7bGV0IGk9dHlwZW9mIGUubW9kZT09Im51bWJl ciI/ZS5tb2RlJjQwOTU6dGhpcy5kbW9kZTt0aGlzW0RlXShTdHJpbmcoZS5hYnNvbHV0ZSksaSxy PT57aWYocil7dGhpc1tUXShyLGUpLHQoKTtyZXR1cm59bGV0IG49MSxvPSgpPT57LS1uPT09MCYm KHQoKSx0aGlzW3V0XSgpLGUucmVzdW1lKCkpfTtlLm10aW1lJiYhdGhpcy5ub010aW1lJiYobisr LG0uZGVmYXVsdC51dGltZXMoU3RyaW5nKGUuYWJzb2x1dGUpLGUuYXRpbWV8fG5ldyBEYXRlLGUu bXRpbWUsbykpLHRoaXNbTHRdKGUpJiYobisrLG0uZGVmYXVsdC5jaG93bihTdHJpbmcoZS5hYnNv bHV0ZSksTnVtYmVyKHRoaXNbQXRdKGUpKSxOdW1iZXIodGhpc1tJdF0oZSkpLG8pKSxvKCl9KX1b Sm5dKGUpe2UudW5zdXBwb3J0ZWQ9ITAsdGhpcy53YXJuKCJUQVJfRU5UUllfVU5TVVBQT1JURUQi LGB1bnN1cHBvcnRlZCBlbnRyeSB0eXBlOiAke2UudHlwZX1gLHtlbnRyeTplfSksZS5yZXN1bWUo KX1bWG5dKGUsdCl7bGV0IGk9KDAsVS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZy5kZWZhdWx0LnJl bGF0aXZlKHRoaXMuY3dkLGcuZGVmYXVsdC5yZXNvbHZlKGcuZGVmYXVsdC5kaXJuYW1lKFN0cmlu ZyhlLmFic29sdXRlKSksU3RyaW5nKGUubGlua3BhdGgpKSkpLnNwbGl0KCIvIik7dGhpc1tNdF0o ZSx0aGlzLmN3ZCxpLCgpPT50aGlzW1dpXShlLFN0cmluZyhlLmxpbmtwYXRoKSwic3ltbGluayIs dCkscj0+e3RoaXNbVF0ocixlKSx0KCl9KX1bUW5dKGUsdCl7bGV0IGk9KDAsVS5ub3JtYWxpemVX aW5kb3dzUGF0aCkoZy5kZWZhdWx0LnJlc29sdmUodGhpcy5jd2QsU3RyaW5nKGUubGlua3BhdGgp KSkscj0oMCxVLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShTdHJpbmcoZS5saW5rcGF0aCkpLnNwbGl0 KCIvIik7dGhpc1tNdF0oZSx0aGlzLmN3ZCxyLCgpPT50aGlzW1dpXShlLGksImxpbmsiLHQpLG49 Pnt0aGlzW1RdKG4sZSksdCgpfSl9W010XShlLHQsaSxyLG4pe2xldCBvPWkuc2hpZnQoKTtpZih0 aGlzLnByZXNlcnZlUGF0aHN8fG89PT12b2lkIDApcmV0dXJuIHIoKTtsZXQgYT1nLmRlZmF1bHQu cmVzb2x2ZSh0LG8pO20uZGVmYXVsdC5sc3RhdChhLChoLGwpPT57aWYoaClyZXR1cm4gcigpO2lm KGw/LmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIG4obmV3IGFvLlN5bWxpbmtFcnJvcihhLGcuZGVm YXVsdC5yZXNvbHZlKGEsaS5qb2luKCIvIikpKSk7dGhpc1tNdF0oZSxhLGkscixuKX0pfVt0b10o KXt0aGlzW3FpXSsrfVt1dF0oKXt0aGlzW3FpXS0tLHRoaXNbUnJdKCl9W1ByXShlKXt0aGlzW3V0 XSgpLGUucmVzdW1lKCl9W3ZyXShlLHQpe3JldHVybiBlLnR5cGU9PT0iRmlsZSImJiF0aGlzLnVu bGluayYmdC5pc0ZpbGUoKSYmdC5ubGluazw9MSYmIUZ0fVtPcl0oZSl7dGhpc1t0b10oKTtsZXQg dD1bZS5wYXRoXTtlLmxpbmtwYXRoJiZ0LnB1c2goZS5saW5rcGF0aCksdGhpcy5yZXNlcnZhdGlv bnMucmVzZXJ2ZSh0LGk9PnRoaXNbJG5dKGUsaSkpfVskbl0oZSx0KXtsZXQgaT1hPT57dChhKX0s cj0oKT0+e3RoaXNbRGVdKHRoaXMuY3dkLHRoaXMuZG1vZGUsYT0+e2lmKGEpe3RoaXNbVF0oYSxl KSxpKCk7cmV0dXJufXRoaXNbQ3RdPSEwLG4oKX0pfSxuPSgpPT57aWYoZS5hYnNvbHV0ZSE9PXRo aXMuY3dkKXtsZXQgYT0oMCxVLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShnLmRlZmF1bHQuZGlybmFt ZShTdHJpbmcoZS5hYnNvbHV0ZSkpKTtpZihhIT09dGhpcy5jd2QpcmV0dXJuIHRoaXNbRGVdKGEs dGhpcy5kbW9kZSxoPT57aWYoaCl7dGhpc1tUXShoLGUpLGkoKTtyZXR1cm59bygpfSl9bygpfSxv PSgpPT57bS5kZWZhdWx0LmxzdGF0KFN0cmluZyhlLmFic29sdXRlKSwoYSxoKT0+e2lmKGgmJih0 aGlzLmtlZXB8fHRoaXMubmV3ZXImJmgubXRpbWU+KGUubXRpbWU/P2gubXRpbWUpKSl7dGhpc1tQ cl0oZSksaSgpO3JldHVybn1pZihhfHx0aGlzW3ZyXShlLGgpKXJldHVybiB0aGlzW1pdKG51bGws ZSxpKTtpZihoLmlzRGlyZWN0b3J5KCkpe2lmKGUudHlwZT09PSJEaXJlY3RvcnkiKXtsZXQgbD10 aGlzLmNobW9kJiZlLm1vZGUmJihoLm1vZGUmNDA5NSkhPT1lLm1vZGUsdT1jPT50aGlzW1pdKGM/ P251bGwsZSxpKTtyZXR1cm4gbD9tLmRlZmF1bHQuY2htb2QoU3RyaW5nKGUuYWJzb2x1dGUpLE51 bWJlcihlLm1vZGUpLHUpOnUoKX1pZihlLmFic29sdXRlIT09dGhpcy5jd2QpcmV0dXJuIG0uZGVm YXVsdC5ybWRpcihTdHJpbmcoZS5hYnNvbHV0ZSksbD0+dGhpc1taXShsPz9udWxsLGUsaSkpfWlm KGUuYWJzb2x1dGU9PT10aGlzLmN3ZClyZXR1cm4gdGhpc1taXShudWxsLGUsaSk7c2woU3RyaW5n KGUuYWJzb2x1dGUpLGw9PnRoaXNbWl0obD8/bnVsbCxlLGkpKX0pfTt0aGlzW0N0XT9uKCk6cigp fVtaXShlLHQsaSl7aWYoZSl7dGhpc1tUXShlLHQpLGkoKTtyZXR1cm59c3dpdGNoKHQudHlwZSl7 Y2FzZSJGaWxlIjpjYXNlIk9sZEZpbGUiOmNhc2UiQ29udGlndW91c0ZpbGUiOnJldHVybiB0aGlz W1RyXSh0LGkpO2Nhc2UiTGluayI6cmV0dXJuIHRoaXNbUW5dKHQsaSk7Y2FzZSJTeW1ib2xpY0xp bmsiOnJldHVybiB0aGlzW1huXSh0LGkpO2Nhc2UiRGlyZWN0b3J5IjpjYXNlIkdOVUR1bXBEaXIi OnJldHVybiB0aGlzW0RyXSh0LGkpfX1bV2ldKGUsdCxpLHIpe20uZGVmYXVsdFtpXSh0LFN0cmlu ZyhlLmFic29sdXRlKSxuPT57bj90aGlzW1RdKG4sZSk6KHRoaXNbdXRdKCksZS5yZXN1bWUoKSks cigpfSl9fTt6LlVucGFjaz1IaTt2YXIgTnQ9cz0+e3RyeXtyZXR1cm5bbnVsbCxzKCldfWNhdGNo KGUpe3JldHVybltlLG51bGxdfX0sTnI9Y2xhc3MgZXh0ZW5kcyBIaXtzeW5jPSEwO1taXShlLHQp e3JldHVybiBzdXBlcltaXShlLHQsKCk9Pnt9KX1bT3JdKGUpe2lmKCF0aGlzW0N0XSl7bGV0IG49 dGhpc1tEZV0odGhpcy5jd2QsdGhpcy5kbW9kZSk7aWYobilyZXR1cm4gdGhpc1tUXShuLGUpO3Ro aXNbQ3RdPSEwfWlmKGUuYWJzb2x1dGUhPT10aGlzLmN3ZCl7bGV0IG49KDAsVS5ub3JtYWxpemVX aW5kb3dzUGF0aCkoZy5kZWZhdWx0LmRpcm5hbWUoU3RyaW5nKGUuYWJzb2x1dGUpKSk7aWYobiE9 PXRoaXMuY3dkKXtsZXQgbz10aGlzW0RlXShuLHRoaXMuZG1vZGUpO2lmKG8pcmV0dXJuIHRoaXNb VF0obyxlKX19bGV0W3QsaV09TnQoKCk9Pm0uZGVmYXVsdC5sc3RhdFN5bmMoU3RyaW5nKGUuYWJz b2x1dGUpKSk7aWYoaSYmKHRoaXMua2VlcHx8dGhpcy5uZXdlciYmaS5tdGltZT4oZS5tdGltZT8/ aS5tdGltZSkpKXJldHVybiB0aGlzW1ByXShlKTtpZih0fHx0aGlzW3ZyXShlLGkpKXJldHVybiB0 aGlzW1pdKG51bGwsZSk7aWYoaS5pc0RpcmVjdG9yeSgpKXtpZihlLnR5cGU9PT0iRGlyZWN0b3J5 Iil7bGV0IG89dGhpcy5jaG1vZCYmZS5tb2RlJiYoaS5tb2RlJjQwOTUpIT09ZS5tb2RlLFthXT1v P050KCgpPT57bS5kZWZhdWx0LmNobW9kU3luYyhTdHJpbmcoZS5hYnNvbHV0ZSksTnVtYmVyKGUu bW9kZSkpfSk6W107cmV0dXJuIHRoaXNbWl0oYSxlKX1sZXRbbl09TnQoKCk9Pm0uZGVmYXVsdC5y bWRpclN5bmMoU3RyaW5nKGUuYWJzb2x1dGUpKSk7dGhpc1taXShuLGUpfWxldFtyXT1lLmFic29s dXRlPT09dGhpcy5jd2Q/W106TnQoKCk9PnJsKFN0cmluZyhlLmFic29sdXRlKSkpO3RoaXNbWl0o cixlKX1bVHJdKGUsdCl7bGV0IGk9dHlwZW9mIGUubW9kZT09Im51bWJlciI/ZS5tb2RlJjQwOTU6 dGhpcy5mbW9kZSxyPWE9PntsZXQgaDt0cnl7bS5kZWZhdWx0LmNsb3NlU3luYyhuKX1jYXRjaChs KXtoPWx9KGF8fGgpJiZ0aGlzW1RdKGF8fGgsZSksdCgpfSxuO3RyeXtuPW0uZGVmYXVsdC5vcGVu U3luYyhTdHJpbmcoZS5hYnNvbHV0ZSksKDAsbm8uZ2V0V3JpdGVGbGFnKShlLnNpemUpLGkpfWNh dGNoKGEpe3JldHVybiByKGEpfWxldCBvPXRoaXMudHJhbnNmb3JtJiZ0aGlzLnRyYW5zZm9ybShl KXx8ZTtvIT09ZSYmKG8ub24oImVycm9yIixhPT50aGlzW1RdKGEsZSkpLGUucGlwZShvKSksby5v bigiZGF0YSIsYT0+e3RyeXttLmRlZmF1bHQud3JpdGVTeW5jKG4sYSwwLGEubGVuZ3RoKX1jYXRj aChoKXtyKGgpfX0pLG8ub24oImVuZCIsKCk9PntsZXQgYT1udWxsO2lmKGUubXRpbWUmJiF0aGlz Lm5vTXRpbWUpe2xldCBoPWUuYXRpbWV8fG5ldyBEYXRlLGw9ZS5tdGltZTt0cnl7bS5kZWZhdWx0 LmZ1dGltZXNTeW5jKG4saCxsKX1jYXRjaCh1KXt0cnl7bS5kZWZhdWx0LnV0aW1lc1N5bmMoU3Ry aW5nKGUuYWJzb2x1dGUpLGgsbCl9Y2F0Y2h7YT11fX19aWYodGhpc1tMdF0oZSkpe2xldCBoPXRo aXNbQXRdKGUpLGw9dGhpc1tJdF0oZSk7dHJ5e20uZGVmYXVsdC5mY2hvd25TeW5jKG4sTnVtYmVy KGgpLE51bWJlcihsKSl9Y2F0Y2godSl7dHJ5e20uZGVmYXVsdC5jaG93blN5bmMoU3RyaW5nKGUu YWJzb2x1dGUpLE51bWJlcihoKSxOdW1iZXIobCkpfWNhdGNoe2E9YXx8dX19fXIoYSl9KX1bRHJd KGUsdCl7bGV0IGk9dHlwZW9mIGUubW9kZT09Im51bWJlciI/ZS5tb2RlJjQwOTU6dGhpcy5kbW9k ZSxyPXRoaXNbRGVdKFN0cmluZyhlLmFic29sdXRlKSxpKTtpZihyKXt0aGlzW1RdKHIsZSksdCgp O3JldHVybn1pZihlLm10aW1lJiYhdGhpcy5ub010aW1lKXRyeXttLmRlZmF1bHQudXRpbWVzU3lu YyhTdHJpbmcoZS5hYnNvbHV0ZSksZS5hdGltZXx8bmV3IERhdGUsZS5tdGltZSl9Y2F0Y2h7fWlm KHRoaXNbTHRdKGUpKXRyeXttLmRlZmF1bHQuY2hvd25TeW5jKFN0cmluZyhlLmFic29sdXRlKSxO dW1iZXIodGhpc1tBdF0oZSkpLE51bWJlcih0aGlzW0l0XShlKSkpfWNhdGNoe310KCksZS5yZXN1 bWUoKX1bRGVdKGUsdCl7dHJ5e3JldHVybigwLG9vLm1rZGlyU3luYykoKDAsVS5ub3JtYWxpemVX aW5kb3dzUGF0aCkoZSkse3VpZDp0aGlzLnVpZCxnaWQ6dGhpcy5naWQscHJvY2Vzc1VpZDp0aGlz LnByb2Nlc3NVaWQscHJvY2Vzc0dpZDp0aGlzLnByb2Nlc3NHaWQsdW1hc2s6dGhpcy5wcm9jZXNz VW1hc2sscHJlc2VydmU6dGhpcy5wcmVzZXJ2ZVBhdGhzLHVubGluazp0aGlzLnVubGluayxjd2Q6 dGhpcy5jd2QsbW9kZTp0fSl9Y2F0Y2goaSl7cmV0dXJuIGl9fVtNdF0oZSx0LGkscixuKXtpZih0 aGlzLnByZXNlcnZlUGF0aHN8fCFpLmxlbmd0aClyZXR1cm4gcigpO2xldCBvPXQ7Zm9yKGxldCBh IG9mIGkpe289Zy5kZWZhdWx0LnJlc29sdmUobyxhKTtsZXRbaCxsXT1OdCgoKT0+bS5kZWZhdWx0 LmxzdGF0U3luYyhvKSk7aWYoaClyZXR1cm4gcigpO2lmKGwuaXNTeW1ib2xpY0xpbmsoKSlyZXR1 cm4gbihuZXcgYW8uU3ltbGlua0Vycm9yKG8sZy5kZWZhdWx0LnJlc29sdmUodCxpLmpvaW4oIi8i KSkpKX1yKCl9W1dpXShlLHQsaSxyKXtsZXQgbj1gJHtpfVN5bmNgO3RyeXttLmRlZmF1bHRbbl0o dCxTdHJpbmcoZS5hYnNvbHV0ZSkpLHIoKSxlLnJlc3VtZSgpfWNhdGNoKG8pe3JldHVybiB0aGlz W1RdKG8sZSl9fX07ei5VbnBhY2tTeW5jPU5yfSk7dmFyIEFyPWQoRz0+eyJ1c2Ugc3RyaWN0Ijt2 YXIgbmw9RyYmRy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlvbihzLGUs dCxpKXtpPT09dm9pZCAwJiYoaT10KTt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw dG9yKGUsdCk7KCFyfHwoImdldCJpbiByPyFlLl9fZXNNb2R1bGU6ci53cml0YWJsZXx8ci5jb25m aWd1cmFibGUpKSYmKHI9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbdF19 fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsaSxyKX0pOihmdW5jdGlvbihzLGUsdCxpKXtpPT09 dm9pZCAwJiYoaT10KSxzW2ldPWVbdF19KSksb2w9RyYmRy5fX3NldE1vZHVsZURlZmF1bHR8fChP YmplY3QuY3JlYXRlPyhmdW5jdGlvbihzLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJkZWZh dWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSl9KTpmdW5jdGlvbihzLGUpe3MuZGVmYXVsdD1l fSksYWw9RyYmRy5fX2ltcG9ydFN0YXJ8fChmdW5jdGlvbigpe3ZhciBzPWZ1bmN0aW9uKGUpe3Jl dHVybiBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXt2YXIgaT1bXTtm b3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYm KGlbaS5sZW5ndGhdPXIpO3JldHVybiBpfSxzKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZSYm ZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKGUhPW51bGwpZm9yKHZhciBpPXMoZSks cj0wO3I8aS5sZW5ndGg7cisrKWlbcl0hPT0iZGVmYXVsdCImJm5sKHQsZSxpW3JdKTtyZXR1cm4g b2wodCxlKSx0fX0pKCksaGw9RyYmRy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHMpe3JldHVy biBzJiZzLl9fZXNNb2R1bGU/czp7ZGVmYXVsdDpzfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEcs Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0cuZXh0cmFjdD12b2lkIDA7dmFyIGhvPWFsKEtlKCkp LGxvPWhsKHJlcXVpcmUoIm5vZGU6ZnMiKSksbGw9c3QoKSx1bD1WZSgpLFppPUxyKCksY2w9cz0+ e2xldCBlPW5ldyBaaS5VbnBhY2tTeW5jKHMpLHQ9cy5maWxlLGk9bG8uZGVmYXVsdC5zdGF0U3lu Yyh0KSxyPXMubWF4UmVhZFNpemV8fDE2KjEwMjQqMTAyNDtuZXcgaG8uUmVhZFN0cmVhbVN5bmMo dCx7cmVhZFNpemU6cixzaXplOmkuc2l6ZX0pLnBpcGUoZSl9LGZsPShzLGUpPT57bGV0IHQ9bmV3 IFppLlVucGFjayhzKSxpPXMubWF4UmVhZFNpemV8fDE2KjEwMjQqMTAyNCxyPXMuZmlsZTtyZXR1 cm4gbmV3IFByb21pc2UoKG8sYSk9Pnt0Lm9uKCJlcnJvciIsYSksdC5vbigiY2xvc2UiLG8pLGxv LmRlZmF1bHQuc3RhdChyLChoLGwpPT57aWYoaClhKGgpO2Vsc2V7bGV0IHU9bmV3IGhvLlJlYWRT dHJlYW0ocix7cmVhZFNpemU6aSxzaXplOmwuc2l6ZX0pO3Uub24oImVycm9yIixhKSx1LnBpcGUo dCl9fSl9KX07Ry5leHRyYWN0PSgwLHVsLm1ha2VDb21tYW5kKShjbCxmbCxzPT5uZXcgWmkuVW5w YWNrU3luYyhzKSxzPT5uZXcgWmkuVW5wYWNrKHMpLChzLGUpPT57ZT8ubGVuZ3RoJiYoMCxsbC5m aWxlc0ZpbHRlcikocyxlKX0pfSk7dmFyIEdpPWQoY3Q9PnsidXNlIHN0cmljdCI7dmFyIHVvPWN0 JiZjdC5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHMpe3JldHVybiBzJiZzLl9fZXNNb2R1bGU/ czp7ZGVmYXVsdDpzfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGN0LCJfX2VzTW9kdWxlIix7dmFs dWU6ITB9KTtjdC5yZXBsYWNlPXZvaWQgMDt2YXIgY289S2UoKSxxPXVvKHJlcXVpcmUoIm5vZGU6 ZnMiKSksZm89dW8ocmVxdWlyZSgibm9kZTpwYXRoIikpLG1vPUplKCkscG89c3QoKSxkbD1WZSgp LG1sPVZ0KCksX289QWkoKSxwbD0ocyxlKT0+e2xldCB0PW5ldyBfby5QYWNrU3luYyhzKSxpPSEw LHIsbjt0cnl7dHJ5e3I9cS5kZWZhdWx0Lm9wZW5TeW5jKHMuZmlsZSwicisiKX1jYXRjaChoKXtp ZihoPy5jb2RlPT09IkVOT0VOVCIpcj1xLmRlZmF1bHQub3BlblN5bmMocy5maWxlLCJ3KyIpO2Vs c2UgdGhyb3cgaH1sZXQgbz1xLmRlZmF1bHQuZnN0YXRTeW5jKHIpLGE9QnVmZmVyLmFsbG9jKDUx Mik7ZTpmb3Iobj0wO248by5zaXplO24rPTUxMil7Zm9yKGxldCB1PTAsYz0wO3U8NTEyO3UrPWMp e2lmKGM9cS5kZWZhdWx0LnJlYWRTeW5jKHIsYSx1LGEubGVuZ3RoLXUsbit1KSxuPT09MCYmYVsw XT09PTMxJiZhWzFdPT09MTM5KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGFwcGVuZCB0byBjb21w cmVzc2VkIGFyY2hpdmVzIik7aWYoIWMpYnJlYWsgZX1sZXQgaD1uZXcgbW8uSGVhZGVyKGEpO2lm KCFoLmNrc3VtVmFsaWQpYnJlYWs7bGV0IGw9NTEyKk1hdGguY2VpbCgoaC5zaXplfHwwKS81MTIp O2lmKG4rbCs1MTI+by5zaXplKWJyZWFrO24rPWwscy5tdGltZUNhY2hlJiZoLm10aW1lJiZzLm10 aW1lQ2FjaGUuc2V0KFN0cmluZyhoLnBhdGgpLGgubXRpbWUpfWk9ITEsX2wocyx0LG4scixlKX1m aW5hbGx5e2lmKGkpdHJ5e3EuZGVmYXVsdC5jbG9zZVN5bmMocil9Y2F0Y2h7fX19LF9sPShzLGUs dCxpLHIpPT57bGV0IG49bmV3IGNvLldyaXRlU3RyZWFtU3luYyhzLmZpbGUse2ZkOmksc3RhcnQ6 dH0pO2UucGlwZShuKSx5bChlLHIpfSx3bD0ocyxlKT0+e2U9QXJyYXkuZnJvbShlKTtsZXQgdD1u ZXcgX28uUGFjayhzKSxpPShuLG8sYSk9PntsZXQgaD0oRCxBKT0+e0Q/cS5kZWZhdWx0LmNsb3Nl KG4sdz0+YShEKSk6YShudWxsLEEpfSxsPTA7aWYobz09PTApcmV0dXJuIGgobnVsbCwwKTtsZXQg dT0wLGM9QnVmZmVyLmFsbG9jKDUxMiksRT0oRCxBKT0+e2lmKER8fHR5cGVvZiBBPiJ1IilyZXR1 cm4gaChEKTtpZih1Kz1BLHU8NTEyJiZBKXJldHVybiBxLmRlZmF1bHQucmVhZChuLGMsdSxjLmxl bmd0aC11LGwrdSxFKTtpZihsPT09MCYmY1swXT09PTMxJiZjWzFdPT09MTM5KXJldHVybiBoKG5l dyBFcnJvcigiY2Fubm90IGFwcGVuZCB0byBjb21wcmVzc2VkIGFyY2hpdmVzIikpO2lmKHU8NTEy KXJldHVybiBoKG51bGwsbCk7bGV0IHc9bmV3IG1vLkhlYWRlcihjKTtpZighdy5ja3N1bVZhbGlk KXJldHVybiBoKG51bGwsbCk7bGV0IFA9NTEyKk1hdGguY2VpbCgody5zaXplPz8wKS81MTIpO2lm KGwrUCs1MTI+b3x8KGwrPVArNTEyLGw+PW8pKXJldHVybiBoKG51bGwsbCk7cy5tdGltZUNhY2hl JiZ3Lm10aW1lJiZzLm10aW1lQ2FjaGUuc2V0KFN0cmluZyh3LnBhdGgpLHcubXRpbWUpLHU9MCxx LmRlZmF1bHQucmVhZChuLGMsMCw1MTIsbCxFKX07cS5kZWZhdWx0LnJlYWQobixjLDAsNTEyLGws RSl9O3JldHVybiBuZXcgUHJvbWlzZSgobixvKT0+e3Qub24oImVycm9yIixvKTtsZXQgYT0icisi LGg9KGwsdSk9PntpZihsJiZsLmNvZGU9PT0iRU5PRU5UIiYmYT09PSJyKyIpcmV0dXJuIGE9Incr IixxLmRlZmF1bHQub3BlbihzLmZpbGUsYSxoKTtpZihsfHwhdSlyZXR1cm4gbyhsKTtxLmRlZmF1 bHQuZnN0YXQodSwoYyxFKT0+e2lmKGMpcmV0dXJuIHEuZGVmYXVsdC5jbG9zZSh1LCgpPT5vKGMp KTtpKHUsRS5zaXplLChELEEpPT57aWYoRClyZXR1cm4gbyhEKTtsZXQgdz1uZXcgY28uV3JpdGVT dHJlYW0ocy5maWxlLHtmZDp1LHN0YXJ0OkF9KTt0LnBpcGUodyksdy5vbigiZXJyb3IiLG8pLHcu b24oImNsb3NlIixuKSxFbCh0LGUpfSl9KX07cS5kZWZhdWx0Lm9wZW4ocy5maWxlLGEsaCl9KX0s eWw9KHMsZSk9PntlLmZvckVhY2godD0+e3QuY2hhckF0KDApPT09IkAiPygwLHBvLmxpc3QpKHtm aWxlOmZvLmRlZmF1bHQucmVzb2x2ZShzLmN3ZCx0LnNsaWNlKDEpKSxzeW5jOiEwLG5vUmVzdW1l OiEwLG9uUmVhZEVudHJ5Omk9PnMuYWRkKGkpfSk6cy5hZGQodCl9KSxzLmVuZCgpfSxFbD1hc3lu YyhzLGUpPT57Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBpPVN0cmluZyhlW3RdKTtp LmNoYXJBdCgwKT09PSJAIj9hd2FpdCgwLHBvLmxpc3QpKHtmaWxlOmZvLmRlZmF1bHQucmVzb2x2 ZShTdHJpbmcocy5jd2QpLGkuc2xpY2UoMSkpLG5vUmVzdW1lOiEwLG9uUmVhZEVudHJ5OnI9PnMu YWRkKHIpfSk6cy5hZGQoaSl9cy5lbmQoKX07Y3QucmVwbGFjZT0oMCxkbC5tYWtlQ29tbWFuZCko cGwsd2wsKCk9Pnt0aHJvdyBuZXcgVHlwZUVycm9yKCJmaWxlIGlzIHJlcXVpcmVkIil9LCgpPT57 dGhyb3cgbmV3IFR5cGVFcnJvcigiZmlsZSBpcyByZXF1aXJlZCIpfSwocyxlKT0+e2lmKCEoMCxt bC5pc0ZpbGUpKHMpKXRocm93IG5ldyBUeXBlRXJyb3IoImZpbGUgaXMgcmVxdWlyZWQiKTtpZihz Lmd6aXB8fHMuYnJvdGxpfHxzLnpzdGR8fHMuZmlsZS5lbmRzV2l0aCgiLmJyIil8fHMuZmlsZS5l bmRzV2l0aCgiLnRiciIpKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbm5vdCBhcHBlbmQgdG8gY29t cHJlc3NlZCBhcmNoaXZlcyIpO2lmKCFlPy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigibm8g cGF0aHMgc3BlY2lmaWVkIHRvIGFkZC9yZXBsYWNlIil9KX0pO3ZhciBJcj1kKFlpPT57InVzZSBz dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7 WWkudXBkYXRlPXZvaWQgMDt2YXIgYmw9VmUoKSxCdD1HaSgpO1lpLnVwZGF0ZT0oMCxibC5tYWtl Q29tbWFuZCkoQnQucmVwbGFjZS5zeW5jRmlsZSxCdC5yZXBsYWNlLmFzeW5jRmlsZSxCdC5yZXBs YWNlLnN5bmNOb0ZpbGUsQnQucmVwbGFjZS5hc3luY05vRmlsZSwocyxlPVtdKT0+e0J0LnJlcGxh Y2UudmFsaWRhdGU/LihzLGUpLFNsKHMpfSk7dmFyIFNsPXM9PntsZXQgZT1zLmZpbHRlcjtzLm10 aW1lQ2FjaGV8fChzLm10aW1lQ2FjaGU9bmV3IE1hcCkscy5maWx0ZXI9ZT8odCxpKT0+ZSh0LGkp JiYhKChzLm10aW1lQ2FjaGU/LmdldCh0KT8/aS5tdGltZT8/MCk+KGkubXRpbWU/PzApKToodCxp KT0+ISgocy5tdGltZUNhY2hlPy5nZXQodCk/P2kubXRpbWU/PzApPihpLm10aW1lPz8wKSl9fSk7 dmFyIHdvPWV4cG9ydHMmJmV4cG9ydHMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT8o ZnVuY3Rpb24ocyxlLHQsaSl7aT09PXZvaWQgMCYmKGk9dCk7dmFyIHI9T2JqZWN0LmdldE93blBy b3BlcnR5RGVzY3JpcHRvcihlLHQpOyghcnx8KCJnZXQiaW4gcj8hZS5fX2VzTW9kdWxlOnIud3Jp dGFibGV8fHIuY29uZmlndXJhYmxlKSkmJihyPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp e3JldHVybiBlW3RdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGkscil9KTooZnVuY3Rpb24o cyxlLHQsaSl7aT09PXZvaWQgMCYmKGk9dCksc1tpXT1lW3RdfSkpLGdsPWV4cG9ydHMmJmV4cG9y dHMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24ocyxlKXtPYmpl Y3QuZGVmaW5lUHJvcGVydHkocywiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pfSk6 ZnVuY3Rpb24ocyxlKXtzLmRlZmF1bHQ9ZX0pLFk9ZXhwb3J0cyYmZXhwb3J0cy5fX2V4cG9ydFN0 YXJ8fGZ1bmN0aW9uKHMsZSl7Zm9yKHZhciB0IGluIHMpdCE9PSJkZWZhdWx0IiYmIU9iamVjdC5w cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZ3byhlLHMsdCl9LFJsPWV4cG9ydHMm JmV4cG9ydHMuX19pbXBvcnRTdGFyfHwoZnVuY3Rpb24oKXt2YXIgcz1mdW5jdGlvbihlKXtyZXR1 cm4gcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7dmFyIGk9W107Zm9y KHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihp W2kubGVuZ3RoXT1yKTtyZXR1cm4gaX0scyhlKX07cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGUmJmUu X19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2YXIgaT1zKGUpLHI9 MDtyPGkubGVuZ3RoO3IrKylpW3JdIT09ImRlZmF1bHQiJiZ3byh0LGUsaVtyXSk7cmV0dXJuIGds KHQsZSksdH19KSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCJfX2VzTW9kdWxlIix7 dmFsdWU6ITB9KTtleHBvcnRzLnU9ZXhwb3J0cy50eXBlcz1leHBvcnRzLnI9ZXhwb3J0cy50PWV4 cG9ydHMueD1leHBvcnRzLmM9dm9pZCAwO1koZnIoKSxleHBvcnRzKTt2YXIgT2w9ZnIoKTtPYmpl Y3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywiYyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u KCl7cmV0dXJuIE9sLmNyZWF0ZX19KTtZKEFyKCksZXhwb3J0cyk7dmFyIHZsPUFyKCk7T2JqZWN0 LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIngiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp e3JldHVybiB2bC5leHRyYWN0fX0pO1koSmUoKSxleHBvcnRzKTtZKHN0KCksZXhwb3J0cyk7dmFy IFRsPXN0KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsInQiLHtlbnVtZXJhYmxlOiEw LGdldDpmdW5jdGlvbigpe3JldHVybiBUbC5saXN0fX0pO1koQWkoKSxleHBvcnRzKTtZKG1pKCks ZXhwb3J0cyk7WShlaSgpLGV4cG9ydHMpO1kocmkoKSxleHBvcnRzKTtZKEdpKCksZXhwb3J0cyk7 dmFyIERsPUdpKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsInIiLHtlbnVtZXJhYmxl OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBEbC5yZXBsYWNlfX0pO2V4cG9ydHMudHlwZXM9Umwo VHMoKSk7WShMcigpLGV4cG9ydHMpO1koSXIoKSxleHBvcnRzKTt2YXIgUGw9SXIoKTtPYmplY3Qu ZGVmaW5lUHJvcGVydHkoZXhwb3J0cywidSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7 cmV0dXJuIFBsLnVwZGF0ZX19KTtZKGVyKCksZXhwb3J0cyk7CisrInVzZSBzdHJpY3QiO3ZhciBk PShzLGUpPT4oKT0+KGV8fHMoKGU9e2V4cG9ydHM6e319KS5leHBvcnRzLGUpLGUuZXhwb3J0cyk7 dmFyIFdlPWQoRj0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRG89RiYmRi5fX2ltcG9ydERlZmF1bHR8fGZ1 bmN0aW9uKHMpe3JldHVybiBzJiZzLl9fZXNNb2R1bGU/czp7ZGVmYXVsdDpzfX07T2JqZWN0LmRl ZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0YuTWluaXBhc3M9Ri5pc1dy aXRhYmxlPUYuaXNSZWFkYWJsZT1GLmlzU3RyZWFtPXZvaWQgMDt2YXIga3I9dHlwZW9mIHByb2Nl c3M9PSJvYmplY3QiJiZwcm9jZXNzP3Byb2Nlc3M6e3N0ZG91dDpudWxsLHN0ZGVycjpudWxsfSxz cz1yZXF1aXJlKCJub2RlOmV2ZW50cyIpLHFyPURvKHJlcXVpcmUoIm5vZGU6c3RyZWFtIikpLFBv PXJlcXVpcmUoIm5vZGU6c3RyaW5nX2RlY29kZXIiKSxObz1zPT4hIXMmJnR5cGVvZiBzPT0ib2Jq ZWN0IiYmKHMgaW5zdGFuY2VvZiBadHx8cyBpbnN0YW5jZW9mIHFyLmRlZmF1bHR8fCgwLEYuaXNS ZWFkYWJsZSkocyl8fCgwLEYuaXNXcml0YWJsZSkocykpO0YuaXNTdHJlYW09Tm87dmFyIE1vPXM9 PiEhcyYmdHlwZW9mIHM9PSJvYmplY3QiJiZzIGluc3RhbmNlb2Ygc3MuRXZlbnRFbWl0dGVyJiZ0 eXBlb2Ygcy5waXBlPT0iZnVuY3Rpb24iJiZzLnBpcGUhPT1xci5kZWZhdWx0LldyaXRhYmxlLnBy b3RvdHlwZS5waXBlO0YuaXNSZWFkYWJsZT1Nbzt2YXIgTG89cz0+ISFzJiZ0eXBlb2Ygcz09Im9i amVjdCImJnMgaW5zdGFuY2VvZiBzcy5FdmVudEVtaXR0ZXImJnR5cGVvZiBzLndyaXRlPT0iZnVu Y3Rpb24iJiZ0eXBlb2Ygcy5lbmQ9PSJmdW5jdGlvbiI7Ri5pc1dyaXRhYmxlPUxvO3ZhciBjZT1T eW1ib2woIkVPRiIpLHVlPVN5bWJvbCgibWF5YmVFbWl0RW5kIiksd2U9U3ltYm9sKCJlbWl0dGVk RW5kIiksanQ9U3ltYm9sKCJlbWl0dGluZ0VuZCIpLGR0PVN5bWJvbCgiZW1pdHRlZEVycm9yIiks VXQ9U3ltYm9sKCJjbG9zZWQiKSx4cj1TeW1ib2woInJlYWQiKSxxdD1TeW1ib2woImZsdXNoIiks anI9U3ltYm9sKCJmbHVzaENodW5rIiksSz1TeW1ib2woImVuY29kaW5nIiksVWU9U3ltYm9sKCJk ZWNvZGVyIiksUj1TeW1ib2woImZsb3dpbmciKSxtdD1TeW1ib2woInBhdXNlZCIpLHFlPVN5bWJv bCgicmVzdW1lIiksTz1TeW1ib2woImJ1ZmZlciIpLEk9U3ltYm9sKCJwaXBlcyIpLHY9U3ltYm9s KCJidWZmZXJMZW5ndGgiKSxYaT1TeW1ib2woImJ1ZmZlclB1c2giKSxXdD1TeW1ib2woImJ1ZmZl clNoaWZ0IiksTj1TeW1ib2woIm9iamVjdE1vZGUiKSx5PVN5bWJvbCgiZGVzdHJveWVkIiksUWk9 U3ltYm9sKCJlcnJvciIpLEppPVN5bWJvbCgiZW1pdERhdGEiKSxVcj1TeW1ib2woImVtaXRFbmQi KSxlcz1TeW1ib2woImVtaXRFbmQyIiksSj1TeW1ib2woImFzeW5jIiksdHM9U3ltYm9sKCJhYm9y dCIpLEh0PVN5bWJvbCgiYWJvcnRlZCIpLHB0PVN5bWJvbCgic2lnbmFsIiksTmU9U3ltYm9sKCJk YXRhTGlzdGVuZXJzIikseD1TeW1ib2woImRpc2NhcmRlZCIpLF90PXM9PlByb21pc2UucmVzb2x2 ZSgpLnRoZW4ocyksQW89cz0+cygpLElvPXM9PnM9PT0iZW5kInx8cz09PSJmaW5pc2gifHxzPT09 InByZWZpbmlzaCIsRm89cz0+cyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwhIXMmJnR5cGVvZiBz PT0ib2JqZWN0IiYmcy5jb25zdHJ1Y3RvciYmcy5jb25zdHJ1Y3Rvci5uYW1lPT09IkFycmF5QnVm ZmVyIiYmcy5ieXRlTGVuZ3RoPj0wLENvPXM9PiFCdWZmZXIuaXNCdWZmZXIocykmJkFycmF5QnVm ZmVyLmlzVmlldyhzKSxHdD1jbGFzc3tzcmM7ZGVzdDtvcHRzO29uZHJhaW47Y29uc3RydWN0b3Io ZSx0LGkpe3RoaXMuc3JjPWUsdGhpcy5kZXN0PXQsdGhpcy5vcHRzPWksdGhpcy5vbmRyYWluPSgp PT5lW3FlXSgpLHRoaXMuZGVzdC5vbigiZHJhaW4iLHRoaXMub25kcmFpbil9dW5waXBlKCl7dGhp cy5kZXN0LnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsdGhpcy5vbmRyYWluKX1wcm94eUVycm9ycyhl KXt9ZW5kKCl7dGhpcy51bnBpcGUoKSx0aGlzLm9wdHMuZW5kJiZ0aGlzLmRlc3QuZW5kKCl9fSxp cz1jbGFzcyBleHRlbmRzIEd0e3VucGlwZSgpe3RoaXMuc3JjLnJlbW92ZUxpc3RlbmVyKCJlcnJv ciIsdGhpcy5wcm94eUVycm9ycyksc3VwZXIudW5waXBlKCl9Y29uc3RydWN0b3IoZSx0LGkpe3N1 cGVyKGUsdCxpKSx0aGlzLnByb3h5RXJyb3JzPXI9PnRoaXMuZGVzdC5lbWl0KCJlcnJvciIsciks ZS5vbigiZXJyb3IiLHRoaXMucHJveHlFcnJvcnMpfX0sQm89cz0+ISFzLm9iamVjdE1vZGUsem89 cz0+IXMub2JqZWN0TW9kZSYmISFzLmVuY29kaW5nJiZzLmVuY29kaW5nIT09ImJ1ZmZlciIsWnQ9 Y2xhc3MgZXh0ZW5kcyBzcy5FdmVudEVtaXR0ZXJ7W1JdPSExO1ttdF09ITE7W0ldPVtdO1tPXT1b XTtbTl07W0tdO1tKXTtbVWVdO1tjZV09ITE7W3dlXT0hMTtbanRdPSExO1tVdF09ITE7W2R0XT1u dWxsO1t2XT0wO1t5XT0hMTtbcHRdO1tIdF09ITE7W05lXT0wO1t4XT0hMTt3cml0YWJsZT0hMDty ZWFkYWJsZT0hMDtjb25zdHJ1Y3RvciguLi5lKXtsZXQgdD1lWzBdfHx7fTtpZihzdXBlcigpLHQu b2JqZWN0TW9kZSYmdHlwZW9mIHQuZW5jb2Rpbmc9PSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJy b3IoIkVuY29kaW5nIGFuZCBvYmplY3RNb2RlIG1heSBub3QgYmUgdXNlZCB0b2dldGhlciIpO0Jv KHQpPyh0aGlzW05dPSEwLHRoaXNbS109bnVsbCk6em8odCk/KHRoaXNbS109dC5lbmNvZGluZyx0 aGlzW05dPSExKToodGhpc1tOXT0hMSx0aGlzW0tdPW51bGwpLHRoaXNbSl09ISF0LmFzeW5jLHRo aXNbVWVdPXRoaXNbS10/bmV3IFBvLlN0cmluZ0RlY29kZXIodGhpc1tLXSk6bnVsbCx0JiZ0LmRl YnVnRXhwb3NlQnVmZmVyPT09ITAmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIi LHtnZXQ6KCk9PnRoaXNbT119KSx0JiZ0LmRlYnVnRXhwb3NlUGlwZXM9PT0hMCYmT2JqZWN0LmRl ZmluZVByb3BlcnR5KHRoaXMsInBpcGVzIix7Z2V0OigpPT50aGlzW0ldfSk7bGV0e3NpZ25hbDpp fT10O2kmJih0aGlzW3B0XT1pLGkuYWJvcnRlZD90aGlzW3RzXSgpOmkuYWRkRXZlbnRMaXN0ZW5l cigiYWJvcnQiLCgpPT50aGlzW3RzXSgpKSl9Z2V0IGJ1ZmZlckxlbmd0aCgpe3JldHVybiB0aGlz W3ZdfWdldCBlbmNvZGluZygpe3JldHVybiB0aGlzW0tdfXNldCBlbmNvZGluZyhlKXt0aHJvdyBu ZXcgRXJyb3IoIkVuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZSIpfXNl dEVuY29kaW5nKGUpe3Rocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgbXVzdCBiZSBzZXQgYXQgaW5z dGFudGlhdGlvbiB0aW1lIil9Z2V0IG9iamVjdE1vZGUoKXtyZXR1cm4gdGhpc1tOXX1zZXQgb2Jq ZWN0TW9kZShlKXt0aHJvdyBuZXcgRXJyb3IoIm9iamVjdE1vZGUgbXVzdCBiZSBzZXQgYXQgaW5z dGFudGlhdGlvbiB0aW1lIil9Z2V0IGFzeW5jKCl7cmV0dXJuIHRoaXNbSl19c2V0IGFzeW5jKGUp e3RoaXNbSl09dGhpc1tKXXx8ISFlfVt0c10oKXt0aGlzW0h0XT0hMCx0aGlzLmVtaXQoImFib3J0 Iix0aGlzW3B0XT8ucmVhc29uKSx0aGlzLmRlc3Ryb3kodGhpc1twdF0/LnJlYXNvbil9Z2V0IGFi b3J0ZWQoKXtyZXR1cm4gdGhpc1tIdF19c2V0IGFib3J0ZWQoZSl7fXdyaXRlKGUsdCxpKXtpZih0 aGlzW0h0XSlyZXR1cm4hMTtpZih0aGlzW2NlXSl0aHJvdyBuZXcgRXJyb3IoIndyaXRlIGFmdGVy IGVuZCIpO2lmKHRoaXNbeV0pcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLE9iamVjdC5hc3NpZ24o bmV3IEVycm9yKCJDYW5ub3QgY2FsbCB3cml0ZSBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVk Iikse2NvZGU6IkVSUl9TVFJFQU1fREVTVFJPWUVEIn0pKSwhMDt0eXBlb2YgdD09ImZ1bmN0aW9u IiYmKGk9dCx0PSJ1dGY4IiksdHx8KHQ9InV0ZjgiKTtsZXQgcj10aGlzW0pdP190OkFvO2lmKCF0 aGlzW05dJiYhQnVmZmVyLmlzQnVmZmVyKGUpKXtpZihDbyhlKSllPUJ1ZmZlci5mcm9tKGUuYnVm ZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpO2Vsc2UgaWYoRm8oZSkpZT1CdWZmZXIuZnJv bShlKTtlbHNlIGlmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIk5vbi1jb250 aWd1b3VzIGRhdGEgd3JpdHRlbiB0byBub24tb2JqZWN0TW9kZSBzdHJlYW0iKX1yZXR1cm4gdGhp c1tOXT8odGhpc1tSXSYmdGhpc1t2XSE9PTAmJnRoaXNbcXRdKCEwKSx0aGlzW1JdP3RoaXMuZW1p dCgiZGF0YSIsZSk6dGhpc1tYaV0oZSksdGhpc1t2XSE9PTAmJnRoaXMuZW1pdCgicmVhZGFibGUi KSxpJiZyKGkpLHRoaXNbUl0pOmUubGVuZ3RoPyh0eXBlb2YgZT09InN0cmluZyImJiEodD09PXRo aXNbS10mJiF0aGlzW1VlXT8ubGFzdE5lZWQpJiYoZT1CdWZmZXIuZnJvbShlLHQpKSxCdWZmZXIu aXNCdWZmZXIoZSkmJnRoaXNbS10mJihlPXRoaXNbVWVdLndyaXRlKGUpKSx0aGlzW1JdJiZ0aGlz W3ZdIT09MCYmdGhpc1txdF0oITApLHRoaXNbUl0/dGhpcy5lbWl0KCJkYXRhIixlKTp0aGlzW1hp XShlKSx0aGlzW3ZdIT09MCYmdGhpcy5lbWl0KCJyZWFkYWJsZSIpLGkmJnIoaSksdGhpc1tSXSk6 KHRoaXNbdl0hPT0wJiZ0aGlzLmVtaXQoInJlYWRhYmxlIiksaSYmcihpKSx0aGlzW1JdKX1yZWFk KGUpe2lmKHRoaXNbeV0pcmV0dXJuIG51bGw7aWYodGhpc1t4XT0hMSx0aGlzW3ZdPT09MHx8ZT09 PTB8fGUmJmU+dGhpc1t2XSlyZXR1cm4gdGhpc1t1ZV0oKSxudWxsO3RoaXNbTl0mJihlPW51bGwp LHRoaXNbT10ubGVuZ3RoPjEmJiF0aGlzW05dJiYodGhpc1tPXT1bdGhpc1tLXT90aGlzW09dLmpv aW4oIiIpOkJ1ZmZlci5jb25jYXQodGhpc1tPXSx0aGlzW3ZdKV0pO2xldCB0PXRoaXNbeHJdKGV8 fG51bGwsdGhpc1tPXVswXSk7cmV0dXJuIHRoaXNbdWVdKCksdH1beHJdKGUsdCl7aWYodGhpc1tO XSl0aGlzW1d0XSgpO2Vsc2V7bGV0IGk9dDtlPT09aS5sZW5ndGh8fGU9PT1udWxsP3RoaXNbV3Rd KCk6dHlwZW9mIGk9PSJzdHJpbmciPyh0aGlzW09dWzBdPWkuc2xpY2UoZSksdD1pLnNsaWNlKDAs ZSksdGhpc1t2XS09ZSk6KHRoaXNbT11bMF09aS5zdWJhcnJheShlKSx0PWkuc3ViYXJyYXkoMCxl KSx0aGlzW3ZdLT1lKX1yZXR1cm4gdGhpcy5lbWl0KCJkYXRhIix0KSwhdGhpc1tPXS5sZW5ndGgm JiF0aGlzW2NlXSYmdGhpcy5lbWl0KCJkcmFpbiIpLHR9ZW5kKGUsdCxpKXtyZXR1cm4gdHlwZW9m IGU9PSJmdW5jdGlvbiImJihpPWUsZT12b2lkIDApLHR5cGVvZiB0PT0iZnVuY3Rpb24iJiYoaT10 LHQ9InV0ZjgiKSxlIT09dm9pZCAwJiZ0aGlzLndyaXRlKGUsdCksaSYmdGhpcy5vbmNlKCJlbmQi LGkpLHRoaXNbY2VdPSEwLHRoaXMud3JpdGFibGU9ITEsKHRoaXNbUl18fCF0aGlzW210XSkmJnRo aXNbdWVdKCksdGhpc31bcWVdKCl7dGhpc1t5XXx8KCF0aGlzW05lXSYmIXRoaXNbSV0ubGVuZ3Ro JiYodGhpc1t4XT0hMCksdGhpc1ttdF09ITEsdGhpc1tSXT0hMCx0aGlzLmVtaXQoInJlc3VtZSIp LHRoaXNbT10ubGVuZ3RoP3RoaXNbcXRdKCk6dGhpc1tjZV0/dGhpc1t1ZV0oKTp0aGlzLmVtaXQo ImRyYWluIikpfXJlc3VtZSgpe3JldHVybiB0aGlzW3FlXSgpfXBhdXNlKCl7dGhpc1tSXT0hMSx0 aGlzW210XT0hMCx0aGlzW3hdPSExfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpc1t5XX1nZXQg Zmxvd2luZygpe3JldHVybiB0aGlzW1JdfWdldCBwYXVzZWQoKXtyZXR1cm4gdGhpc1ttdF19W1hp XShlKXt0aGlzW05dP3RoaXNbdl0rPTE6dGhpc1t2XSs9ZS5sZW5ndGgsdGhpc1tPXS5wdXNoKGUp fVtXdF0oKXtyZXR1cm4gdGhpc1tOXT90aGlzW3ZdLT0xOnRoaXNbdl0tPXRoaXNbT11bMF0ubGVu Z3RoLHRoaXNbT10uc2hpZnQoKX1bcXRdKGU9ITEpe2RvO3doaWxlKHRoaXNbanJdKHRoaXNbV3Rd KCkpJiZ0aGlzW09dLmxlbmd0aCk7IWUmJiF0aGlzW09dLmxlbmd0aCYmIXRoaXNbY2VdJiZ0aGlz LmVtaXQoImRyYWluIil9W2pyXShlKXtyZXR1cm4gdGhpcy5lbWl0KCJkYXRhIixlKSx0aGlzW1Jd fXBpcGUoZSx0KXtpZih0aGlzW3ldKXJldHVybiBlO3RoaXNbeF09ITE7bGV0IGk9dGhpc1t3ZV07 cmV0dXJuIHQ9dHx8e30sZT09PWtyLnN0ZG91dHx8ZT09PWtyLnN0ZGVycj90LmVuZD0hMTp0LmVu ZD10LmVuZCE9PSExLHQucHJveHlFcnJvcnM9ISF0LnByb3h5RXJyb3JzLGk/dC5lbmQmJmUuZW5k KCk6KHRoaXNbSV0ucHVzaCh0LnByb3h5RXJyb3JzP25ldyBpcyh0aGlzLGUsdCk6bmV3IEd0KHRo aXMsZSx0KSksdGhpc1tKXT9fdCgoKT0+dGhpc1txZV0oKSk6dGhpc1txZV0oKSksZX11bnBpcGUo ZSl7bGV0IHQ9dGhpc1tJXS5maW5kKGk9PmkuZGVzdD09PWUpO3QmJih0aGlzW0ldLmxlbmd0aD09 PTE/KHRoaXNbUl0mJnRoaXNbTmVdPT09MCYmKHRoaXNbUl09ITEpLHRoaXNbSV09W10pOnRoaXNb SV0uc3BsaWNlKHRoaXNbSV0uaW5kZXhPZih0KSwxKSx0LnVucGlwZSgpKX1hZGRMaXN0ZW5lcihl LHQpe3JldHVybiB0aGlzLm9uKGUsdCl9b24oZSx0KXtsZXQgaT1zdXBlci5vbihlLHQpO2lmKGU9 PT0iZGF0YSIpdGhpc1t4XT0hMSx0aGlzW05lXSsrLCF0aGlzW0ldLmxlbmd0aCYmIXRoaXNbUl0m JnRoaXNbcWVdKCk7ZWxzZSBpZihlPT09InJlYWRhYmxlIiYmdGhpc1t2XSE9PTApc3VwZXIuZW1p dCgicmVhZGFibGUiKTtlbHNlIGlmKElvKGUpJiZ0aGlzW3dlXSlzdXBlci5lbWl0KGUpLHRoaXMu cmVtb3ZlQWxsTGlzdGVuZXJzKGUpO2Vsc2UgaWYoZT09PSJlcnJvciImJnRoaXNbZHRdKXtsZXQg cj10O3RoaXNbSl0/X3QoKCk9PnIuY2FsbCh0aGlzLHRoaXNbZHRdKSk6ci5jYWxsKHRoaXMsdGhp c1tkdF0pfXJldHVybiBpfXJlbW92ZUxpc3RlbmVyKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsdCl9 b2ZmKGUsdCl7bGV0IGk9c3VwZXIub2ZmKGUsdCk7cmV0dXJuIGU9PT0iZGF0YSImJih0aGlzW05l XT10aGlzLmxpc3RlbmVycygiZGF0YSIpLmxlbmd0aCx0aGlzW05lXT09PTAmJiF0aGlzW3hdJiYh dGhpc1tJXS5sZW5ndGgmJih0aGlzW1JdPSExKSksaX1yZW1vdmVBbGxMaXN0ZW5lcnMoZSl7bGV0 IHQ9c3VwZXIucmVtb3ZlQWxsTGlzdGVuZXJzKGUpO3JldHVybihlPT09ImRhdGEifHxlPT09dm9p ZCAwKSYmKHRoaXNbTmVdPTAsIXRoaXNbeF0mJiF0aGlzW0ldLmxlbmd0aCYmKHRoaXNbUl09ITEp KSx0fWdldCBlbWl0dGVkRW5kKCl7cmV0dXJuIHRoaXNbd2VdfVt1ZV0oKXshdGhpc1tqdF0mJiF0 aGlzW3dlXSYmIXRoaXNbeV0mJnRoaXNbT10ubGVuZ3RoPT09MCYmdGhpc1tjZV0mJih0aGlzW2p0 XT0hMCx0aGlzLmVtaXQoImVuZCIpLHRoaXMuZW1pdCgicHJlZmluaXNoIiksdGhpcy5lbWl0KCJm aW5pc2giKSx0aGlzW1V0XSYmdGhpcy5lbWl0KCJjbG9zZSIpLHRoaXNbanRdPSExKX1lbWl0KGUs Li4udCl7bGV0IGk9dFswXTtpZihlIT09ImVycm9yIiYmZSE9PSJjbG9zZSImJmUhPT15JiZ0aGlz W3ldKXJldHVybiExO2lmKGU9PT0iZGF0YSIpcmV0dXJuIXRoaXNbTl0mJiFpPyExOnRoaXNbSl0/ KF90KCgpPT50aGlzW0ppXShpKSksITApOnRoaXNbSmldKGkpO2lmKGU9PT0iZW5kIilyZXR1cm4g dGhpc1tVcl0oKTtpZihlPT09ImNsb3NlIil7aWYodGhpc1tVdF09ITAsIXRoaXNbd2VdJiYhdGhp c1t5XSlyZXR1cm4hMTtsZXQgbj1zdXBlci5lbWl0KCJjbG9zZSIpO3JldHVybiB0aGlzLnJlbW92 ZUFsbExpc3RlbmVycygiY2xvc2UiKSxufWVsc2UgaWYoZT09PSJlcnJvciIpe3RoaXNbZHRdPWks c3VwZXIuZW1pdChRaSxpKTtsZXQgbj0hdGhpc1twdF18fHRoaXMubGlzdGVuZXJzKCJlcnJvciIp Lmxlbmd0aD9zdXBlci5lbWl0KCJlcnJvciIsaSk6ITE7cmV0dXJuIHRoaXNbdWVdKCksbn1lbHNl IGlmKGU9PT0icmVzdW1lIil7bGV0IG49c3VwZXIuZW1pdCgicmVzdW1lIik7cmV0dXJuIHRoaXNb dWVdKCksbn1lbHNlIGlmKGU9PT0iZmluaXNoInx8ZT09PSJwcmVmaW5pc2giKXtsZXQgbj1zdXBl ci5lbWl0KGUpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhlKSxufWxldCByPXN1cGVy LmVtaXQoZSwuLi50KTtyZXR1cm4gdGhpc1t1ZV0oKSxyfVtKaV0oZSl7Zm9yKGxldCBpIG9mIHRo aXNbSV0paS5kZXN0LndyaXRlKGUpPT09ITEmJnRoaXMucGF1c2UoKTtsZXQgdD10aGlzW3hdPyEx OnN1cGVyLmVtaXQoImRhdGEiLGUpO3JldHVybiB0aGlzW3VlXSgpLHR9W1VyXSgpe3JldHVybiB0 aGlzW3dlXT8hMToodGhpc1t3ZV09ITAsdGhpcy5yZWFkYWJsZT0hMSx0aGlzW0pdPyhfdCgoKT0+ dGhpc1tlc10oKSksITApOnRoaXNbZXNdKCkpfVtlc10oKXtpZih0aGlzW1VlXSl7bGV0IHQ9dGhp c1tVZV0uZW5kKCk7aWYodCl7Zm9yKGxldCBpIG9mIHRoaXNbSV0paS5kZXN0LndyaXRlKHQpO3Ro aXNbeF18fHN1cGVyLmVtaXQoImRhdGEiLHQpfX1mb3IobGV0IHQgb2YgdGhpc1tJXSl0LmVuZCgp O2xldCBlPXN1cGVyLmVtaXQoImVuZCIpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygi ZW5kIiksZX1hc3luYyBjb2xsZWN0KCl7bGV0IGU9T2JqZWN0LmFzc2lnbihbXSx7ZGF0YUxlbmd0 aDowfSk7dGhpc1tOXXx8KGUuZGF0YUxlbmd0aD0wKTtsZXQgdD10aGlzLnByb21pc2UoKTtyZXR1 cm4gdGhpcy5vbigiZGF0YSIsaT0+e2UucHVzaChpKSx0aGlzW05dfHwoZS5kYXRhTGVuZ3RoKz1p Lmxlbmd0aCl9KSxhd2FpdCB0LGV9YXN5bmMgY29uY2F0KCl7aWYodGhpc1tOXSl0aHJvdyBuZXcg RXJyb3IoImNhbm5vdCBjb25jYXQgaW4gb2JqZWN0TW9kZSIpO2xldCBlPWF3YWl0IHRoaXMuY29s bGVjdCgpO3JldHVybiB0aGlzW0tdP2Uuam9pbigiIik6QnVmZmVyLmNvbmNhdChlLGUuZGF0YUxl bmd0aCl9YXN5bmMgcHJvbWlzZSgpe3JldHVybiBuZXcgUHJvbWlzZSgoZSx0KT0+e3RoaXMub24o eSwoKT0+dChuZXcgRXJyb3IoInN0cmVhbSBkZXN0cm95ZWQiKSkpLHRoaXMub24oImVycm9yIixp PT50KGkpKSx0aGlzLm9uKCJlbmQiLCgpPT5lKCkpfSl9W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgp e3RoaXNbeF09ITE7bGV0IGU9ITEsdD1hc3luYygpPT4odGhpcy5wYXVzZSgpLGU9ITAse3ZhbHVl OnZvaWQgMCxkb25lOiEwfSk7cmV0dXJue25leHQ6KCk9PntpZihlKXJldHVybiB0KCk7bGV0IHI9 dGhpcy5yZWFkKCk7aWYociE9PW51bGwpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7ZG9uZTohMSx2 YWx1ZTpyfSk7aWYodGhpc1tjZV0pcmV0dXJuIHQoKTtsZXQgbixvLGE9dT0+e3RoaXMub2ZmKCJk YXRhIixoKSx0aGlzLm9mZigiZW5kIixsKSx0aGlzLm9mZih5LGMpLHQoKSxvKHUpfSxoPXU9Pnt0 aGlzLm9mZigiZXJyb3IiLGEpLHRoaXMub2ZmKCJlbmQiLGwpLHRoaXMub2ZmKHksYyksdGhpcy5w YXVzZSgpLG4oe3ZhbHVlOnUsZG9uZTohIXRoaXNbY2VdfSl9LGw9KCk9Pnt0aGlzLm9mZigiZXJy b3IiLGEpLHRoaXMub2ZmKCJkYXRhIixoKSx0aGlzLm9mZih5LGMpLHQoKSxuKHtkb25lOiEwLHZh bHVlOnZvaWQgMH0pfSxjPSgpPT5hKG5ldyBFcnJvcigic3RyZWFtIGRlc3Ryb3llZCIpKTtyZXR1 cm4gbmV3IFByb21pc2UoKHUsRSk9PntvPUUsbj11LHRoaXMub25jZSh5LGMpLHRoaXMub25jZSgi ZXJyb3IiLGEpLHRoaXMub25jZSgiZW5kIixsKSx0aGlzLm9uY2UoImRhdGEiLGgpfSl9LHRocm93 OnQscmV0dXJuOnQsW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzfSxbU3ltYm9s LmFzeW5jRGlzcG9zZV06YXN5bmMoKT0+e319fVtTeW1ib2wuaXRlcmF0b3JdKCl7dGhpc1t4XT0h MTtsZXQgZT0hMSx0PSgpPT4odGhpcy5wYXVzZSgpLHRoaXMub2ZmKFFpLHQpLHRoaXMub2ZmKHks dCksdGhpcy5vZmYoImVuZCIsdCksZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KSxpPSgpPT57 aWYoZSlyZXR1cm4gdCgpO2xldCByPXRoaXMucmVhZCgpO3JldHVybiByPT09bnVsbD90KCk6e2Rv bmU6ITEsdmFsdWU6cn19O3JldHVybiB0aGlzLm9uY2UoImVuZCIsdCksdGhpcy5vbmNlKFFpLHQp LHRoaXMub25jZSh5LHQpLHtuZXh0OmksdGhyb3c6dCxyZXR1cm46dCxbU3ltYm9sLml0ZXJhdG9y XSgpe3JldHVybiB0aGlzfSxbU3ltYm9sLmRpc3Bvc2VdOigpPT57fX19ZGVzdHJveShlKXtpZih0 aGlzW3ldKXJldHVybiBlP3RoaXMuZW1pdCgiZXJyb3IiLGUpOnRoaXMuZW1pdCh5KSx0aGlzO3Ro aXNbeV09ITAsdGhpc1t4XT0hMCx0aGlzW09dLmxlbmd0aD0wLHRoaXNbdl09MDtsZXQgdD10aGlz O3JldHVybiB0eXBlb2YgdC5jbG9zZT09ImZ1bmN0aW9uIiYmIXRoaXNbVXRdJiZ0LmNsb3NlKCks ZT90aGlzLmVtaXQoImVycm9yIixlKTp0aGlzLmVtaXQoeSksdGhpc31zdGF0aWMgZ2V0IGlzU3Ry ZWFtKCl7cmV0dXJuIEYuaXNTdHJlYW19fTtGLk1pbmlwYXNzPVp0fSk7dmFyIEtlPWQoVz0+eyJ1 c2Ugc3RyaWN0Ijt2YXIgV3I9VyYmVy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHMpe3JldHVy biBzJiZzLl9fZXNNb2R1bGU/czp7ZGVmYXVsdDpzfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFcs Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO1cuV3JpdGVTdHJlYW1TeW5jPVcuV3JpdGVTdHJlYW09 Vy5SZWFkU3RyZWFtU3luYz1XLlJlYWRTdHJlYW09dm9pZCAwO3ZhciBrbz1XcihyZXF1aXJlKCJl dmVudHMiKSksej1XcihyZXF1aXJlKCJmcyIpKSx4bz1XZSgpLGpvPXouZGVmYXVsdC53cml0ZXYs RWU9U3ltYm9sKCJfYXV0b0Nsb3NlIiksJD1TeW1ib2woIl9jbG9zZSIpLHd0PVN5bWJvbCgiX2Vu ZGVkIikscD1TeW1ib2woIl9mZCIpLHJzPVN5bWJvbCgiX2ZpbmlzaGVkIiksZGU9U3ltYm9sKCJf ZmxhZ3MiKSxucz1TeW1ib2woIl9mbHVzaCIpLGxzPVN5bWJvbCgiX2hhbmRsZUNodW5rIiksY3M9 U3ltYm9sKCJfbWFrZUJ1ZiIpLEV0PVN5bWJvbCgiX21vZGUiKSxZdD1TeW1ib2woIl9uZWVkRHJh aW4iKSxaZT1TeW1ib2woIl9vbmVycm9yIiksWWU9U3ltYm9sKCJfb25vcGVuIiksb3M9U3ltYm9s KCJfb25yZWFkIiksSGU9U3ltYm9sKCJfb253cml0ZSIpLGJlPVN5bWJvbCgiX29wZW4iKSxWPVN5 bWJvbCgiX3BhdGgiKSx5ZT1TeW1ib2woIl9wb3MiKSxlZT1TeW1ib2woIl9xdWV1ZSIpLEdlPVN5 bWJvbCgiX3JlYWQiKSxhcz1TeW1ib2woIl9yZWFkU2l6ZSIpLGZlPVN5bWJvbCgiX3JlYWRpbmci KSx5dD1TeW1ib2woIl9yZW1haW4iKSxocz1TeW1ib2woIl9zaXplIiksS3Q9U3ltYm9sKCJfd3Jp dGUiKSxNZT1TeW1ib2woIl93cml0aW5nIiksVnQ9U3ltYm9sKCJfZGVmYXVsdEZsYWciKSxMZT1T eW1ib2woIl9lcnJvcmVkIiksJHQ9Y2xhc3MgZXh0ZW5kcyB4by5NaW5pcGFzc3tbTGVdPSExO1tw XTtbVl07W2FzXTtbZmVdPSExO1toc107W3l0XTtbRWVdO2NvbnN0cnVjdG9yKGUsdCl7aWYodD10 fHx7fSxzdXBlcih0KSx0aGlzLnJlYWRhYmxlPSEwLHRoaXMud3JpdGFibGU9ITEsdHlwZW9mIGUh PSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoInBhdGggbXVzdCBiZSBhIHN0cmluZyIpO3Ro aXNbTGVdPSExLHRoaXNbcF09dHlwZW9mIHQuZmQ9PSJudW1iZXIiP3QuZmQ6dm9pZCAwLHRoaXNb Vl09ZSx0aGlzW2FzXT10LnJlYWRTaXplfHwxNioxMDI0KjEwMjQsdGhpc1tmZV09ITEsdGhpc1to c109dHlwZW9mIHQuc2l6ZT09Im51bWJlciI/dC5zaXplOjEvMCx0aGlzW3l0XT10aGlzW2hzXSx0 aGlzW0VlXT10eXBlb2YgdC5hdXRvQ2xvc2U9PSJib29sZWFuIj90LmF1dG9DbG9zZTohMCx0eXBl b2YgdGhpc1twXT09Im51bWJlciI/dGhpc1tHZV0oKTp0aGlzW2JlXSgpfWdldCBmZCgpe3JldHVy biB0aGlzW3BdfWdldCBwYXRoKCl7cmV0dXJuIHRoaXNbVl19d3JpdGUoKXt0aHJvdyBuZXcgVHlw ZUVycm9yKCJ0aGlzIGlzIGEgcmVhZGFibGUgc3RyZWFtIil9ZW5kKCl7dGhyb3cgbmV3IFR5cGVF cnJvcigidGhpcyBpcyBhIHJlYWRhYmxlIHN0cmVhbSIpfVtiZV0oKXt6LmRlZmF1bHQub3Blbih0 aGlzW1ZdLCJyIiwoZSx0KT0+dGhpc1tZZV0oZSx0KSl9W1llXShlLHQpe2U/dGhpc1taZV0oZSk6 KHRoaXNbcF09dCx0aGlzLmVtaXQoIm9wZW4iLHQpLHRoaXNbR2VdKCkpfVtjc10oKXtyZXR1cm4g QnVmZmVyLmFsbG9jVW5zYWZlKE1hdGgubWluKHRoaXNbYXNdLHRoaXNbeXRdKSl9W0dlXSgpe2lm KCF0aGlzW2ZlXSl7dGhpc1tmZV09ITA7bGV0IGU9dGhpc1tjc10oKTtpZihlLmxlbmd0aD09PTAp cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soKCk9PnRoaXNbb3NdKG51bGwsMCxlKSk7ei5kZWZhdWx0 LnJlYWQodGhpc1twXSxlLDAsZS5sZW5ndGgsbnVsbCwodCxpLHIpPT50aGlzW29zXSh0LGkscikp fX1bb3NdKGUsdCxpKXt0aGlzW2ZlXT0hMSxlP3RoaXNbWmVdKGUpOnRoaXNbbHNdKHQsaSkmJnRo aXNbR2VdKCl9WyRdKCl7aWYodGhpc1tFZV0mJnR5cGVvZiB0aGlzW3BdPT0ibnVtYmVyIil7bGV0 IGU9dGhpc1twXTt0aGlzW3BdPXZvaWQgMCx6LmRlZmF1bHQuY2xvc2UoZSx0PT50P3RoaXMuZW1p dCgiZXJyb3IiLHQpOnRoaXMuZW1pdCgiY2xvc2UiKSl9fVtaZV0oZSl7dGhpc1tmZV09ITAsdGhp c1skXSgpLHRoaXMuZW1pdCgiZXJyb3IiLGUpfVtsc10oZSx0KXtsZXQgaT0hMTtyZXR1cm4gdGhp c1t5dF0tPWUsZT4wJiYoaT1zdXBlci53cml0ZShlPHQubGVuZ3RoP3Quc3ViYXJyYXkoMCxlKTp0 KSksKGU9PT0wfHx0aGlzW3l0XTw9MCkmJihpPSExLHRoaXNbJF0oKSxzdXBlci5lbmQoKSksaX1l bWl0KGUsLi4udCl7c3dpdGNoKGUpe2Nhc2UicHJlZmluaXNoIjpjYXNlImZpbmlzaCI6cmV0dXJu ITE7Y2FzZSJkcmFpbiI6cmV0dXJuIHR5cGVvZiB0aGlzW3BdPT0ibnVtYmVyIiYmdGhpc1tHZV0o KSwhMTtjYXNlImVycm9yIjpyZXR1cm4gdGhpc1tMZV0/ITE6KHRoaXNbTGVdPSEwLHN1cGVyLmVt aXQoZSwuLi50KSk7ZGVmYXVsdDpyZXR1cm4gc3VwZXIuZW1pdChlLC4uLnQpfX19O1cuUmVhZFN0 cmVhbT0kdDt2YXIgdXM9Y2xhc3MgZXh0ZW5kcyAkdHtbYmVdKCl7bGV0IGU9ITA7dHJ5e3RoaXNb WWVdKG51bGwsei5kZWZhdWx0Lm9wZW5TeW5jKHRoaXNbVl0sInIiKSksZT0hMX1maW5hbGx5e2Um JnRoaXNbJF0oKX19W0dlXSgpe2xldCBlPSEwO3RyeXtpZighdGhpc1tmZV0pe3RoaXNbZmVdPSEw O2Rve2xldCB0PXRoaXNbY3NdKCksaT10Lmxlbmd0aD09PTA/MDp6LmRlZmF1bHQucmVhZFN5bmMo dGhpc1twXSx0LDAsdC5sZW5ndGgsbnVsbCk7aWYoIXRoaXNbbHNdKGksdCkpYnJlYWt9d2hpbGUo ITApO3RoaXNbZmVdPSExfWU9ITF9ZmluYWxseXtlJiZ0aGlzWyRdKCl9fVskXSgpe2lmKHRoaXNb RWVdJiZ0eXBlb2YgdGhpc1twXT09Im51bWJlciIpe2xldCBlPXRoaXNbcF07dGhpc1twXT12b2lk IDAsei5kZWZhdWx0LmNsb3NlU3luYyhlKSx0aGlzLmVtaXQoImNsb3NlIil9fX07Vy5SZWFkU3Ry ZWFtU3luYz11czt2YXIgWHQ9Y2xhc3MgZXh0ZW5kcyBrby5kZWZhdWx0e3JlYWRhYmxlPSExO3dy aXRhYmxlPSEwO1tMZV09ITE7W01lXT0hMTtbd3RdPSExO1tlZV09W107W1l0XT0hMTtbVl07W0V0 XTtbRWVdO1twXTtbVnRdO1tkZV07W3JzXT0hMTtbeWVdO2NvbnN0cnVjdG9yKGUsdCl7dD10fHx7 fSxzdXBlcih0KSx0aGlzW1ZdPWUsdGhpc1twXT10eXBlb2YgdC5mZD09Im51bWJlciI/dC5mZDp2 b2lkIDAsdGhpc1tFdF09dC5tb2RlPT09dm9pZCAwPzQzODp0Lm1vZGUsdGhpc1t5ZV09dHlwZW9m IHQuc3RhcnQ9PSJudW1iZXIiP3Quc3RhcnQ6dm9pZCAwLHRoaXNbRWVdPXR5cGVvZiB0LmF1dG9D bG9zZT09ImJvb2xlYW4iP3QuYXV0b0Nsb3NlOiEwO2xldCBpPXRoaXNbeWVdIT09dm9pZCAwPyJy KyI6InciO3RoaXNbVnRdPXQuZmxhZ3M9PT12b2lkIDAsdGhpc1tkZV09dC5mbGFncz09PXZvaWQg MD9pOnQuZmxhZ3MsdGhpc1twXT09PXZvaWQgMCYmdGhpc1tiZV0oKX1lbWl0KGUsLi4udCl7aWYo ZT09PSJlcnJvciIpe2lmKHRoaXNbTGVdKXJldHVybiExO3RoaXNbTGVdPSEwfXJldHVybiBzdXBl ci5lbWl0KGUsLi4udCl9Z2V0IGZkKCl7cmV0dXJuIHRoaXNbcF19Z2V0IHBhdGgoKXtyZXR1cm4g dGhpc1tWXX1bWmVdKGUpe3RoaXNbJF0oKSx0aGlzW01lXT0hMCx0aGlzLmVtaXQoImVycm9yIixl KX1bYmVdKCl7ei5kZWZhdWx0Lm9wZW4odGhpc1tWXSx0aGlzW2RlXSx0aGlzW0V0XSwoZSx0KT0+ dGhpc1tZZV0oZSx0KSl9W1llXShlLHQpe3RoaXNbVnRdJiZ0aGlzW2RlXT09PSJyKyImJmUmJmUu Y29kZT09PSJFTk9FTlQiPyh0aGlzW2RlXT0idyIsdGhpc1tiZV0oKSk6ZT90aGlzW1plXShlKToo dGhpc1twXT10LHRoaXMuZW1pdCgib3BlbiIsdCksdGhpc1tNZV18fHRoaXNbbnNdKCkpfWVuZChl LHQpe3JldHVybiBlJiZ0aGlzLndyaXRlKGUsdCksdGhpc1t3dF09ITAsIXRoaXNbTWVdJiYhdGhp c1tlZV0ubGVuZ3RoJiZ0eXBlb2YgdGhpc1twXT09Im51bWJlciImJnRoaXNbSGVdKG51bGwsMCks dGhpc313cml0ZShlLHQpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyImJihlPUJ1ZmZlci5mcm9t KGUsdCkpLHRoaXNbd3RdPyh0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlKCkgYWZ0 ZXIgZW5kKCkiKSksITEpOnRoaXNbcF09PT12b2lkIDB8fHRoaXNbTWVdfHx0aGlzW2VlXS5sZW5n dGg/KHRoaXNbZWVdLnB1c2goZSksdGhpc1tZdF09ITAsITEpOih0aGlzW01lXT0hMCx0aGlzW0t0 XShlKSwhMCl9W0t0XShlKXt6LmRlZmF1bHQud3JpdGUodGhpc1twXSxlLDAsZS5sZW5ndGgsdGhp c1t5ZV0sKHQsaSk9PnRoaXNbSGVdKHQsaSkpfVtIZV0oZSx0KXtlP3RoaXNbWmVdKGUpOih0aGlz W3llXSE9PXZvaWQgMCYmdHlwZW9mIHQ9PSJudW1iZXIiJiYodGhpc1t5ZV0rPXQpLHRoaXNbZWVd Lmxlbmd0aD90aGlzW25zXSgpOih0aGlzW01lXT0hMSx0aGlzW3d0XSYmIXRoaXNbcnNdPyh0aGlz W3JzXT0hMCx0aGlzWyRdKCksdGhpcy5lbWl0KCJmaW5pc2giKSk6dGhpc1tZdF0mJih0aGlzW1l0 XT0hMSx0aGlzLmVtaXQoImRyYWluIikpKSl9W25zXSgpe2lmKHRoaXNbZWVdLmxlbmd0aD09PTAp dGhpc1t3dF0mJnRoaXNbSGVdKG51bGwsMCk7ZWxzZSBpZih0aGlzW2VlXS5sZW5ndGg9PT0xKXRo aXNbS3RdKHRoaXNbZWVdLnBvcCgpKTtlbHNle2xldCBlPXRoaXNbZWVdO3RoaXNbZWVdPVtdLGpv KHRoaXNbcF0sZSx0aGlzW3llXSwodCxpKT0+dGhpc1tIZV0odCxpKSl9fVskXSgpe2lmKHRoaXNb RWVdJiZ0eXBlb2YgdGhpc1twXT09Im51bWJlciIpe2xldCBlPXRoaXNbcF07dGhpc1twXT12b2lk IDAsei5kZWZhdWx0LmNsb3NlKGUsdD0+dD90aGlzLmVtaXQoImVycm9yIix0KTp0aGlzLmVtaXQo ImNsb3NlIikpfX19O1cuV3JpdGVTdHJlYW09WHQ7dmFyIGZzPWNsYXNzIGV4dGVuZHMgWHR7W2Jl XSgpe2xldCBlO2lmKHRoaXNbVnRdJiZ0aGlzW2RlXT09PSJyKyIpdHJ5e2U9ei5kZWZhdWx0Lm9w ZW5TeW5jKHRoaXNbVl0sdGhpc1tkZV0sdGhpc1tFdF0pfWNhdGNoKHQpe2lmKHQ/LmNvZGU9PT0i RU5PRU5UIilyZXR1cm4gdGhpc1tkZV09InciLHRoaXNbYmVdKCk7dGhyb3cgdH1lbHNlIGU9ei5k ZWZhdWx0Lm9wZW5TeW5jKHRoaXNbVl0sdGhpc1tkZV0sdGhpc1tFdF0pO3RoaXNbWWVdKG51bGws ZSl9WyRdKCl7aWYodGhpc1tFZV0mJnR5cGVvZiB0aGlzW3BdPT0ibnVtYmVyIil7bGV0IGU9dGhp c1twXTt0aGlzW3BdPXZvaWQgMCx6LmRlZmF1bHQuY2xvc2VTeW5jKGUpLHRoaXMuZW1pdCgiY2xv c2UiKX19W0t0XShlKXtsZXQgdD0hMDt0cnl7dGhpc1tIZV0obnVsbCx6LmRlZmF1bHQud3JpdGVT eW5jKHRoaXNbcF0sZSwwLGUubGVuZ3RoLHRoaXNbeWVdKSksdD0hMX1maW5hbGx5e2lmKHQpdHJ5 e3RoaXNbJF0oKX1jYXRjaHt9fX19O1cuV3JpdGVTdHJlYW1TeW5jPWZzfSk7dmFyIFF0PWQoYj0+ eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVl OiEwfSk7Yi5kZWFsaWFzPWIuaXNOb0ZpbGU9Yi5pc0ZpbGU9Yi5pc0FzeW5jPWIuaXNTeW5jPWIu aXNBc3luY05vRmlsZT1iLmlzU3luY05vRmlsZT1iLmlzQXN5bmNGaWxlPWIuaXNTeW5jRmlsZT12 b2lkIDA7dmFyIFVvPW5ldyBNYXAoW1siQyIsImN3ZCJdLFsiZiIsImZpbGUiXSxbInoiLCJnemlw Il0sWyJQIiwicHJlc2VydmVQYXRocyJdLFsiVSIsInVubGluayJdLFsic3RyaXAtY29tcG9uZW50 cyIsInN0cmlwIl0sWyJzdHJpcENvbXBvbmVudHMiLCJzdHJpcCJdLFsia2VlcC1uZXdlciIsIm5l d2VyIl0sWyJrZWVwTmV3ZXIiLCJuZXdlciJdLFsia2VlcC1uZXdlci1maWxlcyIsIm5ld2VyIl0s WyJrZWVwTmV3ZXJGaWxlcyIsIm5ld2VyIl0sWyJrIiwia2VlcCJdLFsia2VlcC1leGlzdGluZyIs ImtlZXAiXSxbImtlZXBFeGlzdGluZyIsImtlZXAiXSxbIm0iLCJub010aW1lIl0sWyJuby1tdGlt ZSIsIm5vTXRpbWUiXSxbInAiLCJwcmVzZXJ2ZU93bmVyIl0sWyJMIiwiZm9sbG93Il0sWyJoIiwi Zm9sbG93Il0sWyJvbmVudHJ5Iiwib25SZWFkRW50cnkiXV0pLHFvPXM9PiEhcy5zeW5jJiYhIXMu ZmlsZTtiLmlzU3luY0ZpbGU9cW87dmFyIFdvPXM9PiFzLnN5bmMmJiEhcy5maWxlO2IuaXNBc3lu Y0ZpbGU9V287dmFyIEhvPXM9PiEhcy5zeW5jJiYhcy5maWxlO2IuaXNTeW5jTm9GaWxlPUhvO3Zh ciBHbz1zPT4hcy5zeW5jJiYhcy5maWxlO2IuaXNBc3luY05vRmlsZT1Hbzt2YXIgWm89cz0+ISFz LnN5bmM7Yi5pc1N5bmM9Wm87dmFyIFlvPXM9PiFzLnN5bmM7Yi5pc0FzeW5jPVlvO3ZhciBLbz1z PT4hIXMuZmlsZTtiLmlzRmlsZT1Lbzt2YXIgVm89cz0+IXMuZmlsZTtiLmlzTm9GaWxlPVZvO3Zh ciAkbz1zPT57bGV0IGU9VW8uZ2V0KHMpO3JldHVybiBlfHxzfSxYbz0ocz17fSk9PntpZighcyly ZXR1cm57fTtsZXQgZT17fTtmb3IobGV0W3QsaV1vZiBPYmplY3QuZW50cmllcyhzKSl7bGV0IHI9 JG8odCk7ZVtyXT1pfXJldHVybiBlLmNobW9kPT09dm9pZCAwJiZlLm5vQ2htb2Q9PT0hMSYmKGUu Y2htb2Q9ITApLGRlbGV0ZSBlLm5vQ2htb2QsZX07Yi5kZWFsaWFzPVhvfSk7dmFyIFZlPWQoSnQ9 PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEp0LCJfX2VzTW9kdWxlIix7dmFs dWU6ITB9KTtKdC5tYWtlQ29tbWFuZD12b2lkIDA7dmFyIGJ0PVF0KCksUW89KHMsZSx0LGkscik9 Pk9iamVjdC5hc3NpZ24oKG49W10sbyxhKT0+e0FycmF5LmlzQXJyYXkobikmJihvPW4sbj17fSks dHlwZW9mIG89PSJmdW5jdGlvbiImJihhPW8sbz12b2lkIDApLG89bz9BcnJheS5mcm9tKG8pOltd O2xldCBoPSgwLGJ0LmRlYWxpYXMpKG4pO2lmKHI/LihoLG8pLCgwLGJ0LmlzU3luY0ZpbGUpKGgp KXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBu b3Qgc3VwcG9ydGVkIGZvciBzeW5jIHRhciBmdW5jdGlvbnMiKTtyZXR1cm4gcyhoLG8pfWVsc2Ug aWYoKDAsYnQuaXNBc3luY0ZpbGUpKGgpKXtsZXQgbD1lKGgsbyk7cmV0dXJuIGE/bC50aGVuKCgp PT5hKCksYSk6bH1lbHNlIGlmKCgwLGJ0LmlzU3luY05vRmlsZSkoaCkpe2lmKHR5cGVvZiBhPT0i ZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIG5vdCBzdXBwb3J0ZWQgZm9y IHN5bmMgdGFyIGZ1bmN0aW9ucyIpO3JldHVybiB0KGgsbyl9ZWxzZSBpZigoMCxidC5pc0FzeW5j Tm9GaWxlKShoKSl7aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigi Y2FsbGJhY2sgb25seSBzdXBwb3J0ZWQgd2l0aCBmaWxlIG9wdGlvbiIpO3JldHVybiBpKGgsbyl9 dGhyb3cgbmV3IEVycm9yKCJpbXBvc3NpYmxlIG9wdGlvbnM/PyIpfSx7c3luY0ZpbGU6cyxhc3lu Y0ZpbGU6ZSxzeW5jTm9GaWxlOnQsYXN5bmNOb0ZpbGU6aSx2YWxpZGF0ZTpyfSk7SnQubWFrZUNv bW1hbmQ9UW99KTt2YXIgZHM9ZCgkZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSm89JGUmJiRlLl9faW1w b3J0RGVmYXVsdHx8ZnVuY3Rpb24ocyl7cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntkZWZhdWx0 OnN9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pOyRl LmNvbnN0YW50cz12b2lkIDA7dmFyIGVhPUpvKHJlcXVpcmUoInpsaWIiKSksdGE9ZWEuZGVmYXVs dC5jb25zdGFudHN8fHtaTElCX1ZFUk5VTTo0NzM2fTskZS5jb25zdGFudHM9T2JqZWN0LmZyZWV6 ZShPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCkse1pfTk9fRkxVU0g6MCxaX1BBUlRJ QUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxP Q0s6NSxaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RS RUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX01FTV9FUlJPUjotNCxaX0JVRl9FUlJPUjot NSxaX1ZFUlNJT05fRVJST1I6LTYsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpf QkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEs Wl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxE RUZMQVRFOjEsSU5GTEFURToyLEdaSVA6MyxHVU5aSVA6NCxERUZMQVRFUkFXOjUsSU5GTEFURVJB Vzo2LFVOWklQOjcsQlJPVExJX0RFQ09ERTo4LEJST1RMSV9FTkNPREU6OSxaX01JTl9XSU5ET1dC SVRTOjgsWl9NQVhfV0lORE9XQklUUzoxNSxaX0RFRkFVTFRfV0lORE9XQklUUzoxNSxaX01JTl9D SFVOSzo2NCxaX01BWF9DSFVOSzoxLzAsWl9ERUZBVUxUX0NIVU5LOjE2Mzg0LFpfTUlOX01FTUxF VkVMOjEsWl9NQVhfTUVNTEVWRUw6OSxaX0RFRkFVTFRfTUVNTEVWRUw6OCxaX01JTl9MRVZFTDot MSxaX01BWF9MRVZFTDo5LFpfREVGQVVMVF9MRVZFTDotMSxCUk9UTElfT1BFUkFUSU9OX1BST0NF U1M6MCxCUk9UTElfT1BFUkFUSU9OX0ZMVVNIOjEsQlJPVExJX09QRVJBVElPTl9GSU5JU0g6MixC Uk9UTElfT1BFUkFUSU9OX0VNSVRfTUVUQURBVEE6MyxCUk9UTElfTU9ERV9HRU5FUklDOjAsQlJP VExJX01PREVfVEVYVDoxLEJST1RMSV9NT0RFX0ZPTlQ6MixCUk9UTElfREVGQVVMVF9NT0RFOjAs QlJPVExJX01JTl9RVUFMSVRZOjAsQlJPVExJX01BWF9RVUFMSVRZOjExLEJST1RMSV9ERUZBVUxU X1FVQUxJVFk6MTEsQlJPVExJX01JTl9XSU5ET1dfQklUUzoxMCxCUk9UTElfTUFYX1dJTkRPV19C SVRTOjI0LEJST1RMSV9MQVJHRV9NQVhfV0lORE9XX0JJVFM6MzAsQlJPVExJX0RFRkFVTFRfV0lO RE9XOjIyLEJST1RMSV9NSU5fSU5QVVRfQkxPQ0tfQklUUzoxNixCUk9UTElfTUFYX0lOUFVUX0JM T0NLX0JJVFM6MjQsQlJPVExJX1BBUkFNX01PREU6MCxCUk9UTElfUEFSQU1fUVVBTElUWToxLEJS T1RMSV9QQVJBTV9MR1dJTjoyLEJST1RMSV9QQVJBTV9MR0JMT0NLOjMsQlJPVExJX1BBUkFNX0RJ U0FCTEVfTElURVJBTF9DT05URVhUX01PREVMSU5HOjQsQlJPVExJX1BBUkFNX1NJWkVfSElOVDo1 LEJST1RMSV9QQVJBTV9MQVJHRV9XSU5ET1c6NixCUk9UTElfUEFSQU1fTlBPU1RGSVg6NyxCUk9U TElfUEFSQU1fTkRJUkVDVDo4LEJST1RMSV9ERUNPREVSX1JFU1VMVF9FUlJPUjowLEJST1RMSV9E RUNPREVSX1JFU1VMVF9TVUNDRVNTOjEsQlJPVExJX0RFQ09ERVJfUkVTVUxUX05FRURTX01PUkVf SU5QVVQ6MixCUk9UTElfREVDT0RFUl9SRVNVTFRfTkVFRFNfTU9SRV9PVVRQVVQ6MyxCUk9UTElf REVDT0RFUl9QQVJBTV9ESVNBQkxFX1JJTkdfQlVGRkVSX1JFQUxMT0NBVElPTjowLEJST1RMSV9E RUNPREVSX1BBUkFNX0xBUkdFX1dJTkRPVzoxLEJST1RMSV9ERUNPREVSX05PX0VSUk9SOjAsQlJP VExJX0RFQ09ERVJfU1VDQ0VTUzoxLEJST1RMSV9ERUNPREVSX05FRURTX01PUkVfSU5QVVQ6MixC Uk9UTElfREVDT0RFUl9ORUVEU19NT1JFX09VVFBVVDozLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZP Uk1BVF9FWFVCRVJBTlRfTklCQkxFOi0xLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9SRVNF UlZFRDotMixCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfRVhVQkVSQU5UX01FVEFfTklCQkxF Oi0zLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9TSU1QTEVfSFVGRk1BTl9BTFBIQUJFVDot NCxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfU0lNUExFX0hVRkZNQU5fU0FNRTotNSxCUk9U TElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQ0xfU1BBQ0U6LTYsQlJPVExJX0RFQ09ERVJfRVJST1Jf Rk9STUFUX0hVRkZNQU5fU1BBQ0U6LTcsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0NPTlRF WFRfTUFQX1JFUEVBVDotOCxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQkxPQ0tfTEVOR1RI XzE6LTksQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0JMT0NLX0xFTkdUSF8yOi0xMCxCUk9U TElfREVDT0RFUl9FUlJPUl9GT1JNQVRfVFJBTlNGT1JNOi0xMSxCUk9UTElfREVDT0RFUl9FUlJP Ul9GT1JNQVRfRElDVElPTkFSWTotMTIsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1dJTkRP V19CSVRTOi0xMyxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfUEFERElOR18xOi0xNCxCUk9U TElfREVDT0RFUl9FUlJPUl9GT1JNQVRfUEFERElOR18yOi0xNSxCUk9UTElfREVDT0RFUl9FUlJP Ul9GT1JNQVRfRElTVEFOQ0U6LTE2LEJST1RMSV9ERUNPREVSX0VSUk9SX0RJQ1RJT05BUllfTk9U X1NFVDotMTksQlJPVExJX0RFQ09ERVJfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFM6LTIwLEJST1RM SV9ERUNPREVSX0VSUk9SX0FMTE9DX0NPTlRFWFRfTU9ERVM6LTIxLEJST1RMSV9ERUNPREVSX0VS Uk9SX0FMTE9DX1RSRUVfR1JPVVBTOi0yMixCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19DT05U RVhUX01BUDotMjUsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfUklOR19CVUZGRVJfMTotMjYs QlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfUklOR19CVUZGRVJfMjotMjcsQlJPVExJX0RFQ09E RVJfRVJST1JfQUxMT0NfQkxPQ0tfVFlQRV9UUkVFUzotMzAsQlJPVExJX0RFQ09ERVJfRVJST1Jf VU5SRUFDSEFCTEU6LTMxfSx0YSkpfSk7dmFyIFBzPWQoZj0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaWE9 ZiYmZi5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlvbihzLGUsdCxpKXtp PT09dm9pZCAwJiYoaT10KTt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUs dCk7KCFyfHwoImdldCJpbiByPyFlLl9fZXNNb2R1bGU6ci53cml0YWJsZXx8ci5jb25maWd1cmFi bGUpKSYmKHI9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbdF19fSksT2Jq ZWN0LmRlZmluZVByb3BlcnR5KHMsaSxyKX0pOihmdW5jdGlvbihzLGUsdCxpKXtpPT09dm9pZCAw JiYoaT10KSxzW2ldPWVbdF19KSksc2E9ZiYmZi5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3Qu Y3JlYXRlPyhmdW5jdGlvbihzLGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJkZWZhdWx0Iix7 ZW51bWVyYWJsZTohMCx2YWx1ZTplfSl9KTpmdW5jdGlvbihzLGUpe3MuZGVmYXVsdD1lfSkscmE9 ZiYmZi5fX2ltcG9ydFN0YXJ8fChmdW5jdGlvbigpe3ZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiBz PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXt2YXIgaT1bXTtmb3IodmFy IHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGlbaS5s ZW5ndGhdPXIpO3JldHVybiBpfSxzKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2Vz TW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKGUhPW51bGwpZm9yKHZhciBpPXMoZSkscj0wO3I8 aS5sZW5ndGg7cisrKWlbcl0hPT0iZGVmYXVsdCImJmlhKHQsZSxpW3JdKTtyZXR1cm4gc2EodCxl KSx0fX0pKCksbmE9ZiYmZi5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHMpe3JldHVybiBzJiZz Ll9fZXNNb2R1bGU/czp7ZGVmYXVsdDpzfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIl9fZXNN b2R1bGUiLHt2YWx1ZTohMH0pO2YuWnN0ZERlY29tcHJlc3M9Zi5ac3RkQ29tcHJlc3M9Zi5Ccm90 bGlEZWNvbXByZXNzPWYuQnJvdGxpQ29tcHJlc3M9Zi5VbnppcD1mLkluZmxhdGVSYXc9Zi5EZWZs YXRlUmF3PWYuR3VuemlwPWYuR3ppcD1mLkluZmxhdGU9Zi5EZWZsYXRlPWYuWmxpYj1mLlpsaWJF cnJvcj1mLmNvbnN0YW50cz12b2lkIDA7dmFyIF9zPW5hKHJlcXVpcmUoImFzc2VydCIpKSxBZT1y ZXF1aXJlKCJidWZmZXIiKSxvYT1XZSgpLEhyPXJhKHJlcXVpcmUoInpsaWIiKSksdGU9ZHMoKSxh YT1kcygpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJjb25zdGFudHMiLHtlbnVtZXJhYmxlOiEw LGdldDpmdW5jdGlvbigpe3JldHVybiBhYS5jb25zdGFudHN9fSk7dmFyIGhhPUFlLkJ1ZmZlci5j b25jYXQsR3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihBZS5CdWZmZXIsImNvbmNh dCIpLGxhPXM9PnMsbXM9R3I/LndyaXRhYmxlPT09ITB8fEdyPy5zZXQhPT12b2lkIDA/cz0+e0Fl LkJ1ZmZlci5jb25jYXQ9cz9sYTpoYX06cz0+e30sSWU9U3ltYm9sKCJfc3VwZXJXcml0ZSIpLEZl PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29kZTtlcnJubztjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJ6 bGliOiAiK2UubWVzc2FnZSx7Y2F1c2U6ZX0pLHRoaXMuY29kZT1lLmNvZGUsdGhpcy5lcnJubz1l LmVycm5vLHRoaXMuY29kZXx8KHRoaXMuY29kZT0iWkxJQl9FUlJPUiIpLHRoaXMubWVzc2FnZT0i emxpYjogIitlLm1lc3NhZ2UsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0Pz90aGlzLmNv bnN0cnVjdG9yKX1nZXQgbmFtZSgpe3JldHVybiJabGliRXJyb3IifX07Zi5abGliRXJyb3I9RmU7 dmFyIHBzPVN5bWJvbCgiZmx1c2hGbGFnIiksU3Q9Y2xhc3MgZXh0ZW5kcyBvYS5NaW5pcGFzc3sj ZT0hMTsjaT0hMTsjczsjbjsjcjsjdDsjbztnZXQgc2F3RXJyb3IoKXtyZXR1cm4gdGhpcy4jZX1n ZXQgaGFuZGxlKCl7cmV0dXJuIHRoaXMuI3R9Z2V0IGZsdXNoRmxhZygpe3JldHVybiB0aGlzLiNz fWNvbnN0cnVjdG9yKGUsdCl7aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlw ZUVycm9yKCJpbnZhbGlkIG9wdGlvbnMgZm9yIFpsaWJCYXNlIGNvbnN0cnVjdG9yIik7aWYoc3Vw ZXIoZSksdGhpcy4jcz1lLmZsdXNoPz8wLHRoaXMuI249ZS5maW5pc2hGbHVzaD8/MCx0aGlzLiNy PWUuZnVsbEZsdXNoRmxhZz8/MCx0eXBlb2YgSHJbdF0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5 cGVFcnJvcigiQ29tcHJlc3Npb24gbWV0aG9kIG5vdCBzdXBwb3J0ZWQ6ICIrdCk7dHJ5e3RoaXMu I3Q9bmV3IEhyW3RdKGUpfWNhdGNoKGkpe3Rocm93IG5ldyBGZShpLHRoaXMuY29uc3RydWN0b3Ip fXRoaXMuI289aT0+e3RoaXMuI2V8fCh0aGlzLiNlPSEwLHRoaXMuY2xvc2UoKSx0aGlzLmVtaXQo ImVycm9yIixpKSl9LHRoaXMuI3Q/Lm9uKCJlcnJvciIsaT0+dGhpcy4jbyhuZXcgRmUoaSkpKSx0 aGlzLm9uY2UoImVuZCIsKCk9PnRoaXMuY2xvc2UpfWNsb3NlKCl7dGhpcy4jdCYmKHRoaXMuI3Qu Y2xvc2UoKSx0aGlzLiN0PXZvaWQgMCx0aGlzLmVtaXQoImNsb3NlIikpfXJlc2V0KCl7aWYoIXRo aXMuI2UpcmV0dXJuKDAsX3MuZGVmYXVsdCkodGhpcy4jdCwiemxpYiBiaW5kaW5nIGNsb3NlZCIp LHRoaXMuI3QucmVzZXQ/LigpfWZsdXNoKGUpe3RoaXMuZW5kZWR8fCh0eXBlb2YgZSE9Im51bWJl ciImJihlPXRoaXMuI3IpLHRoaXMud3JpdGUoT2JqZWN0LmFzc2lnbihBZS5CdWZmZXIuYWxsb2Mo MCkse1twc106ZX0pKSl9ZW5kKGUsdCxpKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiImJihp PWUsdD12b2lkIDAsZT12b2lkIDApLHR5cGVvZiB0PT0iZnVuY3Rpb24iJiYoaT10LHQ9dm9pZCAw KSxlJiYodD90aGlzLndyaXRlKGUsdCk6dGhpcy53cml0ZShlKSksdGhpcy5mbHVzaCh0aGlzLiNu KSx0aGlzLiNpPSEwLHN1cGVyLmVuZChpKX1nZXQgZW5kZWQoKXtyZXR1cm4gdGhpcy4jaX1bSWVd KGUpe3JldHVybiBzdXBlci53cml0ZShlKX13cml0ZShlLHQsaSl7aWYodHlwZW9mIHQ9PSJmdW5j dGlvbiImJihpPXQsdD0idXRmOCIpLHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9QWUuQnVmZmVyLmZy b20oZSx0KSksdGhpcy4jZSlyZXR1cm47KDAsX3MuZGVmYXVsdCkodGhpcy4jdCwiemxpYiBiaW5k aW5nIGNsb3NlZCIpO2xldCByPXRoaXMuI3QuX2hhbmRsZSxuPXIuY2xvc2U7ci5jbG9zZT0oKT0+ e307bGV0IG89dGhpcy4jdC5jbG9zZTt0aGlzLiN0LmNsb3NlPSgpPT57fSxtcyghMCk7bGV0IGE7 dHJ5e2xldCBsPXR5cGVvZiBlW3BzXT09Im51bWJlciI/ZVtwc106dGhpcy4jczthPXRoaXMuI3Qu X3Byb2Nlc3NDaHVuayhlLGwpLG1zKCExKX1jYXRjaChsKXttcyghMSksdGhpcy4jbyhuZXcgRmUo bCx0aGlzLndyaXRlKSl9ZmluYWxseXt0aGlzLiN0JiYodGhpcy4jdC5faGFuZGxlPXIsci5jbG9z ZT1uLHRoaXMuI3QuY2xvc2U9byx0aGlzLiN0LnJlbW92ZUFsbExpc3RlbmVycygiZXJyb3IiKSl9 dGhpcy4jdCYmdGhpcy4jdC5vbigiZXJyb3IiLGw9PnRoaXMuI28obmV3IEZlKGwsdGhpcy53cml0 ZSkpKTtsZXQgaDtpZihhKWlmKEFycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoPjApe2xldCBsPWFb MF07aD10aGlzW0llXShBZS5CdWZmZXIuZnJvbShsKSk7Zm9yKGxldCBjPTE7YzxhLmxlbmd0aDtj KyspaD10aGlzW0llXShhW2NdKX1lbHNlIGg9dGhpc1tJZV0oQWUuQnVmZmVyLmZyb20oYSkpO3Jl dHVybiBpJiZpKCksaH19LGllPWNsYXNzIGV4dGVuZHMgU3R7I2U7I2k7Y29uc3RydWN0b3IoZSx0 KXtlPWV8fHt9LGUuZmx1c2g9ZS5mbHVzaHx8dGUuY29uc3RhbnRzLlpfTk9fRkxVU0gsZS5maW5p c2hGbHVzaD1lLmZpbmlzaEZsdXNofHx0ZS5jb25zdGFudHMuWl9GSU5JU0gsZS5mdWxsRmx1c2hG bGFnPXRlLmNvbnN0YW50cy5aX0ZVTExfRkxVU0gsc3VwZXIoZSx0KSx0aGlzLiNlPWUubGV2ZWws dGhpcy4jaT1lLnN0cmF0ZWd5fXBhcmFtcyhlLHQpe2lmKCF0aGlzLnNhd0Vycm9yKXtpZighdGhp cy5oYW5kbGUpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc3dpdGNoIHBhcmFtcyB3aGVuIGJpbmRp bmcgaXMgY2xvc2VkIik7aWYoIXRoaXMuaGFuZGxlLnBhcmFtcyl0aHJvdyBuZXcgRXJyb3IoIm5v dCBzdXBwb3J0ZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiIpO2lmKHRoaXMuI2UhPT1lfHx0aGlz LiNpIT09dCl7dGhpcy5mbHVzaCh0ZS5jb25zdGFudHMuWl9TWU5DX0ZMVVNIKSwoMCxfcy5kZWZh dWx0KSh0aGlzLmhhbmRsZSwiemxpYiBiaW5kaW5nIGNsb3NlZCIpO2xldCBpPXRoaXMuaGFuZGxl LmZsdXNoO3RoaXMuaGFuZGxlLmZsdXNoPShyLG4pPT57dHlwZW9mIHI9PSJmdW5jdGlvbiImJihu PXIscj10aGlzLmZsdXNoRmxhZyksdGhpcy5mbHVzaChyKSxuPy4oKX07dHJ5e3RoaXMuaGFuZGxl LnBhcmFtcyhlLHQpfWZpbmFsbHl7dGhpcy5oYW5kbGUuZmx1c2g9aX10aGlzLmhhbmRsZSYmKHRo aXMuI2U9ZSx0aGlzLiNpPXQpfX19fTtmLlpsaWI9aWU7dmFyIHdzPWNsYXNzIGV4dGVuZHMgaWV7 Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiRGVmbGF0ZSIpfX07Zi5EZWZsYXRlPXdzO3ZhciB5cz1j bGFzcyBleHRlbmRzIGlle2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkluZmxhdGUiKX19O2YuSW5m bGF0ZT15czt2YXIgRXM9Y2xhc3MgZXh0ZW5kcyBpZXsjZTtjb25zdHJ1Y3RvcihlKXtzdXBlcihl LCJHemlwIiksdGhpcy4jZT1lJiYhIWUucG9ydGFibGV9W0llXShlKXtyZXR1cm4gdGhpcy4jZT8o dGhpcy4jZT0hMSxlWzldPTI1NSxzdXBlcltJZV0oZSkpOnN1cGVyW0llXShlKX19O2YuR3ppcD1F czt2YXIgYnM9Y2xhc3MgZXh0ZW5kcyBpZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJHdW56aXAi KX19O2YuR3VuemlwPWJzO3ZhciBTcz1jbGFzcyBleHRlbmRzIGlle2NvbnN0cnVjdG9yKGUpe3N1 cGVyKGUsIkRlZmxhdGVSYXciKX19O2YuRGVmbGF0ZVJhdz1Tczt2YXIgZ3M9Y2xhc3MgZXh0ZW5k cyBpZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJJbmZsYXRlUmF3Iil9fTtmLkluZmxhdGVSYXc9 Z3M7dmFyIFJzPWNsYXNzIGV4dGVuZHMgaWV7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiVW56aXAi KX19O2YuVW56aXA9UnM7dmFyIGVpPWNsYXNzIGV4dGVuZHMgU3R7Y29uc3RydWN0b3IoZSx0KXtl PWV8fHt9LGUuZmx1c2g9ZS5mbHVzaHx8dGUuY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJT05fUFJP Q0VTUyxlLmZpbmlzaEZsdXNoPWUuZmluaXNoRmx1c2h8fHRlLmNvbnN0YW50cy5CUk9UTElfT1BF UkFUSU9OX0ZJTklTSCxlLmZ1bGxGbHVzaEZsYWc9dGUuY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJ T05fRkxVU0gsc3VwZXIoZSx0KX19LE9zPWNsYXNzIGV4dGVuZHMgZWl7Y29uc3RydWN0b3IoZSl7 c3VwZXIoZSwiQnJvdGxpQ29tcHJlc3MiKX19O2YuQnJvdGxpQ29tcHJlc3M9T3M7dmFyIHZzPWNs YXNzIGV4dGVuZHMgZWl7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiQnJvdGxpRGVjb21wcmVzcyIp fX07Zi5Ccm90bGlEZWNvbXByZXNzPXZzO3ZhciB0aT1jbGFzcyBleHRlbmRzIFN0e2NvbnN0cnVj dG9yKGUsdCl7ZT1lfHx7fSxlLmZsdXNoPWUuZmx1c2h8fHRlLmNvbnN0YW50cy5aU1REX2VfY29u dGludWUsZS5maW5pc2hGbHVzaD1lLmZpbmlzaEZsdXNofHx0ZS5jb25zdGFudHMuWlNURF9lX2Vu ZCxlLmZ1bGxGbHVzaEZsYWc9dGUuY29uc3RhbnRzLlpTVERfZV9mbHVzaCxzdXBlcihlLHQpfX0s VHM9Y2xhc3MgZXh0ZW5kcyB0aXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJac3RkQ29tcHJlc3Mi KX19O2YuWnN0ZENvbXByZXNzPVRzO3ZhciBEcz1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9y KGUpe3N1cGVyKGUsIlpzdGREZWNvbXByZXNzIil9fTtmLlpzdGREZWNvbXByZXNzPURzfSk7dmFy IEtyPWQoWGU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFhlLCJfX2VzTW9k dWxlIix7dmFsdWU6ITB9KTtYZS5wYXJzZT1YZS5lbmNvZGU9dm9pZCAwO3ZhciBjYT0ocyxlKT0+ e2lmKE51bWJlci5pc1NhZmVJbnRlZ2VyKHMpKXM8MD9mYShzLGUpOnVhKHMsZSk7ZWxzZSB0aHJv dyBFcnJvcigiY2Fubm90IGVuY29kZSBudW1iZXIgb3V0c2lkZSBvZiBqYXZhc2NyaXB0IHNhZmUg aW50ZWdlciByYW5nZSIpO3JldHVybiBlfTtYZS5lbmNvZGU9Y2E7dmFyIHVhPShzLGUpPT57ZVsw XT0xMjg7Zm9yKHZhciB0PWUubGVuZ3RoO3Q+MTt0LS0pZVt0LTFdPXMmMjU1LHM9TWF0aC5mbG9v cihzLzI1Nil9LGZhPShzLGUpPT57ZVswXT0yNTU7dmFyIHQ9ITE7cz1zKi0xO2Zvcih2YXIgaT1l Lmxlbmd0aDtpPjE7aS0tKXt2YXIgcj1zJjI1NTtzPU1hdGguZmxvb3Iocy8yNTYpLHQ/ZVtpLTFd PVpyKHIpOnI9PT0wP2VbaS0xXT0wOih0PSEwLGVbaS0xXT1ZcihyKSl9fSxkYT1zPT57bGV0IGU9 c1swXSx0PWU9PT0xMjg/cGEocy5zdWJhcnJheSgxLHMubGVuZ3RoKSk6ZT09PTI1NT9tYShzKTpu dWxsO2lmKHQ9PT1udWxsKXRocm93IEVycm9yKCJpbnZhbGlkIGJhc2UyNTYgZW5jb2RpbmciKTtp ZighTnVtYmVyLmlzU2FmZUludGVnZXIodCkpdGhyb3cgRXJyb3IoInBhcnNlZCBudW1iZXIgb3V0 c2lkZSBvZiBqYXZhc2NyaXB0IHNhZmUgaW50ZWdlciByYW5nZSIpO3JldHVybiB0fTtYZS5wYXJz ZT1kYTt2YXIgbWE9cz0+e2Zvcih2YXIgZT1zLmxlbmd0aCx0PTAsaT0hMSxyPWUtMTtyPi0xO3It LSl7dmFyIG49TnVtYmVyKHNbcl0pLG87aT9vPVpyKG4pOm49PT0wP289bjooaT0hMCxvPVlyKG4p KSxvIT09MCYmKHQtPW8qTWF0aC5wb3coMjU2LGUtci0xKSl9cmV0dXJuIHR9LHBhPXM9Pntmb3Io dmFyIGU9cy5sZW5ndGgsdD0wLGk9ZS0xO2k+LTE7aS0tKXt2YXIgcj1OdW1iZXIoc1tpXSk7ciE9 PTAmJih0Kz1yKk1hdGgucG93KDI1NixlLWktMSkpfXJldHVybiB0fSxacj1zPT4oMjU1XnMpJjI1 NSxZcj1zPT4oMjU1XnMpKzEmMjU1fSk7dmFyIE5zPWQoQz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3Qu ZGVmaW5lUHJvcGVydHkoQywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Qy5jb2RlPUMubmFtZT1D Lm5vcm1hbEZzVHlwZXM9Qy5pc05hbWU9Qy5pc0NvZGU9dm9pZCAwO3ZhciBfYT1zPT5DLm5hbWUu aGFzKHMpO0MuaXNDb2RlPV9hO3ZhciB3YT1zPT5DLmNvZGUuaGFzKHMpO0MuaXNOYW1lPXdhO0Mu bm9ybWFsRnNUeXBlcz1uZXcgU2V0KFsiMCIsIiIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjci LCJEIl0pO0MubmFtZT1uZXcgTWFwKFtbIjAiLCJGaWxlIl0sWyIiLCJPbGRGaWxlIl0sWyIxIiwi TGluayJdLFsiMiIsIlN5bWJvbGljTGluayJdLFsiMyIsIkNoYXJhY3RlckRldmljZSJdLFsiNCIs IkJsb2NrRGV2aWNlIl0sWyI1IiwiRGlyZWN0b3J5Il0sWyI2IiwiRklGTyJdLFsiNyIsIkNvbnRp Z3VvdXNGaWxlIl0sWyJnIiwiR2xvYmFsRXh0ZW5kZWRIZWFkZXIiXSxbIngiLCJFeHRlbmRlZEhl YWRlciJdLFsiQSIsIlNvbGFyaXNBQ0wiXSxbIkQiLCJHTlVEdW1wRGlyIl0sWyJJIiwiSW5vZGUi XSxbIksiLCJOZXh0RmlsZUhhc0xvbmdMaW5rcGF0aCJdLFsiTCIsIk5leHRGaWxlSGFzTG9uZ1Bh dGgiXSxbIk0iLCJDb250aW51YXRpb25GaWxlIl0sWyJOIiwiT2xkR251TG9uZ1BhdGgiXSxbIlMi LCJTcGFyc2VGaWxlIl0sWyJWIiwiVGFwZVZvbHVtZUhlYWRlciJdLFsiWCIsIk9sZEV4dGVuZGVk SGVhZGVyIl1dKTtDLmNvZGU9bmV3IE1hcChBcnJheS5mcm9tKEMubmFtZSkubWFwKHM9PltzWzFd LHNbMF1dKSl9KTt2YXIgZXQ9ZChzZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeWE9c2UmJnNlLl9fY3Jl YXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHMsZSx0LGkpe2k9PT12b2lkIDAm JihpPXQpO3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KTsoIXJ8fCgi Z2V0ImluIHI/IWUuX19lc01vZHVsZTpyLndyaXRhYmxlfHxyLmNvbmZpZ3VyYWJsZSkpJiYocj17 ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVt0XX19KSxPYmplY3QuZGVmaW5l UHJvcGVydHkocyxpLHIpfSk6KGZ1bmN0aW9uKHMsZSx0LGkpe2k9PT12b2lkIDAmJihpPXQpLHNb aV09ZVt0XX0pKSxFYT1zZSYmc2UuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT8o ZnVuY3Rpb24ocyxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocywiZGVmYXVsdCIse2VudW1lcmFi bGU6ITAsdmFsdWU6ZX0pfSk6ZnVuY3Rpb24ocyxlKXtzLmRlZmF1bHQ9ZX0pLFZyPXNlJiZzZS5f X2ltcG9ydFN0YXJ8fChmdW5jdGlvbigpe3ZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiBzPU9iamVj dC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXt2YXIgaT1bXTtmb3IodmFyIHIgaW4g dClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGlbaS5sZW5ndGhd PXIpO3JldHVybiBpfSxzKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxl KXJldHVybiBlO3ZhciB0PXt9O2lmKGUhPW51bGwpZm9yKHZhciBpPXMoZSkscj0wO3I8aS5sZW5n dGg7cisrKWlbcl0hPT0iZGVmYXVsdCImJnlhKHQsZSxpW3JdKTtyZXR1cm4gRWEodCxlKSx0fX0p KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtzZS5I ZWFkZXI9dm9pZCAwO3ZhciBRZT1yZXF1aXJlKCJub2RlOnBhdGgiKSwkcj1WcihLcigpKSxKZT1W cihOcygpKSxiYT1zPT5zPT09dm9pZCAwfHxzPDA/dm9pZCAwOnMsQXM9Y2xhc3N7Y2tzdW1WYWxp ZD0hMTtuZWVkUGF4PSExO251bGxCbG9jaz0hMTtibG9jaztwYXRoO21vZGU7dWlkO2dpZDtzaXpl O2Nrc3VtOyNlPSJVbnN1cHBvcnRlZCI7bGlua3BhdGg7dW5hbWU7Z25hbWU7ZGV2bWFqPTA7ZGV2 bWluPTA7YXRpbWU7Y3RpbWU7bXRpbWU7Y2hhcnNldDtjb21tZW50O2NvbnN0cnVjdG9yKGUsdD0w LGkscil7QnVmZmVyLmlzQnVmZmVyKGUpP3RoaXMuZGVjb2RlKGUsdHx8MCxpLHIpOmUmJnRoaXMu I2koZSl9ZGVjb2RlKGUsdCxpLHIpe2lmKHR8fCh0PTApLCFlfHwhKGUubGVuZ3RoPj10KzUxMikp dGhyb3cgbmV3IEVycm9yKCJuZWVkIDUxMiBieXRlcyBmb3IgaGVhZGVyIik7bGV0IG49Q2UoZSx0 KzE1NiwxKSxvPUplLm5vcm1hbEZzVHlwZXMuaGFzKG4pLGE9bz9pOnZvaWQgMCxoPW8/cjp2b2lk IDA7aWYodGhpcy5wYXRoPWE/LnBhdGg/P0NlKGUsdCwxMDApLHRoaXMubW9kZT1hPy5tb2RlPz9o Py5tb2RlPz9TZShlLHQrMTAwLDgpLHRoaXMudWlkPWE/LnVpZD8/aD8udWlkPz9TZShlLHQrMTA4 LDgpLHRoaXMuZ2lkPWE/LmdpZD8/aD8uZ2lkPz9TZShlLHQrMTE2LDgpLHRoaXMuc2l6ZT1iYShh Py5zaXplPz9oPy5zaXplPz9TZShlLHQrMTI0LDEyKSksdGhpcy5tdGltZT1hPy5tdGltZT8/aD8u bXRpbWU/P01zKGUsdCsxMzYsMTIpLHRoaXMuY2tzdW09U2UoZSx0KzE0OCwxMiksaCYmdGhpcy4j aShoLCEwKSxhJiZ0aGlzLiNpKGEpLEplLmlzQ29kZShuKSYmKHRoaXMuI2U9bnx8IjAiKSx0aGlz LiNlPT09IjAiJiZ0aGlzLnBhdGguc2xpY2UoLTEpPT09Ii8iJiYodGhpcy4jZT0iNSIpLHRoaXMu I2U9PT0iNSImJih0aGlzLnNpemU9MCksdGhpcy5saW5rcGF0aD1DZShlLHQrMTU3LDEwMCksZS5z dWJhcnJheSh0KzI1Nyx0KzI2NSkudG9TdHJpbmcoKT09PSJ1c3Rhclx4MDAwMCIpaWYodGhpcy51 bmFtZT1hPy51bmFtZT8/aD8udW5hbWU/P0NlKGUsdCsyNjUsMzIpLHRoaXMuZ25hbWU9YT8uZ25h bWU/P2g/LmduYW1lPz9DZShlLHQrMjk3LDMyKSx0aGlzLmRldm1haj1hPy5kZXZtYWo/P2g/LmRl dm1haj8/U2UoZSx0KzMyOSw4KT8/MCx0aGlzLmRldm1pbj1hPy5kZXZtaW4/P2g/LmRldm1pbj8/ U2UoZSx0KzMzNyw4KT8/MCxlW3QrNDc1XSE9PTApe2xldCBjPUNlKGUsdCszNDUsMTU1KTt0aGlz LnBhdGg9YysiLyIrdGhpcy5wYXRofWVsc2V7bGV0IGM9Q2UoZSx0KzM0NSwxMzApO2MmJih0aGlz LnBhdGg9YysiLyIrdGhpcy5wYXRoKSx0aGlzLmF0aW1lPWk/LmF0aW1lPz9yPy5hdGltZT8/TXMo ZSx0KzQ3NiwxMiksdGhpcy5jdGltZT1pPy5jdGltZT8/cj8uY3RpbWU/P01zKGUsdCs0ODgsMTIp fWxldCBsPTI1Njtmb3IobGV0IGM9dDtjPHQrMTQ4O2MrKylsKz1lW2NdO2ZvcihsZXQgYz10KzE1 NjtjPHQrNTEyO2MrKylsKz1lW2NdO3RoaXMuY2tzdW1WYWxpZD1sPT09dGhpcy5ja3N1bSx0aGlz LmNrc3VtPT09dm9pZCAwJiZsPT09MjU2JiYodGhpcy5udWxsQmxvY2s9ITApfSNpKGUsdD0hMSl7 T2JqZWN0LmFzc2lnbih0aGlzLE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5m aWx0ZXIoKFtpLHJdKT0+IShyPT1udWxsfHxpPT09InNpemUiJiZOdW1iZXIocik8MHx8aT09PSJw YXRoIiYmdHx8aT09PSJsaW5rcGF0aCImJnR8fGk9PT0iZ2xvYmFsIikpKSl9ZW5jb2RlKGUsdD0w KXtpZihlfHwoZT10aGlzLmJsb2NrPUJ1ZmZlci5hbGxvYyg1MTIpKSx0aGlzLiNlPT09IlVuc3Vw cG9ydGVkIiYmKHRoaXMuI2U9IjAiKSwhKGUubGVuZ3RoPj10KzUxMikpdGhyb3cgbmV3IEVycm9y KCJuZWVkIDUxMiBieXRlcyBmb3IgaGVhZGVyIik7bGV0IGk9dGhpcy5jdGltZXx8dGhpcy5hdGlt ZT8xMzA6MTU1LHI9U2EodGhpcy5wYXRofHwiIixpKSxuPXJbMF0sbz1yWzFdO3RoaXMubmVlZFBh eD0hIXJbMl0sdGhpcy5uZWVkUGF4PUJlKGUsdCwxMDAsbil8fHRoaXMubmVlZFBheCx0aGlzLm5l ZWRQYXg9Z2UoZSx0KzEwMCw4LHRoaXMubW9kZSl8fHRoaXMubmVlZFBheCx0aGlzLm5lZWRQYXg9 Z2UoZSx0KzEwOCw4LHRoaXMudWlkKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1nZShlLHQr MTE2LDgsdGhpcy5naWQpfHx0aGlzLm5lZWRQYXgsdGhpcy5uZWVkUGF4PWdlKGUsdCsxMjQsMTIs dGhpcy5zaXplKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1McyhlLHQrMTM2LDEyLHRoaXMu bXRpbWUpfHx0aGlzLm5lZWRQYXgsZVt0KzE1Nl09TnVtYmVyKHRoaXMuI2UuY29kZVBvaW50QXQo MCkpLHRoaXMubmVlZFBheD1CZShlLHQrMTU3LDEwMCx0aGlzLmxpbmtwYXRoKXx8dGhpcy5uZWVk UGF4LGUud3JpdGUoInVzdGFyXHgwMDAwIix0KzI1Nyw4KSx0aGlzLm5lZWRQYXg9QmUoZSx0KzI2 NSwzMix0aGlzLnVuYW1lKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1CZShlLHQrMjk3LDMy LHRoaXMuZ25hbWUpfHx0aGlzLm5lZWRQYXgsdGhpcy5uZWVkUGF4PWdlKGUsdCszMjksOCx0aGlz LmRldm1hail8fHRoaXMubmVlZFBheCx0aGlzLm5lZWRQYXg9Z2UoZSx0KzMzNyw4LHRoaXMuZGV2 bWluKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1CZShlLHQrMzQ1LGksbyl8fHRoaXMubmVl ZFBheCxlW3QrNDc1XSE9PTA/dGhpcy5uZWVkUGF4PUJlKGUsdCszNDUsMTU1LG8pfHx0aGlzLm5l ZWRQYXg6KHRoaXMubmVlZFBheD1CZShlLHQrMzQ1LDEzMCxvKXx8dGhpcy5uZWVkUGF4LHRoaXMu bmVlZFBheD1McyhlLHQrNDc2LDEyLHRoaXMuYXRpbWUpfHx0aGlzLm5lZWRQYXgsdGhpcy5uZWVk UGF4PUxzKGUsdCs0ODgsMTIsdGhpcy5jdGltZSl8fHRoaXMubmVlZFBheCk7bGV0IGE9MjU2O2Zv cihsZXQgaD10O2g8dCsxNDg7aCsrKWErPWVbaF07Zm9yKGxldCBoPXQrMTU2O2g8dCs1MTI7aCsr KWErPWVbaF07cmV0dXJuIHRoaXMuY2tzdW09YSxnZShlLHQrMTQ4LDgsdGhpcy5ja3N1bSksdGhp cy5ja3N1bVZhbGlkPSEwLHRoaXMubmVlZFBheH1nZXQgdHlwZSgpe3JldHVybiB0aGlzLiNlPT09 IlVuc3VwcG9ydGVkIj90aGlzLiNlOkplLm5hbWUuZ2V0KHRoaXMuI2UpfWdldCB0eXBlS2V5KCl7 cmV0dXJuIHRoaXMuI2V9c2V0IHR5cGUoZSl7bGV0IHQ9U3RyaW5nKEplLmNvZGUuZ2V0KGUpKTtp ZihKZS5pc0NvZGUodCl8fHQ9PT0iVW5zdXBwb3J0ZWQiKXRoaXMuI2U9dDtlbHNlIGlmKEplLmlz Q29kZShlKSl0aGlzLiNlPWU7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGVudHJ5 IHR5cGU6ICIrZSl9fTtzZS5IZWFkZXI9QXM7dmFyIFNhPShzLGUpPT57bGV0IGk9cyxyPSIiLG4s bz1RZS5wb3NpeC5wYXJzZShzKS5yb290fHwiLiI7aWYoQnVmZmVyLmJ5dGVMZW5ndGgoaSk8MTAw KW49W2ksciwhMV07ZWxzZXtyPVFlLnBvc2l4LmRpcm5hbWUoaSksaT1RZS5wb3NpeC5iYXNlbmFt ZShpKTtkbyBCdWZmZXIuYnl0ZUxlbmd0aChpKTw9MTAwJiZCdWZmZXIuYnl0ZUxlbmd0aChyKTw9 ZT9uPVtpLHIsITFdOkJ1ZmZlci5ieXRlTGVuZ3RoKGkpPjEwMCYmQnVmZmVyLmJ5dGVMZW5ndGgo cik8PWU/bj1baS5zbGljZSgwLDk5KSxyLCEwXTooaT1RZS5wb3NpeC5qb2luKFFlLnBvc2l4LmJh c2VuYW1lKHIpLGkpLHI9UWUucG9zaXguZGlybmFtZShyKSk7d2hpbGUociE9PW8mJm49PT12b2lk IDApO258fChuPVtzLnNsaWNlKDAsOTkpLCIiLCEwXSl9cmV0dXJuIG59LENlPShzLGUsdCk9PnMu c3ViYXJyYXkoZSxlK3QpLnRvU3RyaW5nKCJ1dGY4IikucmVwbGFjZSgvXDAuKi8sIiIpLE1zPShz LGUsdCk9PmdhKFNlKHMsZSx0KSksZ2E9cz0+cz09PXZvaWQgMD92b2lkIDA6bmV3IERhdGUocyox ZTMpLFNlPShzLGUsdCk9Pk51bWJlcihzW2VdKSYxMjg/JHIucGFyc2Uocy5zdWJhcnJheShlLGUr dCkpOk9hKHMsZSx0KSxSYT1zPT5pc05hTihzKT92b2lkIDA6cyxPYT0ocyxlLHQpPT5SYShwYXJz ZUludChzLnN1YmFycmF5KGUsZSt0KS50b1N0cmluZygidXRmOCIpLnJlcGxhY2UoL1wwLiokLywi IikudHJpbSgpLDgpKSx2YT17MTI6ODU4OTkzNDU5MSw4OjIwOTcxNTF9LGdlPShzLGUsdCxpKT0+ aT09PXZvaWQgMD8hMTppPnZhW3RdfHxpPDA/KCRyLmVuY29kZShpLHMuc3ViYXJyYXkoZSxlK3Qp KSwhMCk6KFRhKHMsZSx0LGkpLCExKSxUYT0ocyxlLHQsaSk9PnMud3JpdGUoRGEoaSx0KSxlLHQs ImFzY2lpIiksRGE9KHMsZSk9PlBhKE1hdGguZmxvb3IocykudG9TdHJpbmcoOCksZSksUGE9KHMs ZSk9PihzLmxlbmd0aD09PWUtMT9zOm5ldyBBcnJheShlLXMubGVuZ3RoLTEpLmpvaW4oIjAiKStz KyIgIikrIlwwIixMcz0ocyxlLHQsaSk9Pmk9PT12b2lkIDA/ITE6Z2UocyxlLHQsaS5nZXRUaW1l KCkvMWUzKSxOYT1uZXcgQXJyYXkoMTU2KS5qb2luKCJcMCIpLEJlPShzLGUsdCxpKT0+aT09PXZv aWQgMD8hMToocy53cml0ZShpK05hLGUsdCwidXRmOCIpLGkubGVuZ3RoIT09QnVmZmVyLmJ5dGVM ZW5ndGgoaSl8fGkubGVuZ3RoPnQpfSk7dmFyIHNpPWQoaWk9PnsidXNlIHN0cmljdCI7T2JqZWN0 LmRlZmluZVByb3BlcnR5KGlpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtpaS5QYXg9dm9pZCAw O3ZhciBNYT1yZXF1aXJlKCJub2RlOnBhdGgiKSxMYT1ldCgpLElzPWNsYXNzIHN7YXRpbWU7bXRp bWU7Y3RpbWU7Y2hhcnNldDtjb21tZW50O2dpZDt1aWQ7Z25hbWU7dW5hbWU7bGlua3BhdGg7ZGV2 O2lubztubGluaztwYXRoO3NpemU7bW9kZTtnbG9iYWw7Y29uc3RydWN0b3IoZSx0PSExKXt0aGlz LmF0aW1lPWUuYXRpbWUsdGhpcy5jaGFyc2V0PWUuY2hhcnNldCx0aGlzLmNvbW1lbnQ9ZS5jb21t ZW50LHRoaXMuY3RpbWU9ZS5jdGltZSx0aGlzLmRldj1lLmRldix0aGlzLmdpZD1lLmdpZCx0aGlz Lmdsb2JhbD10LHRoaXMuZ25hbWU9ZS5nbmFtZSx0aGlzLmlubz1lLmlubyx0aGlzLmxpbmtwYXRo PWUubGlua3BhdGgsdGhpcy5tdGltZT1lLm10aW1lLHRoaXMubmxpbms9ZS5ubGluayx0aGlzLnBh dGg9ZS5wYXRoLHRoaXMuc2l6ZT1lLnNpemUsdGhpcy51aWQ9ZS51aWQsdGhpcy51bmFtZT1lLnVu YW1lfWVuY29kZSgpe2xldCBlPXRoaXMuZW5jb2RlQm9keSgpO2lmKGU9PT0iIilyZXR1cm4gQnVm ZmVyLmFsbG9jVW5zYWZlKDApO2xldCB0PUJ1ZmZlci5ieXRlTGVuZ3RoKGUpLGk9NTEyKk1hdGgu Y2VpbCgxK3QvNTEyKSxyPUJ1ZmZlci5hbGxvY1Vuc2FmZShpKTtmb3IobGV0IG49MDtuPDUxMjtu KyspcltuXT0wO25ldyBMYS5IZWFkZXIoe3BhdGg6KCJQYXhIZWFkZXIvIisoMCxNYS5iYXNlbmFt ZSkodGhpcy5wYXRoPz8iIikpLnNsaWNlKDAsOTkpLG1vZGU6dGhpcy5tb2RlfHw0MjAsdWlkOnRo aXMudWlkLGdpZDp0aGlzLmdpZCxzaXplOnQsbXRpbWU6dGhpcy5tdGltZSx0eXBlOnRoaXMuZ2xv YmFsPyJHbG9iYWxFeHRlbmRlZEhlYWRlciI6IkV4dGVuZGVkSGVhZGVyIixsaW5rcGF0aDoiIix1 bmFtZTp0aGlzLnVuYW1lfHwiIixnbmFtZTp0aGlzLmduYW1lfHwiIixkZXZtYWo6MCxkZXZtaW46 MCxhdGltZTp0aGlzLmF0aW1lLGN0aW1lOnRoaXMuY3RpbWV9KS5lbmNvZGUociksci53cml0ZShl LDUxMix0LCJ1dGY4Iik7Zm9yKGxldCBuPXQrNTEyO248ci5sZW5ndGg7bisrKXJbbl09MDtyZXR1 cm4gcn1lbmNvZGVCb2R5KCl7cmV0dXJuIHRoaXMuZW5jb2RlRmllbGQoInBhdGgiKSt0aGlzLmVu Y29kZUZpZWxkKCJjdGltZSIpK3RoaXMuZW5jb2RlRmllbGQoImF0aW1lIikrdGhpcy5lbmNvZGVG aWVsZCgiZGV2IikrdGhpcy5lbmNvZGVGaWVsZCgiaW5vIikrdGhpcy5lbmNvZGVGaWVsZCgibmxp bmsiKSt0aGlzLmVuY29kZUZpZWxkKCJjaGFyc2V0IikrdGhpcy5lbmNvZGVGaWVsZCgiY29tbWVu dCIpK3RoaXMuZW5jb2RlRmllbGQoImdpZCIpK3RoaXMuZW5jb2RlRmllbGQoImduYW1lIikrdGhp cy5lbmNvZGVGaWVsZCgibGlua3BhdGgiKSt0aGlzLmVuY29kZUZpZWxkKCJtdGltZSIpK3RoaXMu ZW5jb2RlRmllbGQoInNpemUiKSt0aGlzLmVuY29kZUZpZWxkKCJ1aWQiKSt0aGlzLmVuY29kZUZp ZWxkKCJ1bmFtZSIpfWVuY29kZUZpZWxkKGUpe2lmKHRoaXNbZV09PT12b2lkIDApcmV0dXJuIiI7 bGV0IHQ9dGhpc1tlXSxpPXQgaW5zdGFuY2VvZiBEYXRlP3QuZ2V0VGltZSgpLzFlMzp0LHI9IiAi KyhlPT09ImRldiJ8fGU9PT0iaW5vInx8ZT09PSJubGluayI/IlNDSElMWS4iOiIiKStlKyI9Iitp K2AKKytgLG49QnVmZmVyLmJ5dGVMZW5ndGgociksbz1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01h dGgubG9nKDEwKSkrMTtyZXR1cm4gbitvPj1NYXRoLnBvdygxMCxvKSYmKG8rPTEpLG8rbityfXN0 YXRpYyBwYXJzZShlLHQsaT0hMSl7cmV0dXJuIG5ldyBzKEFhKElhKGUpLHQpLGkpfX07aWkuUGF4 PUlzO3ZhciBBYT0ocyxlKT0+ZT9PYmplY3QuYXNzaWduKHt9LGUscyk6cyxJYT1zPT5zLnJlcGxh Y2UoL1xuJC8sIiIpLnNwbGl0KGAKKytgKS5yZWR1Y2UoRmEsT2JqZWN0LmNyZWF0ZShudWxsKSks RmE9KHMsZSk9PntsZXQgdD1wYXJzZUludChlLDEwKTtpZih0IT09QnVmZmVyLmJ5dGVMZW5ndGgo ZSkrMSlyZXR1cm4gcztlPWUuc2xpY2UoKHQrIiAiKS5sZW5ndGgpO2xldCBpPWUuc3BsaXQoIj0i KSxyPWkuc2hpZnQoKTtpZighcilyZXR1cm4gcztsZXQgbj1yLnJlcGxhY2UoL15TQ0hJTFlcLihk ZXZ8aW5vfG5saW5rKS8sIiQxIiksbz1pLmpvaW4oIj0iKS5yZXBsYWNlKC9cMC4qLywiIik7c3dp dGNoKG4pe2Nhc2UicGF0aCI6Y2FzZSJsaW5rcGF0aCI6Y2FzZSJ0eXBlIjpjYXNlImNoYXJzZXQi OmNhc2UiY29tbWVudCI6Y2FzZSJnbmFtZSI6Y2FzZSJ1bmFtZSI6c1tuXT1vO2JyZWFrO2Nhc2Ui Y3RpbWUiOmNhc2UiYXRpbWUiOmNhc2UibXRpbWUiOnNbbl09bmV3IERhdGUoTnVtYmVyKG8pKjFl Myk7YnJlYWs7Y2FzZSJzaXplIjpsZXQgYT0rbzthPj0wJiYoc1tuXT1hKTticmVhaztjYXNlImdp ZCI6Y2FzZSJ1aWQiOmNhc2UiZGV2IjpjYXNlImlubyI6Y2FzZSJubGluayI6Y2FzZSJtb2RlIjpz W25dPStvO2JyZWFrfXJldHVybiBzfX0pO3ZhciB0dD1kKHJpPT57InVzZSBzdHJpY3QiO09iamVj dC5kZWZpbmVQcm9wZXJ0eShyaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmkubm9ybWFsaXpl V2luZG93c1BhdGg9dm9pZCAwO3ZhciBDYT1wcm9jZXNzLmVudi5URVNUSU5HX1RBUl9GQUtFX1BM QVRGT1JNfHxwcm9jZXNzLnBsYXRmb3JtO3JpLm5vcm1hbGl6ZVdpbmRvd3NQYXRoPUNhIT09Indp bjMyIj9zPT5TdHJpbmcocyk6cz0+U3RyaW5nKHMpLnJlcGxhY2VBbGwoL1xcL2csIi8iKX0pO3Zh ciBDcz1kKG9pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaSwiX19lc01v ZHVsZSIse3ZhbHVlOiEwfSk7b2kuUmVhZEVudHJ5PXZvaWQgMDt2YXIgQmE9V2UoKSxuaT10dCgp LEZzPWNsYXNzIGV4dGVuZHMgQmEuTWluaXBhc3N7ZXh0ZW5kZWQ7Z2xvYmFsRXh0ZW5kZWQ7aGVh ZGVyO3N0YXJ0QmxvY2tTaXplO2Jsb2NrUmVtYWluO3JlbWFpbjt0eXBlO21ldGE9ITE7aWdub3Jl PSExO3BhdGg7bW9kZTt1aWQ7Z2lkO3VuYW1lO2duYW1lO3NpemU9MDttdGltZTthdGltZTtjdGlt ZTtsaW5rcGF0aDtkZXY7aW5vO25saW5rO2ludmFsaWQ9ITE7YWJzb2x1dGU7dW5zdXBwb3J0ZWQ9 ITE7Y29uc3RydWN0b3IoZSx0LGkpe3N3aXRjaChzdXBlcih7fSksdGhpcy5wYXVzZSgpLHRoaXMu ZXh0ZW5kZWQ9dCx0aGlzLmdsb2JhbEV4dGVuZGVkPWksdGhpcy5oZWFkZXI9ZSx0aGlzLnJlbWFp bj1lLnNpemU/PzAsdGhpcy5zdGFydEJsb2NrU2l6ZT01MTIqTWF0aC5jZWlsKHRoaXMucmVtYWlu LzUxMiksdGhpcy5ibG9ja1JlbWFpbj10aGlzLnN0YXJ0QmxvY2tTaXplLHRoaXMudHlwZT1lLnR5 cGUsdGhpcy50eXBlKXtjYXNlIkZpbGUiOmNhc2UiT2xkRmlsZSI6Y2FzZSJMaW5rIjpjYXNlIlN5 bWJvbGljTGluayI6Y2FzZSJDaGFyYWN0ZXJEZXZpY2UiOmNhc2UiQmxvY2tEZXZpY2UiOmNhc2Ui RGlyZWN0b3J5IjpjYXNlIkZJRk8iOmNhc2UiQ29udGlndW91c0ZpbGUiOmNhc2UiR05VRHVtcERp ciI6YnJlYWs7Y2FzZSJOZXh0RmlsZUhhc0xvbmdMaW5rcGF0aCI6Y2FzZSJOZXh0RmlsZUhhc0xv bmdQYXRoIjpjYXNlIk9sZEdudUxvbmdQYXRoIjpjYXNlIkdsb2JhbEV4dGVuZGVkSGVhZGVyIjpj YXNlIkV4dGVuZGVkSGVhZGVyIjpjYXNlIk9sZEV4dGVuZGVkSGVhZGVyIjp0aGlzLm1ldGE9ITA7 YnJlYWs7ZGVmYXVsdDp0aGlzLmlnbm9yZT0hMH1pZighZS5wYXRoKXRocm93IG5ldyBFcnJvcigi bm8gcGF0aCBwcm92aWRlZCBmb3IgdGFyLlJlYWRFbnRyeSIpO3RoaXMucGF0aD0oMCxuaS5ub3Jt YWxpemVXaW5kb3dzUGF0aCkoZS5wYXRoKSx0aGlzLm1vZGU9ZS5tb2RlLHRoaXMubW9kZSYmKHRo aXMubW9kZT10aGlzLm1vZGUmNDA5NSksdGhpcy51aWQ9ZS51aWQsdGhpcy5naWQ9ZS5naWQsdGhp cy51bmFtZT1lLnVuYW1lLHRoaXMuZ25hbWU9ZS5nbmFtZSx0aGlzLnNpemU9dGhpcy5yZW1haW4s dGhpcy5tdGltZT1lLm10aW1lLHRoaXMuYXRpbWU9ZS5hdGltZSx0aGlzLmN0aW1lPWUuY3RpbWUs dGhpcy5saW5rcGF0aD1lLmxpbmtwYXRoPygwLG5pLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShlLmxp bmtwYXRoKTp2b2lkIDAsdGhpcy51bmFtZT1lLnVuYW1lLHRoaXMuZ25hbWU9ZS5nbmFtZSx0JiZ0 aGlzLiNlKHQpLGkmJnRoaXMuI2UoaSwhMCl9d3JpdGUoZSl7bGV0IHQ9ZS5sZW5ndGg7aWYodD50 aGlzLmJsb2NrUmVtYWluKXRocm93IG5ldyBFcnJvcigid3JpdGluZyBtb3JlIHRvIGVudHJ5IHRo YW4gaXMgYXBwcm9wcmlhdGUiKTtsZXQgaT10aGlzLnJlbWFpbixyPXRoaXMuYmxvY2tSZW1haW47 cmV0dXJuIHRoaXMucmVtYWluPU1hdGgubWF4KDAsaS10KSx0aGlzLmJsb2NrUmVtYWluPU1hdGgu bWF4KDAsci10KSx0aGlzLmlnbm9yZT8hMDppPj10P3N1cGVyLndyaXRlKGUpOnN1cGVyLndyaXRl KGUuc3ViYXJyYXkoMCxpKSl9I2UoZSx0PSExKXtlLnBhdGgmJihlLnBhdGg9KDAsbmkubm9ybWFs aXplV2luZG93c1BhdGgpKGUucGF0aCkpLGUubGlua3BhdGgmJihlLmxpbmtwYXRoPSgwLG5pLm5v cm1hbGl6ZVdpbmRvd3NQYXRoKShlLmxpbmtwYXRoKSksT2JqZWN0LmFzc2lnbih0aGlzLE9iamVj dC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFtpLHJdKT0+IShyPT1udWxs fHxpPT09InBhdGgiJiZ0KSkpKX19O29pLlJlYWRFbnRyeT1Gc30pO3ZhciBoaT1kKGFpPT57InVz ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhaSwiX19lc01vZHVsZSIse3ZhbHVlOiEw fSk7YWkud2Fybk1ldGhvZD12b2lkIDA7dmFyIHphPShzLGUsdCxpPXt9KT0+e3MuZmlsZSYmKGku ZmlsZT1zLmZpbGUpLHMuY3dkJiYoaS5jd2Q9cy5jd2QpLGkuY29kZT10IGluc3RhbmNlb2YgRXJy b3ImJnQuY29kZXx8ZSxpLnRhckNvZGU9ZSwhcy5zdHJpY3QmJmkucmVjb3ZlcmFibGUhPT0hMT8o dCBpbnN0YW5jZW9mIEVycm9yJiYoaT1PYmplY3QuYXNzaWduKHQsaSksdD10Lm1lc3NhZ2UpLHMu ZW1pdCgid2FybiIsZSx0LGkpKTp0IGluc3RhbmNlb2YgRXJyb3I/cy5lbWl0KCJlcnJvciIsT2Jq ZWN0LmFzc2lnbih0LGkpKTpzLmVtaXQoImVycm9yIixPYmplY3QuYXNzaWduKG5ldyBFcnJvcihg JHtlfTogJHt0fWApLGkpKX07YWkud2Fybk1ldGhvZD16YX0pO3ZhciBfaT1kKHBpPT57InVzZSBz dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7 cGkuUGFyc2VyPXZvaWQgMDt2YXIga2E9cmVxdWlyZSgiZXZlbnRzIiksQnM9UHMoKSxYcj1ldCgp LFFyPXNpKCkseGE9Q3MoKSxqYT1oaSgpLFVhPTEwMjQqMTAyNCxxcz1CdWZmZXIuZnJvbShbMzEs MTM5XSksV3M9QnVmZmVyLmZyb20oWzQwLDE4MSw0NywyNTNdKSxxYT1NYXRoLm1heChxcy5sZW5n dGgsV3MubGVuZ3RoKSxIPVN5bWJvbCgic3RhdGUiKSx6ZT1TeW1ib2woIndyaXRlRW50cnkiKSxt ZT1TeW1ib2woInJlYWRFbnRyeSIpLHpzPVN5bWJvbCgibmV4dEVudHJ5IiksSnI9U3ltYm9sKCJw cm9jZXNzRW50cnkiKSxyZT1TeW1ib2woImV4dGVuZGVkSGVhZGVyIiksZ3Q9U3ltYm9sKCJnbG9i YWxFeHRlbmRlZEhlYWRlciIpLFJlPVN5bWJvbCgibWV0YSIpLGVuPVN5bWJvbCgiZW1pdE1ldGEi KSxfPVN5bWJvbCgiYnVmZmVyIikscGU9U3ltYm9sKCJxdWV1ZSIpLE9lPVN5bWJvbCgiZW5kZWQi KSxrcz1TeW1ib2woImVtaXR0ZWRFbmQiKSxrZT1TeW1ib2woImVtaXQiKSxTPVN5bWJvbCgidW56 aXAiKSxsaT1TeW1ib2woImNvbnN1bWVDaHVuayIpLGNpPVN5bWJvbCgiY29uc3VtZUNodW5rU3Vi IikseHM9U3ltYm9sKCJjb25zdW1lQm9keSIpLHRuPVN5bWJvbCgiY29uc3VtZU1ldGEiKSxzbj1T eW1ib2woImNvbnN1bWVIZWFkZXIiKSxSdD1TeW1ib2woImNvbnN1bWluZyIpLGpzPVN5bWJvbCgi YnVmZmVyQ29uY2F0IiksdWk9U3ltYm9sKCJtYXliZUVuZCIpLGl0PVN5bWJvbCgid3JpdGluZyIp LG5lPVN5bWJvbCgiYWJvcnRlZCIpLGZpPVN5bWJvbCgib25Eb25lIikseGU9U3ltYm9sKCJzYXdW YWxpZEVudHJ5IiksZGk9U3ltYm9sKCJzYXdOdWxsQmxvY2siKSxtaT1TeW1ib2woInNhd0VPRiIp LHJuPVN5bWJvbCgiY2xvc2VTdHJlYW0iKSxXYT0xZTMsT3Q9U3ltYm9sKCJjb21wcmVzc2VkQnl0 ZXNSZWFkIiksVXM9U3ltYm9sKCJkZWNvbXByZXNzZWRCeXRlc1JlYWQiKSxubj1TeW1ib2woImNo ZWNrRGVjb21wcmVzc2lvblJhdGlvIiksSGE9KCk9PiEwLEhzPWNsYXNzIGV4dGVuZHMga2EuRXZl bnRFbWl0dGVye2ZpbGU7c3RyaWN0O21heE1ldGFFbnRyeVNpemU7ZmlsdGVyO2Jyb3RsaTt6c3Rk O21heERlY29tcHJlc3Npb25SYXRpbzt3cml0YWJsZT0hMDtyZWFkYWJsZT0hMTtbcGVdPVtdO1tf XTtbbWVdO1t6ZV07W0hdPSJiZWdpbiI7W1JlXT0iIjtbcmVdO1tndF07W09lXT0hMTtbU107W25l XT0hMTtbeGVdO1tkaV09ITE7W21pXT0hMTtbaXRdPSExO1tSdF09ITE7W2tzXT0hMTtbT3RdPTA7 W1VzXT0wO2NvbnN0cnVjdG9yKGU9e30pe3N1cGVyKCksdGhpcy5maWxlPWUuZmlsZXx8IiIsdGhp cy5vbihmaSwoKT0+eyh0aGlzW0hdPT09ImJlZ2luInx8dGhpc1t4ZV09PT0hMSkmJnRoaXMud2Fy bigiVEFSX0JBRF9BUkNISVZFIiwiVW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0Iil9KSxlLm9u ZG9uZT90aGlzLm9uKGZpLGUub25kb25lKTp0aGlzLm9uKGZpLCgpPT57dGhpcy5lbWl0KCJwcmVm aW5pc2giKSx0aGlzLmVtaXQoImZpbmlzaCIpLHRoaXMuZW1pdCgiZW5kIil9KSx0aGlzLnN0cmlj dD0hIWUuc3RyaWN0LHRoaXMubWF4RGVjb21wcmVzc2lvblJhdGlvPXR5cGVvZiBlLm1heERlY29t cHJlc3Npb25SYXRpbz09Im51bWJlciI/ZS5tYXhEZWNvbXByZXNzaW9uUmF0aW86V2EsdGhpcy5t YXhNZXRhRW50cnlTaXplPWUubWF4TWV0YUVudHJ5U2l6ZXx8VWEsdGhpcy5maWx0ZXI9dHlwZW9m IGUuZmlsdGVyPT0iZnVuY3Rpb24iP2UuZmlsdGVyOkhhO2xldCB0PWUuZmlsZSYmKGUuZmlsZS5l bmRzV2l0aCgiLnRhci5iciIpfHxlLmZpbGUuZW5kc1dpdGgoIi50YnIiKSk7dGhpcy5icm90bGk9 IShlLmd6aXB8fGUuenN0ZCkmJmUuYnJvdGxpIT09dm9pZCAwP2UuYnJvdGxpOnQ/dm9pZCAwOiEx O2xldCBpPWUuZmlsZSYmKGUuZmlsZS5lbmRzV2l0aCgiLnRhci56c3QiKXx8ZS5maWxlLmVuZHNX aXRoKCIudHpzdCIpKTt0aGlzLnpzdGQ9IShlLmd6aXB8fGUuYnJvdGxpKSYmZS56c3RkIT09dm9p ZCAwP2UuenN0ZDppPyEwOnZvaWQgMCx0aGlzLm9uKCJlbmQiLCgpPT50aGlzW3JuXSgpKSx0eXBl b2YgZS5vbndhcm49PSJmdW5jdGlvbiImJnRoaXMub24oIndhcm4iLGUub253YXJuKSx0eXBlb2Yg ZS5vblJlYWRFbnRyeT09ImZ1bmN0aW9uIiYmdGhpcy5vbigiZW50cnkiLGUub25SZWFkRW50cnkp fXdhcm4oZSx0LGk9e30peygwLGphLndhcm5NZXRob2QpKHRoaXMsZSx0LGkpfVtzbl0oZSx0KXt0 aGlzW3hlXT09PXZvaWQgMCYmKHRoaXNbeGVdPSExKTtsZXQgaTt0cnl7aT1uZXcgWHIuSGVhZGVy KGUsdCx0aGlzW3JlXSx0aGlzW2d0XSl9Y2F0Y2gocil7cmV0dXJuIHRoaXMud2FybigiVEFSX0VO VFJZX0lOVkFMSUQiLHIpfWlmKGkubnVsbEJsb2NrKXRoaXNbZGldPyh0aGlzW21pXT0hMCx0aGlz W0hdPT09ImJlZ2luIiYmKHRoaXNbSF09ImhlYWRlciIpLHRoaXNba2VdKCJlb2YiKSk6KHRoaXNb ZGldPSEwLHRoaXNba2VdKCJudWxsQmxvY2siKSk7ZWxzZSBpZih0aGlzW2RpXT0hMSwhaS5ja3N1 bVZhbGlkKXRoaXMud2FybigiVEFSX0VOVFJZX0lOVkFMSUQiLCJjaGVja3N1bSBmYWlsdXJlIix7 aGVhZGVyOml9KTtlbHNlIGlmKCFpLnBhdGgpdGhpcy53YXJuKCJUQVJfRU5UUllfSU5WQUxJRCIs InBhdGggaXMgcmVxdWlyZWQiLHtoZWFkZXI6aX0pO2Vsc2V7bGV0IHI9aS50eXBlO2lmKC9eKFN5 bWJvbGljKT9MaW5rJC8udGVzdChyKSYmIWkubGlua3BhdGgpdGhpcy53YXJuKCJUQVJfRU5UUllf SU5WQUxJRCIsImxpbmtwYXRoIHJlcXVpcmVkIix7aGVhZGVyOml9KTtlbHNlIGlmKCEvXihTeW1i b2xpYyk/TGluayQvLnRlc3QocikmJiEvXihHbG9iYWwpP0V4dGVuZGVkSGVhZGVyJC8udGVzdChy KSYmaS5saW5rcGF0aCl0aGlzLndhcm4oIlRBUl9FTlRSWV9JTlZBTElEIiwibGlua3BhdGggZm9y YmlkZGVuIix7aGVhZGVyOml9KTtlbHNle2xldCBuPXRoaXNbemVdPW5ldyB4YS5SZWFkRW50cnko aSx0aGlzW3JlXSx0aGlzW2d0XSk7aWYoIXRoaXNbeGVdKWlmKG4ucmVtYWluKXtsZXQgbz0oKT0+ e24uaW52YWxpZHx8KHRoaXNbeGVdPSEwKX07bi5vbigiZW5kIixvKX1lbHNlIHRoaXNbeGVdPSEw O24ubWV0YT9uLnNpemU+dGhpcy5tYXhNZXRhRW50cnlTaXplPyhuLmlnbm9yZT0hMCx0aGlzW2tl XSgiaWdub3JlZEVudHJ5IixuKSx0aGlzW0hdPSJpZ25vcmUiLG4ucmVzdW1lKCkpOm4uc2l6ZT4w JiYodGhpc1tSZV09IiIsbi5vbigiZGF0YSIsbz0+dGhpc1tSZV0rPW8pLHRoaXNbSF09Im1ldGEi KToodGhpc1tyZV09dm9pZCAwLG4uaWdub3JlPW4uaWdub3JlfHwhdGhpcy5maWx0ZXIobi5wYXRo LG4pLG4uaWdub3JlPyh0aGlzW2tlXSgiaWdub3JlZEVudHJ5IixuKSx0aGlzW0hdPW4ucmVtYWlu PyJpZ25vcmUiOiJoZWFkZXIiLG4ucmVzdW1lKCkpOihuLnJlbWFpbj90aGlzW0hdPSJib2R5Ijoo dGhpc1tIXT0iaGVhZGVyIixuLmVuZCgpKSx0aGlzW21lXT90aGlzW3BlXS5wdXNoKG4pOih0aGlz W3BlXS5wdXNoKG4pLHRoaXNbenNdKCkpKSl9fX1bcm5dKCl7cXVldWVNaWNyb3Rhc2soKCk9PnRo aXMuZW1pdCgiY2xvc2UiKSl9W0pyXShlKXtsZXQgdD0hMDtpZighZSl0aGlzW21lXT12b2lkIDAs dD0hMTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2xldFtpLC4uLnJdPWU7dGhpcy5lbWl0KGks Li4ucil9ZWxzZSB0aGlzW21lXT1lLHRoaXMuZW1pdCgiZW50cnkiLGUpLGUuZW1pdHRlZEVuZHx8 KGUub24oImVuZCIsKCk9PnRoaXNbenNdKCkpLHQ9ITEpO3JldHVybiB0fVt6c10oKXtkbzt3aGls ZSh0aGlzW0pyXSh0aGlzW3BlXS5zaGlmdCgpKSk7aWYodGhpc1twZV0ubGVuZ3RoPT09MCl7bGV0 IGU9dGhpc1ttZV07IWV8fGUuZmxvd2luZ3x8ZS5zaXplPT09ZS5yZW1haW4/dGhpc1tpdF18fHRo aXMuZW1pdCgiZHJhaW4iKTplLm9uY2UoImRyYWluIiwoKT0+dGhpcy5lbWl0KCJkcmFpbiIpKX19 W3hzXShlLHQpe2xldCBpPXRoaXNbemVdO2lmKCFpKXRocm93IG5ldyBFcnJvcigiYXR0ZW1wdCB0 byBjb25zdW1lIGJvZHkgd2l0aG91dCBlbnRyeT8/Iik7bGV0IHI9aS5ibG9ja1JlbWFpbj8/MCxu PXI+PWUubGVuZ3RoJiZ0PT09MD9lOmUuc3ViYXJyYXkodCx0K3IpO3JldHVybiBpLndyaXRlKG4p LGkuYmxvY2tSZW1haW58fCh0aGlzW0hdPSJoZWFkZXIiLHRoaXNbemVdPXZvaWQgMCxpLmVuZCgp KSxuLmxlbmd0aH1bdG5dKGUsdCl7bGV0IGk9dGhpc1t6ZV0scj10aGlzW3hzXShlLHQpO3JldHVy biF0aGlzW3plXSYmaSYmdGhpc1tlbl0oaSkscn1ba2VdKGUsdCxpKXt0aGlzW3BlXS5sZW5ndGg9 PT0wJiYhdGhpc1ttZV0/dGhpcy5lbWl0KGUsdCxpKTp0aGlzW3BlXS5wdXNoKFtlLHQsaV0pfVtl bl0oZSl7c3dpdGNoKHRoaXNba2VdKCJtZXRhIix0aGlzW1JlXSksZS50eXBlKXtjYXNlIkV4dGVu ZGVkSGVhZGVyIjpjYXNlIk9sZEV4dGVuZGVkSGVhZGVyIjp0aGlzW3JlXT1Rci5QYXgucGFyc2Uo dGhpc1tSZV0sdGhpc1tyZV0sITEpO2JyZWFrO2Nhc2UiR2xvYmFsRXh0ZW5kZWRIZWFkZXIiOnRo aXNbZ3RdPVFyLlBheC5wYXJzZSh0aGlzW1JlXSx0aGlzW2d0XSwhMCk7YnJlYWs7Y2FzZSJOZXh0 RmlsZUhhc0xvbmdQYXRoIjpjYXNlIk9sZEdudUxvbmdQYXRoIjp7bGV0IHQ9dGhpc1tyZV0/P09i amVjdC5jcmVhdGUobnVsbCk7dGhpc1tyZV09dCx0LnBhdGg9dGhpc1tSZV0ucmVwbGFjZSgvXDAu Ki8sIiIpO2JyZWFrfWNhc2UiTmV4dEZpbGVIYXNMb25nTGlua3BhdGgiOntsZXQgdD10aGlzW3Jl XXx8T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzW3JlXT10LHQubGlua3BhdGg9dGhpc1tSZV0ucmVw bGFjZSgvXDAuKi8sIiIpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIG1l dGE6ICIrZS50eXBlKX19YWJvcnQoZSl7dGhpc1tuZV18fCh0aGlzW25lXT0hMCx0aGlzLmVtaXQo ImFib3J0IixlKSx0aGlzLndhcm4oIlRBUl9BQk9SVCIsZSx7cmVjb3ZlcmFibGU6ITF9KSl9W25u XShlKXt0aGlzW1VzXSs9ZS5sZW5ndGg7bGV0IHQ9dGhpc1tVc10vdGhpc1tPdF07cmV0dXJuIHQ+ dGhpcy5tYXhEZWNvbXByZXNzaW9uUmF0aW8/KHRoaXMuYWJvcnQobmV3IEVycm9yKGBtYXggZGVj b21wcmVzc2lvbiByYXRpbyBleGNlZWRlZDogJHt0LnRvRml4ZWQoMil9ID4gJHt0aGlzLm1heERl Y29tcHJlc3Npb25SYXRpb31gKSksITEpOiEwfXdyaXRlKGUsdCxpKXtpZih0eXBlb2YgdD09ImZ1 bmN0aW9uIiYmKGk9dCx0PXZvaWQgMCksdHlwZW9mIGU9PSJzdHJpbmciJiYoZT1CdWZmZXIuZnJv bShlLHR5cGVvZiB0PT0ic3RyaW5nIj90OiJ1dGY4IikpLHRoaXNbbmVdKXJldHVybiBpPy4oKSwh MTtpZigodGhpc1tTXT09PXZvaWQgMHx8dGhpcy5icm90bGk9PT12b2lkIDAmJnRoaXNbU109PT0h MSkmJmUpe2lmKHRoaXNbX10mJihlPUJ1ZmZlci5jb25jYXQoW3RoaXNbX10sZV0pLHRoaXNbX109 dm9pZCAwKSxlLmxlbmd0aDxxYSlyZXR1cm4gdGhpc1tfXT1lLGk/LigpLCEwO2ZvcihsZXQgaD0w O3RoaXNbU109PT12b2lkIDAmJmg8cXMubGVuZ3RoO2grKyllW2hdIT09cXNbaF0mJih0aGlzW1Nd PSExKTtsZXQgbz0hMTtpZih0aGlzW1NdPT09ITEmJnRoaXMuenN0ZCE9PSExKXtvPSEwO2Zvcihs ZXQgaD0wO2g8V3MubGVuZ3RoO2grKylpZihlW2hdIT09V3NbaF0pe289ITE7YnJlYWt9fWxldCBh PXRoaXMuYnJvdGxpPT09dm9pZCAwJiYhbztpZih0aGlzW1NdPT09ITEmJmEpaWYoZS5sZW5ndGg8 NTEyKWlmKHRoaXNbT2VdKXRoaXMuYnJvdGxpPSEwO2Vsc2UgcmV0dXJuIHRoaXNbX109ZSxpPy4o KSwhMDtlbHNlIHRyeXtuZXcgWHIuSGVhZGVyKGUuc3ViYXJyYXkoMCw1MTIpKSx0aGlzLmJyb3Rs aT0hMX1jYXRjaHt0aGlzLmJyb3RsaT0hMH1pZih0aGlzW1NdPT09dm9pZCAwfHx0aGlzW1NdPT09 ITEmJih0aGlzLmJyb3RsaXx8bykpe2xldCBoPXRoaXNbT2VdO3RoaXNbT2VdPSExLHRoaXNbU109 dGhpc1tTXT09PXZvaWQgMD9uZXcgQnMuVW56aXAoe30pOm8/bmV3IEJzLlpzdGREZWNvbXByZXNz KHt9KTpuZXcgQnMuQnJvdGxpRGVjb21wcmVzcyh7fSksdGhpc1tTXS5vbigiZGF0YSIsYz0+e3Ro aXNbbm5dKGMpJiZ0aGlzW2xpXShjKX0pLHRoaXNbU10ub24oImVycm9yIixjPT57dGhpc1tuZV18 fHRoaXMuYWJvcnQoYyl9KSx0aGlzW1NdLm9uKCJlbmQiLCgpPT57dGhpc1tPZV09ITAsdGhpc1ts aV0oKX0pLHRoaXNbaXRdPSEwLHRoaXNbT3RdKz1lLmxlbmd0aDtsZXQgbD0hIXRoaXNbU11baD8i ZW5kIjoid3JpdGUiXShlKTtyZXR1cm4gdGhpc1tpdF09ITEsaT8uKCksbH19dGhpc1tpdF09ITAs dGhpc1tTXT8odGhpc1tPdF0rPWUubGVuZ3RoLHRoaXNbU10ud3JpdGUoZSkpOnRoaXNbbGldKGUp LHRoaXNbaXRdPSExO2xldCBuPXRoaXNbcGVdLmxlbmd0aD4wPyExOnRoaXNbbWVdP3RoaXNbbWVd LmZsb3dpbmc6ITA7cmV0dXJuIW4mJnRoaXNbcGVdLmxlbmd0aD09PTAmJnRoaXNbbWVdPy5vbmNl KCJkcmFpbiIsKCk9PnRoaXMuZW1pdCgiZHJhaW4iKSksaT8uKCksbn1banNdKGUpe2UmJiF0aGlz W25lXSYmKHRoaXNbX109dGhpc1tfXT9CdWZmZXIuY29uY2F0KFt0aGlzW19dLGVdKTplKX1bdWld KCl7aWYodGhpc1tPZV0mJiF0aGlzW2tzXSYmIXRoaXNbbmVdJiYhdGhpc1tSdF0pe3RoaXNba3Nd PSEwO2xldCBlPXRoaXNbemVdO2lmKGU/LmJsb2NrUmVtYWluKXtsZXQgdD10aGlzW19dP3RoaXNb X10ubGVuZ3RoOjA7dGhpcy53YXJuKCJUQVJfQkFEX0FSQ0hJVkUiLGBUcnVuY2F0ZWQgaW5wdXQg KG5lZWRlZCAke2UuYmxvY2tSZW1haW59IG1vcmUgYnl0ZXMsIG9ubHkgJHt0fSBhdmFpbGFibGUp YCx7ZW50cnk6ZX0pLHRoaXNbX10mJmUud3JpdGUodGhpc1tfXSksZS5lbmQoKX10aGlzW2tlXShm aSl9fVtsaV0oZSl7aWYodGhpc1tSdF0mJmUpdGhpc1tqc10oZSk7ZWxzZSBpZighZSYmIXRoaXNb X10pdGhpc1t1aV0oKTtlbHNlIGlmKGUpe2lmKHRoaXNbUnRdPSEwLHRoaXNbX10pe3RoaXNbanNd KGUpO2xldCB0PXRoaXNbX107dGhpc1tfXT12b2lkIDAsdGhpc1tjaV0odCl9ZWxzZSB0aGlzW2Np XShlKTtmb3IoO3RoaXNbX10mJnRoaXNbX10/Lmxlbmd0aD49NTEyJiYhdGhpc1tuZV0mJiF0aGlz W21pXTspe2xldCB0PXRoaXNbX107dGhpc1tfXT12b2lkIDAsdGhpc1tjaV0odCl9dGhpc1tSdF09 ITF9KCF0aGlzW19dfHx0aGlzW09lXSkmJnRoaXNbdWldKCl9W2NpXShlKXtsZXQgdD0wLGk9ZS5s ZW5ndGg7Zm9yKDt0KzUxMjw9aSYmIXRoaXNbbmVdJiYhdGhpc1ttaV07KXN3aXRjaCh0aGlzW0hd KXtjYXNlImJlZ2luIjpjYXNlImhlYWRlciI6dGhpc1tzbl0oZSx0KSx0Kz01MTI7YnJlYWs7Y2Fz ZSJpZ25vcmUiOmNhc2UiYm9keSI6dCs9dGhpc1t4c10oZSx0KTticmVhaztjYXNlIm1ldGEiOnQr PXRoaXNbdG5dKGUsdCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc3Rh dGU6ICIrdGhpc1tIXSl9dDxpJiYodGhpc1tfXT10aGlzW19dP0J1ZmZlci5jb25jYXQoW2Uuc3Vi YXJyYXkodCksdGhpc1tfXV0pOmUuc3ViYXJyYXkodCkpfWVuZChlLHQsaSl7cmV0dXJuIHR5cGVv ZiBlPT0iZnVuY3Rpb24iJiYoaT1lLHQ9dm9pZCAwLGU9dm9pZCAwKSx0eXBlb2YgdD09ImZ1bmN0 aW9uIiYmKGk9dCx0PXZvaWQgMCksdHlwZW9mIGU9PSJzdHJpbmciJiYoZT1CdWZmZXIuZnJvbShl LHQpKSxpJiZ0aGlzLm9uY2UoImZpbmlzaCIsaSksdGhpc1tuZV18fCh0aGlzW1NdPyhlJiYodGhp c1tPdF0rPWUubGVuZ3RoLHRoaXNbU10ud3JpdGUoZSkpLHRoaXNbU10uZW5kKCkpOih0aGlzW09l XT0hMCwodGhpcy5icm90bGk9PT12b2lkIDB8fHRoaXMuenN0ZD09PXZvaWQgMCkmJihlPWV8fEJ1 ZmZlci5hbGxvYygwKSksZSYmdGhpcy53cml0ZShlKSx0aGlzW3VpXSgpKSksdGhpc319O3BpLlBh cnNlcj1Ic30pO3ZhciB5aT1kKHdpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0 eSh3aSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7d2kuc3RyaXBUcmFpbGluZ1NsYXNoZXM9dm9p ZCAwO3ZhciBHYT1zPT57bGV0IGU9cy5sZW5ndGgtMSx0PS0xO2Zvcig7ZT4tMSYmcy5jaGFyQXQo ZSk9PT0iLyI7KXQ9ZSxlLS07cmV0dXJuIHQ9PT0tMT9zOnMuc2xpY2UoMCx0KX07d2kuc3RyaXBU cmFpbGluZ1NsYXNoZXM9R2F9KTt2YXIgcnQ9ZChCPT57InVzZSBzdHJpY3QiO3ZhciBaYT1CJiZC Ll9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHMsZSx0LGkpe2k9PT12 b2lkIDAmJihpPXQpO3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KTso IXJ8fCgiZ2V0ImluIHI/IWUuX19lc01vZHVsZTpyLndyaXRhYmxlfHxyLmNvbmZpZ3VyYWJsZSkp JiYocj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVt0XX19KSxPYmplY3Qu ZGVmaW5lUHJvcGVydHkocyxpLHIpfSk6KGZ1bmN0aW9uKHMsZSx0LGkpe2k9PT12b2lkIDAmJihp PXQpLHNbaV09ZVt0XX0pKSxZYT1CJiZCLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVh dGU/KGZ1bmN0aW9uKHMsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHMsImRlZmF1bHQiLHtlbnVt ZXJhYmxlOiEwLHZhbHVlOmV9KX0pOmZ1bmN0aW9uKHMsZSl7cy5kZWZhdWx0PWV9KSxLYT1CJiZC Ll9faW1wb3J0U3Rhcnx8KGZ1bmN0aW9uKCl7dmFyIHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHM9T2Jq ZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3ZhciBpPVtdO2Zvcih2YXIgciBp biB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiYoaVtpLmxlbmd0 aF09cik7cmV0dXJuIGl9LHMoZSl9O3JldHVybiBmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1 bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYoZSE9bnVsbClmb3IodmFyIGk9cyhlKSxyPTA7cjxpLmxl bmd0aDtyKyspaVtyXSE9PSJkZWZhdWx0IiYmWmEodCxlLGlbcl0pO3JldHVybiBZYSh0LGUpLHR9 fSkoKSxWYT1CJiZCLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocyl7cmV0dXJuIHMmJnMuX19l c01vZHVsZT9zOntkZWZhdWx0OnN9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiX19lc01vZHVs ZSIse3ZhbHVlOiEwfSk7Qi5saXN0PUIuZmlsZXNGaWx0ZXI9dm9pZCAwO3ZhciAkYT1LYShLZSgp KSxzdD1WYShyZXF1aXJlKCJub2RlOmZzIikpLG9uPXJlcXVpcmUoInBhdGgiKSxYYT1WZSgpLEVp PV9pKCksR3M9eWkoKSxRYT1zPT57bGV0IGU9cy5vblJlYWRFbnRyeTtzLm9uUmVhZEVudHJ5PWU/ dD0+e2UodCksdC5yZXN1bWUoKX06dD0+dC5yZXN1bWUoKX0sSmE9KHMsZSk9PntsZXQgdD1uZXcg TWFwKGUubWFwKG49PlsoMCxHcy5zdHJpcFRyYWlsaW5nU2xhc2hlcykobiksITBdKSksaT1zLmZp bHRlcixyPShuLG89IiIpPT57bGV0IGE9b3x8KDAsb24ucGFyc2UpKG4pLnJvb3R8fCIuIixoO2lm KG49PT1hKWg9ITE7ZWxzZXtsZXQgbD10LmdldChuKTtoPWwhPT12b2lkIDA/bDpyKCgwLG9uLmRp cm5hbWUpKG4pLGEpfXJldHVybiB0LnNldChuLGgpLGh9O3MuZmlsdGVyPWk/KG4sbyk9Pmkobixv KSYmcigoMCxHcy5zdHJpcFRyYWlsaW5nU2xhc2hlcykobikpOm49PnIoKDAsR3Muc3RyaXBUcmFp bGluZ1NsYXNoZXMpKG4pKX07Qi5maWxlc0ZpbHRlcj1KYTt2YXIgZWg9cz0+e2xldCBlPW5ldyBF aS5QYXJzZXIocyksdD1zLmZpbGUsaTt0cnl7aT1zdC5kZWZhdWx0Lm9wZW5TeW5jKHQsInIiKTts ZXQgcj1zdC5kZWZhdWx0LmZzdGF0U3luYyhpKSxuPXMubWF4UmVhZFNpemV8fDE2KjEwMjQqMTAy NDtpZihyLnNpemU8bil7bGV0IG89QnVmZmVyLmFsbG9jVW5zYWZlKHIuc2l6ZSksYT1zdC5kZWZh dWx0LnJlYWRTeW5jKGksbywwLHIuc2l6ZSwwKTtlLmVuZChhPT09by5ieXRlTGVuZ3RoP286by5z dWJhcnJheSgwLGEpKX1lbHNle2xldCBvPTAsYT1CdWZmZXIuYWxsb2NVbnNhZmUobik7Zm9yKDtv PHIuc2l6ZTspe2xldCBoPXN0LmRlZmF1bHQucmVhZFN5bmMoaSxhLDAsbixvKTtpZihoPT09MCli cmVhaztvKz1oLGUud3JpdGUoYS5zdWJhcnJheSgwLGgpKX1lLmVuZCgpfX1maW5hbGx5e2lmKHR5 cGVvZiBpPT0ibnVtYmVyIil0cnl7c3QuZGVmYXVsdC5jbG9zZVN5bmMoaSl9Y2F0Y2h7fX19LHRo PShzLGUpPT57bGV0IHQ9bmV3IEVpLlBhcnNlcihzKSxpPXMubWF4UmVhZFNpemV8fDE2KjEwMjQq MTAyNCxyPXMuZmlsZTtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9Pnt0Lm9uKCJlcnJvciIsYSks dC5vbigiZW5kIixvKSxzdC5kZWZhdWx0LnN0YXQociwoaCxsKT0+e2lmKGgpYShoKTtlbHNle2xl dCBjPW5ldyAkYS5SZWFkU3RyZWFtKHIse3JlYWRTaXplOmksc2l6ZTpsLnNpemV9KTtjLm9uKCJl cnJvciIsYSksYy5waXBlKHQpfX0pfSl9O0IubGlzdD0oMCxYYS5tYWtlQ29tbWFuZCkoZWgsdGgs cz0+bmV3IEVpLlBhcnNlcihzKSxzPT5uZXcgRWkuUGFyc2VyKHMpLChzLGUpPT57ZT8ubGVuZ3Ro JiYoMCxCLmZpbGVzRmlsdGVyKShzLGUpLHMubm9SZXN1bWV8fFFhKHMpfSl9KTt2YXIgYW49ZChi aT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYmksIl9fZXNNb2R1bGUiLHt2 YWx1ZTohMH0pO2JpLm1vZGVGaXg9dm9pZCAwO3ZhciBpaD0ocyxlLHQpPT4ocyY9NDA5NSx0JiYo cz0oc3wzODQpJi0xOSksZSYmKHMmMjU2JiYoc3w9NjQpLHMmMzImJihzfD04KSxzJjQmJihzfD0x KSkscyk7YmkubW9kZUZpeD1paH0pO3ZhciBacz1kKFNpPT57InVzZSBzdHJpY3QiO09iamVjdC5k ZWZpbmVQcm9wZXJ0eShTaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7U2kuc3RyaXBBYnNvbHV0 ZVBhdGg9dm9pZCAwO3ZhciBzaD1yZXF1aXJlKCJub2RlOnBhdGgiKSx7aXNBYnNvbHV0ZTpyaCxw YXJzZTpobn09c2gud2luMzIsbmg9cz0+e2xldCBlPSIiLHQ9aG4ocyk7Zm9yKDtyaChzKXx8dC5y b290Oyl7bGV0IGk9cy5jaGFyQXQoMCk9PT0iLyImJnMuc2xpY2UoMCw0KSE9PSIvLz8vIj8iLyI6 dC5yb290O3M9cy5zbGljZShpLmxlbmd0aCksZSs9aSx0PWhuKHMpfXJldHVybltlLHNdfTtTaS5z dHJpcEFic29sdXRlUGF0aD1uaH0pO3ZhciBLcz1kKG50PT57InVzZSBzdHJpY3QiO09iamVjdC5k ZWZpbmVQcm9wZXJ0eShudCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7bnQuZGVjb2RlPW50LmVu Y29kZT12b2lkIDA7dmFyIGdpPVsifCIsIjwiLCI+IiwiPyIsIjoiXSxZcz1naS5tYXAocz0+U3Ry aW5nLmZyb21Db2RlUG9pbnQoNjE0NDArTnVtYmVyKHMuY29kZVBvaW50QXQoMCkpKSksb2g9bmV3 IE1hcChnaS5tYXAoKHMsZSk9PltzLFlzW2VdXSkpLGFoPW5ldyBNYXAoWXMubWFwKChzLGUpPT5b cyxnaVtlXV0pKSxoaD1zPT5naS5yZWR1Y2UoKGUsdCk9PmUuc3BsaXQodCkuam9pbihvaC5nZXQo dCkpLHMpO250LmVuY29kZT1oaDt2YXIgbGg9cz0+WXMucmVkdWNlKChlLHQpPT5lLnNwbGl0KHQp LmpvaW4oYWguZ2V0KHQpKSxzKTtudC5kZWNvZGU9bGh9KTt2YXIgbnI9ZChNPT57InVzZSBzdHJp Y3QiO3ZhciBjaD1NJiZNLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9u KHMsZSx0LGkpe2k9PT12b2lkIDAmJihpPXQpO3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURl c2NyaXB0b3IoZSx0KTsoIXJ8fCgiZ2V0ImluIHI/IWUuX19lc01vZHVsZTpyLndyaXRhYmxlfHxy LmNvbmZpZ3VyYWJsZSkpJiYocj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g ZVt0XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocyxpLHIpfSk6KGZ1bmN0aW9uKHMsZSx0LGkp e2k9PT12b2lkIDAmJihpPXQpLHNbaV09ZVt0XX0pKSx1aD1NJiZNLl9fc2V0TW9kdWxlRGVmYXVs dHx8KE9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHMsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHMs ImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KX0pOmZ1bmN0aW9uKHMsZSl7cy5kZWZh dWx0PWV9KSxmaD1NJiZNLl9faW1wb3J0U3Rhcnx8KGZ1bmN0aW9uKCl7dmFyIHM9ZnVuY3Rpb24o ZSl7cmV0dXJuIHM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3ZhciBp PVtdO2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0 LHIpJiYoaVtpLmxlbmd0aF09cik7cmV0dXJuIGl9LHMoZSl9O3JldHVybiBmdW5jdGlvbihlKXtp ZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYoZSE9bnVsbClmb3IodmFyIGk9 cyhlKSxyPTA7cjxpLmxlbmd0aDtyKyspaVtyXSE9PSJkZWZhdWx0IiYmY2godCxlLGlbcl0pO3Jl dHVybiB1aCh0LGUpLHR9fSkoKSxtbj1NJiZNLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocyl7 cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntkZWZhdWx0OnN9fTtPYmplY3QuZGVmaW5lUHJvcGVy dHkoTSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7TS5Xcml0ZUVudHJ5VGFyPU0uV3JpdGVFbnRy eVN5bmM9TS5Xcml0ZUVudHJ5PXZvaWQgMDt2YXIgYWU9bW4ocmVxdWlyZSgiZnMiKSkscG49V2Uo KSxsbj1tbihyZXF1aXJlKCJwYXRoIikpLF9uPWV0KCksd249YW4oKSxvZT10dCgpLHluPVF0KCks RW49c2koKSxibj1acygpLGRoPXlpKCksU249aGkoKSxtaD1maChLcygpKSxnbj0ocyxlKT0+ZT8o cz0oMCxvZS5ub3JtYWxpemVXaW5kb3dzUGF0aCkocykucmVwbGFjZSgvXlwuKFwvfCQpLywiIiks KDAsZGguc3RyaXBUcmFpbGluZ1NsYXNoZXMpKGUpKyIvIitzKTooMCxvZS5ub3JtYWxpemVXaW5k b3dzUGF0aCkocykscGg9MTYqMTAyNCoxMDI0LGNuPVN5bWJvbCgicHJvY2VzcyIpLHVuPVN5bWJv bCgiZmlsZSIpLGZuPVN5bWJvbCgiZGlyZWN0b3J5IiksJHM9U3ltYm9sKCJzeW1saW5rIiksZG49 U3ltYm9sKCJoYXJkbGluayIpLHZ0PVN5bWJvbCgiaGVhZGVyIiksUmk9U3ltYm9sKCJyZWFkIiks WHM9U3ltYm9sKCJsc3RhdCIpLE9pPVN5bWJvbCgib25sc3RhdCIpLFFzPVN5bWJvbCgib25yZWFk IiksSnM9U3ltYm9sKCJvbnJlYWRsaW5rIiksZXI9U3ltYm9sKCJvcGVuZmlsZSIpLHRyPVN5bWJv bCgib25vcGVuZmlsZSIpLHZlPVN5bWJvbCgiY2xvc2UiKSx2aT1TeW1ib2woIm1vZGUiKSxpcj1T eW1ib2woImF3YWl0RHJhaW4iKSxWcz1TeW1ib2woIm9uZHJhaW4iKSxoZT1TeW1ib2woInByZWZp eCIpLFRpPWNsYXNzIGV4dGVuZHMgcG4uTWluaXBhc3N7cGF0aDtwb3J0YWJsZTtteXVpZD1wcm9j ZXNzLmdldHVpZCYmcHJvY2Vzcy5nZXR1aWQoKXx8MDtteXVzZXI9cHJvY2Vzcy5lbnYuVVNFUnx8 IiI7bWF4UmVhZFNpemU7bGlua0NhY2hlO3N0YXRDYWNoZTtwcmVzZXJ2ZVBhdGhzO2N3ZDtzdHJp Y3Q7bXRpbWU7bm9QYXg7bm9NdGltZTtwcmVmaXg7ZmQ7YmxvY2tMZW49MDtibG9ja1JlbWFpbj0w O2J1Zjtwb3M9MDtyZW1haW49MDtsZW5ndGg9MDtvZmZzZXQ9MDt3aW4zMjthYnNvbHV0ZTtoZWFk ZXI7dHlwZTtsaW5rcGF0aDtzdGF0O29uV3JpdGVFbnRyeTsjZT0hMTtjb25zdHJ1Y3RvcihlLHQ9 e30pe2xldCBpPSgwLHluLmRlYWxpYXMpKHQpO3N1cGVyKCksdGhpcy5wYXRoPSgwLG9lLm5vcm1h bGl6ZVdpbmRvd3NQYXRoKShlKSx0aGlzLnBvcnRhYmxlPSEhaS5wb3J0YWJsZSx0aGlzLm1heFJl YWRTaXplPWkubWF4UmVhZFNpemV8fHBoLHRoaXMubGlua0NhY2hlPWkubGlua0NhY2hlfHxuZXcg TWFwLHRoaXMuc3RhdENhY2hlPWkuc3RhdENhY2hlfHxuZXcgTWFwLHRoaXMucHJlc2VydmVQYXRo cz0hIWkucHJlc2VydmVQYXRocyx0aGlzLmN3ZD0oMCxvZS5ub3JtYWxpemVXaW5kb3dzUGF0aCko aS5jd2R8fHByb2Nlc3MuY3dkKCkpLHRoaXMuc3RyaWN0PSEhaS5zdHJpY3QsdGhpcy5ub1BheD0h IWkubm9QYXgsdGhpcy5ub010aW1lPSEhaS5ub010aW1lLHRoaXMubXRpbWU9aS5tdGltZSx0aGlz LnByZWZpeD1pLnByZWZpeD8oMCxvZS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoaS5wcmVmaXgpOnZv aWQgMCx0aGlzLm9uV3JpdGVFbnRyeT1pLm9uV3JpdGVFbnRyeSx0eXBlb2YgaS5vbndhcm49PSJm dW5jdGlvbiImJnRoaXMub24oIndhcm4iLGkub253YXJuKTtsZXQgcj0hMTtpZighdGhpcy5wcmVz ZXJ2ZVBhdGhzKXtsZXRbbyxhXT0oMCxibi5zdHJpcEFic29sdXRlUGF0aCkodGhpcy5wYXRoKTtv JiZ0eXBlb2YgYT09InN0cmluZyImJih0aGlzLnBhdGg9YSxyPW8pfXRoaXMud2luMzI9ISFpLndp bjMyfHxwcm9jZXNzLnBsYXRmb3JtPT09IndpbjMyIix0aGlzLndpbjMyJiYodGhpcy5wYXRoPW1o LmRlY29kZSh0aGlzLnBhdGgucmVwbGFjZUFsbCgvXFwvZywiLyIpKSxlPWUucmVwbGFjZUFsbCgv XFwvZywiLyIpKSx0aGlzLmFic29sdXRlPSgwLG9lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShpLmFi c29sdXRlfHxsbi5kZWZhdWx0LnJlc29sdmUodGhpcy5jd2QsZSkpLHRoaXMucGF0aD09PSIiJiYo dGhpcy5wYXRoPSIuLyIpLHImJnRoaXMud2FybigiVEFSX0VOVFJZX0lORk8iLGBzdHJpcHBpbmcg JHtyfSBmcm9tIGFic29sdXRlIHBhdGhgLHtlbnRyeTp0aGlzLHBhdGg6cit0aGlzLnBhdGh9KTts ZXQgbj10aGlzLnN0YXRDYWNoZS5nZXQodGhpcy5hYnNvbHV0ZSk7bj90aGlzW09pXShuKTp0aGlz W1hzXSgpfXdhcm4oZSx0LGk9e30pe3JldHVybigwLFNuLndhcm5NZXRob2QpKHRoaXMsZSx0LGkp fWVtaXQoZSwuLi50KXtyZXR1cm4gZT09PSJlcnJvciImJih0aGlzLiNlPSEwKSxzdXBlci5lbWl0 KGUsLi4udCl9W1hzXSgpe2FlLmRlZmF1bHQubHN0YXQodGhpcy5hYnNvbHV0ZSwoZSx0KT0+e2lm KGUpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLGUpO3RoaXNbT2ldKHQpfSl9W09pXShlKXt0aGlz LnN0YXRDYWNoZS5zZXQodGhpcy5hYnNvbHV0ZSxlKSx0aGlzLnN0YXQ9ZSxlLmlzRmlsZSgpfHwo ZS5zaXplPTApLHRoaXMudHlwZT1faChlKSx0aGlzLmVtaXQoInN0YXQiLGUpLHRoaXNbY25dKCl9 W2NuXSgpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UiRmlsZSI6cmV0dXJuIHRoaXNbdW5dKCk7Y2Fz ZSJEaXJlY3RvcnkiOnJldHVybiB0aGlzW2ZuXSgpO2Nhc2UiU3ltYm9saWNMaW5rIjpyZXR1cm4g dGhpc1skc10oKTtkZWZhdWx0OnJldHVybiB0aGlzLmVuZCgpfX1bdmldKGUpe3JldHVybigwLHdu Lm1vZGVGaXgpKGUsdGhpcy50eXBlPT09IkRpcmVjdG9yeSIsdGhpcy5wb3J0YWJsZSl9W2hlXShl KXtyZXR1cm4gZ24oZSx0aGlzLnByZWZpeCl9W3Z0XSgpe2lmKCF0aGlzLnN0YXQpdGhyb3cgbmV3 IEVycm9yKCJjYW5ub3Qgd3JpdGUgaGVhZGVyIGJlZm9yZSBzdGF0Iik7dGhpcy50eXBlPT09IkRp cmVjdG9yeSImJnRoaXMucG9ydGFibGUmJih0aGlzLm5vTXRpbWU9ITApLHRoaXMub25Xcml0ZUVu dHJ5Py4odGhpcyksdGhpcy5oZWFkZXI9bmV3IF9uLkhlYWRlcih7cGF0aDp0aGlzW2hlXSh0aGlz LnBhdGgpLGxpbmtwYXRoOnRoaXMudHlwZT09PSJMaW5rIiYmdGhpcy5saW5rcGF0aCE9PXZvaWQg MD90aGlzW2hlXSh0aGlzLmxpbmtwYXRoKTp0aGlzLmxpbmtwYXRoLG1vZGU6dGhpc1t2aV0odGhp cy5zdGF0Lm1vZGUpLHVpZDp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQudWlkLGdpZDp0 aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQuZ2lkLHNpemU6dGhpcy5zdGF0LnNpemUsbXRp bWU6dGhpcy5ub010aW1lP3ZvaWQgMDp0aGlzLm10aW1lfHx0aGlzLnN0YXQubXRpbWUsdHlwZTp0 aGlzLnR5cGU9PT0iVW5zdXBwb3J0ZWQiP3ZvaWQgMDp0aGlzLnR5cGUsdW5hbWU6dGhpcy5wb3J0 YWJsZT92b2lkIDA6dGhpcy5zdGF0LnVpZD09PXRoaXMubXl1aWQ/dGhpcy5teXVzZXI6IiIsYXRp bWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5zdGF0LmF0aW1lLGN0aW1lOnRoaXMucG9ydGFi bGU/dm9pZCAwOnRoaXMuc3RhdC5jdGltZX0pLHRoaXMuaGVhZGVyLmVuY29kZSgpJiYhdGhpcy5u b1BheCYmc3VwZXIud3JpdGUobmV3IEVuLlBheCh7YXRpbWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6 dGhpcy5oZWFkZXIuYXRpbWUsY3RpbWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5oZWFkZXIu Y3RpbWUsZ2lkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuaGVhZGVyLmdpZCxtdGltZTp0aGlz Lm5vTXRpbWU/dm9pZCAwOnRoaXMubXRpbWV8fHRoaXMuaGVhZGVyLm10aW1lLHBhdGg6dGhpc1to ZV0odGhpcy5wYXRoKSxsaW5rcGF0aDp0aGlzLnR5cGU9PT0iTGluayImJnRoaXMubGlua3BhdGgh PT12b2lkIDA/dGhpc1toZV0odGhpcy5saW5rcGF0aCk6dGhpcy5saW5rcGF0aCxzaXplOnRoaXMu aGVhZGVyLnNpemUsdWlkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuaGVhZGVyLnVpZCx1bmFt ZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLmhlYWRlci51bmFtZSxkZXY6dGhpcy5wb3J0YWJs ZT92b2lkIDA6dGhpcy5zdGF0LmRldixpbm86dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5zdGF0 LmlubyxubGluazp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQubmxpbmt9KS5lbmNvZGUo KSk7bGV0IGU9dGhpcy5oZWFkZXI/LmJsb2NrO2lmKCFlKXRocm93IG5ldyBFcnJvcigiZmFpbGVk IHRvIGVuY29kZSBoZWFkZXIiKTtzdXBlci53cml0ZShlKX1bZm5dKCl7aWYoIXRoaXMuc3RhdCl0 aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGVudHJ5IHdpdGhvdXQgc3Rh dCIpO3RoaXMucGF0aC5zbGljZSgtMSkhPT0iLyImJih0aGlzLnBhdGgrPSIvIiksdGhpcy5zdGF0 LnNpemU9MCx0aGlzW3Z0XSgpLHRoaXMuZW5kKCl9WyRzXSgpe2FlLmRlZmF1bHQucmVhZGxpbmso dGhpcy5hYnNvbHV0ZSwoZSx0KT0+e2lmKGUpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLGUpO3Ro aXNbSnNdKHQpfSl9W0pzXShlKXt0aGlzLmxpbmtwYXRoPSgwLG9lLm5vcm1hbGl6ZVdpbmRvd3NQ YXRoKShlKSx0aGlzW3Z0XSgpLHRoaXMuZW5kKCl9W2RuXShlKXtpZighdGhpcy5zdGF0KXRocm93 IG5ldyBFcnJvcigiY2Fubm90IGNyZWF0ZSBsaW5rIGVudHJ5IHdpdGhvdXQgc3RhdCIpO3RoaXMu dHlwZT0iTGluayIsdGhpcy5saW5rcGF0aD0oMCxvZS5ub3JtYWxpemVXaW5kb3dzUGF0aCkobG4u ZGVmYXVsdC5yZWxhdGl2ZSh0aGlzLmN3ZCxlKSksdGhpcy5zdGF0LnNpemU9MCx0aGlzW3Z0XSgp LHRoaXMuZW5kKCl9W3VuXSgpe2lmKCF0aGlzLnN0YXQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qg Y3JlYXRlIGZpbGUgZW50cnkgd2l0aG91dCBzdGF0Iik7aWYodGhpcy5zdGF0Lm5saW5rPjEpe2xl dCBlPWAke3RoaXMuc3RhdC5kZXZ9OiR7dGhpcy5zdGF0Lmlub31gLHQ9dGhpcy5saW5rQ2FjaGUu Z2V0KGUpO2lmKHQ/LmluZGV4T2YodGhpcy5jd2QpPT09MClyZXR1cm4gdGhpc1tkbl0odCk7dGhp cy5saW5rQ2FjaGUuc2V0KGUsdGhpcy5hYnNvbHV0ZSl9aWYodGhpc1t2dF0oKSx0aGlzLnN0YXQu c2l6ZT09PTApcmV0dXJuIHRoaXMuZW5kKCk7dGhpc1tlcl0oKX1bZXJdKCl7YWUuZGVmYXVsdC5v cGVuKHRoaXMuYWJzb2x1dGUsInIiLChlLHQpPT57aWYoZSlyZXR1cm4gdGhpcy5lbWl0KCJlcnJv ciIsZSk7dGhpc1t0cl0odCl9KX1bdHJdKGUpe2lmKHRoaXMuZmQ9ZSx0aGlzLiNlKXJldHVybiB0 aGlzW3ZlXSgpO2lmKCF0aGlzLnN0YXQpdGhyb3cgbmV3IEVycm9yKCJzaG91bGQgc3RhdCBiZWZv cmUgY2FsbGluZyBvbm9wZW5maWxlIik7dGhpcy5ibG9ja0xlbj01MTIqTWF0aC5jZWlsKHRoaXMu c3RhdC5zaXplLzUxMiksdGhpcy5ibG9ja1JlbWFpbj10aGlzLmJsb2NrTGVuO2xldCB0PU1hdGgu bWluKHRoaXMuYmxvY2tMZW4sdGhpcy5tYXhSZWFkU2l6ZSk7dGhpcy5idWY9QnVmZmVyLmFsbG9j VW5zYWZlKHQpLHRoaXMub2Zmc2V0PTAsdGhpcy5wb3M9MCx0aGlzLnJlbWFpbj10aGlzLnN0YXQu c2l6ZSx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGgsdGhpc1tSaV0oKX1bUmldKCl7bGV0e2Zk OmUsYnVmOnQsb2Zmc2V0OmksbGVuZ3RoOnIscG9zOm59PXRoaXM7aWYoZT09PXZvaWQgMHx8dD09 PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCByZWFkIGZpbGUgd2l0aG91dCBmaXJzdCBv cGVuaW5nIik7YWUuZGVmYXVsdC5yZWFkKGUsdCxpLHIsbiwobyxhKT0+e2lmKG8pcmV0dXJuIHRo aXNbdmVdKCgpPT50aGlzLmVtaXQoImVycm9yIixvKSk7dGhpc1tRc10oYSl9KX1bdmVdKGU9KCk9 Pnt9KXt0aGlzLmZkIT09dm9pZCAwJiZhZS5kZWZhdWx0LmNsb3NlKHRoaXMuZmQsZSl9W1FzXShl KXtpZihlPD0wJiZ0aGlzLnJlbWFpbj4wKXtsZXQgcj1PYmplY3QuYXNzaWduKG5ldyBFcnJvcigi ZW5jb3VudGVyZWQgdW5leHBlY3RlZCBFT0YiKSx7cGF0aDp0aGlzLmFic29sdXRlLHN5c2NhbGw6 InJlYWQiLGNvZGU6IkVPRiJ9KTtyZXR1cm4gdGhpc1t2ZV0oKCk9PnRoaXMuZW1pdCgiZXJyb3Ii LHIpKX1pZihlPnRoaXMucmVtYWluKXtsZXQgcj1PYmplY3QuYXNzaWduKG5ldyBFcnJvcigiZGlk IG5vdCBlbmNvdW50ZXIgZXhwZWN0ZWQgRU9GIikse3BhdGg6dGhpcy5hYnNvbHV0ZSxzeXNjYWxs OiJyZWFkIixjb2RlOiJFT0YifSk7cmV0dXJuIHRoaXNbdmVdKCgpPT50aGlzLmVtaXQoImVycm9y IixyKSl9aWYoIXRoaXMuYnVmKXRocm93IG5ldyBFcnJvcigic2hvdWxkIGhhdmUgY3JlYXRlZCBi dWZmZXIgcHJpb3IgdG8gcmVhZGluZyIpO2lmKGU9PT10aGlzLnJlbWFpbilmb3IobGV0IHI9ZTty PHRoaXMubGVuZ3RoJiZlPHRoaXMuYmxvY2tSZW1haW47cisrKXRoaXMuYnVmW3IrdGhpcy5vZmZz ZXRdPTAsZSsrLHRoaXMucmVtYWluKys7bGV0IHQ9dGhpcy5vZmZzZXQ9PT0wJiZlPT09dGhpcy5i dWYubGVuZ3RoP3RoaXMuYnVmOnRoaXMuYnVmLnN1YmFycmF5KHRoaXMub2Zmc2V0LHRoaXMub2Zm c2V0K2UpO3RoaXMud3JpdGUodCk/dGhpc1tWc10oKTp0aGlzW2lyXSgoKT0+dGhpc1tWc10oKSl9 W2lyXShlKXt0aGlzLm9uY2UoImRyYWluIixlKX13cml0ZShlLHQsaSl7aWYodHlwZW9mIHQ9PSJm dW5jdGlvbiImJihpPXQsdD12b2lkIDApLHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9QnVmZmVyLmZy b20oZSx0eXBlb2YgdD09InN0cmluZyI/dDoidXRmOCIpKSx0aGlzLmJsb2NrUmVtYWluPGUubGVu Z3RoKXtsZXQgcj1PYmplY3QuYXNzaWduKG5ldyBFcnJvcigid3JpdGluZyBtb3JlIGRhdGEgdGhh biBleHBlY3RlZCIpLHtwYXRoOnRoaXMuYWJzb2x1dGV9KTtyZXR1cm4gdGhpcy5lbWl0KCJlcnJv ciIscil9cmV0dXJuIHRoaXMucmVtYWluLT1lLmxlbmd0aCx0aGlzLmJsb2NrUmVtYWluLT1lLmxl bmd0aCx0aGlzLnBvcys9ZS5sZW5ndGgsdGhpcy5vZmZzZXQrPWUubGVuZ3RoLHN1cGVyLndyaXRl KGUsbnVsbCxpKX1bVnNdKCl7aWYoIXRoaXMucmVtYWluKXJldHVybiB0aGlzLmJsb2NrUmVtYWlu JiZzdXBlci53cml0ZShCdWZmZXIuYWxsb2ModGhpcy5ibG9ja1JlbWFpbikpLHRoaXNbdmVdKGU9 PmU/dGhpcy5lbWl0KCJlcnJvciIsZSk6dGhpcy5lbmQoKSk7aWYoIXRoaXMuYnVmKXRocm93IG5l dyBFcnJvcigiYnVmZmVyIGxvc3Qgc29tZWhvdyBpbiBPTkRSQUlOIik7dGhpcy5vZmZzZXQ+PXRo aXMubGVuZ3RoJiYodGhpcy5idWY9QnVmZmVyLmFsbG9jVW5zYWZlKE1hdGgubWluKHRoaXMuYmxv Y2tSZW1haW4sdGhpcy5idWYubGVuZ3RoKSksdGhpcy5vZmZzZXQ9MCksdGhpcy5sZW5ndGg9dGhp cy5idWYubGVuZ3RoLXRoaXMub2Zmc2V0LHRoaXNbUmldKCl9fTtNLldyaXRlRW50cnk9VGk7dmFy IHNyPWNsYXNzIGV4dGVuZHMgVGl7c3luYz0hMDtbWHNdKCl7dGhpc1tPaV0oYWUuZGVmYXVsdC5s c3RhdFN5bmModGhpcy5hYnNvbHV0ZSkpfVskc10oKXt0aGlzW0pzXShhZS5kZWZhdWx0LnJlYWRs aW5rU3luYyh0aGlzLmFic29sdXRlKSl9W2VyXSgpe3RoaXNbdHJdKGFlLmRlZmF1bHQub3BlblN5 bmModGhpcy5hYnNvbHV0ZSwiciIpKX1bUmldKCl7bGV0IGU9ITA7dHJ5e2xldHtmZDp0LGJ1Zjpp LG9mZnNldDpyLGxlbmd0aDpuLHBvczpvfT10aGlzO2lmKHQ9PT12b2lkIDB8fGk9PT12b2lkIDAp dGhyb3cgbmV3IEVycm9yKCJmZCBhbmQgYnVmIG11c3QgYmUgc2V0IGluIFJFQUQgbWV0aG9kIik7 bGV0IGE9YWUuZGVmYXVsdC5yZWFkU3luYyh0LGkscixuLG8pO3RoaXNbUXNdKGEpLGU9ITF9Zmlu YWxseXtpZihlKXRyeXt0aGlzW3ZlXSgoKT0+e30pfWNhdGNoe319fVtpcl0oZSl7ZSgpfVt2ZV0o ZT0oKT0+e30pe3RoaXMuZmQhPT12b2lkIDAmJmFlLmRlZmF1bHQuY2xvc2VTeW5jKHRoaXMuZmQp LGUoKX19O00uV3JpdGVFbnRyeVN5bmM9c3I7dmFyIHJyPWNsYXNzIGV4dGVuZHMgcG4uTWluaXBh c3N7YmxvY2tMZW49MDtibG9ja1JlbWFpbj0wO2J1Zj0wO3Bvcz0wO3JlbWFpbj0wO2xlbmd0aD0w O3ByZXNlcnZlUGF0aHM7cG9ydGFibGU7c3RyaWN0O25vUGF4O25vTXRpbWU7cmVhZEVudHJ5O3R5 cGU7cHJlZml4O3BhdGg7bW9kZTt1aWQ7Z2lkO3VuYW1lO2duYW1lO2hlYWRlcjttdGltZTthdGlt ZTtjdGltZTtsaW5rcGF0aDtzaXplO29uV3JpdGVFbnRyeTt3YXJuKGUsdCxpPXt9KXtyZXR1cm4o MCxTbi53YXJuTWV0aG9kKSh0aGlzLGUsdCxpKX1jb25zdHJ1Y3RvcihlLHQ9e30pe2xldCBpPSgw LHluLmRlYWxpYXMpKHQpO3N1cGVyKCksdGhpcy5wcmVzZXJ2ZVBhdGhzPSEhaS5wcmVzZXJ2ZVBh dGhzLHRoaXMucG9ydGFibGU9ISFpLnBvcnRhYmxlLHRoaXMuc3RyaWN0PSEhaS5zdHJpY3QsdGhp cy5ub1BheD0hIWkubm9QYXgsdGhpcy5ub010aW1lPSEhaS5ub010aW1lLHRoaXMub25Xcml0ZUVu dHJ5PWkub25Xcml0ZUVudHJ5LHRoaXMucmVhZEVudHJ5PWU7bGV0e3R5cGU6cn09ZTtpZihyPT09 IlVuc3VwcG9ydGVkIil0aHJvdyBuZXcgRXJyb3IoIndyaXRpbmcgZW50cnkgdGhhdCBzaG91bGQg YmUgaWdub3JlZCIpO3RoaXMudHlwZT1yLHRoaXMudHlwZT09PSJEaXJlY3RvcnkiJiZ0aGlzLnBv cnRhYmxlJiYodGhpcy5ub010aW1lPSEwKSx0aGlzLnByZWZpeD1pLnByZWZpeCx0aGlzLnBhdGg9 KDAsb2Uubm9ybWFsaXplV2luZG93c1BhdGgpKGUucGF0aCksdGhpcy5tb2RlPWUubW9kZSE9PXZv aWQgMD90aGlzW3ZpXShlLm1vZGUpOnZvaWQgMCx0aGlzLnVpZD10aGlzLnBvcnRhYmxlP3ZvaWQg MDplLnVpZCx0aGlzLmdpZD10aGlzLnBvcnRhYmxlP3ZvaWQgMDplLmdpZCx0aGlzLnVuYW1lPXRo aXMucG9ydGFibGU/dm9pZCAwOmUudW5hbWUsdGhpcy5nbmFtZT10aGlzLnBvcnRhYmxlP3ZvaWQg MDplLmduYW1lLHRoaXMuc2l6ZT1lLnNpemUsdGhpcy5tdGltZT10aGlzLm5vTXRpbWU/dm9pZCAw OmkubXRpbWV8fGUubXRpbWUsdGhpcy5hdGltZT10aGlzLnBvcnRhYmxlP3ZvaWQgMDplLmF0aW1l LHRoaXMuY3RpbWU9dGhpcy5wb3J0YWJsZT92b2lkIDA6ZS5jdGltZSx0aGlzLmxpbmtwYXRoPWUu bGlua3BhdGghPT12b2lkIDA/KDAsb2Uubm9ybWFsaXplV2luZG93c1BhdGgpKGUubGlua3BhdGgp OnZvaWQgMCx0eXBlb2YgaS5vbndhcm49PSJmdW5jdGlvbiImJnRoaXMub24oIndhcm4iLGkub253 YXJuKTtsZXQgbj0hMTtpZighdGhpcy5wcmVzZXJ2ZVBhdGhzKXtsZXRbYSxoXT0oMCxibi5zdHJp cEFic29sdXRlUGF0aCkodGhpcy5wYXRoKTthJiZ0eXBlb2YgaD09InN0cmluZyImJih0aGlzLnBh dGg9aCxuPWEpfXRoaXMucmVtYWluPWUuc2l6ZSx0aGlzLmJsb2NrUmVtYWluPWUuc3RhcnRCbG9j a1NpemUsdGhpcy5vbldyaXRlRW50cnk/Lih0aGlzKSx0aGlzLmhlYWRlcj1uZXcgX24uSGVhZGVy KHtwYXRoOnRoaXNbaGVdKHRoaXMucGF0aCksbGlua3BhdGg6dGhpcy50eXBlPT09IkxpbmsiJiZ0 aGlzLmxpbmtwYXRoIT09dm9pZCAwP3RoaXNbaGVdKHRoaXMubGlua3BhdGgpOnRoaXMubGlua3Bh dGgsbW9kZTp0aGlzLm1vZGUsdWlkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMudWlkLGdpZDp0 aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLmdpZCxzaXplOnRoaXMuc2l6ZSxtdGltZTp0aGlzLm5v TXRpbWU/dm9pZCAwOnRoaXMubXRpbWUsdHlwZTp0aGlzLnR5cGUsdW5hbWU6dGhpcy5wb3J0YWJs ZT92b2lkIDA6dGhpcy51bmFtZSxhdGltZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLmF0aW1l LGN0aW1lOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuY3RpbWV9KSxuJiZ0aGlzLndhcm4oIlRB Ul9FTlRSWV9JTkZPIixgc3RyaXBwaW5nICR7bn0gZnJvbSBhYnNvbHV0ZSBwYXRoYCx7ZW50cnk6 dGhpcyxwYXRoOm4rdGhpcy5wYXRofSksdGhpcy5oZWFkZXIuZW5jb2RlKCkmJiF0aGlzLm5vUGF4 JiZzdXBlci53cml0ZShuZXcgRW4uUGF4KHthdGltZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlz LmF0aW1lLGN0aW1lOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuY3RpbWUsZ2lkOnRoaXMucG9y dGFibGU/dm9pZCAwOnRoaXMuZ2lkLG10aW1lOnRoaXMubm9NdGltZT92b2lkIDA6dGhpcy5tdGlt ZSxwYXRoOnRoaXNbaGVdKHRoaXMucGF0aCksbGlua3BhdGg6dGhpcy50eXBlPT09IkxpbmsiJiZ0 aGlzLmxpbmtwYXRoIT09dm9pZCAwP3RoaXNbaGVdKHRoaXMubGlua3BhdGgpOnRoaXMubGlua3Bh dGgsc2l6ZTp0aGlzLnNpemUsdWlkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMudWlkLHVuYW1l OnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMudW5hbWUsZGV2OnRoaXMucG9ydGFibGU/dm9pZCAw OnRoaXMucmVhZEVudHJ5LmRldixpbm86dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5yZWFkRW50 cnkuaW5vLG5saW5rOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMucmVhZEVudHJ5Lm5saW5rfSku ZW5jb2RlKCkpO2xldCBvPXRoaXMuaGVhZGVyPy5ibG9jaztpZighbyl0aHJvdyBuZXcgRXJyb3Io ImZhaWxlZCB0byBlbmNvZGUgaGVhZGVyIik7c3VwZXIud3JpdGUobyksZS5waXBlKHRoaXMpfVto ZV0oZSl7cmV0dXJuIGduKGUsdGhpcy5wcmVmaXgpfVt2aV0oZSl7cmV0dXJuKDAsd24ubW9kZUZp eCkoZSx0aGlzLnR5cGU9PT0iRGlyZWN0b3J5Iix0aGlzLnBvcnRhYmxlKX13cml0ZShlLHQsaSl7 dHlwZW9mIHQ9PSJmdW5jdGlvbiImJihpPXQsdD12b2lkIDApLHR5cGVvZiBlPT0ic3RyaW5nIiYm KGU9QnVmZmVyLmZyb20oZSx0eXBlb2YgdD09InN0cmluZyI/dDoidXRmOCIpKTtsZXQgcj1lLmxl bmd0aDtpZihyPnRoaXMuYmxvY2tSZW1haW4pdGhyb3cgbmV3IEVycm9yKCJ3cml0aW5nIG1vcmUg dG8gZW50cnkgdGhhbiBpcyBhcHByb3ByaWF0ZSIpO3JldHVybiB0aGlzLmJsb2NrUmVtYWluLT1y LHN1cGVyLndyaXRlKGUsaSl9ZW5kKGUsdCxpKXtyZXR1cm4gdGhpcy5ibG9ja1JlbWFpbiYmc3Vw ZXIud3JpdGUoQnVmZmVyLmFsbG9jKHRoaXMuYmxvY2tSZW1haW4pKSx0eXBlb2YgZT09ImZ1bmN0 aW9uIiYmKGk9ZSx0PXZvaWQgMCxlPXZvaWQgMCksdHlwZW9mIHQ9PSJmdW5jdGlvbiImJihpPXQs dD12b2lkIDApLHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9QnVmZmVyLmZyb20oZSx0Pz8idXRmOCIp KSxpJiZ0aGlzLm9uY2UoImZpbmlzaCIsaSksZT9zdXBlci5lbmQoZSxpKTpzdXBlci5lbmQoaSks dGhpc319O00uV3JpdGVFbnRyeVRhcj1ycjt2YXIgX2g9cz0+cy5pc0ZpbGUoKT8iRmlsZSI6cy5p c0RpcmVjdG9yeSgpPyJEaXJlY3RvcnkiOnMuaXNTeW1ib2xpY0xpbmsoKT8iU3ltYm9saWNMaW5r IjoiVW5zdXBwb3J0ZWQifSk7dmFyIFJuPWQoYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu ZVByb3BlcnR5KGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTthdC5Ob2RlPWF0LllhbGxpc3Q9 dm9pZCAwO3ZhciBvcj1jbGFzcyBze3RhaWw7aGVhZDtsZW5ndGg9MDtzdGF0aWMgY3JlYXRlKGU9 W10pe3JldHVybiBuZXcgcyhlKX1jb25zdHJ1Y3RvcihlPVtdKXtmb3IobGV0IHQgb2YgZSl0aGlz LnB1c2godCl9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGxldCBlPXRoaXMuaGVhZDtlO2U9ZS5u ZXh0KXlpZWxkIGUudmFsdWV9cmVtb3ZlTm9kZShlKXtpZihlLmxpc3QhPT10aGlzKXRocm93IG5l dyBFcnJvcigicmVtb3Zpbmcgbm9kZSB3aGljaCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBsaXN0 Iik7bGV0IHQ9ZS5uZXh0LGk9ZS5wcmV2O3JldHVybiB0JiYodC5wcmV2PWkpLGkmJihpLm5leHQ9 dCksZT09PXRoaXMuaGVhZCYmKHRoaXMuaGVhZD10KSxlPT09dGhpcy50YWlsJiYodGhpcy50YWls PWkpLHRoaXMubGVuZ3RoLS0sZS5uZXh0PXZvaWQgMCxlLnByZXY9dm9pZCAwLGUubGlzdD12b2lk IDAsdH11bnNoaWZ0Tm9kZShlKXtpZihlPT09dGhpcy5oZWFkKXJldHVybjtlLmxpc3QmJmUubGlz dC5yZW1vdmVOb2RlKGUpO2xldCB0PXRoaXMuaGVhZDtlLmxpc3Q9dGhpcyxlLm5leHQ9dCx0JiYo dC5wcmV2PWUpLHRoaXMuaGVhZD1lLHRoaXMudGFpbHx8KHRoaXMudGFpbD1lKSx0aGlzLmxlbmd0 aCsrfXB1c2hOb2RlKGUpe2lmKGU9PT10aGlzLnRhaWwpcmV0dXJuO2UubGlzdCYmZS5saXN0LnJl bW92ZU5vZGUoZSk7bGV0IHQ9dGhpcy50YWlsO2UubGlzdD10aGlzLGUucHJldj10LHQmJih0Lm5l eHQ9ZSksdGhpcy50YWlsPWUsdGhpcy5oZWFkfHwodGhpcy5oZWFkPWUpLHRoaXMubGVuZ3RoKyt9 cHVzaCguLi5lKXtmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0KyspeWgodGhpcyxlW3RdKTty ZXR1cm4gdGhpcy5sZW5ndGh9dW5zaGlmdCguLi5lKXtmb3IodmFyIHQ9MCxpPWUubGVuZ3RoO3Q8 aTt0KyspRWgodGhpcyxlW3RdKTtyZXR1cm4gdGhpcy5sZW5ndGh9cG9wKCl7aWYoIXRoaXMudGFp bClyZXR1cm47bGV0IGU9dGhpcy50YWlsLnZhbHVlLHQ9dGhpcy50YWlsO3JldHVybiB0aGlzLnRh aWw9dGhpcy50YWlsLnByZXYsdGhpcy50YWlsP3RoaXMudGFpbC5uZXh0PXZvaWQgMDp0aGlzLmhl YWQ9dm9pZCAwLHQubGlzdD12b2lkIDAsdGhpcy5sZW5ndGgtLSxlfXNoaWZ0KCl7aWYoIXRoaXMu aGVhZClyZXR1cm47bGV0IGU9dGhpcy5oZWFkLnZhbHVlLHQ9dGhpcy5oZWFkO3JldHVybiB0aGlz LmhlYWQ9dGhpcy5oZWFkLm5leHQsdGhpcy5oZWFkP3RoaXMuaGVhZC5wcmV2PXZvaWQgMDp0aGlz LnRhaWw9dm9pZCAwLHQubGlzdD12b2lkIDAsdGhpcy5sZW5ndGgtLSxlfWZvckVhY2goZSx0KXt0 PXR8fHRoaXM7Zm9yKGxldCBpPXRoaXMuaGVhZCxyPTA7aTtyKyspZS5jYWxsKHQsaS52YWx1ZSxy LHRoaXMpLGk9aS5uZXh0fWZvckVhY2hSZXZlcnNlKGUsdCl7dD10fHx0aGlzO2ZvcihsZXQgaT10 aGlzLnRhaWwscj10aGlzLmxlbmd0aC0xO2k7ci0tKWUuY2FsbCh0LGkudmFsdWUscix0aGlzKSxp PWkucHJldn1nZXQoZSl7bGV0IHQ9MCxpPXRoaXMuaGVhZDtmb3IoO2kmJnQ8ZTt0KyspaT1pLm5l eHQ7aWYodD09PWUmJmkpcmV0dXJuIGkudmFsdWV9Z2V0UmV2ZXJzZShlKXtsZXQgdD0wLGk9dGhp cy50YWlsO2Zvcig7aSYmdDxlO3QrKylpPWkucHJldjtpZih0PT09ZSYmaSlyZXR1cm4gaS52YWx1 ZX1tYXAoZSx0KXt0PXR8fHRoaXM7bGV0IGk9bmV3IHM7Zm9yKGxldCByPXRoaXMuaGVhZDtyOylp LnB1c2goZS5jYWxsKHQsci52YWx1ZSx0aGlzKSkscj1yLm5leHQ7cmV0dXJuIGl9bWFwUmV2ZXJz ZShlLHQpe3Q9dHx8dGhpczt2YXIgaT1uZXcgcztmb3IobGV0IHI9dGhpcy50YWlsO3I7KWkucHVz aChlLmNhbGwodCxyLnZhbHVlLHRoaXMpKSxyPXIucHJldjtyZXR1cm4gaX1yZWR1Y2UoZSx0KXts ZXQgaSxyPXRoaXMuaGVhZDtpZihhcmd1bWVudHMubGVuZ3RoPjEpaT10O2Vsc2UgaWYodGhpcy5o ZWFkKXI9dGhpcy5oZWFkLm5leHQsaT10aGlzLmhlYWQudmFsdWU7ZWxzZSB0aHJvdyBuZXcgVHlw ZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgbGlzdCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtmb3Io dmFyIG49MDtyO24rKylpPWUoaSxyLnZhbHVlLG4pLHI9ci5uZXh0O3JldHVybiBpfXJlZHVjZVJl dmVyc2UoZSx0KXtsZXQgaSxyPXRoaXMudGFpbDtpZihhcmd1bWVudHMubGVuZ3RoPjEpaT10O2Vs c2UgaWYodGhpcy50YWlsKXI9dGhpcy50YWlsLnByZXYsaT10aGlzLnRhaWwudmFsdWU7ZWxzZSB0 aHJvdyBuZXcgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgbGlzdCB3aXRoIG5vIGluaXRpYWwg dmFsdWUiKTtmb3IobGV0IG49dGhpcy5sZW5ndGgtMTtyO24tLSlpPWUoaSxyLnZhbHVlLG4pLHI9 ci5wcmV2O3JldHVybiBpfXRvQXJyYXkoKXtsZXQgZT1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zv cihsZXQgdD0wLGk9dGhpcy5oZWFkO2k7dCsrKWVbdF09aS52YWx1ZSxpPWkubmV4dDtyZXR1cm4g ZX10b0FycmF5UmV2ZXJzZSgpe2xldCBlPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKGxldCB0 PTAsaT10aGlzLnRhaWw7aTt0KyspZVt0XT1pLnZhbHVlLGk9aS5wcmV2O3JldHVybiBlfXNsaWNl KGU9MCx0PXRoaXMubGVuZ3RoKXt0PDAmJih0Kz10aGlzLmxlbmd0aCksZTwwJiYoZSs9dGhpcy5s ZW5ndGgpO2xldCBpPW5ldyBzO2lmKHQ8ZXx8dDwwKXJldHVybiBpO2U8MCYmKGU9MCksdD50aGlz Lmxlbmd0aCYmKHQ9dGhpcy5sZW5ndGgpO2xldCByPXRoaXMuaGVhZCxuPTA7Zm9yKG49MDtyJiZu PGU7bisrKXI9ci5uZXh0O2Zvcig7ciYmbjx0O24rKyxyPXIubmV4dClpLnB1c2goci52YWx1ZSk7 cmV0dXJuIGl9c2xpY2VSZXZlcnNlKGU9MCx0PXRoaXMubGVuZ3RoKXt0PDAmJih0Kz10aGlzLmxl bmd0aCksZTwwJiYoZSs9dGhpcy5sZW5ndGgpO2xldCBpPW5ldyBzO2lmKHQ8ZXx8dDwwKXJldHVy biBpO2U8MCYmKGU9MCksdD50aGlzLmxlbmd0aCYmKHQ9dGhpcy5sZW5ndGgpO2xldCByPXRoaXMu bGVuZ3RoLG49dGhpcy50YWlsO2Zvcig7biYmcj50O3ItLSluPW4ucHJldjtmb3IoO24mJnI+ZTty LS0sbj1uLnByZXYpaS5wdXNoKG4udmFsdWUpO3JldHVybiBpfXNwbGljZShlLHQ9MCwuLi5pKXtl PnRoaXMubGVuZ3RoJiYoZT10aGlzLmxlbmd0aC0xKSxlPDAmJihlPXRoaXMubGVuZ3RoK2UpO2xl dCByPXRoaXMuaGVhZDtmb3IobGV0IG89MDtyJiZvPGU7bysrKXI9ci5uZXh0O2xldCBuPVtdO2Zv cihsZXQgbz0wO3ImJm88dDtvKyspbi5wdXNoKHIudmFsdWUpLHI9dGhpcy5yZW1vdmVOb2RlKHIp O3I/ciE9PXRoaXMudGFpbCYmKHI9ci5wcmV2KTpyPXRoaXMudGFpbDtmb3IobGV0IG8gb2YgaSly PXdoKHRoaXMscixvKTtyZXR1cm4gbn1yZXZlcnNlKCl7bGV0IGU9dGhpcy5oZWFkLHQ9dGhpcy50 YWlsO2ZvcihsZXQgaT1lO2k7aT1pLnByZXYpe2xldCByPWkucHJldjtpLnByZXY9aS5uZXh0LGku bmV4dD1yfXJldHVybiB0aGlzLmhlYWQ9dCx0aGlzLnRhaWw9ZSx0aGlzfX07YXQuWWFsbGlzdD1v cjtmdW5jdGlvbiB3aChzLGUsdCl7bGV0IGk9ZSxyPWU/ZS5uZXh0OnMuaGVhZCxuPW5ldyBvdCh0 LGkscixzKTtyZXR1cm4gbi5uZXh0PT09dm9pZCAwJiYocy50YWlsPW4pLG4ucHJldj09PXZvaWQg MCYmKHMuaGVhZD1uKSxzLmxlbmd0aCsrLG59ZnVuY3Rpb24geWgocyxlKXtzLnRhaWw9bmV3IG90 KGUscy50YWlsLHZvaWQgMCxzKSxzLmhlYWR8fChzLmhlYWQ9cy50YWlsKSxzLmxlbmd0aCsrfWZ1 bmN0aW9uIEVoKHMsZSl7cy5oZWFkPW5ldyBvdChlLHZvaWQgMCxzLmhlYWQscykscy50YWlsfHwo cy50YWlsPXMuaGVhZCkscy5sZW5ndGgrK312YXIgb3Q9Y2xhc3N7bGlzdDtuZXh0O3ByZXY7dmFs dWU7Y29uc3RydWN0b3IoZSx0LGkscil7dGhpcy5saXN0PXIsdGhpcy52YWx1ZT1lLHQ/KHQubmV4 dD10aGlzLHRoaXMucHJldj10KTp0aGlzLnByZXY9dm9pZCAwLGk/KGkucHJldj10aGlzLHRoaXMu bmV4dD1pKTp0aGlzLm5leHQ9dm9pZCAwfX07YXQuTm9kZT1vdH0pO3ZhciBDaT1kKEw9PnsidXNl IHN0cmljdCI7dmFyIGJoPUwmJkwuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT8oZnVu Y3Rpb24ocyxlLHQsaSl7aT09PXZvaWQgMCYmKGk9dCk7dmFyIHI9T2JqZWN0LmdldE93blByb3Bl cnR5RGVzY3JpcHRvcihlLHQpOyghcnx8KCJnZXQiaW4gcj8hZS5fX2VzTW9kdWxlOnIud3JpdGFi bGV8fHIuY29uZmlndXJhYmxlKSkmJihyPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl dHVybiBlW3RdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGkscil9KTooZnVuY3Rpb24ocyxl LHQsaSl7aT09PXZvaWQgMCYmKGk9dCksc1tpXT1lW3RdfSkpLFNoPUwmJkwuX19zZXRNb2R1bGVE ZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24ocyxlKXtPYmplY3QuZGVmaW5lUHJvcGVy dHkocywiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pfSk6ZnVuY3Rpb24ocyxlKXtz LmRlZmF1bHQ9ZX0pLGdoPUwmJkwuX19pbXBvcnRTdGFyfHwoZnVuY3Rpb24oKXt2YXIgcz1mdW5j dGlvbihlKXtyZXR1cm4gcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7 dmFyIGk9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j YWxsKHQscikmJihpW2kubGVuZ3RoXT1yKTtyZXR1cm4gaX0scyhlKX07cmV0dXJuIGZ1bmN0aW9u KGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2 YXIgaT1zKGUpLHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdIT09ImRlZmF1bHQiJiZiaCh0LGUsaVty XSk7cmV0dXJuIFNoKHQsZSksdH19KSgpLFBuPUwmJkwuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlv bihzKXtyZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6e2RlZmF1bHQ6c319O09iamVjdC5kZWZpbmVQ cm9wZXJ0eShMLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtMLlBhY2tTeW5jPUwuUGFjaz1MLlBh Y2tKb2I9dm9pZCAwO3ZhciBJaT1QbihyZXF1aXJlKCJmcyIpKSxmcj1ucigpLE50PWNsYXNze3Bh dGg7YWJzb2x1dGU7ZW50cnk7c3RhdDtyZWFkZGlyO3BlbmRpbmc9ITE7cGVuZGluZ0xpbms9ITE7 aWdub3JlPSExO3BpcGVkPSExO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wYXRoPWV8fCIuLyIsdGhp cy5hYnNvbHV0ZT10fX07TC5QYWNrSm9iPU50O3ZhciBSaD1XZSgpLGFyPWdoKFBzKCkpLE9oPVJu KCksdmg9aGkoKSxPbj1CdWZmZXIuYWxsb2MoMTAyNCksUGk9U3ltYm9sKCJvblN0YXQiKSxUdD1T eW1ib2woImVuZGVkIiksWD1TeW1ib2woInF1ZXVlIiksRHQ9U3ltYm9sKCJwZW5kaW5nTGlua3Mi KSxUZT1TeW1ib2woImN1cnJlbnQiKSxqZT1TeW1ib2woInByb2Nlc3MiKSxQdD1TeW1ib2woInBy b2Nlc3NpbmciKSxEaT1TeW1ib2woInByb2Nlc3NKb2IiKSxRPVN5bWJvbCgiam9icyIpLGhyPVN5 bWJvbCgiam9iRG9uZSIpLE5pPVN5bWJvbCgiYWRkRlNFbnRyeSIpLHZuPVN5bWJvbCgiYWRkVGFy RW50cnkiKSxkcj1TeW1ib2woInN0YXQiKSxtcj1TeW1ib2woInJlYWRkaXIiKSxNaT1TeW1ib2wo Im9ucmVhZGRpciIpLExpPVN5bWJvbCgicGlwZSIpLFRuPVN5bWJvbCgiZW50cnkiKSxscj1TeW1i b2woImVudHJ5T3B0IiksQWk9U3ltYm9sKCJ3cml0ZUVudHJ5Q2xhc3MiKSxObj1TeW1ib2woIndy aXRlIiksY3I9U3ltYm9sKCJvbmRyYWluIiksRG49UG4ocmVxdWlyZSgicGF0aCIpKSx1cj10dCgp LEZpPWNsYXNzIGV4dGVuZHMgUmguTWluaXBhc3N7c3luYz0hMTtvcHQ7Y3dkO21heFJlYWRTaXpl O3ByZXNlcnZlUGF0aHM7c3RyaWN0O25vUGF4O3ByZWZpeDtsaW5rQ2FjaGU7c3RhdENhY2hlO2Zp bGU7cG9ydGFibGU7emlwO3JlYWRkaXJDYWNoZTtub0RpclJlY3Vyc2U7Zm9sbG93O25vTXRpbWU7 bXRpbWU7ZmlsdGVyO2pvYnM7W0FpXTtvbldyaXRlRW50cnk7W1hdO1tEdF09bmV3IE1hcDtbUV09 MDtbUHRdPSExO1tUdF09ITE7Y29uc3RydWN0b3IoZT17fSl7aWYoc3VwZXIoKSx0aGlzLm9wdD1l LHRoaXMuZmlsZT1lLmZpbGV8fCIiLHRoaXMuY3dkPWUuY3dkfHxwcm9jZXNzLmN3ZCgpLHRoaXMu bWF4UmVhZFNpemU9ZS5tYXhSZWFkU2l6ZSx0aGlzLnByZXNlcnZlUGF0aHM9ISFlLnByZXNlcnZl UGF0aHMsdGhpcy5zdHJpY3Q9ISFlLnN0cmljdCx0aGlzLm5vUGF4PSEhZS5ub1BheCx0aGlzLnBy ZWZpeD0oMCx1ci5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZS5wcmVmaXh8fCIiKSx0aGlzLmxpbmtD YWNoZT1lLmxpbmtDYWNoZXx8bmV3IE1hcCx0aGlzLnN0YXRDYWNoZT1lLnN0YXRDYWNoZXx8bmV3 IE1hcCx0aGlzLnJlYWRkaXJDYWNoZT1lLnJlYWRkaXJDYWNoZXx8bmV3IE1hcCx0aGlzLm9uV3Jp dGVFbnRyeT1lLm9uV3JpdGVFbnRyeSx0aGlzW0FpXT1mci5Xcml0ZUVudHJ5LHR5cGVvZiBlLm9u d2Fybj09ImZ1bmN0aW9uIiYmdGhpcy5vbigid2FybiIsZS5vbndhcm4pLHRoaXMucG9ydGFibGU9 ISFlLnBvcnRhYmxlLGUuZ3ppcHx8ZS5icm90bGl8fGUuenN0ZCl7aWYoKGUuZ3ppcD8xOjApKyhl LmJyb3RsaT8xOjApKyhlLnpzdGQ/MTowKT4xKXRocm93IG5ldyBUeXBlRXJyb3IoImd6aXAsIGJy b3RsaSwgenN0ZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIik7aWYoZS5nemlwJiYodHlwZW9mIGUu Z3ppcCE9Im9iamVjdCImJihlLmd6aXA9e30pLHRoaXMucG9ydGFibGUmJihlLmd6aXAucG9ydGFi bGU9ITApLHRoaXMuemlwPW5ldyBhci5HemlwKGUuZ3ppcCkpLGUuYnJvdGxpJiYodHlwZW9mIGUu YnJvdGxpIT0ib2JqZWN0IiYmKGUuYnJvdGxpPXt9KSx0aGlzLnppcD1uZXcgYXIuQnJvdGxpQ29t cHJlc3MoZS5icm90bGkpKSxlLnpzdGQmJih0eXBlb2YgZS56c3RkIT0ib2JqZWN0IiYmKGUuenN0 ZD17fSksdGhpcy56aXA9bmV3IGFyLlpzdGRDb21wcmVzcyhlLnpzdGQpKSwhdGhpcy56aXApdGhy b3cgbmV3IEVycm9yKCJpbXBvc3NpYmxlIik7bGV0IHQ9dGhpcy56aXA7dC5vbigiZGF0YSIsaT0+ c3VwZXIud3JpdGUoaSkpLHQub24oImVuZCIsKCk9PnN1cGVyLmVuZCgpKSx0Lm9uKCJkcmFpbiIs KCk9PnRoaXNbY3JdKCkpLHRoaXMub24oInJlc3VtZSIsKCk9PnQucmVzdW1lKCkpfWVsc2UgdGhp cy5vbigiZHJhaW4iLHRoaXNbY3JdKTt0aGlzLm5vRGlyUmVjdXJzZT0hIWUubm9EaXJSZWN1cnNl LHRoaXMuZm9sbG93PSEhZS5mb2xsb3csdGhpcy5ub010aW1lPSEhZS5ub010aW1lLGUubXRpbWUm Jih0aGlzLm10aW1lPWUubXRpbWUpLHRoaXMuZmlsdGVyPXR5cGVvZiBlLmZpbHRlcj09ImZ1bmN0 aW9uIj9lLmZpbHRlcjooKT0+ITAsdGhpc1tYXT1uZXcgT2guWWFsbGlzdCx0aGlzW1FdPTAsdGhp cy5qb2JzPU51bWJlcihlLmpvYnMpfHw0LHRoaXNbUHRdPSExLHRoaXNbVHRdPSExfVtObl0oZSl7 cmV0dXJuIHN1cGVyLndyaXRlKGUpfWFkZChlKXtyZXR1cm4gdGhpcy53cml0ZShlKSx0aGlzfWVu ZChlLHQsaSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYoaT1lLGU9dm9pZCAwKSx0eXBl b2YgdD09ImZ1bmN0aW9uIiYmKGk9dCx0PXZvaWQgMCksZSYmdGhpcy5hZGQoZSksdGhpc1tUdF09 ITAsdGhpc1tqZV0oKSxpJiZpKCksdGhpc313cml0ZShlKXtpZih0aGlzW1R0XSl0aHJvdyBuZXcg RXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/dGhpc1tO aV0oZSk6dGhpc1t2bl0oZSksdGhpcy5mbG93aW5nfVt2bl0oZSl7bGV0IHQ9KDAsdXIubm9ybWFs aXplV2luZG93c1BhdGgpKERuLmRlZmF1bHQucmVzb2x2ZSh0aGlzLmN3ZCxlLnBhdGgpKTtpZigh dGhpcy5maWx0ZXIoZS5wYXRoLGUpKWUucmVzdW1lKCk7ZWxzZXtsZXQgaT1uZXcgTnQoZS5wYXRo LHQpO2kuZW50cnk9bmV3IGZyLldyaXRlRW50cnlUYXIoZSx0aGlzW2xyXShpKSksaS5lbnRyeS5v bigiZW5kIiwoKT0+dGhpc1tocl0oaSkpLHRoaXNbUV0rPTEsdGhpc1tYXS5wdXNoKGkpfXRoaXNb amVdKCl9W05pXShlKXtsZXQgdD0oMCx1ci5ub3JtYWxpemVXaW5kb3dzUGF0aCkoRG4uZGVmYXVs dC5yZXNvbHZlKHRoaXMuY3dkLGUpKTt0aGlzW1hdLnB1c2gobmV3IE50KGUsdCkpLHRoaXNbamVd KCl9W2RyXShlKXtlLnBlbmRpbmc9ITAsdGhpc1tRXSs9MTtsZXQgdD10aGlzLmZvbGxvdz8ic3Rh dCI6ImxzdGF0IjtJaS5kZWZhdWx0W3RdKGUuYWJzb2x1dGUsKGkscik9PntlLnBlbmRpbmc9ITEs dGhpc1tRXS09MSxpP3RoaXMuZW1pdCgiZXJyb3IiLGkpOnRoaXNbUGldKGUscil9KX1bUGldKGUs dCl7aWYodGhpcy5zdGF0Q2FjaGUuc2V0KGUuYWJzb2x1dGUsdCksZS5zdGF0PXQsIXRoaXMuZmls dGVyKGUucGF0aCx0KSllLmlnbm9yZT0hMDtlbHNlIGlmKHQuaXNGaWxlKCkmJnQubmxpbms+MSYm IXRoaXMubGlua0NhY2hlLmdldChgJHt0LmRldn06JHt0Lmlub31gKSYmIXRoaXMuc3luYylpZihl PT09dGhpc1tUZV0pdGhpc1tEaV0oZSk7ZWxzZXtsZXQgaT1gJHt0LmRldn06JHt0Lmlub31gLHI9 dGhpc1tEdF0uZ2V0KGkpO3I/ci5wdXNoKGUpOnRoaXNbRHRdLnNldChpLFtlXSksZS5wZW5kaW5n TGluaz0hMCxlLnBlbmRpbmc9ITB9dGhpc1tqZV0oKX1bbXJdKGUpe2UucGVuZGluZz0hMCx0aGlz W1FdKz0xLElpLmRlZmF1bHQucmVhZGRpcihlLmFic29sdXRlLCh0LGkpPT57aWYoZS5wZW5kaW5n PSExLHRoaXNbUV0tPTEsdClyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsdCk7dGhpc1tNaV0oZSxp KX0pfVtNaV0oZSx0KXt0aGlzLnJlYWRkaXJDYWNoZS5zZXQoZS5hYnNvbHV0ZSx0KSxlLnJlYWRk aXI9dCx0aGlzW2plXSgpfVtqZV0oKXtpZighdGhpc1tQdF0pe3RoaXNbUHRdPSEwO2ZvcihsZXQg ZT10aGlzW1hdLmhlYWQ7ZSYmdGhpc1tRXTx0aGlzLmpvYnM7ZT1lLm5leHQpaWYodGhpc1tEaV0o ZS52YWx1ZSksZS52YWx1ZS5pZ25vcmUpe2xldCB0PWUubmV4dDt0aGlzW1hdLnJlbW92ZU5vZGUo ZSksZS5uZXh0PXR9dGhpc1tQdF09ITEsdGhpc1tUdF0mJnRoaXNbWF0ubGVuZ3RoPT09MCYmdGhp c1tRXT09PTAmJih0aGlzLnppcD90aGlzLnppcC5lbmQoT24pOihzdXBlci53cml0ZShPbiksc3Vw ZXIuZW5kKCkpKX19Z2V0W1RlXSgpe3JldHVybiB0aGlzW1hdJiZ0aGlzW1hdLmhlYWQmJnRoaXNb WF0uaGVhZC52YWx1ZX1baHJdKGUpe3RoaXNbWF0uc2hpZnQoKSx0aGlzW1FdLT0xO2xldHtzdGF0 OnR9PWU7aWYodCYmdC5pc0ZpbGUoKSYmdC5ubGluaz4xKXtsZXQgaT1gJHt0LmRldn06JHt0Lmlu b31gLHI9dGhpc1tEdF0uZ2V0KGkpO2lmKHIpe3RoaXNbRHRdLmRlbGV0ZShpKTtmb3IobGV0IG4g b2YgciluLnBlbmRpbmc9ITEsdGhpc1tEaV0obil9fXRoaXNbamVdKCl9W0RpXShlKXtpZihlLnBl bmRpbmcmJmUucGVuZGluZ0xpbmsmJmU9PT10aGlzW1RlXSYmKGUucGVuZGluZz0hMSxlLnBlbmRp bmdMaW5rPSExKSwhZS5wZW5kaW5nKXtpZihlLmVudHJ5KXtlPT09dGhpc1tUZV0mJiFlLnBpcGVk JiZ0aGlzW0xpXShlKTtyZXR1cm59aWYoIWUuc3RhdCl7bGV0IHQ9dGhpcy5zdGF0Q2FjaGUuZ2V0 KGUuYWJzb2x1dGUpO3Q/dGhpc1tQaV0oZSx0KTp0aGlzW2RyXShlKX1pZihlLnN0YXQmJiFlLmln bm9yZSl7aWYoIXRoaXMubm9EaXJSZWN1cnNlJiZlLnN0YXQuaXNEaXJlY3RvcnkoKSYmIWUucmVh ZGRpcil7bGV0IHQ9dGhpcy5yZWFkZGlyQ2FjaGUuZ2V0KGUuYWJzb2x1dGUpO2lmKHQ/dGhpc1tN aV0oZSx0KTp0aGlzW21yXShlKSwhZS5yZWFkZGlyKXJldHVybn1pZihlLmVudHJ5PXRoaXNbVG5d KGUpLCFlLmVudHJ5KXtlLmlnbm9yZT0hMDtyZXR1cm59ZT09PXRoaXNbVGVdJiYhZS5waXBlZCYm dGhpc1tMaV0oZSl9fX1bbHJdKGUpe3JldHVybntvbndhcm46KHQsaSxyKT0+dGhpcy53YXJuKHQs aSxyKSxub1BheDp0aGlzLm5vUGF4LGN3ZDp0aGlzLmN3ZCxhYnNvbHV0ZTplLmFic29sdXRlLHBy ZXNlcnZlUGF0aHM6dGhpcy5wcmVzZXJ2ZVBhdGhzLG1heFJlYWRTaXplOnRoaXMubWF4UmVhZFNp emUsc3RyaWN0OnRoaXMuc3RyaWN0LHBvcnRhYmxlOnRoaXMucG9ydGFibGUsbGlua0NhY2hlOnRo aXMubGlua0NhY2hlLHN0YXRDYWNoZTp0aGlzLnN0YXRDYWNoZSxub010aW1lOnRoaXMubm9NdGlt ZSxtdGltZTp0aGlzLm10aW1lLHByZWZpeDp0aGlzLnByZWZpeCxvbldyaXRlRW50cnk6dGhpcy5v bldyaXRlRW50cnl9fVtUbl0oZSl7dGhpc1tRXSs9MTt0cnl7cmV0dXJuIG5ldyB0aGlzW0FpXShl LnBhdGgsdGhpc1tscl0oZSkpLm9uKCJlbmQiLCgpPT50aGlzW2hyXShlKSkub24oImVycm9yIixp PT50aGlzLmVtaXQoImVycm9yIixpKSl9Y2F0Y2godCl7dGhpcy5lbWl0KCJlcnJvciIsdCl9fVtj cl0oKXt0aGlzW1RlXSYmdGhpc1tUZV0uZW50cnkmJnRoaXNbVGVdLmVudHJ5LnJlc3VtZSgpfVtM aV0oZSl7ZS5waXBlZD0hMCxlLnJlYWRkaXImJmUucmVhZGRpci5mb3JFYWNoKHI9PntsZXQgbj1l LnBhdGgsbz1uPT09Ii4vIj8iIjpuLnJlcGxhY2UoL1wvKiQvLCIvIik7dGhpc1tOaV0obytyKX0p O2xldCB0PWUuZW50cnksaT10aGlzLnppcDtpZighdCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBw aXBlIHdpdGhvdXQgc291cmNlIik7aT90Lm9uKCJkYXRhIixyPT57aS53cml0ZShyKXx8dC5wYXVz ZSgpfSk6dC5vbigiZGF0YSIscj0+e3N1cGVyLndyaXRlKHIpfHx0LnBhdXNlKCl9KX1wYXVzZSgp e3JldHVybiB0aGlzLnppcCYmdGhpcy56aXAucGF1c2UoKSxzdXBlci5wYXVzZSgpfXdhcm4oZSx0 LGk9e30peygwLHZoLndhcm5NZXRob2QpKHRoaXMsZSx0LGkpfX07TC5QYWNrPUZpO3ZhciBwcj1j bGFzcyBleHRlbmRzIEZpe3N5bmM9ITA7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpc1tBaV09 ZnIuV3JpdGVFbnRyeVN5bmN9cGF1c2UoKXt9cmVzdW1lKCl7fVtkcl0oZSl7bGV0IHQ9dGhpcy5m b2xsb3c/InN0YXRTeW5jIjoibHN0YXRTeW5jIjt0aGlzW1BpXShlLElpLmRlZmF1bHRbdF0oZS5h YnNvbHV0ZSkpfVttcl0oZSl7dGhpc1tNaV0oZSxJaS5kZWZhdWx0LnJlYWRkaXJTeW5jKGUuYWJz b2x1dGUpKX1bTGldKGUpe2xldCB0PWUuZW50cnksaT10aGlzLnppcDtpZihlLnJlYWRkaXImJmUu cmVhZGRpci5mb3JFYWNoKHI9PntsZXQgbj1lLnBhdGgsbz1uPT09Ii4vIj8iIjpuLnJlcGxhY2Uo L1wvKiQvLCIvIik7dGhpc1tOaV0obytyKX0pLCF0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBp cGUgd2l0aG91dCBzb3VyY2UiKTtpP3Qub24oImRhdGEiLHI9PntpLndyaXRlKHIpfSk6dC5vbigi ZGF0YSIscj0+e3N1cGVyW05uXShyKX0pfX07TC5QYWNrU3luYz1wcn0pO3ZhciBfcj1kKGh0PT57 InVzZSBzdHJpY3QiO3ZhciBUaD1odCYmaHQuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihzKXty ZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6e2RlZmF1bHQ6c319O09iamVjdC5kZWZpbmVQcm9wZXJ0 eShodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7aHQuY3JlYXRlPXZvaWQgMDt2YXIgTW49S2Uo KSxMbj1UaChyZXF1aXJlKCJub2RlOnBhdGgiKSksQW49cnQoKSxEaD1WZSgpLEJpPUNpKCksUGg9 KHMsZSk9PntsZXQgdD1uZXcgQmkuUGFja1N5bmMocyksaT1uZXcgTW4uV3JpdGVTdHJlYW1TeW5j KHMuZmlsZSx7bW9kZTpzLm1vZGV8fDQzOH0pO3QucGlwZShpKSxJbih0LGUpfSxOaD0ocyxlKT0+ e2xldCB0PW5ldyBCaS5QYWNrKHMpLGk9bmV3IE1uLldyaXRlU3RyZWFtKHMuZmlsZSx7bW9kZTpz Lm1vZGV8fDQzOH0pO3QucGlwZShpKTtsZXQgcj1uZXcgUHJvbWlzZSgobixvKT0+e2kub24oImVy cm9yIixvKSxpLm9uKCJjbG9zZSIsbiksdC5vbigiZXJyb3IiLG8pfSk7cmV0dXJuIEZuKHQsZSku Y2F0Y2gobj0+dC5lbWl0KCJlcnJvciIsbikpLHJ9LEluPShzLGUpPT57ZS5mb3JFYWNoKHQ9Pnt0 LmNoYXJBdCgwKT09PSJAIj8oMCxBbi5saXN0KSh7ZmlsZTpMbi5kZWZhdWx0LnJlc29sdmUocy5j d2QsdC5zbGljZSgxKSksc3luYzohMCxub1Jlc3VtZTohMCxvblJlYWRFbnRyeTppPT5zLmFkZChp KX0pOnMuYWRkKHQpfSkscy5lbmQoKX0sRm49YXN5bmMocyxlKT0+e2ZvcihsZXQgdCBvZiBlKXQu Y2hhckF0KDApPT09IkAiP2F3YWl0KDAsQW4ubGlzdCkoe2ZpbGU6TG4uZGVmYXVsdC5yZXNvbHZl KFN0cmluZyhzLmN3ZCksdC5zbGljZSgxKSksbm9SZXN1bWU6ITAsb25SZWFkRW50cnk6aT0+e3Mu YWRkKGkpfX0pOnMuYWRkKHQpO3MuZW5kKCl9LE1oPShzLGUpPT57bGV0IHQ9bmV3IEJpLlBhY2tT eW5jKHMpO3JldHVybiBJbih0LGUpLHR9LExoPShzLGUpPT57bGV0IHQ9bmV3IEJpLlBhY2socyk7 cmV0dXJuIEZuKHQsZSkuY2F0Y2goaT0+dC5lbWl0KCJlcnJvciIsaSkpLHR9O2h0LmNyZWF0ZT0o MCxEaC5tYWtlQ29tbWFuZCkoUGgsTmgsTWgsTGgsKHMsZSk9PntpZighZT8ubGVuZ3RoKXRocm93 IG5ldyBUeXBlRXJyb3IoIm5vIHBhdGhzIHNwZWNpZmllZCB0byBhZGQgdG8gYXJjaGl2ZSIpfSl9 KTt2YXIgV249ZChsdD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQWg9bHQmJmx0Ll9faW1wb3J0RGVmYXVs dHx8ZnVuY3Rpb24ocyl7cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntkZWZhdWx0OnN9fTtPYmpl Y3QuZGVmaW5lUHJvcGVydHkobHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2x0LmdldFdyaXRl RmxhZz12b2lkIDA7dmFyIHpuPUFoKHJlcXVpcmUoImZzIikpLEloPXByb2Nlc3MuZW52Ll9fRkFL RV9QTEFURk9STV9ffHxwcm9jZXNzLnBsYXRmb3JtLGtuPUloPT09IndpbjMyIix7T19DUkVBVDp4 bixPX05PRk9MTE9XOkNuLE9fVFJVTkM6am4sT19XUk9OTFk6VW59PXpuLmRlZmF1bHQuY29uc3Rh bnRzLHFuPU51bWJlcihwcm9jZXNzLmVudi5fX0ZBS0VfRlNfT19GSUxFTkFNRV9fKXx8em4uZGVm YXVsdC5jb25zdGFudHMuVVZfRlNfT19GSUxFTUFQfHwwLEZoPWtuJiYhIXFuLENoPTUxMioxMDI0 LEJoPXFufGpufHhufFVuLEJuPSFrbiYmdHlwZW9mIENuPT0ibnVtYmVyIj9Dbnxqbnx4bnxVbjpu dWxsO2x0LmdldFdyaXRlRmxhZz1CbiE9PW51bGw/KCk9PkJuOkZoP3M9PnM8Q2g/Qmg6InciOigp PT4idyJ9KTt2YXIgR249ZChsZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSG49bGUmJmxlLl9faW1wb3J0 RGVmYXVsdHx8ZnVuY3Rpb24ocyl7cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntkZWZhdWx0OnN9 fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2xlLmNo b3duclN5bmM9bGUuY2hvd25yPXZvaWQgMDt2YXIga2k9SG4ocmVxdWlyZSgibm9kZTpmcyIpKSxN dD1IbihyZXF1aXJlKCJub2RlOnBhdGgiKSksd3I9KHMsZSx0KT0+e3RyeXtyZXR1cm4ga2kuZGVm YXVsdC5sY2hvd25TeW5jKHMsZSx0KX1jYXRjaChpKXtpZihpPy5jb2RlIT09IkVOT0VOVCIpdGhy b3cgaX19LHppPShzLGUsdCxpKT0+e2tpLmRlZmF1bHQubGNob3duKHMsZSx0LHI9PntpKHImJnI/ LmNvZGUhPT0iRU5PRU5UIj9yOm51bGwpfSl9LHpoPShzLGUsdCxpLHIpPT57aWYoZS5pc0RpcmVj dG9yeSgpKSgwLGxlLmNob3ducikoTXQuZGVmYXVsdC5yZXNvbHZlKHMsZS5uYW1lKSx0LGksbj0+ e2lmKG4pcmV0dXJuIHIobik7bGV0IG89TXQuZGVmYXVsdC5yZXNvbHZlKHMsZS5uYW1lKTt6aShv LHQsaSxyKX0pO2Vsc2V7bGV0IG49TXQuZGVmYXVsdC5yZXNvbHZlKHMsZS5uYW1lKTt6aShuLHQs aSxyKX19LGtoPShzLGUsdCxpKT0+e2tpLmRlZmF1bHQucmVhZGRpcihzLHt3aXRoRmlsZVR5cGVz OiEwfSwocixuKT0+e2lmKHIpe2lmKHIuY29kZT09PSJFTk9FTlQiKXJldHVybiBpKCk7aWYoci5j b2RlIT09IkVOT1RESVIiJiZyLmNvZGUhPT0iRU5PVFNVUCIpcmV0dXJuIGkocil9aWYocnx8IW4u bGVuZ3RoKXJldHVybiB6aShzLGUsdCxpKTtsZXQgbz1uLmxlbmd0aCxhPW51bGwsaD1sPT57aWYo IWEpe2lmKGwpcmV0dXJuIGkoYT1sKTtpZigtLW89PT0wKXJldHVybiB6aShzLGUsdCxpKX19O2Zv cihsZXQgbCBvZiBuKXpoKHMsbCxlLHQsaCl9KX07bGUuY2hvd25yPWtoO3ZhciB4aD0ocyxlLHQs aSk9PntlLmlzRGlyZWN0b3J5KCkmJigwLGxlLmNob3duclN5bmMpKE10LmRlZmF1bHQucmVzb2x2 ZShzLGUubmFtZSksdCxpKSx3cihNdC5kZWZhdWx0LnJlc29sdmUocyxlLm5hbWUpLHQsaSl9LGpo PShzLGUsdCk9PntsZXQgaTt0cnl7aT1raS5kZWZhdWx0LnJlYWRkaXJTeW5jKHMse3dpdGhGaWxl VHlwZXM6ITB9KX1jYXRjaChyKXtsZXQgbj1yO2lmKG4/LmNvZGU9PT0iRU5PRU5UIilyZXR1cm47 aWYobj8uY29kZT09PSJFTk9URElSInx8bj8uY29kZT09PSJFTk9UU1VQIilyZXR1cm4gd3Iocyxl LHQpO3Rocm93IG59Zm9yKGxldCByIG9mIGkpeGgocyxyLGUsdCk7cmV0dXJuIHdyKHMsZSx0KX07 bGUuY2hvd25yU3luYz1qaH0pO3ZhciBabj1kKHhpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp bmVQcm9wZXJ0eSh4aSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7eGkuQ3dkRXJyb3I9dm9pZCAw O3ZhciB5cj1jbGFzcyBleHRlbmRzIEVycm9ye3BhdGg7Y29kZTtzeXNjYWxsPSJjaGRpciI7Y29u c3RydWN0b3IoZSx0KXtzdXBlcihgJHt0fTogQ2Fubm90IGNkIGludG8gJyR7ZX0nYCksdGhpcy5w YXRoPWUsdGhpcy5jb2RlPXR9Z2V0IG5hbWUoKXtyZXR1cm4iQ3dkRXJyb3IifX07eGkuQ3dkRXJy b3I9eXJ9KTt2YXIgYnI9ZChqaT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko amksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2ppLlN5bWxpbmtFcnJvcj12b2lkIDA7dmFyIEVy PWNsYXNzIGV4dGVuZHMgRXJyb3J7cGF0aDtzeW1saW5rO3N5c2NhbGw9InN5bWxpbmsiO2NvZGU9 IlRBUl9TWU1MSU5LX0VSUk9SIjtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJUQVJfU1lNTElOS19F UlJPUjogQ2Fubm90IGV4dHJhY3QgdGhyb3VnaCBzeW1ib2xpYyBsaW5rIiksdGhpcy5zeW1saW5r PWUsdGhpcy5wYXRoPXR9Z2V0IG5hbWUoKXtyZXR1cm4iU3ltbGlua0Vycm9yIn19O2ppLlN5bWxp bmtFcnJvcj1Fcn0pO3ZhciBYbj1kKERlPT57InVzZSBzdHJpY3QiO3ZhciBncj1EZSYmRGUuX19p bXBvcnREZWZhdWx0fHxmdW5jdGlvbihzKXtyZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6e2RlZmF1 bHQ6c319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShEZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7 RGUubWtkaXJTeW5jPURlLm1rZGlyPXZvaWQgMDt2YXIgWW49R24oKSxqPWdyKHJlcXVpcmUoIm5v ZGU6ZnMiKSksVWg9Z3IocmVxdWlyZSgibm9kZTpmcy9wcm9taXNlcyIpKSxVaT1ncihyZXF1aXJl KCJub2RlOnBhdGgiKSksS249Wm4oKSxfZT10dCgpLFZuPWJyKCkscWg9KHMsZSk9PntqLmRlZmF1 bHQuc3RhdChzLCh0LGkpPT57KHR8fCFpLmlzRGlyZWN0b3J5KCkpJiYodD1uZXcgS24uQ3dkRXJy b3Iocyx0Py5jb2RlfHwiRU5PVERJUiIpKSxlKHQpfSl9LFdoPShzLGUsdCk9PntzPSgwLF9lLm5v cm1hbGl6ZVdpbmRvd3NQYXRoKShzKTtsZXQgaT1lLnVtYXNrPz8xOCxyPWUubW9kZXw0NDgsbj0o ciZpKSE9PTAsbz1lLnVpZCxhPWUuZ2lkLGg9dHlwZW9mIG89PSJudW1iZXIiJiZ0eXBlb2YgYT09 Im51bWJlciImJihvIT09ZS5wcm9jZXNzVWlkfHxhIT09ZS5wcm9jZXNzR2lkKSxsPWUucHJlc2Vy dmUsYz1lLnVubGluayx1PSgwLF9lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShlLmN3ZCksRT0odyxQ KT0+e3c/dCh3KTpQJiZoPygwLFluLmNob3ducikoUCxvLGEseHQ9PkUoeHQpKTpuP2ouZGVmYXVs dC5jaG1vZChzLHIsdCk6dCgpfTtpZihzPT09dSlyZXR1cm4gcWgocyxFKTtpZihsKXJldHVybiBV aC5kZWZhdWx0Lm1rZGlyKHMse21vZGU6cixyZWN1cnNpdmU6ITB9KS50aGVuKHc9PkUobnVsbCx3 Pz92b2lkIDApLEUpO2xldCBBPSgwLF9lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShVaS5kZWZhdWx0 LnJlbGF0aXZlKHUscykpLnNwbGl0KCIvIik7U3IodSxBLHIsYyx1LHZvaWQgMCxFKX07RGUubWtk aXI9V2g7dmFyIFNyPShzLGUsdCxpLHIsbixvKT0+e2lmKGUubGVuZ3RoPT09MClyZXR1cm4gbyhu dWxsLG4pO2xldCBhPWUuc2hpZnQoKSxoPSgwLF9lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShVaS5k ZWZhdWx0LnJlc29sdmUocysiLyIrYSkpO2ouZGVmYXVsdC5ta2RpcihoLHQsJG4oaCxlLHQsaSxy LG4sbykpfSwkbj0ocyxlLHQsaSxyLG4sbyk9PmE9PnthP2ouZGVmYXVsdC5sc3RhdChzLChoLGwp PT57aWYoaCloLnBhdGg9aC5wYXRoJiYoMCxfZS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoaC5wYXRo KSxvKGgpO2Vsc2UgaWYobC5pc0RpcmVjdG9yeSgpKVNyKHMsZSx0LGkscixuLG8pO2Vsc2UgaWYo aSlqLmRlZmF1bHQudW5saW5rKHMsYz0+e2lmKGMpcmV0dXJuIG8oYyk7ai5kZWZhdWx0Lm1rZGly KHMsdCwkbihzLGUsdCxpLHIsbixvKSl9KTtlbHNle2lmKGwuaXNTeW1ib2xpY0xpbmsoKSlyZXR1 cm4gbyhuZXcgVm4uU3ltbGlua0Vycm9yKHMscysiLyIrZS5qb2luKCIvIikpKTtvKGEpfX0pOihu PW58fHMsU3IocyxlLHQsaSxyLG4sbykpfSxIaD1zPT57bGV0IGU9ITEsdDt0cnl7ZT1qLmRlZmF1 bHQuc3RhdFN5bmMocykuaXNEaXJlY3RvcnkoKX1jYXRjaChpKXt0PWk/LmNvZGV9ZmluYWxseXtp ZighZSl0aHJvdyBuZXcgS24uQ3dkRXJyb3Iocyx0Pz8iRU5PVERJUiIpfX0sR2g9KHMsZSk9Pntz PSgwLF9lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShzKTtsZXQgdD1lLnVtYXNrPz8xOCxpPWUubW9k ZXw0NDgscj0oaSZ0KSE9PTAsbj1lLnVpZCxvPWUuZ2lkLGE9dHlwZW9mIG49PSJudW1iZXIiJiZ0 eXBlb2Ygbz09Im51bWJlciImJihuIT09ZS5wcm9jZXNzVWlkfHxvIT09ZS5wcm9jZXNzR2lkKSxo PWUucHJlc2VydmUsbD1lLnVubGluayxjPSgwLF9lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShlLmN3 ZCksdT13PT57dyYmYSYmKDAsWW4uY2hvd25yU3luYykodyxuLG8pLHImJmouZGVmYXVsdC5jaG1v ZFN5bmMocyxpKX07aWYocz09PWMpcmV0dXJuIEhoKGMpLHUoKTtpZihoKXJldHVybiB1KGouZGVm YXVsdC5ta2RpclN5bmMocyx7bW9kZTppLHJlY3Vyc2l2ZTohMH0pPz92b2lkIDApO2xldCBEPSgw LF9lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShVaS5kZWZhdWx0LnJlbGF0aXZlKGMscykpLnNwbGl0 KCIvIiksQTtmb3IobGV0IHc9RC5zaGlmdCgpLFA9Yzt3JiYoUCs9Ii8iK3cpO3c9RC5zaGlmdCgp KXtQPSgwLF9lLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShVaS5kZWZhdWx0LnJlc29sdmUoUCkpO3Ry eXtqLmRlZmF1bHQubWtkaXJTeW5jKFAsaSksQT1BfHxQfWNhdGNoe2xldCB4dD1qLmRlZmF1bHQu bHN0YXRTeW5jKFApO2lmKHh0LmlzRGlyZWN0b3J5KCkpY29udGludWU7aWYobCl7ai5kZWZhdWx0 LnVubGlua1N5bmMoUCksai5kZWZhdWx0Lm1rZGlyU3luYyhQLGkpLEE9QXx8UDtjb250aW51ZX1l bHNlIGlmKHh0LmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIG5ldyBWbi5TeW1saW5rRXJyb3IoUCxQ KyIvIitELmpvaW4oIi8iKSl9fXJldHVybiB1KEEpfTtEZS5ta2RpclN5bmM9R2h9KTt2YXIgSm49 ZChxaT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocWksIl9fZXNNb2R1bGUi LHt2YWx1ZTohMH0pO3FpLm5vcm1hbGl6ZVVuaWNvZGU9dm9pZCAwO3ZhciBScj1PYmplY3QuY3Jl YXRlKG51bGwpLFFuPTFlNCxjdD1uZXcgU2V0LFpoPXM9PntjdC5oYXMocyk/Y3QuZGVsZXRlKHMp OlJyW3NdPXMubm9ybWFsaXplKCJORkQiKS50b0xvY2FsZUxvd2VyQ2FzZSgiZW4iKS50b0xvY2Fs ZVVwcGVyQ2FzZSgiZW4iKSxjdC5hZGQocyk7bGV0IGU9UnJbc10sdD1jdC5zaXplLVFuO2lmKHQ+ UW4vMTApe2ZvcihsZXQgaSBvZiBjdClpZihjdC5kZWxldGUoaSksZGVsZXRlIFJyW2ldLC0tdDw9 MClicmVha31yZXR1cm4gZX07cWkubm9ybWFsaXplVW5pY29kZT1aaH0pO3ZhciB0bz1kKFdpPT57 InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShXaSwiX19lc01vZHVsZSIse3ZhbHVl OiEwfSk7V2kuUGF0aFJlc2VydmF0aW9ucz12b2lkIDA7dmFyIGVvPXJlcXVpcmUoIm5vZGU6cGF0 aCIpLFloPUpuKCksS2g9eWkoKSxWaD1wcm9jZXNzLmVudi5URVNUSU5HX1RBUl9GQUtFX1BMQVRG T1JNfHxwcm9jZXNzLnBsYXRmb3JtLCRoPVZoPT09IndpbjMyIixYaD1zPT5zLnNwbGl0KCIvIiku c2xpY2UoMCwtMSkucmVkdWNlKCh0LGkpPT57bGV0IHI9dC5hdCgtMSk7cmV0dXJuIHIhPT12b2lk IDAmJihpPSgwLGVvLmpvaW4pKHIsaSkpLHQucHVzaChpfHwiLyIpLHR9LFtdKSxPcj1jbGFzc3sj ZT1uZXcgTWFwOyNpPW5ldyBNYXA7I3M9bmV3IFNldDtyZXNlcnZlKGUsdCl7ZT0kaD9bIndpbjMy IHBhcmFsbGVsaXphdGlvbiBkaXNhYmxlZCJdOmUubWFwKHI9PigwLEtoLnN0cmlwVHJhaWxpbmdT bGFzaGVzKSgoMCxlby5qb2luKSgoMCxZaC5ub3JtYWxpemVVbmljb2RlKShyKSkpKTtsZXQgaT1u ZXcgU2V0KGUubWFwKHI9PlhoKHIpKS5yZWR1Y2UoKHIsbik9PnIuY29uY2F0KG4pKSk7dGhpcy4j aS5zZXQodCx7ZGlyczppLHBhdGhzOmV9KTtmb3IobGV0IHIgb2YgZSl7bGV0IG49dGhpcy4jZS5n ZXQocik7bj9uLnB1c2godCk6dGhpcy4jZS5zZXQocixbdF0pfWZvcihsZXQgciBvZiBpKXtsZXQg bj10aGlzLiNlLmdldChyKTtpZighbil0aGlzLiNlLnNldChyLFtuZXcgU2V0KFt0XSldKTtlbHNl e2xldCBvPW4uYXQoLTEpO28gaW5zdGFuY2VvZiBTZXQ/by5hZGQodCk6bi5wdXNoKG5ldyBTZXQo W3RdKSl9fXJldHVybiB0aGlzLiNyKHQpfSNuKGUpe2xldCB0PXRoaXMuI2kuZ2V0KGUpO2lmKCF0 KXRocm93IG5ldyBFcnJvcigiZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhbnkgcGF0aCByZXNlcnZh dGlvbnMiKTtyZXR1cm57cGF0aHM6dC5wYXRocy5tYXAoaT0+dGhpcy4jZS5nZXQoaSkpLGRpcnM6 Wy4uLnQuZGlyc10ubWFwKGk9PnRoaXMuI2UuZ2V0KGkpKX19Y2hlY2soZSl7bGV0e3BhdGhzOnQs ZGlyczppfT10aGlzLiNuKGUpO3JldHVybiB0LmV2ZXJ5KHI9PnImJnJbMF09PT1lKSYmaS5ldmVy eShyPT5yJiZyWzBdaW5zdGFuY2VvZiBTZXQmJnJbMF0uaGFzKGUpKX0jcihlKXtyZXR1cm4gdGhp cy4jcy5oYXMoZSl8fCF0aGlzLmNoZWNrKGUpPyExOih0aGlzLiNzLmFkZChlKSxlKCgpPT50aGlz LiN0KGUpKSwhMCl9I3QoZSl7aWYoIXRoaXMuI3MuaGFzKGUpKXJldHVybiExO2xldCB0PXRoaXMu I2kuZ2V0KGUpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCByZXNlcnZhdGlvbiIpO2xl dHtwYXRoczppLGRpcnM6cn09dCxuPW5ldyBTZXQ7Zm9yKGxldCBvIG9mIGkpe2xldCBhPXRoaXMu I2UuZ2V0KG8pO2lmKCFhfHxhPy5bMF0hPT1lKWNvbnRpbnVlO2xldCBoPWFbMV07aWYoIWgpe3Ro aXMuI2UuZGVsZXRlKG8pO2NvbnRpbnVlfWlmKGEuc2hpZnQoKSx0eXBlb2YgaD09ImZ1bmN0aW9u IiluLmFkZChoKTtlbHNlIGZvcihsZXQgbCBvZiBoKW4uYWRkKGwpfWZvcihsZXQgbyBvZiByKXts ZXQgYT10aGlzLiNlLmdldChvKSxoPWE/LlswXTtpZighKCFhfHwhKGggaW5zdGFuY2VvZiBTZXQp KSlpZihoLnNpemU9PT0xJiZhLmxlbmd0aD09PTEpe3RoaXMuI2UuZGVsZXRlKG8pO2NvbnRpbnVl fWVsc2UgaWYoaC5zaXplPT09MSl7YS5zaGlmdCgpO2xldCBsPWFbMF07dHlwZW9mIGw9PSJmdW5j dGlvbiImJm4uYWRkKGwpfWVsc2UgaC5kZWxldGUoZSl9cmV0dXJuIHRoaXMuI3MuZGVsZXRlKGUp LG4uZm9yRWFjaChvPT50aGlzLiNyKG8pKSwhMH19O1dpLlBhdGhSZXNlcnZhdGlvbnM9T3J9KTt2 YXIgaW89ZChIaT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSGksIl9fZXNN b2R1bGUiLHt2YWx1ZTohMH0pO0hpLnVtYXNrPXZvaWQgMDt2YXIgUWg9KCk9PnByb2Nlc3MudW1h c2soKTtIaS51bWFzaz1RaH0pO3ZhciBDcj1kKGs9PnsidXNlIHN0cmljdCI7dmFyIEpoPWsmJmsu X19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24ocyxlLHQsaSl7aT09PXZv aWQgMCYmKGk9dCk7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpOygh cnx8KCJnZXQiaW4gcj8hZS5fX2VzTW9kdWxlOnIud3JpdGFibGV8fHIuY29uZmlndXJhYmxlKSkm JihyPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3RdfX0pLE9iamVjdC5k ZWZpbmVQcm9wZXJ0eShzLGkscil9KTooZnVuY3Rpb24ocyxlLHQsaSl7aT09PXZvaWQgMCYmKGk9 dCksc1tpXT1lW3RdfSkpLGVsPWsmJmsuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0 ZT8oZnVuY3Rpb24ocyxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocywiZGVmYXVsdCIse2VudW1l cmFibGU6ITAsdmFsdWU6ZX0pfSk6ZnVuY3Rpb24ocyxlKXtzLmRlZmF1bHQ9ZX0pLGZvPWsmJmsu X19pbXBvcnRTdGFyfHwoZnVuY3Rpb24oKXt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4gcz1PYmpl Y3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7dmFyIGk9W107Zm9yKHZhciByIGlu IHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihpW2kubGVuZ3Ro XT1yKTtyZXR1cm4gaX0scyhlKX07cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVs ZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2YXIgaT1zKGUpLHI9MDtyPGkubGVu Z3RoO3IrKylpW3JdIT09ImRlZmF1bHQiJiZKaCh0LGUsaVtyXSk7cmV0dXJuIGVsKHQsZSksdH19 KSgpLEZyPWsmJmsuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihzKXtyZXR1cm4gcyYmcy5fX2Vz TW9kdWxlP3M6e2RlZmF1bHQ6c319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxl Iix7dmFsdWU6ITB9KTtrLlVucGFja1N5bmM9ay5VbnBhY2s9dm9pZCAwO3ZhciB0bD1mbyhLZSgp KSxpbD1GcihyZXF1aXJlKCJub2RlOmFzc2VydCIpKSxtbz1yZXF1aXJlKCJub2RlOmNyeXB0byIp LG09RnIocmVxdWlyZSgibm9kZTpmcyIpKSxnPUZyKHJlcXVpcmUoIm5vZGU6cGF0aCIpKSxwbz1X bigpLF9vPVhuKCksVT10dCgpLHNsPV9pKCkscmw9WnMoKSxzbz1mbyhLcygpKSxubD10bygpLHdv PWJyKCksb2w9aW8oKSxybz1TeW1ib2woIm9uRW50cnkiKSxQcj1TeW1ib2woImNoZWNrRnMiKSxu bz1TeW1ib2woImNoZWNrRnMyIiksTnI9U3ltYm9sKCJpc1JldXNhYmxlIiksRz1TeW1ib2woIm1h a2VGcyIpLE1yPVN5bWJvbCgiZmlsZSIpLExyPVN5bWJvbCgiZGlyZWN0b3J5IiksWmk9U3ltYm9s KCJsaW5rIiksb289U3ltYm9sKCJzeW1saW5rIiksYW89U3ltYm9sKCJoYXJkbGluayIpLEF0PVN5 bWJvbCgiZW5zdXJlTm9TeW1saW5rIiksaG89U3ltYm9sKCJ1bnN1cHBvcnRlZCIpLGxvPVN5bWJv bCgiY2hlY2tQYXRoIiksdnI9U3ltYm9sKCJzdHJpcEFic29sdXRlUGF0aCIpLFBlPVN5bWJvbCgi bWtkaXIiKSxUPVN5bWJvbCgib25FcnJvciIpLEdpPVN5bWJvbCgicGVuZGluZyIpLGNvPVN5bWJv bCgicGVuZCIpLHV0PVN5bWJvbCgidW5wZW5kIiksVHI9U3ltYm9sKCJlbmRlZCIpLERyPVN5bWJv bCgibWF5YmVDbG9zZSIpLEFyPVN5bWJvbCgic2tpcCIpLEl0PVN5bWJvbCgiZG9DaG93biIpLEZ0 PVN5bWJvbCgidWlkIiksQ3Q9U3ltYm9sKCJnaWQiKSxCdD1TeW1ib2woImNoZWNrZWRDd2QiKSxh bD1wcm9jZXNzLmVudi5URVNUSU5HX1RBUl9GQUtFX1BMQVRGT1JNfHxwcm9jZXNzLnBsYXRmb3Jt LHp0PWFsPT09IndpbjMyIixobD0xMDI0LGxsPShzLGUpPT57aWYoIXp0KXJldHVybiBtLmRlZmF1 bHQudW5saW5rKHMsZSk7bGV0IHQ9cysiLkRFTEVURS4iKygwLG1vLnJhbmRvbUJ5dGVzKSgxNiku dG9TdHJpbmcoImhleCIpO20uZGVmYXVsdC5yZW5hbWUocyx0LGk9PntpZihpKXJldHVybiBlKGkp O20uZGVmYXVsdC51bmxpbmsodCxlKX0pfSxjbD1zPT57aWYoIXp0KXJldHVybiBtLmRlZmF1bHQu dW5saW5rU3luYyhzKTtsZXQgZT1zKyIuREVMRVRFLiIrKDAsbW8ucmFuZG9tQnl0ZXMpKDE2KS50 b1N0cmluZygiaGV4Iik7bS5kZWZhdWx0LnJlbmFtZVN5bmMocyxlKSxtLmRlZmF1bHQudW5saW5r U3luYyhlKX0sdW89KHMsZSx0KT0+cyE9PXZvaWQgMCYmcz09PXM+Pj4wP3M6ZSE9PXZvaWQgMCYm ZT09PWU+Pj4wP2U6dCxZaT1jbGFzcyBleHRlbmRzIHNsLlBhcnNlcntbVHJdPSExO1tCdF09ITE7 W0dpXT0wO3Jlc2VydmF0aW9ucz1uZXcgbmwuUGF0aFJlc2VydmF0aW9uczt0cmFuc2Zvcm07d3Jp dGFibGU9ITA7cmVhZGFibGU9ITE7dWlkO2dpZDtzZXRPd25lcjtwcmVzZXJ2ZU93bmVyO3Byb2Nl c3NHaWQ7cHJvY2Vzc1VpZDttYXhEZXB0aDtmb3JjZUNob3duO3dpbjMyO25ld2VyO2tlZXA7bm9N dGltZTtwcmVzZXJ2ZVBhdGhzO3VubGluaztjd2Q7c3RyaXA7cHJvY2Vzc1VtYXNrO3VtYXNrO2Rt b2RlO2Ztb2RlO2NobW9kO2NvbnN0cnVjdG9yKGU9e30pe2lmKGUub25kb25lPSgpPT57dGhpc1tU cl09ITAsdGhpc1tEcl0oKX0sc3VwZXIoZSksdGhpcy50cmFuc2Zvcm09ZS50cmFuc2Zvcm0sdGhp cy5jaG1vZD0hIWUuY2htb2QsdHlwZW9mIGUudWlkPT0ibnVtYmVyInx8dHlwZW9mIGUuZ2lkPT0i bnVtYmVyIil7aWYodHlwZW9mIGUudWlkIT0ibnVtYmVyInx8dHlwZW9mIGUuZ2lkIT0ibnVtYmVy Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW5ub3Qgc2V0IG93bmVyIHdpdGhvdXQgbnVtYmVyIHVp ZCBhbmQgZ2lkIik7aWYoZS5wcmVzZXJ2ZU93bmVyKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbm5v dCBwcmVzZXJ2ZSBvd25lciBpbiBhcmNoaXZlIGFuZCBhbHNvIHNldCBvd25lciBleHBsaWNpdGx5 Iik7dGhpcy51aWQ9ZS51aWQsdGhpcy5naWQ9ZS5naWQsdGhpcy5zZXRPd25lcj0hMH1lbHNlIHRo aXMudWlkPXZvaWQgMCx0aGlzLmdpZD12b2lkIDAsdGhpcy5zZXRPd25lcj0hMTt0aGlzLnByZXNl cnZlT3duZXI9ZS5wcmVzZXJ2ZU93bmVyPT09dm9pZCAwJiZ0eXBlb2YgZS51aWQhPSJudW1iZXIi P3Byb2Nlc3MuZ2V0dWlkPy4oKT09PTA6ISFlLnByZXNlcnZlT3duZXIsdGhpcy5wcm9jZXNzVWlk PSh0aGlzLnByZXNlcnZlT3duZXJ8fHRoaXMuc2V0T3duZXIpJiZwcm9jZXNzLmdldHVpZD9wcm9j ZXNzLmdldHVpZCgpOnZvaWQgMCx0aGlzLnByb2Nlc3NHaWQ9KHRoaXMucHJlc2VydmVPd25lcnx8 dGhpcy5zZXRPd25lcikmJnByb2Nlc3MuZ2V0Z2lkP3Byb2Nlc3MuZ2V0Z2lkKCk6dm9pZCAwLHRo aXMubWF4RGVwdGg9dHlwZW9mIGUubWF4RGVwdGg9PSJudW1iZXIiP2UubWF4RGVwdGg6aGwsdGhp cy5mb3JjZUNob3duPWUuZm9yY2VDaG93bj09PSEwLHRoaXMud2luMzI9ISFlLndpbjMyfHx6dCx0 aGlzLm5ld2VyPSEhZS5uZXdlcix0aGlzLmtlZXA9ISFlLmtlZXAsdGhpcy5ub010aW1lPSEhZS5u b010aW1lLHRoaXMucHJlc2VydmVQYXRocz0hIWUucHJlc2VydmVQYXRocyx0aGlzLnVubGluaz0h IWUudW5saW5rLHRoaXMuY3dkPSgwLFUubm9ybWFsaXplV2luZG93c1BhdGgpKGcuZGVmYXVsdC5y ZXNvbHZlKGUuY3dkfHxwcm9jZXNzLmN3ZCgpKSksdGhpcy5zdHJpcD1OdW1iZXIoZS5zdHJpcCl8 fDAsdGhpcy5wcm9jZXNzVW1hc2s9dGhpcy5jaG1vZD90eXBlb2YgZS5wcm9jZXNzVW1hc2s9PSJu dW1iZXIiP2UucHJvY2Vzc1VtYXNrOigwLG9sLnVtYXNrKSgpOjAsdGhpcy51bWFzaz10eXBlb2Yg ZS51bWFzaz09Im51bWJlciI/ZS51bWFzazp0aGlzLnByb2Nlc3NVbWFzayx0aGlzLmRtb2RlPWUu ZG1vZGV8fDUxMSZ+dGhpcy51bWFzayx0aGlzLmZtb2RlPWUuZm1vZGV8fDQzOCZ+dGhpcy51bWFz ayx0aGlzLm9uKCJlbnRyeSIsdD0+dGhpc1tyb10odCkpfXdhcm4oZSx0LGk9e30pe3JldHVybihl PT09IlRBUl9CQURfQVJDSElWRSJ8fGU9PT0iVEFSX0FCT1JUIikmJihpLnJlY292ZXJhYmxlPSEx KSxzdXBlci53YXJuKGUsdCxpKX1bRHJdKCl7dGhpc1tUcl0mJnRoaXNbR2ldPT09MCYmKHRoaXMu ZW1pdCgicHJlZmluaXNoIiksdGhpcy5lbWl0KCJmaW5pc2giKSx0aGlzLmVtaXQoImVuZCIpKX1b dnJdKGUsdCl7bGV0IGk9ZVt0XSx7dHlwZTpyfT1lO2lmKCFpfHx0aGlzLnByZXNlcnZlUGF0aHMp cmV0dXJuITA7bGV0W24sb109KDAscmwuc3RyaXBBYnNvbHV0ZVBhdGgpKGkpLGE9by5yZXBsYWNl QWxsKC9cXC9nLCIvIikuc3BsaXQoIi8iKTtpZihhLmluY2x1ZGVzKCIuLiIpfHx6dCYmL15bYS16 XTpcLlwuJC9pLnRlc3QoYVswXT8/IiIpKXtpZih0PT09InBhdGgifHxyPT09IkxpbmsiKXJldHVy biB0aGlzLndhcm4oIlRBUl9FTlRSWV9FUlJPUiIsYCR7dH0gY29udGFpbnMgJy4uJ2Ase2VudHJ5 OmUsW3RdOml9KSwhMTtsZXQgaD1nLmRlZmF1bHQucG9zaXguZGlybmFtZShlLnBhdGgpLGw9Zy5k ZWZhdWx0LnBvc2l4Lm5vcm1hbGl6ZShnLmRlZmF1bHQucG9zaXguam9pbihoLGEuam9pbigiLyIp KSk7aWYobC5zdGFydHNXaXRoKCIuLi8iKXx8bD09PSIuLiIpcmV0dXJuIHRoaXMud2FybigiVEFS X0VOVFJZX0VSUk9SIixgJHt0fSBlc2NhcGVzIGV4dHJhY3Rpb24gZGlyZWN0b3J5YCx7ZW50cnk6 ZSxbdF06aX0pLCExfXJldHVybiBuJiYoZVt0XT1TdHJpbmcobyksdGhpcy53YXJuKCJUQVJfRU5U UllfSU5GTyIsYHN0cmlwcGluZyAke259IGZyb20gYWJzb2x1dGUgJHt0fWAse2VudHJ5OmUsW3Rd Oml9KSksITB9W2xvXShlKXtsZXQgdD0oMCxVLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShlLnBhdGgp LGk9dC5zcGxpdCgiLyIpO2lmKHRoaXMuc3RyaXApe2lmKGkubGVuZ3RoPHRoaXMuc3RyaXApcmV0 dXJuITE7aWYoZS50eXBlPT09IkxpbmsiKXtsZXQgcj0oMCxVLm5vcm1hbGl6ZVdpbmRvd3NQYXRo KShTdHJpbmcoZS5saW5rcGF0aCkpLnNwbGl0KCIvIik7aWYoci5sZW5ndGg+PXRoaXMuc3RyaXAp ZS5saW5rcGF0aD1yLnNsaWNlKHRoaXMuc3RyaXApLmpvaW4oIi8iKTtlbHNlIHJldHVybiExfWku c3BsaWNlKDAsdGhpcy5zdHJpcCksZS5wYXRoPWkuam9pbigiLyIpfWlmKGlzRmluaXRlKHRoaXMu bWF4RGVwdGgpJiZpLmxlbmd0aD50aGlzLm1heERlcHRoKXJldHVybiB0aGlzLndhcm4oIlRBUl9F TlRSWV9FUlJPUiIsInBhdGggZXhjZXNzaXZlbHkgZGVlcCIse2VudHJ5OmUscGF0aDp0LGRlcHRo OmkubGVuZ3RoLG1heERlcHRoOnRoaXMubWF4RGVwdGh9KSwhMTtpZighdGhpc1t2cl0oZSwicGF0 aCIpfHwhdGhpc1t2cl0oZSwibGlua3BhdGgiKSlyZXR1cm4hMTtpZihlLmFic29sdXRlPWcuZGVm YXVsdC5pc0Fic29sdXRlKGUucGF0aCk/KDAsVS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZy5kZWZh dWx0LnJlc29sdmUoZS5wYXRoKSk6KDAsVS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZy5kZWZhdWx0 LnJlc29sdmUodGhpcy5jd2QsZS5wYXRoKSksIXRoaXMucHJlc2VydmVQYXRocyYmdHlwZW9mIGUu YWJzb2x1dGU9PSJzdHJpbmciJiZlLmFic29sdXRlLmluZGV4T2YodGhpcy5jd2QrIi8iKSE9PTAm JmUuYWJzb2x1dGUhPT10aGlzLmN3ZClyZXR1cm4gdGhpcy53YXJuKCJUQVJfRU5UUllfRVJST1Ii LCJwYXRoIGVzY2FwZWQgZXh0cmFjdGlvbiB0YXJnZXQiLHtlbnRyeTplLHBhdGg6KDAsVS5ub3Jt YWxpemVXaW5kb3dzUGF0aCkoZS5wYXRoKSxyZXNvbHZlZFBhdGg6ZS5hYnNvbHV0ZSxjd2Q6dGhp cy5jd2R9KSwhMTtpZihlLmFic29sdXRlPT09dGhpcy5jd2QmJmUudHlwZSE9PSJEaXJlY3Rvcnki JiZlLnR5cGUhPT0iR05VRHVtcERpciIpcmV0dXJuITE7aWYodGhpcy53aW4zMil7bGV0e3Jvb3Q6 cn09Zy5kZWZhdWx0LndpbjMyLnBhcnNlKFN0cmluZyhlLmFic29sdXRlKSk7ZS5hYnNvbHV0ZT1y K3NvLmVuY29kZShTdHJpbmcoZS5hYnNvbHV0ZSkuc2xpY2Uoci5sZW5ndGgpKTtsZXR7cm9vdDpu fT1nLmRlZmF1bHQud2luMzIucGFyc2UoZS5wYXRoKTtlLnBhdGg9bitzby5lbmNvZGUoZS5wYXRo LnNsaWNlKG4ubGVuZ3RoKSl9cmV0dXJuITB9W3JvXShlKXtpZighdGhpc1tsb10oZSkpcmV0dXJu IGUucmVzdW1lKCk7c3dpdGNoKGlsLmRlZmF1bHQuZXF1YWwodHlwZW9mIGUuYWJzb2x1dGUsInN0 cmluZyIpLGUudHlwZSl7Y2FzZSJEaXJlY3RvcnkiOmNhc2UiR05VRHVtcERpciI6ZS5tb2RlJiYo ZS5tb2RlPWUubW9kZXw0NDgpO2Nhc2UiRmlsZSI6Y2FzZSJPbGRGaWxlIjpjYXNlIkNvbnRpZ3Vv dXNGaWxlIjpjYXNlIkxpbmsiOmNhc2UiU3ltYm9saWNMaW5rIjpyZXR1cm4gdGhpc1tQcl0oZSk7 ZGVmYXVsdDpyZXR1cm4gdGhpc1tob10oZSl9fVtUXShlLHQpe2UubmFtZT09PSJDd2RFcnJvciI/ dGhpcy5lbWl0KCJlcnJvciIsZSk6KHRoaXMud2FybigiVEFSX0VOVFJZX0VSUk9SIixlLHtlbnRy eTp0fSksdGhpc1t1dF0oKSx0LnJlc3VtZSgpKX1bUGVdKGUsdCxpKXsoMCxfby5ta2RpcikoKDAs VS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZSkse3VpZDp0aGlzLnVpZCxnaWQ6dGhpcy5naWQscHJv Y2Vzc1VpZDp0aGlzLnByb2Nlc3NVaWQscHJvY2Vzc0dpZDp0aGlzLnByb2Nlc3NHaWQsdW1hc2s6 dGhpcy5wcm9jZXNzVW1hc2sscHJlc2VydmU6dGhpcy5wcmVzZXJ2ZVBhdGhzLHVubGluazp0aGlz LnVubGluayxjd2Q6dGhpcy5jd2QsbW9kZTp0fSxpKX1bSXRdKGUpe3JldHVybiB0aGlzLmZvcmNl Q2hvd258fHRoaXMucHJlc2VydmVPd25lciYmKHR5cGVvZiBlLnVpZD09Im51bWJlciImJmUudWlk IT09dGhpcy5wcm9jZXNzVWlkfHx0eXBlb2YgZS5naWQ9PSJudW1iZXIiJiZlLmdpZCE9PXRoaXMu cHJvY2Vzc0dpZCl8fHR5cGVvZiB0aGlzLnVpZD09Im51bWJlciImJnRoaXMudWlkIT09dGhpcy5w cm9jZXNzVWlkfHx0eXBlb2YgdGhpcy5naWQ9PSJudW1iZXIiJiZ0aGlzLmdpZCE9PXRoaXMucHJv Y2Vzc0dpZH1bRnRdKGUpe3JldHVybiB1byh0aGlzLnVpZCxlLnVpZCx0aGlzLnByb2Nlc3NVaWQp fVtDdF0oZSl7cmV0dXJuIHVvKHRoaXMuZ2lkLGUuZ2lkLHRoaXMucHJvY2Vzc0dpZCl9W01yXShl LHQpe2xldCBpPXR5cGVvZiBlLm1vZGU9PSJudW1iZXIiP2UubW9kZSY0MDk1OnRoaXMuZm1vZGUs cj1uZXcgdGwuV3JpdGVTdHJlYW0oU3RyaW5nKGUuYWJzb2x1dGUpLHtmbGFnczooMCxwby5nZXRX cml0ZUZsYWcpKGUuc2l6ZSksbW9kZTppLGF1dG9DbG9zZTohMX0pO3Iub24oImVycm9yIixoPT57 ci5mZCYmbS5kZWZhdWx0LmNsb3NlKHIuZmQsKCk9Pnt9KSxyLndyaXRlPSgpPT4hMCx0aGlzW1Rd KGgsZSksdCgpfSk7bGV0IG49MSxvPWg9PntpZihoKXtyLmZkJiZtLmRlZmF1bHQuY2xvc2Uoci5m ZCwoKT0+e30pLHRoaXNbVF0oaCxlKSx0KCk7cmV0dXJufS0tbj09PTAmJnIuZmQhPT12b2lkIDAm Jm0uZGVmYXVsdC5jbG9zZShyLmZkLGw9PntsP3RoaXNbVF0obCxlKTp0aGlzW3V0XSgpLHQoKX0p fTtyLm9uKCJmaW5pc2giLCgpPT57bGV0IGg9U3RyaW5nKGUuYWJzb2x1dGUpLGw9ci5mZDtpZih0 eXBlb2YgbD09Im51bWJlciImJmUubXRpbWUmJiF0aGlzLm5vTXRpbWUpe24rKztsZXQgYz1lLmF0 aW1lfHxuZXcgRGF0ZSx1PWUubXRpbWU7bS5kZWZhdWx0LmZ1dGltZXMobCxjLHUsRT0+RT9tLmRl ZmF1bHQudXRpbWVzKGgsYyx1LEQ9Pm8oRCYmRSkpOm8oKSl9aWYodHlwZW9mIGw9PSJudW1iZXIi JiZ0aGlzW0l0XShlKSl7bisrO2xldCBjPXRoaXNbRnRdKGUpLHU9dGhpc1tDdF0oZSk7dHlwZW9m IGM9PSJudW1iZXIiJiZ0eXBlb2YgdT09Im51bWJlciImJm0uZGVmYXVsdC5mY2hvd24obCxjLHUs RT0+RT9tLmRlZmF1bHQuY2hvd24oaCxjLHUsRD0+byhEJiZFKSk6bygpKX1vKCl9KTtsZXQgYT10 aGlzLnRyYW5zZm9ybSYmdGhpcy50cmFuc2Zvcm0oZSl8fGU7YSE9PWUmJihhLm9uKCJlcnJvciIs aD0+e3RoaXNbVF0oaCxlKSx0KCl9KSxlLnBpcGUoYSkpLGEucGlwZShyKX1bTHJdKGUsdCl7bGV0 IGk9dHlwZW9mIGUubW9kZT09Im51bWJlciI/ZS5tb2RlJjQwOTU6dGhpcy5kbW9kZTt0aGlzW1Bl XShTdHJpbmcoZS5hYnNvbHV0ZSksaSxyPT57aWYocil7dGhpc1tUXShyLGUpLHQoKTtyZXR1cm59 bGV0IG49MSxvPSgpPT57LS1uPT09MCYmKHQoKSx0aGlzW3V0XSgpLGUucmVzdW1lKCkpfTtlLm10 aW1lJiYhdGhpcy5ub010aW1lJiYobisrLG0uZGVmYXVsdC51dGltZXMoU3RyaW5nKGUuYWJzb2x1 dGUpLGUuYXRpbWV8fG5ldyBEYXRlLGUubXRpbWUsbykpLHRoaXNbSXRdKGUpJiYobisrLG0uZGVm YXVsdC5jaG93bihTdHJpbmcoZS5hYnNvbHV0ZSksTnVtYmVyKHRoaXNbRnRdKGUpKSxOdW1iZXIo dGhpc1tDdF0oZSkpLG8pKSxvKCl9KX1baG9dKGUpe2UudW5zdXBwb3J0ZWQ9ITAsdGhpcy53YXJu KCJUQVJfRU5UUllfVU5TVVBQT1JURUQiLGB1bnN1cHBvcnRlZCBlbnRyeSB0eXBlOiAke2UudHlw ZX1gLHtlbnRyeTplfSksZS5yZXN1bWUoKX1bb29dKGUsdCl7bGV0IGk9KDAsVS5ub3JtYWxpemVX aW5kb3dzUGF0aCkoZy5kZWZhdWx0LnJlbGF0aXZlKHRoaXMuY3dkLGcuZGVmYXVsdC5yZXNvbHZl KGcuZGVmYXVsdC5kaXJuYW1lKFN0cmluZyhlLmFic29sdXRlKSksU3RyaW5nKGUubGlua3BhdGgp KSkpLnNwbGl0KCIvIik7dGhpc1tBdF0oZSx0aGlzLmN3ZCxpLCgpPT50aGlzW1ppXShlLFN0cmlu ZyhlLmxpbmtwYXRoKSwic3ltbGluayIsdCkscj0+e3RoaXNbVF0ocixlKSx0KCl9KX1bYW9dKGUs dCl7bGV0IGk9KDAsVS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZy5kZWZhdWx0LnJlc29sdmUodGhp cy5jd2QsU3RyaW5nKGUubGlua3BhdGgpKSkscj0oMCxVLm5vcm1hbGl6ZVdpbmRvd3NQYXRoKShT dHJpbmcoZS5saW5rcGF0aCkpLnNwbGl0KCIvIik7dGhpc1tBdF0oZSx0aGlzLmN3ZCxyLCgpPT50 aGlzW1ppXShlLGksImxpbmsiLHQpLG49Pnt0aGlzW1RdKG4sZSksdCgpfSl9W0F0XShlLHQsaSxy LG4pe2xldCBvPWkuc2hpZnQoKTtpZih0aGlzLnByZXNlcnZlUGF0aHN8fG89PT12b2lkIDApcmV0 dXJuIHIoKTtsZXQgYT1nLmRlZmF1bHQucmVzb2x2ZSh0LG8pO20uZGVmYXVsdC5sc3RhdChhLCho LGwpPT57aWYoaClyZXR1cm4gcigpO2lmKGw/LmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIG4obmV3 IHdvLlN5bWxpbmtFcnJvcihhLGcuZGVmYXVsdC5yZXNvbHZlKGEsaS5qb2luKCIvIikpKSk7dGhp c1tBdF0oZSxhLGkscixuKX0pfVtjb10oKXt0aGlzW0dpXSsrfVt1dF0oKXt0aGlzW0dpXS0tLHRo aXNbRHJdKCl9W0FyXShlKXt0aGlzW3V0XSgpLGUucmVzdW1lKCl9W05yXShlLHQpe3JldHVybiBl LnR5cGU9PT0iRmlsZSImJiF0aGlzLnVubGluayYmdC5pc0ZpbGUoKSYmdC5ubGluazw9MSYmIXp0 fVtQcl0oZSl7dGhpc1tjb10oKTtsZXQgdD1bZS5wYXRoXTtlLmxpbmtwYXRoJiZ0LnB1c2goZS5s aW5rcGF0aCksdGhpcy5yZXNlcnZhdGlvbnMucmVzZXJ2ZSh0LGk9PnRoaXNbbm9dKGUsaSkpfVtu b10oZSx0KXtsZXQgaT1hPT57dChhKX0scj0oKT0+e3RoaXNbUGVdKHRoaXMuY3dkLHRoaXMuZG1v ZGUsYT0+e2lmKGEpe3RoaXNbVF0oYSxlKSxpKCk7cmV0dXJufXRoaXNbQnRdPSEwLG4oKX0pfSxu PSgpPT57aWYoZS5hYnNvbHV0ZSE9PXRoaXMuY3dkKXtsZXQgYT0oMCxVLm5vcm1hbGl6ZVdpbmRv d3NQYXRoKShnLmRlZmF1bHQuZGlybmFtZShTdHJpbmcoZS5hYnNvbHV0ZSkpKTtpZihhIT09dGhp cy5jd2QpcmV0dXJuIHRoaXNbUGVdKGEsdGhpcy5kbW9kZSxoPT57aWYoaCl7dGhpc1tUXShoLGUp LGkoKTtyZXR1cm59bygpfSl9bygpfSxvPSgpPT57bS5kZWZhdWx0LmxzdGF0KFN0cmluZyhlLmFi c29sdXRlKSwoYSxoKT0+e2lmKGgmJih0aGlzLmtlZXB8fHRoaXMubmV3ZXImJmgubXRpbWU+KGUu bXRpbWU/P2gubXRpbWUpKSl7dGhpc1tBcl0oZSksaSgpO3JldHVybn1pZihhfHx0aGlzW05yXShl LGgpKXJldHVybiB0aGlzW0ddKG51bGwsZSxpKTtpZihoLmlzRGlyZWN0b3J5KCkpe2lmKGUudHlw ZT09PSJEaXJlY3RvcnkiKXtsZXQgbD10aGlzLmNobW9kJiZlLm1vZGUmJihoLm1vZGUmNDA5NSkh PT1lLm1vZGUsYz11PT50aGlzW0ddKHU/P251bGwsZSxpKTtyZXR1cm4gbD9tLmRlZmF1bHQuY2ht b2QoU3RyaW5nKGUuYWJzb2x1dGUpLE51bWJlcihlLm1vZGUpLGMpOmMoKX1pZihlLmFic29sdXRl IT09dGhpcy5jd2QpcmV0dXJuIG0uZGVmYXVsdC5ybWRpcihTdHJpbmcoZS5hYnNvbHV0ZSksbD0+ dGhpc1tHXShsPz9udWxsLGUsaSkpfWlmKGUuYWJzb2x1dGU9PT10aGlzLmN3ZClyZXR1cm4gdGhp c1tHXShudWxsLGUsaSk7bGwoU3RyaW5nKGUuYWJzb2x1dGUpLGw9PnRoaXNbR10obD8/bnVsbCxl LGkpKX0pfTt0aGlzW0J0XT9uKCk6cigpfVtHXShlLHQsaSl7aWYoZSl7dGhpc1tUXShlLHQpLGko KTtyZXR1cm59c3dpdGNoKHQudHlwZSl7Y2FzZSJGaWxlIjpjYXNlIk9sZEZpbGUiOmNhc2UiQ29u dGlndW91c0ZpbGUiOnJldHVybiB0aGlzW01yXSh0LGkpO2Nhc2UiTGluayI6cmV0dXJuIHRoaXNb YW9dKHQsaSk7Y2FzZSJTeW1ib2xpY0xpbmsiOnJldHVybiB0aGlzW29vXSh0LGkpO2Nhc2UiRGly ZWN0b3J5IjpjYXNlIkdOVUR1bXBEaXIiOnJldHVybiB0aGlzW0xyXSh0LGkpfX1bWmldKGUsdCxp LHIpe20uZGVmYXVsdFtpXSh0LFN0cmluZyhlLmFic29sdXRlKSxuPT57bj90aGlzW1RdKG4sZSk6 KHRoaXNbdXRdKCksZS5yZXN1bWUoKSkscigpfSl9fTtrLlVucGFjaz1ZaTt2YXIgTHQ9cz0+e3Ry eXtyZXR1cm5bbnVsbCxzKCldfWNhdGNoKGUpe3JldHVybltlLG51bGxdfX0sSXI9Y2xhc3MgZXh0 ZW5kcyBZaXtzeW5jPSEwO1tHXShlLHQpe3JldHVybiBzdXBlcltHXShlLHQsKCk9Pnt9KX1bUHJd KGUpe2lmKCF0aGlzW0J0XSl7bGV0IG49dGhpc1tQZV0odGhpcy5jd2QsdGhpcy5kbW9kZSk7aWYo bilyZXR1cm4gdGhpc1tUXShuLGUpO3RoaXNbQnRdPSEwfWlmKGUuYWJzb2x1dGUhPT10aGlzLmN3 ZCl7bGV0IG49KDAsVS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZy5kZWZhdWx0LmRpcm5hbWUoU3Ry aW5nKGUuYWJzb2x1dGUpKSk7aWYobiE9PXRoaXMuY3dkKXtsZXQgbz10aGlzW1BlXShuLHRoaXMu ZG1vZGUpO2lmKG8pcmV0dXJuIHRoaXNbVF0obyxlKX19bGV0W3QsaV09THQoKCk9Pm0uZGVmYXVs dC5sc3RhdFN5bmMoU3RyaW5nKGUuYWJzb2x1dGUpKSk7aWYoaSYmKHRoaXMua2VlcHx8dGhpcy5u ZXdlciYmaS5tdGltZT4oZS5tdGltZT8/aS5tdGltZSkpKXJldHVybiB0aGlzW0FyXShlKTtpZih0 fHx0aGlzW05yXShlLGkpKXJldHVybiB0aGlzW0ddKG51bGwsZSk7aWYoaS5pc0RpcmVjdG9yeSgp KXtpZihlLnR5cGU9PT0iRGlyZWN0b3J5Iil7bGV0IG89dGhpcy5jaG1vZCYmZS5tb2RlJiYoaS5t b2RlJjQwOTUpIT09ZS5tb2RlLFthXT1vP0x0KCgpPT57bS5kZWZhdWx0LmNobW9kU3luYyhTdHJp bmcoZS5hYnNvbHV0ZSksTnVtYmVyKGUubW9kZSkpfSk6W107cmV0dXJuIHRoaXNbR10oYSxlKX1s ZXRbbl09THQoKCk9Pm0uZGVmYXVsdC5ybWRpclN5bmMoU3RyaW5nKGUuYWJzb2x1dGUpKSk7dGhp c1tHXShuLGUpfWxldFtyXT1lLmFic29sdXRlPT09dGhpcy5jd2Q/W106THQoKCk9PmNsKFN0cmlu ZyhlLmFic29sdXRlKSkpO3RoaXNbR10ocixlKX1bTXJdKGUsdCl7bGV0IGk9dHlwZW9mIGUubW9k ZT09Im51bWJlciI/ZS5tb2RlJjQwOTU6dGhpcy5mbW9kZSxyPWE9PntsZXQgaDt0cnl7bS5kZWZh dWx0LmNsb3NlU3luYyhuKX1jYXRjaChsKXtoPWx9KGF8fGgpJiZ0aGlzW1RdKGF8fGgsZSksdCgp fSxuO3RyeXtuPW0uZGVmYXVsdC5vcGVuU3luYyhTdHJpbmcoZS5hYnNvbHV0ZSksKDAscG8uZ2V0 V3JpdGVGbGFnKShlLnNpemUpLGkpfWNhdGNoKGEpe3JldHVybiByKGEpfWxldCBvPXRoaXMudHJh bnNmb3JtJiZ0aGlzLnRyYW5zZm9ybShlKXx8ZTtvIT09ZSYmKG8ub24oImVycm9yIixhPT50aGlz W1RdKGEsZSkpLGUucGlwZShvKSksby5vbigiZGF0YSIsYT0+e3RyeXttLmRlZmF1bHQud3JpdGVT eW5jKG4sYSwwLGEubGVuZ3RoKX1jYXRjaChoKXtyKGgpfX0pLG8ub24oImVuZCIsKCk9PntsZXQg YT1udWxsO2lmKGUubXRpbWUmJiF0aGlzLm5vTXRpbWUpe2xldCBoPWUuYXRpbWV8fG5ldyBEYXRl LGw9ZS5tdGltZTt0cnl7bS5kZWZhdWx0LmZ1dGltZXNTeW5jKG4saCxsKX1jYXRjaChjKXt0cnl7 bS5kZWZhdWx0LnV0aW1lc1N5bmMoU3RyaW5nKGUuYWJzb2x1dGUpLGgsbCl9Y2F0Y2h7YT1jfX19 aWYodGhpc1tJdF0oZSkpe2xldCBoPXRoaXNbRnRdKGUpLGw9dGhpc1tDdF0oZSk7dHJ5e20uZGVm YXVsdC5mY2hvd25TeW5jKG4sTnVtYmVyKGgpLE51bWJlcihsKSl9Y2F0Y2goYyl7dHJ5e20uZGVm YXVsdC5jaG93blN5bmMoU3RyaW5nKGUuYWJzb2x1dGUpLE51bWJlcihoKSxOdW1iZXIobCkpfWNh dGNoe2E9YXx8Y319fXIoYSl9KX1bTHJdKGUsdCl7bGV0IGk9dHlwZW9mIGUubW9kZT09Im51bWJl ciI/ZS5tb2RlJjQwOTU6dGhpcy5kbW9kZSxyPXRoaXNbUGVdKFN0cmluZyhlLmFic29sdXRlKSxp KTtpZihyKXt0aGlzW1RdKHIsZSksdCgpO3JldHVybn1pZihlLm10aW1lJiYhdGhpcy5ub010aW1l KXRyeXttLmRlZmF1bHQudXRpbWVzU3luYyhTdHJpbmcoZS5hYnNvbHV0ZSksZS5hdGltZXx8bmV3 IERhdGUsZS5tdGltZSl9Y2F0Y2h7fWlmKHRoaXNbSXRdKGUpKXRyeXttLmRlZmF1bHQuY2hvd25T eW5jKFN0cmluZyhlLmFic29sdXRlKSxOdW1iZXIodGhpc1tGdF0oZSkpLE51bWJlcih0aGlzW0N0 XShlKSkpfWNhdGNoe310KCksZS5yZXN1bWUoKX1bUGVdKGUsdCl7dHJ5e3JldHVybigwLF9vLm1r ZGlyU3luYykoKDAsVS5ub3JtYWxpemVXaW5kb3dzUGF0aCkoZSkse3VpZDp0aGlzLnVpZCxnaWQ6 dGhpcy5naWQscHJvY2Vzc1VpZDp0aGlzLnByb2Nlc3NVaWQscHJvY2Vzc0dpZDp0aGlzLnByb2Nl c3NHaWQsdW1hc2s6dGhpcy5wcm9jZXNzVW1hc2sscHJlc2VydmU6dGhpcy5wcmVzZXJ2ZVBhdGhz LHVubGluazp0aGlzLnVubGluayxjd2Q6dGhpcy5jd2QsbW9kZTp0fSl9Y2F0Y2goaSl7cmV0dXJu IGl9fVtBdF0oZSx0LGkscixuKXtpZih0aGlzLnByZXNlcnZlUGF0aHN8fGkubGVuZ3RoPT09MCly ZXR1cm4gcigpO2xldCBvPXQ7Zm9yKGxldCBhIG9mIGkpe289Zy5kZWZhdWx0LnJlc29sdmUobyxh KTtsZXRbaCxsXT1MdCgoKT0+bS5kZWZhdWx0LmxzdGF0U3luYyhvKSk7aWYoaClyZXR1cm4gcigp O2lmKGwuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gbihuZXcgd28uU3ltbGlua0Vycm9yKG8sZy5k ZWZhdWx0LnJlc29sdmUodCxpLmpvaW4oIi8iKSkpKX1yKCl9W1ppXShlLHQsaSxyKXtsZXQgbj1g JHtpfVN5bmNgO3RyeXttLmRlZmF1bHRbbl0odCxTdHJpbmcoZS5hYnNvbHV0ZSkpLHIoKSxlLnJl c3VtZSgpfWNhdGNoKG8pe3JldHVybiB0aGlzW1RdKG8sZSl9fX07ay5VbnBhY2tTeW5jPUlyfSk7 dmFyIEJyPWQoWj0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdWw9WiYmWi5fX2NyZWF0ZUJpbmRpbmd8fChP YmplY3QuY3JlYXRlPyhmdW5jdGlvbihzLGUsdCxpKXtpPT09dm9pZCAwJiYoaT10KTt2YXIgcj1P YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCk7KCFyfHwoImdldCJpbiByPyFlLl9f ZXNNb2R1bGU6ci53cml0YWJsZXx8ci5jb25maWd1cmFibGUpKSYmKHI9e2VudW1lcmFibGU6ITAs Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbdF19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsaSxy KX0pOihmdW5jdGlvbihzLGUsdCxpKXtpPT09dm9pZCAwJiYoaT10KSxzW2ldPWVbdF19KSksZmw9 WiYmWi5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlvbihzLGUpe09i amVjdC5kZWZpbmVQcm9wZXJ0eShzLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSl9 KTpmdW5jdGlvbihzLGUpe3MuZGVmYXVsdD1lfSksZGw9WiYmWi5fX2ltcG9ydFN0YXJ8fChmdW5j dGlvbigpe3ZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h bWVzfHxmdW5jdGlvbih0KXt2YXIgaT1bXTtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBl Lmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGlbaS5sZW5ndGhdPXIpO3JldHVybiBpfSxzKGUp fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9 O2lmKGUhPW51bGwpZm9yKHZhciBpPXMoZSkscj0wO3I8aS5sZW5ndGg7cisrKWlbcl0hPT0iZGVm YXVsdCImJnVsKHQsZSxpW3JdKTtyZXR1cm4gZmwodCxlKSx0fX0pKCksbWw9WiYmWi5fX2ltcG9y dERlZmF1bHR8fGZ1bmN0aW9uKHMpe3JldHVybiBzJiZzLl9fZXNNb2R1bGU/czp7ZGVmYXVsdDpz fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO1ouZXh0 cmFjdD12b2lkIDA7dmFyIHlvPWRsKEtlKCkpLEVvPW1sKHJlcXVpcmUoIm5vZGU6ZnMiKSkscGw9 cnQoKSxfbD1WZSgpLEtpPUNyKCksd2w9cz0+e2xldCBlPW5ldyBLaS5VbnBhY2tTeW5jKHMpLHQ9 cy5maWxlLGk9RW8uZGVmYXVsdC5zdGF0U3luYyh0KSxyPXMubWF4UmVhZFNpemV8fDE2KjEwMjQq MTAyNDtuZXcgeW8uUmVhZFN0cmVhbVN5bmModCx7cmVhZFNpemU6cixzaXplOmkuc2l6ZX0pLnBp cGUoZSl9LHlsPShzLGUpPT57bGV0IHQ9bmV3IEtpLlVucGFjayhzKSxpPXMubWF4UmVhZFNpemV8 fDE2KjEwMjQqMTAyNCxyPXMuZmlsZTtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9Pnt0Lm9uKCJl cnJvciIsYSksdC5vbigiY2xvc2UiLG8pLEVvLmRlZmF1bHQuc3RhdChyLChoLGwpPT57aWYoaClh KGgpO2Vsc2V7bGV0IGM9bmV3IHlvLlJlYWRTdHJlYW0ocix7cmVhZFNpemU6aSxzaXplOmwuc2l6 ZX0pO2Mub24oImVycm9yIixhKSxjLnBpcGUodCl9fSl9KX07Wi5leHRyYWN0PSgwLF9sLm1ha2VD b21tYW5kKSh3bCx5bCxzPT5uZXcgS2kuVW5wYWNrU3luYyhzKSxzPT5uZXcgS2kuVW5wYWNrKHMp LChzLGUpPT57ZT8ubGVuZ3RoJiYoMCxwbC5maWxlc0ZpbHRlcikocyxlKX0pfSk7dmFyIFZpPWQo ZnQ9PnsidXNlIHN0cmljdCI7dmFyIGJvPWZ0JiZmdC5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9u KHMpe3JldHVybiBzJiZzLl9fZXNNb2R1bGU/czp7ZGVmYXVsdDpzfX07T2JqZWN0LmRlZmluZVBy b3BlcnR5KGZ0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdC5yZXBsYWNlPXZvaWQgMDt2YXIg U289S2UoKSxxPWJvKHJlcXVpcmUoIm5vZGU6ZnMiKSksZ289Ym8ocmVxdWlyZSgibm9kZTpwYXRo IikpLFJvPWV0KCksT289cnQoKSxFbD1WZSgpLGJsPVF0KCksdm89Q2koKSxTbD0ocyxlKT0+e2xl dCB0PW5ldyB2by5QYWNrU3luYyhzKSxpPSEwLHIsbjt0cnl7dHJ5e3I9cS5kZWZhdWx0Lm9wZW5T eW5jKHMuZmlsZSwicisiKX1jYXRjaChoKXtpZihoPy5jb2RlPT09IkVOT0VOVCIpcj1xLmRlZmF1 bHQub3BlblN5bmMocy5maWxlLCJ3KyIpO2Vsc2UgdGhyb3cgaH1sZXQgbz1xLmRlZmF1bHQuZnN0 YXRTeW5jKHIpLGE9QnVmZmVyLmFsbG9jKDUxMik7ZTpmb3Iobj0wO248by5zaXplO24rPTUxMil7 Zm9yKGxldCBjPTAsdT0wO2M8NTEyO2MrPXUpe2lmKHU9cS5kZWZhdWx0LnJlYWRTeW5jKHIsYSxj LGEubGVuZ3RoLWMsbitjKSxuPT09MCYmYVswXT09PTMxJiZhWzFdPT09MTM5KXRocm93IG5ldyBF cnJvcigiY2Fubm90IGFwcGVuZCB0byBjb21wcmVzc2VkIGFyY2hpdmVzIik7aWYoIXUpYnJlYWsg ZX1sZXQgaD1uZXcgUm8uSGVhZGVyKGEpO2lmKCFoLmNrc3VtVmFsaWQpYnJlYWs7bGV0IGw9NTEy Kk1hdGguY2VpbCgoaC5zaXplfHwwKS81MTIpO2lmKG4rbCs1MTI+by5zaXplKWJyZWFrO24rPWws cy5tdGltZUNhY2hlJiZoLm10aW1lJiZzLm10aW1lQ2FjaGUuc2V0KFN0cmluZyhoLnBhdGgpLGgu bXRpbWUpfWk9ITEsZ2wocyx0LG4scixlKX1maW5hbGx5e2lmKGkpdHJ5e3EuZGVmYXVsdC5jbG9z ZVN5bmMocil9Y2F0Y2h7fX19LGdsPShzLGUsdCxpLHIpPT57bGV0IG49bmV3IFNvLldyaXRlU3Ry ZWFtU3luYyhzLmZpbGUse2ZkOmksc3RhcnQ6dH0pO2UucGlwZShuKSxPbChlLHIpfSxSbD0ocyxl KT0+e2U9QXJyYXkuZnJvbShlKTtsZXQgdD1uZXcgdm8uUGFjayhzKSxpPShuLG8sYSk9PntsZXQg aD0oRCxBKT0+e0Q/cS5kZWZhdWx0LmNsb3NlKG4sdz0+YShEKSk6YShudWxsLEEpfSxsPTA7aWYo bz09PTApcmV0dXJuIGgobnVsbCwwKTtsZXQgYz0wLHU9QnVmZmVyLmFsbG9jKDUxMiksRT0oRCxB KT0+e2lmKER8fEE9PT12b2lkIDApcmV0dXJuIGgoRCk7aWYoYys9QSxjPDUxMiYmQSlyZXR1cm4g cS5kZWZhdWx0LnJlYWQobix1LGMsdS5sZW5ndGgtYyxsK2MsRSk7aWYobD09PTAmJnVbMF09PT0z MSYmdVsxXT09PTEzOSlyZXR1cm4gaChuZXcgRXJyb3IoImNhbm5vdCBhcHBlbmQgdG8gY29tcHJl c3NlZCBhcmNoaXZlcyIpKTtpZihjPDUxMilyZXR1cm4gaChudWxsLGwpO2xldCB3PW5ldyBSby5I ZWFkZXIodSk7aWYoIXcuY2tzdW1WYWxpZClyZXR1cm4gaChudWxsLGwpO2xldCBQPTUxMipNYXRo LmNlaWwoKHcuc2l6ZT8/MCkvNTEyKTtpZihsK1ArNTEyPm98fChsKz1QKzUxMixsPj1vKSlyZXR1 cm4gaChudWxsLGwpO3MubXRpbWVDYWNoZSYmdy5tdGltZSYmcy5tdGltZUNhY2hlLnNldChTdHJp bmcody5wYXRoKSx3Lm10aW1lKSxjPTAscS5kZWZhdWx0LnJlYWQobix1LDAsNTEyLGwsRSl9O3Eu ZGVmYXVsdC5yZWFkKG4sdSwwLDUxMixsLEUpfTtyZXR1cm4gbmV3IFByb21pc2UoKG4sbyk9Pnt0 Lm9uKCJlcnJvciIsbyk7bGV0IGE9InIrIixoPShsLGMpPT57aWYobCYmbC5jb2RlPT09IkVOT0VO VCImJmE9PT0icisiKXJldHVybiBhPSJ3KyIscS5kZWZhdWx0Lm9wZW4ocy5maWxlLGEsaCk7aWYo bHx8IWMpcmV0dXJuIG8obCk7cS5kZWZhdWx0LmZzdGF0KGMsKHUsRSk9PntpZih1KXJldHVybiBx LmRlZmF1bHQuY2xvc2UoYywoKT0+byh1KSk7aShjLEUuc2l6ZSwoRCxBKT0+e2lmKEQpcmV0dXJu IG8oRCk7bGV0IHc9bmV3IFNvLldyaXRlU3RyZWFtKHMuZmlsZSx7ZmQ6YyxzdGFydDpBfSk7dC5w aXBlKHcpLHcub24oImVycm9yIixvKSx3Lm9uKCJjbG9zZSIsbiksdmwodCxlKX0pfSl9O3EuZGVm YXVsdC5vcGVuKHMuZmlsZSxhLGgpfSl9LE9sPShzLGUpPT57ZS5mb3JFYWNoKHQ9Pnt0LmNoYXJB dCgwKT09PSJAIj8oMCxPby5saXN0KSh7ZmlsZTpnby5kZWZhdWx0LnJlc29sdmUocy5jd2QsdC5z bGljZSgxKSksc3luYzohMCxub1Jlc3VtZTohMCxvblJlYWRFbnRyeTppPT5zLmFkZChpKX0pOnMu YWRkKHQpfSkscy5lbmQoKX0sdmw9YXN5bmMocyxlKT0+e2ZvcihsZXQgdCBvZiBlKXQuY2hhckF0 KDApPT09IkAiP2F3YWl0KDAsT28ubGlzdCkoe2ZpbGU6Z28uZGVmYXVsdC5yZXNvbHZlKFN0cmlu ZyhzLmN3ZCksdC5zbGljZSgxKSksbm9SZXN1bWU6ITAsb25SZWFkRW50cnk6aT0+cy5hZGQoaSl9 KTpzLmFkZCh0KTtzLmVuZCgpfTtmdC5yZXBsYWNlPSgwLEVsLm1ha2VDb21tYW5kKShTbCxSbCwo KT0+e3Rocm93IG5ldyBUeXBlRXJyb3IoImZpbGUgaXMgcmVxdWlyZWQiKX0sKCk9Pnt0aHJvdyBu ZXcgVHlwZUVycm9yKCJmaWxlIGlzIHJlcXVpcmVkIil9LChzLGUpPT57aWYoISgwLGJsLmlzRmls ZSkocykpdGhyb3cgbmV3IFR5cGVFcnJvcigiZmlsZSBpcyByZXF1aXJlZCIpO2lmKHMuZ3ppcHx8 cy5icm90bGl8fHMuenN0ZHx8cy5maWxlLmVuZHNXaXRoKCIuYnIiKXx8cy5maWxlLmVuZHNXaXRo KCIudGJyIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2Fubm90IGFwcGVuZCB0byBjb21wcmVzc2Vk IGFyY2hpdmVzIik7aWYoIWU/Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJubyBwYXRocyBz cGVjaWZpZWQgdG8gYWRkL3JlcGxhY2UiKX0pfSk7dmFyIHpyPWQoJGk9PnsidXNlIHN0cmljdCI7 T2JqZWN0LmRlZmluZVByb3BlcnR5KCRpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTskaS51cGRh dGU9dm9pZCAwO3ZhciBUbD1WZSgpLGt0PVZpKCk7JGkudXBkYXRlPSgwLFRsLm1ha2VDb21tYW5k KShrdC5yZXBsYWNlLnN5bmNGaWxlLGt0LnJlcGxhY2UuYXN5bmNGaWxlLGt0LnJlcGxhY2Uuc3lu Y05vRmlsZSxrdC5yZXBsYWNlLmFzeW5jTm9GaWxlLChzLGU9W10pPT57a3QucmVwbGFjZS52YWxp ZGF0ZT8uKHMsZSksRGwocyl9KTt2YXIgRGw9cz0+e2xldCBlPXMuZmlsdGVyO3MubXRpbWVDYWNo ZXx8KHMubXRpbWVDYWNoZT1uZXcgTWFwKSxzLmZpbHRlcj1lPyh0LGkpPT5lKHQsaSkmJiEoKHMu bXRpbWVDYWNoZT8uZ2V0KHQpPz9pLm10aW1lPz8wKT4oaS5tdGltZT8/MCkpOih0LGkpPT4hKChz Lm10aW1lQ2FjaGU/LmdldCh0KT8/aS5tdGltZT8/MCk+KGkubXRpbWU/PzApKX19KTt2YXIgVG89 ZXhwb3J0cyYmZXhwb3J0cy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlv bihzLGUsdCxpKXtpPT09dm9pZCAwJiYoaT10KTt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlE ZXNjcmlwdG9yKGUsdCk7KCFyfHwoImdldCJpbiByPyFlLl9fZXNNb2R1bGU6ci53cml0YWJsZXx8 ci5jb25maWd1cmFibGUpKSYmKHI9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu IGVbdF19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsaSxyKX0pOihmdW5jdGlvbihzLGUsdCxp KXtpPT09dm9pZCAwJiYoaT10KSxzW2ldPWVbdF19KSksUGw9ZXhwb3J0cyYmZXhwb3J0cy5fX3Nl dE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlvbihzLGUpe09iamVjdC5kZWZp bmVQcm9wZXJ0eShzLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSl9KTpmdW5jdGlv bihzLGUpe3MuZGVmYXVsdD1lfSksWT1leHBvcnRzJiZleHBvcnRzLl9fZXhwb3J0U3Rhcnx8ZnVu Y3Rpb24ocyxlKXtmb3IodmFyIHQgaW4gcyl0IT09ImRlZmF1bHQiJiYhT2JqZWN0LnByb3RvdHlw ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJlRvKGUscyx0KX0sTmw9ZXhwb3J0cyYmZXhwb3J0 cy5fX2ltcG9ydFN0YXJ8fChmdW5jdGlvbigpe3ZhciBzPWZ1bmN0aW9uKGUpe3JldHVybiBzPU9i amVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXt2YXIgaT1bXTtmb3IodmFyIHIg aW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGlbaS5sZW5n dGhdPXIpO3JldHVybiBpfSxzKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9k dWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKGUhPW51bGwpZm9yKHZhciBpPXMoZSkscj0wO3I8aS5s ZW5ndGg7cisrKWlbcl0hPT0iZGVmYXVsdCImJlRvKHQsZSxpW3JdKTtyZXR1cm4gUGwodCxlKSx0 fX0pKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZToh MH0pO2V4cG9ydHMudT1leHBvcnRzLnR5cGVzPWV4cG9ydHMucj1leHBvcnRzLnQ9ZXhwb3J0cy54 PWV4cG9ydHMuYz12b2lkIDA7WShfcigpLGV4cG9ydHMpO3ZhciBNbD1fcigpO09iamVjdC5kZWZp bmVQcm9wZXJ0eShleHBvcnRzLCJjIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1 cm4gTWwuY3JlYXRlfX0pO1koQnIoKSxleHBvcnRzKTt2YXIgTGw9QnIoKTtPYmplY3QuZGVmaW5l UHJvcGVydHkoZXhwb3J0cywieCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu IExsLmV4dHJhY3R9fSk7WShldCgpLGV4cG9ydHMpO1kocnQoKSxleHBvcnRzKTt2YXIgQWw9cnQo KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywidCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1 bmN0aW9uKCl7cmV0dXJuIEFsLmxpc3R9fSk7WShDaSgpLGV4cG9ydHMpO1koX2koKSxleHBvcnRz KTtZKHNpKCksZXhwb3J0cyk7WShDcygpLGV4cG9ydHMpO1koVmkoKSxleHBvcnRzKTt2YXIgSWw9 VmkoKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywiciIse2VudW1lcmFibGU6ITAsZ2V0 OmZ1bmN0aW9uKCl7cmV0dXJuIElsLnJlcGxhY2V9fSk7ZXhwb3J0cy50eXBlcz1ObChOcygpKTtZ KENyKCksZXhwb3J0cyk7WSh6cigpLGV4cG9ydHMpO3ZhciBGbD16cigpO09iamVjdC5kZWZpbmVQ cm9wZXJ0eShleHBvcnRzLCJ1Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g RmwudXBkYXRlfX0pO1kobnIoKSxleHBvcnRzKTsKKyAvLyMgc291cmNlTWFwcGluZ1VSTD1pbmRl eC5taW4uanMubWFwCitkaWZmIC0tZ2l0IGEvZGVwcy9ucG0vbm9kZV9tb2R1bGVzL3Rhci9kaXN0 L2NvbW1vbmpzL3BhcnNlLmpzIGIvZGVwcy9ucG0vbm9kZV9tb2R1bGVzL3Rhci9kaXN0L2NvbW1v bmpzL3BhcnNlLmpzCitpbmRleCBlZjg4YWIzNS4uNWQ0Nzc0ZWMgMTAwNjQ0CistLS0gYS9kZXBz L25wbS9ub2RlX21vZHVsZXMvdGFyL2Rpc3QvY29tbW9uanMvcGFyc2UuanMKKysrKyBiL2RlcHMv bnBtL25vZGVfbW9kdWxlcy90YXIvZGlzdC9jb21tb25qcy9wYXJzZS5qcworQEAgLTYwLDYgKzYw LDEwIEBAIGNvbnN0IFNBV19WQUxJRF9FTlRSWSA9IFN5bWJvbCgnc2F3VmFsaWRFbnRyeScpOwor IGNvbnN0IFNBV19OVUxMX0JMT0NLID0gU3ltYm9sKCdzYXdOdWxsQmxvY2snKTsKKyBjb25zdCBT QVdfRU9GID0gU3ltYm9sKCdzYXdFT0YnKTsKKyBjb25zdCBDTE9TRVNUUkVBTSA9IFN5bWJvbCgn Y2xvc2VTdHJlYW0nKTsKKytjb25zdCBNQVhfREVDT01QUkVTU0lPTl9SQVRJTyA9IDEwMDA7Cisr Y29uc3QgQ09NUFJFU1NFREJZVEVTUkVBRCA9IFN5bWJvbCgnY29tcHJlc3NlZEJ5dGVzUmVhZCcp OworK2NvbnN0IERFQ09NUFJFU1NFREJZVEVTUkVBRCA9IFN5bWJvbCgnZGVjb21wcmVzc2VkQnl0 ZXNSZWFkJyk7CisrY29uc3QgQ0hFQ0tERUNPTVBSRVNTSU9OUkFUSU8gPSBTeW1ib2woJ2NoZWNr RGVjb21wcmVzc2lvblJhdGlvJyk7CisgY29uc3Qgbm9vcCA9ICgpID0+IHRydWU7CisgY2xhc3Mg UGFyc2VyIGV4dGVuZHMgZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHsKKyAgICAgZmlsZTsKK0BAIC02 OCw2ICs3Miw3IEBAIGNsYXNzIFBhcnNlciBleHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7 CisgICAgIGZpbHRlcjsKKyAgICAgYnJvdGxpOworICAgICB6c3RkOworKyAgICBtYXhEZWNvbXBy ZXNzaW9uUmF0aW87CisgICAgIHdyaXRhYmxlID0gdHJ1ZTsKKyAgICAgcmVhZGFibGUgPSBmYWxz ZTsKKyAgICAgW1FVRVVFXSA9IFtdOworQEAgLTg3LDEzICs5MiwxNCBAQCBjbGFzcyBQYXJzZXIg ZXh0ZW5kcyBldmVudHNfMS5FdmVudEVtaXR0ZXIgeworICAgICBbV1JJVElOR10gPSBmYWxzZTsK KyAgICAgW0NPTlNVTUlOR10gPSBmYWxzZTsKKyAgICAgW0VNSVRURURFTkRdID0gZmFsc2U7Cisr ICAgIFtDT01QUkVTU0VEQllURVNSRUFEXSA9IDA7CisrICAgIFtERUNPTVBSRVNTRURCWVRFU1JF QURdID0gMDsKKyAgICAgY29uc3RydWN0b3Iob3B0ID0ge30pIHsKKyAgICAgICAgIHN1cGVyKCk7 CisgICAgICAgICB0aGlzLmZpbGUgPSBvcHQuZmlsZSB8fCAnJzsKKyAgICAgICAgIC8vIHRoZXNl IEJBREFSQ0hJVkUgZXJyb3JzIGNhbid0IGJlIGRldGVjdGVkIGVhcmx5LiBsaXN0ZW4gb24gRE9O RS4KKyAgICAgICAgIHRoaXMub24oRE9ORSwgKCkgPT4geworLSAgICAgICAgICAgIGlmICh0aGlz W1NUQVRFXSA9PT0gJ2JlZ2luJyB8fAorLSAgICAgICAgICAgICAgICB0aGlzW1NBV19WQUxJRF9F TlRSWV0gPT09IGZhbHNlKSB7CisrICAgICAgICAgICAgaWYgKHRoaXNbU1RBVEVdID09PSAnYmVn aW4nIHx8IHRoaXNbU0FXX1ZBTElEX0VOVFJZXSA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAg ICAgLy8gZWl0aGVyIGxlc3MgdGhhbiAxIGJsb2NrIG9mIGRhdGEsIG9yIGFsbCBlbnRyaWVzIHdl cmUgaW52YWxpZC4KKyAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHdheSwgcHJvYmFibHkgbm90 IGV2ZW4gYSB0YXJiYWxsLgorICAgICAgICAgICAgICAgICB0aGlzLndhcm4oJ1RBUl9CQURfQVJD SElWRScsICdVbnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQnKTsKK0BAIC0xMTAsNiArMTE2LDEw IEBAIGNsYXNzIFBhcnNlciBleHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7CisgICAgICAg ICAgICAgfSk7CisgICAgICAgICB9CisgICAgICAgICB0aGlzLnN0cmljdCA9ICEhb3B0LnN0cmlj dDsKKysgICAgICAgIHRoaXMubWF4RGVjb21wcmVzc2lvblJhdGlvID0KKysgICAgICAgICAgICB0 eXBlb2Ygb3B0Lm1heERlY29tcHJlc3Npb25SYXRpbyA9PT0gJ251bWJlcicgPworKyAgICAgICAg ICAgICAgICBvcHQubWF4RGVjb21wcmVzc2lvblJhdGlvCisrICAgICAgICAgICAgICAgIDogTUFY X0RFQ09NUFJFU1NJT05fUkFUSU87CisgICAgICAgICB0aGlzLm1heE1ldGFFbnRyeVNpemUgPSBv cHQubWF4TWV0YUVudHJ5U2l6ZSB8fCBtYXhNZXRhRW50cnlTaXplOworICAgICAgICAgdGhpcy5m aWx0ZXIgPSB0eXBlb2Ygb3B0LmZpbHRlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdC5maWx0ZXIgOiBu b29wOworICAgICAgICAgLy8gVW5saWtlIGd6aXAsIGJyb3RsaSBkb2Vzbid0IGhhdmUgYW55IG1h Z2ljIGJ5dGVzIHRvIGlkZW50aWZ5IGl0CitAQCAtMjIzLDggKzIzMyw3IEBAIGNsYXNzIFBhcnNl ciBleHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7CisgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICB0 aGlzW0VYXSA9IHVuZGVmaW5lZDsKKy0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5pZ25v cmUgPQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5pZ25vcmUgfHwgIXRoaXMu ZmlsdGVyKGVudHJ5LnBhdGgsIGVudHJ5KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBlbnRy eS5pZ25vcmUgPSBlbnRyeS5pZ25vcmUgfHwgIXRoaXMuZmlsdGVyKGVudHJ5LnBhdGgsIGVudHJ5 KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuaWdub3JlKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2JhYmx5IHZhbGlkLCBqdXN0IG5vdCBzb21ldGhp bmcgd2UgY2FyZSBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW0VNSVRd KCdpZ25vcmVkRW50cnknLCBlbnRyeSk7CitAQCAtMjc3LDcgKzI4Niw3IEBAIGNsYXNzIFBhcnNl ciBleHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7CisgICAgIH0KKyAgICAgW05FWFRFTlRS WV0oKSB7CisgICAgICAgICBkbyB7IH0gd2hpbGUgKHRoaXNbUFJPQ0VTU0VOVFJZXSh0aGlzW1FV RVVFXS5zaGlmdCgpKSk7CistICAgICAgICBpZiAoIXRoaXNbUVVFVUVdLmxlbmd0aCkgeworKyAg ICAgICAgaWYgKHRoaXNbUVVFVUVdLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgIC8vIEF0 IHRoaXMgcG9pbnQsIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgcXVldWUsIGJ1dCB3ZSBtYXkgaGF2 ZSBhbgorICAgICAgICAgICAgIC8vIGVudHJ5IHdoaWNoIGlzIGJlaW5nIGNvbnN1bWVkIChyZWFk RW50cnkpLgorICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0LCB0aGVuIHdlIGRlZmluaXRlbHkg Y2FuIGhhbmRsZSBtb3JlIGRhdGEuCitAQCAtMzI3LDcgKzMzNiw3IEBAIGNsYXNzIFBhcnNlciBl eHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7CisgICAgICAgICByZXR1cm4gcmV0OworICAg ICB9CisgICAgIFtFTUlUXShldiwgZGF0YSwgZXh0cmEpIHsKKy0gICAgICAgIGlmICghdGhpc1tR VUVVRV0ubGVuZ3RoICYmICF0aGlzW1JFQURFTlRSWV0pIHsKKysgICAgICAgIGlmICh0aGlzW1FV RVVFXS5sZW5ndGggPT09IDAgJiYgIXRoaXNbUkVBREVOVFJZXSkgeworICAgICAgICAgICAgIHRo aXMuZW1pdChldiwgZGF0YSwgZXh0cmEpOworICAgICAgICAgfQorICAgICAgICAgZWxzZSB7CitA QCAtMzY0LDE4ICszNzMsMzAgQEAgY2xhc3MgUGFyc2VyIGV4dGVuZHMgZXZlbnRzXzEuRXZlbnRF bWl0dGVyIHsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBhYm9ydChlcnJvcikgeworKyAgICAg ICAgaWYgKHRoaXNbQUJPUlRFRF0pIHsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9 CisgICAgICAgICB0aGlzW0FCT1JURURdID0gdHJ1ZTsKKyAgICAgICAgIHRoaXMuZW1pdCgnYWJv cnQnLCBlcnJvcik7CisgICAgICAgICAvLyBhbHdheXMgdGhyb3dzLCBldmVuIGluIG5vbi1zdHJp Y3QgbW9kZQorICAgICAgICAgdGhpcy53YXJuKCdUQVJfQUJPUlQnLCBlcnJvciwgeyByZWNvdmVy YWJsZTogZmFsc2UgfSk7CisgICAgIH0KKysgICAgW0NIRUNLREVDT01QUkVTU0lPTlJBVElPXShj aHVuaykgeworKyAgICAgICAgdGhpc1tERUNPTVBSRVNTRURCWVRFU1JFQURdICs9IGNodW5rLmxl bmd0aDsKKysgICAgICAgIGNvbnN0IHJhdGlvID0gdGhpc1tERUNPTVBSRVNTRURCWVRFU1JFQURd IC8gdGhpc1tDT01QUkVTU0VEQllURVNSRUFEXTsKKysgICAgICAgIGlmIChyYXRpbyA+IHRoaXMu bWF4RGVjb21wcmVzc2lvblJhdGlvKSB7CisrICAgICAgICAgICAgdGhpcy5hYm9ydChuZXcgRXJy b3IoYG1heCBkZWNvbXByZXNzaW9uIHJhdGlvIGV4Y2VlZGVkOiAke3JhdGlvLnRvRml4ZWQoMil9 ID4gJHt0aGlzLm1heERlY29tcHJlc3Npb25SYXRpb31gKSk7CisrICAgICAgICAgICAgcmV0dXJu IGZhbHNlOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKyAgICAg d3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYikgeworICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGlu ZyA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7CisgICAgICAg ICAgICAgZW5jb2RpbmcgPSB1bmRlZmluZWQ7CisgICAgICAgICB9CisgICAgICAgICBpZiAodHlw ZW9mIGNodW5rID09PSAnc3RyaW5nJykgeworLSAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZy b20oY2h1bmssCisrICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgCisgICAg ICAgICAgICAgLyogYzggaWdub3JlIG5leHQgKi8KKyAgICAgICAgICAgICB0eXBlb2YgZW5jb2Rp bmcgPT09ICdzdHJpbmcnID8gZW5jb2RpbmcgOiAndXRmOCcpOworICAgICAgICAgfQorQEAgLTQ1 MiwxMyArNDczLDIyIEBAIGNsYXNzIFBhcnNlciBleHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRl ciB7CisgICAgICAgICAgICAgICAgICAgICB0aGlzW1VOWklQXSA9PT0gdW5kZWZpbmVkID8gbmV3 IG1pbml6bGliXzEuVW56aXAoe30pCisgICAgICAgICAgICAgICAgICAgICAgICAgOiBpc1pzdGQg PyBuZXcgbWluaXpsaWJfMS5ac3RkRGVjb21wcmVzcyh7fSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBuZXcgbWluaXpsaWJfMS5Ccm90bGlEZWNvbXByZXNzKHt9KTsKKy0gICAgICAg ICAgICAgICAgdGhpc1tVTlpJUF0ub24oJ2RhdGEnLCBjaHVuayA9PiB0aGlzW0NPTlNVTUVDSFVO S10oY2h1bmspKTsKKy0gICAgICAgICAgICAgICAgdGhpc1tVTlpJUF0ub24oJ2Vycm9yJywgZXIg PT4gdGhpcy5hYm9ydChlcikpOworKyAgICAgICAgICAgICAgICB0aGlzW1VOWklQXS5vbignZGF0 YScsIGNodW5rID0+IHsKKysgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzW0NIRUNLREVDT01Q UkVTU0lPTlJBVElPXShjaHVuaykpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW0NP TlNVTUVDSFVOS10oY2h1bmspOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg ICAgICB9KTsKKysgICAgICAgICAgICAgICAgdGhpc1tVTlpJUF0ub24oJ2Vycm9yJywgZXIgPT4g eworKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzW0FCT1JURURdKSB7CisrICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcy5hYm9ydChlcik7CisrICAgICAgICAgICAgICAgICAgICB9Cisr ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICB0aGlzW1VOWklQXS5vbignZW5k JywgKCkgPT4geworICAgICAgICAgICAgICAgICAgICAgdGhpc1tFTkRFRF0gPSB0cnVlOworICAg ICAgICAgICAgICAgICAgICAgdGhpc1tDT05TVU1FQ0hVTktdKCk7CisgICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICAgICB0aGlzW1dSSVRJTkddID0gdHJ1ZTsKKysgICAgICAgICAg ICAgICAgdGhpc1tDT01QUkVTU0VEQllURVNSRUFEXSArPSBjaHVuay5sZW5ndGg7CisgICAgICAg ICAgICAgICAgIGNvbnN0IHJldCA9ICEhdGhpc1tVTlpJUF1bZW5kZWQgPyAnZW5kJyA6ICd3cml0 ZSddKGNodW5rKTsKKyAgICAgICAgICAgICAgICAgdGhpc1tXUklUSU5HXSA9IGZhbHNlOworICAg ICAgICAgICAgICAgICBjYj8uKCk7CitAQCAtNDY3LDYgKzQ5Nyw3IEBAIGNsYXNzIFBhcnNlciBl eHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7CisgICAgICAgICB9CisgICAgICAgICB0aGlz W1dSSVRJTkddID0gdHJ1ZTsKKyAgICAgICAgIGlmICh0aGlzW1VOWklQXSkgeworKyAgICAgICAg ICAgIHRoaXNbQ09NUFJFU1NFREJZVEVTUkVBRF0gKz0gY2h1bmsubGVuZ3RoOworICAgICAgICAg ICAgIHRoaXNbVU5aSVBdLndyaXRlKGNodW5rKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2Ug eworQEAgLTQ3NCwxMSArNTA1LDExIEBAIGNsYXNzIFBhcnNlciBleHRlbmRzIGV2ZW50c18xLkV2 ZW50RW1pdHRlciB7CisgICAgICAgICB9CisgICAgICAgICB0aGlzW1dSSVRJTkddID0gZmFsc2U7 CisgICAgICAgICAvLyByZXR1cm4gZmFsc2UgaWYgdGhlcmUncyBhIHF1ZXVlLCBvciBpZiB0aGUg Y3VycmVudCBlbnRyeSBpc24ndCBmbG93aW5nCistICAgICAgICBjb25zdCByZXQgPSB0aGlzW1FV RVVFXS5sZW5ndGggPyBmYWxzZQorKyAgICAgICAgY29uc3QgcmV0ID0gdGhpc1tRVUVVRV0ubGVu Z3RoID4gMCA/IGZhbHNlCisgICAgICAgICAgICAgOiB0aGlzW1JFQURFTlRSWV0gPyB0aGlzW1JF QURFTlRSWV0uZmxvd2luZworICAgICAgICAgICAgICAgICA6IHRydWU7CisgICAgICAgICAvLyBp ZiB3ZSBoYXZlIG5vIHF1ZXVlLCB0aGVuIHRoYXQgbWVhbnMgYSBjbG9nZ2VkIFJFQURFTlRSWQor LSAgICAgICAgaWYgKCFyZXQgJiYgIXRoaXNbUVVFVUVdLmxlbmd0aCkgeworKyAgICAgICAgaWYg KCFyZXQgJiYgdGhpc1tRVUVVRV0ubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgdGhpc1tS RUFERU5UUlldPy5vbmNlKCdkcmFpbicsICgpID0+IHRoaXMuZW1pdCgnZHJhaW4nKSk7CisgICAg ICAgICB9CisgICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAqLworQEAgLTQ4Nyw4ICs1MTgsNyBA QCBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBldmVudHNfMS5FdmVudEVtaXR0ZXIgeworICAgICB9Cisg ICAgIFtCVUZGRVJDT05DQVRdKGMpIHsKKyAgICAgICAgIGlmIChjICYmICF0aGlzW0FCT1JURURd KSB7CistICAgICAgICAgICAgdGhpc1tCVUZGRVJdID0KKy0gICAgICAgICAgICAgICAgdGhpc1tC VUZGRVJdID8gQnVmZmVyLmNvbmNhdChbdGhpc1tCVUZGRVJdLCBjXSkgOiBjOworKyAgICAgICAg ICAgIHRoaXNbQlVGRkVSXSA9IHRoaXNbQlVGRkVSXSA/IEJ1ZmZlci5jb25jYXQoW3RoaXNbQlVG RkVSXSwgY10pIDogYzsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBbTUFZQkVFTkRdKCkgewor QEAgLTQ5OCw3ICs1MjgsNyBAQCBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBldmVudHNfMS5FdmVudEVt aXR0ZXIgeworICAgICAgICAgICAgICF0aGlzW0NPTlNVTUlOR10pIHsKKyAgICAgICAgICAgICB0 aGlzW0VNSVRURURFTkRdID0gdHJ1ZTsKKyAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXNb V1JJVEVFTlRSWV07CistICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmJsb2NrUmVtYWlu KSB7CisrICAgICAgICAgICAgaWYgKGVudHJ5Py5ibG9ja1JlbWFpbikgeworICAgICAgICAgICAg ICAgICAvLyB0cnVuY2F0ZWQsIGxpa2VseSBhIGRhbWFnZWQgZmlsZQorICAgICAgICAgICAgICAg ICBjb25zdCBoYXZlID0gdGhpc1tCVUZGRVJdID8gdGhpc1tCVUZGRVJdLmxlbmd0aCA6IDA7Cisg ICAgICAgICAgICAgICAgIHRoaXMud2FybignVEFSX0JBRF9BUkNISVZFJywgYFRydW5jYXRlZCBp bnB1dCAobmVlZGVkICR7ZW50cnkuYmxvY2tSZW1haW59IG1vcmUgYnl0ZXMsIG9ubHkgJHtoYXZl fSBhdmFpbGFibGUpYCwgeyBlbnRyeSB9KTsKK0BAIC01NDcsOSArNTc3LDcgQEAgY2xhc3MgUGFy c2VyIGV4dGVuZHMgZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHsKKyAgICAgICAgIC8vIHRoZSBidWZm ZXIuICBBZHZhbmNlIHRoZSBwb3NpdGlvbiBhbmQgcHV0IGFueSByZW1haW5kZXIgaW4gdGhlIGJ1 ZmZlci4KKyAgICAgICAgIGxldCBwb3NpdGlvbiA9IDA7CisgICAgICAgICBjb25zdCBsZW5ndGgg PSBjaHVuay5sZW5ndGg7CistICAgICAgICB3aGlsZSAocG9zaXRpb24gKyA1MTIgPD0gbGVuZ3Ro ICYmCistICAgICAgICAgICAgIXRoaXNbQUJPUlRFRF0gJiYKKy0gICAgICAgICAgICAhdGhpc1tT QVdfRU9GXSkgeworKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICsgNTEyIDw9IGxlbmd0aCAmJiAh dGhpc1tBQk9SVEVEXSAmJiAhdGhpc1tTQVdfRU9GXSkgeworICAgICAgICAgICAgIHN3aXRjaCAo dGhpc1tTVEFURV0pIHsKKyAgICAgICAgICAgICAgICAgY2FzZSAnYmVnaW4nOgorICAgICAgICAg ICAgICAgICBjYXNlICdoZWFkZXInOgorQEAgLTU3MCwxNSArNTk4LDEwIEBAIGNsYXNzIFBhcnNl ciBleHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7CisgICAgICAgICAgICAgfQorICAgICAg ICAgfQorICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7CistICAgICAgICAgICAgaWYg KHRoaXNbQlVGRkVSXSkgeworLSAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl0gPSBCdWZmZXIu Y29uY2F0KFsKKy0gICAgICAgICAgICAgICAgICAgIGNodW5rLnN1YmFycmF5KHBvc2l0aW9uKSwK Ky0gICAgICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSXSwKKy0gICAgICAgICAgICAgICAgXSk7 CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGVsc2UgeworLSAgICAgICAgICAgICAgICB0 aGlzW0JVRkZFUl0gPSBjaHVuay5zdWJhcnJheShwb3NpdGlvbik7CistICAgICAgICAgICAgfQor KyAgICAgICAgICAgIHRoaXNbQlVGRkVSXSA9CisrICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVS XSA/CisrICAgICAgICAgICAgICAgICAgICBCdWZmZXIuY29uY2F0KFtjaHVuay5zdWJhcnJheShw b3NpdGlvbiksIHRoaXNbQlVGRkVSXV0pCisrICAgICAgICAgICAgICAgICAgICA6IGNodW5rLnN1 YmFycmF5KHBvc2l0aW9uKTsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBlbmQoY2h1bmssIGVu Y29kaW5nLCBjYikgeworQEAgLTU5OSw4ICs2MjIsMTAgQEAgY2xhc3MgUGFyc2VyIGV4dGVuZHMg ZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHsKKyAgICAgICAgIGlmICghdGhpc1tBQk9SVEVEXSkgewor ICAgICAgICAgICAgIGlmICh0aGlzW1VOWklQXSkgeworICAgICAgICAgICAgICAgICAvKiBjOCBp Z25vcmUgc3RhcnQgKi8KKy0gICAgICAgICAgICAgICAgaWYgKGNodW5rKQorKyAgICAgICAgICAg ICAgICBpZiAoY2h1bmspIHsKKysgICAgICAgICAgICAgICAgICAgIHRoaXNbQ09NUFJFU1NFREJZ VEVTUkVBRF0gKz0gY2h1bmsubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgdGhpc1tVTlpJ UF0ud3JpdGUoY2h1bmspOworKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIC8q IGM4IGlnbm9yZSBzdG9wICovCisgICAgICAgICAgICAgICAgIHRoaXNbVU5aSVBdLmVuZCgpOwor ICAgICAgICAgICAgIH0KK2RpZmYgLS1naXQgYS9kZXBzL25wbS9ub2RlX21vZHVsZXMvdGFyL2Rp c3QvZXNtL2luZGV4Lm1pbi5qcyBiL2RlcHMvbnBtL25vZGVfbW9kdWxlcy90YXIvZGlzdC9lc20v aW5kZXgubWluLmpzCitpbmRleCA0MGE1NzNlNC4uYmY0MDM2YjQgMTAwNjQ0CistLS0gYS9kZXBz L25wbS9ub2RlX21vZHVsZXMvdGFyL2Rpc3QvZXNtL2luZGV4Lm1pbi5qcworKysrIGIvZGVwcy9u cG0vbm9kZV9tb2R1bGVzL3Rhci9kaXN0L2VzbS9pbmRleC5taW4uanMKK0BAIC0xLDQgKzEsNCBA QAorLXZhciBEcj1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIEFyPShzLHQpPT57Zm9yKHZhciBl IGluIHQpRHIocyxlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9O2ltcG9ydCBIciBmcm9tImV2 ZW50cyI7aW1wb3J0IEkgZnJvbSJmcyI7aW1wb3J0e0V2ZW50RW1pdHRlciBhcyBPaX1mcm9tIm5v ZGU6ZXZlbnRzIjtpbXBvcnQgRHMgZnJvbSJub2RlOnN0cmVhbSI7aW1wb3J0e1N0cmluZ0RlY29k ZXIgYXMgSXJ9ZnJvbSJub2RlOnN0cmluZ19kZWNvZGVyIjt2YXIgVHM9dHlwZW9mIHByb2Nlc3M9 PSJvYmplY3QiJiZwcm9jZXNzP3Byb2Nlc3M6e3N0ZG91dDpudWxsLHN0ZGVycjpudWxsfSxDcj1z PT4hIXMmJnR5cGVvZiBzPT0ib2JqZWN0IiYmKHMgaW5zdGFuY2VvZiBBfHxzIGluc3RhbmNlb2Yg RHN8fEZyKHMpfHxrcihzKSksRnI9cz0+ISFzJiZ0eXBlb2Ygcz09Im9iamVjdCImJnMgaW5zdGFu Y2VvZiBPaSYmdHlwZW9mIHMucGlwZT09ImZ1bmN0aW9uIiYmcy5waXBlIT09RHMuV3JpdGFibGUu cHJvdG90eXBlLnBpcGUsa3I9cz0+ISFzJiZ0eXBlb2Ygcz09Im9iamVjdCImJnMgaW5zdGFuY2Vv ZiBPaSYmdHlwZW9mIHMud3JpdGU9PSJmdW5jdGlvbiImJnR5cGVvZiBzLmVuZD09ImZ1bmN0aW9u IixxPVN5bWJvbCgiRU9GIiksaj1TeW1ib2woIm1heWJlRW1pdEVuZCIpLHJ0PVN5bWJvbCgiZW1p dHRlZEVuZCIpLHhlPVN5bWJvbCgiZW1pdHRpbmdFbmQiKSxqdD1TeW1ib2woImVtaXR0ZWRFcnJv ciIpLExlPVN5bWJvbCgiY2xvc2VkIikseHM9U3ltYm9sKCJyZWFkIiksTmU9U3ltYm9sKCJmbHVz aCIpLExzPVN5bWJvbCgiZmx1c2hDaHVuayIpLHo9U3ltYm9sKCJlbmNvZGluZyIpLE10PVN5bWJv bCgiZGVjb2RlciIpLGI9U3ltYm9sKCJmbG93aW5nIiksUXQ9U3ltYm9sKCJwYXVzZWQiKSxCdD1T eW1ib2woInJlc3VtZSIpLGc9U3ltYm9sKCJidWZmZXIiKSxEPVN5bWJvbCgicGlwZXMiKSxfPVN5 bWJvbCgiYnVmZmVyTGVuZ3RoIiksU2k9U3ltYm9sKCJidWZmZXJQdXNoIiksRGU9U3ltYm9sKCJi dWZmZXJTaGlmdCIpLEw9U3ltYm9sKCJvYmplY3RNb2RlIiksdz1TeW1ib2woImRlc3Ryb3llZCIp LHlpPVN5bWJvbCgiZXJyb3IiKSxSaT1TeW1ib2woImVtaXREYXRhIiksTnM9U3ltYm9sKCJlbWl0 RW5kIiksYmk9U3ltYm9sKCJlbWl0RW5kMiIpLFo9U3ltYm9sKCJhc3luYyIpLGdpPVN5bWJvbCgi YWJvcnQiKSxBZT1TeW1ib2woImFib3J0ZWQiKSxKdD1TeW1ib2woInNpZ25hbCIpLHl0PVN5bWJv bCgiZGF0YUxpc3RlbmVycyIpLEM9U3ltYm9sKCJkaXNjYXJkZWQiKSx0ZT1zPT5Qcm9taXNlLnJl c29sdmUoKS50aGVuKHMpLHZyPXM9PnMoKSxNcj1zPT5zPT09ImVuZCJ8fHM9PT0iZmluaXNoInx8 cz09PSJwcmVmaW5pc2giLEJyPXM9PnMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ISFzJiZ0eXBl b2Ygcz09Im9iamVjdCImJnMuY29uc3RydWN0b3ImJnMuY29uc3RydWN0b3IubmFtZT09PSJBcnJh eUJ1ZmZlciImJnMuYnl0ZUxlbmd0aD49MCxQcj1zPT4hQnVmZmVyLmlzQnVmZmVyKHMpJiZBcnJh eUJ1ZmZlci5pc1ZpZXcocyksSWU9Y2xhc3N7c3JjO2Rlc3Q7b3B0cztvbmRyYWluO2NvbnN0cnVj dG9yKHQsZSxpKXt0aGlzLnNyYz10LHRoaXMuZGVzdD1lLHRoaXMub3B0cz1pLHRoaXMub25kcmFp bj0oKT0+dFtCdF0oKSx0aGlzLmRlc3Qub24oImRyYWluIix0aGlzLm9uZHJhaW4pfXVucGlwZSgp e3RoaXMuZGVzdC5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHRoaXMub25kcmFpbil9cHJveHlFcnJv cnModCl7fWVuZCgpe3RoaXMudW5waXBlKCksdGhpcy5vcHRzLmVuZCYmdGhpcy5kZXN0LmVuZCgp fX0sX2k9Y2xhc3MgZXh0ZW5kcyBJZXt1bnBpcGUoKXt0aGlzLnNyYy5yZW1vdmVMaXN0ZW5lcigi ZXJyb3IiLHRoaXMucHJveHlFcnJvcnMpLHN1cGVyLnVucGlwZSgpfWNvbnN0cnVjdG9yKHQsZSxp KXtzdXBlcih0LGUsaSksdGhpcy5wcm94eUVycm9ycz1yPT50aGlzLmRlc3QuZW1pdCgiZXJyb3Ii LHIpLHQub24oImVycm9yIix0aGlzLnByb3h5RXJyb3JzKX19LHpyPXM9PiEhcy5vYmplY3RNb2Rl LFVyPXM9PiFzLm9iamVjdE1vZGUmJiEhcy5lbmNvZGluZyYmcy5lbmNvZGluZyE9PSJidWZmZXIi LEE9Y2xhc3MgZXh0ZW5kcyBPaXtbYl09ITE7W1F0XT0hMTtbRF09W107W2ddPVtdO1tMXTtbel07 W1pdO1tNdF07W3FdPSExO1tydF09ITE7W3hlXT0hMTtbTGVdPSExO1tqdF09bnVsbDtbX109MDtb d109ITE7W0p0XTtbQWVdPSExO1t5dF09MDtbQ109ITE7d3JpdGFibGU9ITA7cmVhZGFibGU9ITA7 Y29uc3RydWN0b3IoLi4udCl7bGV0IGU9dFswXXx8e307aWYoc3VwZXIoKSxlLm9iamVjdE1vZGUm JnR5cGVvZiBlLmVuY29kaW5nPT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFbmNvZGlu ZyBhbmQgb2JqZWN0TW9kZSBtYXkgbm90IGJlIHVzZWQgdG9nZXRoZXIiKTt6cihlKT8odGhpc1tM XT0hMCx0aGlzW3pdPW51bGwpOlVyKGUpPyh0aGlzW3pdPWUuZW5jb2RpbmcsdGhpc1tMXT0hMSk6 KHRoaXNbTF09ITEsdGhpc1t6XT1udWxsKSx0aGlzW1pdPSEhZS5hc3luYyx0aGlzW010XT10aGlz W3pdP25ldyBJcih0aGlzW3pdKTpudWxsLGUmJmUuZGVidWdFeHBvc2VCdWZmZXI9PT0hMCYmT2Jq ZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse2dldDooKT0+dGhpc1tnXX0pLGUmJmUu ZGVidWdFeHBvc2VQaXBlcz09PSEwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicGlwZXMi LHtnZXQ6KCk9PnRoaXNbRF19KTtsZXR7c2lnbmFsOml9PWU7aSYmKHRoaXNbSnRdPWksaS5hYm9y dGVkP3RoaXNbZ2ldKCk6aS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PnRoaXNbZ2ldKCkp KX1nZXQgYnVmZmVyTGVuZ3RoKCl7cmV0dXJuIHRoaXNbX119Z2V0IGVuY29kaW5nKCl7cmV0dXJu IHRoaXNbel19c2V0IGVuY29kaW5nKHQpe3Rocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgbXVzdCBi ZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lIil9c2V0RW5jb2RpbmcodCl7dGhyb3cgbmV3IEVy cm9yKCJFbmNvZGluZyBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUiKX1nZXQgb2Jq ZWN0TW9kZSgpe3JldHVybiB0aGlzW0xdfXNldCBvYmplY3RNb2RlKHQpe3Rocm93IG5ldyBFcnJv cigib2JqZWN0TW9kZSBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUiKX1nZXQgYXN5 bmMoKXtyZXR1cm4gdGhpc1taXX1zZXQgYXN5bmModCl7dGhpc1taXT10aGlzW1pdfHwhIXR9W2dp XSgpe3RoaXNbQWVdPSEwLHRoaXMuZW1pdCgiYWJvcnQiLHRoaXNbSnRdPy5yZWFzb24pLHRoaXMu ZGVzdHJveSh0aGlzW0p0XT8ucmVhc29uKX1nZXQgYWJvcnRlZCgpe3JldHVybiB0aGlzW0FlXX1z ZXQgYWJvcnRlZCh0KXt9d3JpdGUodCxlLGkpe2lmKHRoaXNbQWVdKXJldHVybiExO2lmKHRoaXNb cV0pdGhyb3cgbmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTtpZih0aGlzW3ddKXJldHVybiB0 aGlzLmVtaXQoImVycm9yIixPYmplY3QuYXNzaWduKG5ldyBFcnJvcigiQ2Fubm90IGNhbGwgd3Jp dGUgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCIpLHtjb2RlOiJFUlJfU1RSRUFNX0RFU1RS T1lFRCJ9KSksITA7dHlwZW9mIGU9PSJmdW5jdGlvbiImJihpPWUsZT0idXRmOCIpLGV8fChlPSJ1 dGY4Iik7bGV0IHI9dGhpc1taXT90ZTp2cjtpZighdGhpc1tMXSYmIUJ1ZmZlci5pc0J1ZmZlcih0 KSl7aWYoUHIodCkpdD1CdWZmZXIuZnJvbSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVu Z3RoKTtlbHNlIGlmKEJyKHQpKXQ9QnVmZmVyLmZyb20odCk7ZWxzZSBpZih0eXBlb2YgdCE9InN0 cmluZyIpdGhyb3cgbmV3IEVycm9yKCJOb24tY29udGlndW91cyBkYXRhIHdyaXR0ZW4gdG8gbm9u LW9iamVjdE1vZGUgc3RyZWFtIil9cmV0dXJuIHRoaXNbTF0/KHRoaXNbYl0mJnRoaXNbX10hPT0w JiZ0aGlzW05lXSghMCksdGhpc1tiXT90aGlzLmVtaXQoImRhdGEiLHQpOnRoaXNbU2ldKHQpLHRo aXNbX10hPT0wJiZ0aGlzLmVtaXQoInJlYWRhYmxlIiksaSYmcihpKSx0aGlzW2JdKTp0Lmxlbmd0 aD8odHlwZW9mIHQ9PSJzdHJpbmciJiYhKGU9PT10aGlzW3pdJiYhdGhpc1tNdF0/Lmxhc3ROZWVk KSYmKHQ9QnVmZmVyLmZyb20odCxlKSksQnVmZmVyLmlzQnVmZmVyKHQpJiZ0aGlzW3pdJiYodD10 aGlzW010XS53cml0ZSh0KSksdGhpc1tiXSYmdGhpc1tfXSE9PTAmJnRoaXNbTmVdKCEwKSx0aGlz W2JdP3RoaXMuZW1pdCgiZGF0YSIsdCk6dGhpc1tTaV0odCksdGhpc1tfXSE9PTAmJnRoaXMuZW1p dCgicmVhZGFibGUiKSxpJiZyKGkpLHRoaXNbYl0pOih0aGlzW19dIT09MCYmdGhpcy5lbWl0KCJy ZWFkYWJsZSIpLGkmJnIoaSksdGhpc1tiXSl9cmVhZCh0KXtpZih0aGlzW3ddKXJldHVybiBudWxs O2lmKHRoaXNbQ109ITEsdGhpc1tfXT09PTB8fHQ9PT0wfHx0JiZ0PnRoaXNbX10pcmV0dXJuIHRo aXNbal0oKSxudWxsO3RoaXNbTF0mJih0PW51bGwpLHRoaXNbZ10ubGVuZ3RoPjEmJiF0aGlzW0xd JiYodGhpc1tnXT1bdGhpc1t6XT90aGlzW2ddLmpvaW4oIiIpOkJ1ZmZlci5jb25jYXQodGhpc1tn XSx0aGlzW19dKV0pO2xldCBlPXRoaXNbeHNdKHR8fG51bGwsdGhpc1tnXVswXSk7cmV0dXJuIHRo aXNbal0oKSxlfVt4c10odCxlKXtpZih0aGlzW0xdKXRoaXNbRGVdKCk7ZWxzZXtsZXQgaT1lO3Q9 PT1pLmxlbmd0aHx8dD09PW51bGw/dGhpc1tEZV0oKTp0eXBlb2YgaT09InN0cmluZyI/KHRoaXNb Z11bMF09aS5zbGljZSh0KSxlPWkuc2xpY2UoMCx0KSx0aGlzW19dLT10KToodGhpc1tnXVswXT1p LnN1YmFycmF5KHQpLGU9aS5zdWJhcnJheSgwLHQpLHRoaXNbX10tPXQpfXJldHVybiB0aGlzLmVt aXQoImRhdGEiLGUpLCF0aGlzW2ddLmxlbmd0aCYmIXRoaXNbcV0mJnRoaXMuZW1pdCgiZHJhaW4i KSxlfWVuZCh0LGUsaSl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iJiYoaT10LHQ9dm9pZCAw KSx0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGk9ZSxlPSJ1dGY4IiksdCE9PXZvaWQgMCYmdGhpcy53 cml0ZSh0LGUpLGkmJnRoaXMub25jZSgiZW5kIixpKSx0aGlzW3FdPSEwLHRoaXMud3JpdGFibGU9 ITEsKHRoaXNbYl18fCF0aGlzW1F0XSkmJnRoaXNbal0oKSx0aGlzfVtCdF0oKXt0aGlzW3ddfHwo IXRoaXNbeXRdJiYhdGhpc1tEXS5sZW5ndGgmJih0aGlzW0NdPSEwKSx0aGlzW1F0XT0hMSx0aGlz W2JdPSEwLHRoaXMuZW1pdCgicmVzdW1lIiksdGhpc1tnXS5sZW5ndGg/dGhpc1tOZV0oKTp0aGlz W3FdP3RoaXNbal0oKTp0aGlzLmVtaXQoImRyYWluIikpfXJlc3VtZSgpe3JldHVybiB0aGlzW0J0 XSgpfXBhdXNlKCl7dGhpc1tiXT0hMSx0aGlzW1F0XT0hMCx0aGlzW0NdPSExfWdldCBkZXN0cm95 ZWQoKXtyZXR1cm4gdGhpc1t3XX1nZXQgZmxvd2luZygpe3JldHVybiB0aGlzW2JdfWdldCBwYXVz ZWQoKXtyZXR1cm4gdGhpc1tRdF19W1NpXSh0KXt0aGlzW0xdP3RoaXNbX10rPTE6dGhpc1tfXSs9 dC5sZW5ndGgsdGhpc1tnXS5wdXNoKHQpfVtEZV0oKXtyZXR1cm4gdGhpc1tMXT90aGlzW19dLT0x OnRoaXNbX10tPXRoaXNbZ11bMF0ubGVuZ3RoLHRoaXNbZ10uc2hpZnQoKX1bTmVdKHQ9ITEpe2Rv O3doaWxlKHRoaXNbTHNdKHRoaXNbRGVdKCkpJiZ0aGlzW2ddLmxlbmd0aCk7IXQmJiF0aGlzW2dd Lmxlbmd0aCYmIXRoaXNbcV0mJnRoaXMuZW1pdCgiZHJhaW4iKX1bTHNdKHQpe3JldHVybiB0aGlz LmVtaXQoImRhdGEiLHQpLHRoaXNbYl19cGlwZSh0LGUpe2lmKHRoaXNbd10pcmV0dXJuIHQ7dGhp c1tDXT0hMTtsZXQgaT10aGlzW3J0XTtyZXR1cm4gZT1lfHx7fSx0PT09VHMuc3Rkb3V0fHx0PT09 VHMuc3RkZXJyP2UuZW5kPSExOmUuZW5kPWUuZW5kIT09ITEsZS5wcm94eUVycm9ycz0hIWUucHJv eHlFcnJvcnMsaT9lLmVuZCYmdC5lbmQoKToodGhpc1tEXS5wdXNoKGUucHJveHlFcnJvcnM/bmV3 IF9pKHRoaXMsdCxlKTpuZXcgSWUodGhpcyx0LGUpKSx0aGlzW1pdP3RlKCgpPT50aGlzW0J0XSgp KTp0aGlzW0J0XSgpKSx0fXVucGlwZSh0KXtsZXQgZT10aGlzW0RdLmZpbmQoaT0+aS5kZXN0PT09 dCk7ZSYmKHRoaXNbRF0ubGVuZ3RoPT09MT8odGhpc1tiXSYmdGhpc1t5dF09PT0wJiYodGhpc1ti XT0hMSksdGhpc1tEXT1bXSk6dGhpc1tEXS5zcGxpY2UodGhpc1tEXS5pbmRleE9mKGUpLDEpLGUu dW5waXBlKCkpfWFkZExpc3RlbmVyKHQsZSl7cmV0dXJuIHRoaXMub24odCxlKX1vbih0LGUpe2xl dCBpPXN1cGVyLm9uKHQsZSk7aWYodD09PSJkYXRhIil0aGlzW0NdPSExLHRoaXNbeXRdKyssIXRo aXNbRF0ubGVuZ3RoJiYhdGhpc1tiXSYmdGhpc1tCdF0oKTtlbHNlIGlmKHQ9PT0icmVhZGFibGUi JiZ0aGlzW19dIT09MClzdXBlci5lbWl0KCJyZWFkYWJsZSIpO2Vsc2UgaWYoTXIodCkmJnRoaXNb cnRdKXN1cGVyLmVtaXQodCksdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnModCk7ZWxzZSBpZih0PT09 ImVycm9yIiYmdGhpc1tqdF0pe2xldCByPWU7dGhpc1taXT90ZSgoKT0+ci5jYWxsKHRoaXMsdGhp c1tqdF0pKTpyLmNhbGwodGhpcyx0aGlzW2p0XSl9cmV0dXJuIGl9cmVtb3ZlTGlzdGVuZXIodCxl KXtyZXR1cm4gdGhpcy5vZmYodCxlKX1vZmYodCxlKXtsZXQgaT1zdXBlci5vZmYodCxlKTtyZXR1 cm4gdD09PSJkYXRhIiYmKHRoaXNbeXRdPXRoaXMubGlzdGVuZXJzKCJkYXRhIikubGVuZ3RoLHRo aXNbeXRdPT09MCYmIXRoaXNbQ10mJiF0aGlzW0RdLmxlbmd0aCYmKHRoaXNbYl09ITEpKSxpfXJl bW92ZUFsbExpc3RlbmVycyh0KXtsZXQgZT1zdXBlci5yZW1vdmVBbGxMaXN0ZW5lcnModCk7cmV0 dXJuKHQ9PT0iZGF0YSJ8fHQ9PT12b2lkIDApJiYodGhpc1t5dF09MCwhdGhpc1tDXSYmIXRoaXNb RF0ubGVuZ3RoJiYodGhpc1tiXT0hMSkpLGV9Z2V0IGVtaXR0ZWRFbmQoKXtyZXR1cm4gdGhpc1ty dF19W2pdKCl7IXRoaXNbeGVdJiYhdGhpc1tydF0mJiF0aGlzW3ddJiZ0aGlzW2ddLmxlbmd0aD09 PTAmJnRoaXNbcV0mJih0aGlzW3hlXT0hMCx0aGlzLmVtaXQoImVuZCIpLHRoaXMuZW1pdCgicHJl ZmluaXNoIiksdGhpcy5lbWl0KCJmaW5pc2giKSx0aGlzW0xlXSYmdGhpcy5lbWl0KCJjbG9zZSIp LHRoaXNbeGVdPSExKX1lbWl0KHQsLi4uZSl7bGV0IGk9ZVswXTtpZih0IT09ImVycm9yIiYmdCE9 PSJjbG9zZSImJnQhPT13JiZ0aGlzW3ddKXJldHVybiExO2lmKHQ9PT0iZGF0YSIpcmV0dXJuIXRo aXNbTF0mJiFpPyExOnRoaXNbWl0/KHRlKCgpPT50aGlzW1JpXShpKSksITApOnRoaXNbUmldKGkp O2lmKHQ9PT0iZW5kIilyZXR1cm4gdGhpc1tOc10oKTtpZih0PT09ImNsb3NlIil7aWYodGhpc1tM ZV09ITAsIXRoaXNbcnRdJiYhdGhpc1t3XSlyZXR1cm4hMTtsZXQgbj1zdXBlci5lbWl0KCJjbG9z ZSIpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygiY2xvc2UiKSxufWVsc2UgaWYodD09 PSJlcnJvciIpe3RoaXNbanRdPWksc3VwZXIuZW1pdCh5aSxpKTtsZXQgbj0hdGhpc1tKdF18fHRo aXMubGlzdGVuZXJzKCJlcnJvciIpLmxlbmd0aD9zdXBlci5lbWl0KCJlcnJvciIsaSk6ITE7cmV0 dXJuIHRoaXNbal0oKSxufWVsc2UgaWYodD09PSJyZXN1bWUiKXtsZXQgbj1zdXBlci5lbWl0KCJy ZXN1bWUiKTtyZXR1cm4gdGhpc1tqXSgpLG59ZWxzZSBpZih0PT09ImZpbmlzaCJ8fHQ9PT0icHJl ZmluaXNoIil7bGV0IG49c3VwZXIuZW1pdCh0KTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5l cnModCksbn1sZXQgcj1zdXBlci5lbWl0KHQsLi4uZSk7cmV0dXJuIHRoaXNbal0oKSxyfVtSaV0o dCl7Zm9yKGxldCBpIG9mIHRoaXNbRF0paS5kZXN0LndyaXRlKHQpPT09ITEmJnRoaXMucGF1c2Uo KTtsZXQgZT10aGlzW0NdPyExOnN1cGVyLmVtaXQoImRhdGEiLHQpO3JldHVybiB0aGlzW2pdKCks ZX1bTnNdKCl7cmV0dXJuIHRoaXNbcnRdPyExOih0aGlzW3J0XT0hMCx0aGlzLnJlYWRhYmxlPSEx LHRoaXNbWl0/KHRlKCgpPT50aGlzW2JpXSgpKSwhMCk6dGhpc1tiaV0oKSl9W2JpXSgpe2lmKHRo aXNbTXRdKXtsZXQgZT10aGlzW010XS5lbmQoKTtpZihlKXtmb3IobGV0IGkgb2YgdGhpc1tEXSlp LmRlc3Qud3JpdGUoZSk7dGhpc1tDXXx8c3VwZXIuZW1pdCgiZGF0YSIsZSl9fWZvcihsZXQgZSBv ZiB0aGlzW0RdKWUuZW5kKCk7bGV0IHQ9c3VwZXIuZW1pdCgiZW5kIik7cmV0dXJuIHRoaXMucmVt b3ZlQWxsTGlzdGVuZXJzKCJlbmQiKSx0fWFzeW5jIGNvbGxlY3QoKXtsZXQgdD1PYmplY3QuYXNz aWduKFtdLHtkYXRhTGVuZ3RoOjB9KTt0aGlzW0xdfHwodC5kYXRhTGVuZ3RoPTApO2xldCBlPXRo aXMucHJvbWlzZSgpO3JldHVybiB0aGlzLm9uKCJkYXRhIixpPT57dC5wdXNoKGkpLHRoaXNbTF18 fCh0LmRhdGFMZW5ndGgrPWkubGVuZ3RoKX0pLGF3YWl0IGUsdH1hc3luYyBjb25jYXQoKXtpZih0 aGlzW0xdKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGNvbmNhdCBpbiBvYmplY3RNb2RlIik7bGV0 IHQ9YXdhaXQgdGhpcy5jb2xsZWN0KCk7cmV0dXJuIHRoaXNbel0/dC5qb2luKCIiKTpCdWZmZXIu Y29uY2F0KHQsdC5kYXRhTGVuZ3RoKX1hc3luYyBwcm9taXNlKCl7cmV0dXJuIG5ldyBQcm9taXNl KCh0LGUpPT57dGhpcy5vbih3LCgpPT5lKG5ldyBFcnJvcigic3RyZWFtIGRlc3Ryb3llZCIpKSks dGhpcy5vbigiZXJyb3IiLGk9PmUoaSkpLHRoaXMub24oImVuZCIsKCk9PnQoKSl9KX1bU3ltYm9s LmFzeW5jSXRlcmF0b3JdKCl7dGhpc1tDXT0hMTtsZXQgdD0hMSxlPWFzeW5jKCk9Pih0aGlzLnBh dXNlKCksdD0hMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtyZXR1cm57bmV4dDooKT0+e2lmKHQp cmV0dXJuIGUoKTtsZXQgcj10aGlzLnJlYWQoKTtpZihyIT09bnVsbClyZXR1cm4gUHJvbWlzZS5y ZXNvbHZlKHtkb25lOiExLHZhbHVlOnJ9KTtpZih0aGlzW3FdKXJldHVybiBlKCk7bGV0IG4sbyxo PWQ9Pnt0aGlzLm9mZigiZGF0YSIsYSksdGhpcy5vZmYoImVuZCIsbCksdGhpcy5vZmYodyxjKSxl KCksbyhkKX0sYT1kPT57dGhpcy5vZmYoImVycm9yIixoKSx0aGlzLm9mZigiZW5kIixsKSx0aGlz Lm9mZih3LGMpLHRoaXMucGF1c2UoKSxuKHt2YWx1ZTpkLGRvbmU6ISF0aGlzW3FdfSl9LGw9KCk9 Pnt0aGlzLm9mZigiZXJyb3IiLGgpLHRoaXMub2ZmKCJkYXRhIixhKSx0aGlzLm9mZih3LGMpLGUo KSxuKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pfSxjPSgpPT5oKG5ldyBFcnJvcigic3RyZWFtIGRl c3Ryb3llZCIpKTtyZXR1cm4gbmV3IFByb21pc2UoKGQsUyk9PntvPVMsbj1kLHRoaXMub25jZSh3 LGMpLHRoaXMub25jZSgiZXJyb3IiLGgpLHRoaXMub25jZSgiZW5kIixsKSx0aGlzLm9uY2UoImRh dGEiLGEpfSl9LHRocm93OmUscmV0dXJuOmUsW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVy biB0aGlzfSxbU3ltYm9sLmFzeW5jRGlzcG9zZV06YXN5bmMoKT0+e319fVtTeW1ib2wuaXRlcmF0 b3JdKCl7dGhpc1tDXT0hMTtsZXQgdD0hMSxlPSgpPT4odGhpcy5wYXVzZSgpLHRoaXMub2ZmKHlp LGUpLHRoaXMub2ZmKHcsZSksdGhpcy5vZmYoImVuZCIsZSksdD0hMCx7ZG9uZTohMCx2YWx1ZTp2 b2lkIDB9KSxpPSgpPT57aWYodClyZXR1cm4gZSgpO2xldCByPXRoaXMucmVhZCgpO3JldHVybiBy PT09bnVsbD9lKCk6e2RvbmU6ITEsdmFsdWU6cn19O3JldHVybiB0aGlzLm9uY2UoImVuZCIsZSks dGhpcy5vbmNlKHlpLGUpLHRoaXMub25jZSh3LGUpLHtuZXh0OmksdGhyb3c6ZSxyZXR1cm46ZSxb U3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzfSxbU3ltYm9sLmRpc3Bvc2VdOigpPT57fX19 ZGVzdHJveSh0KXtpZih0aGlzW3ddKXJldHVybiB0P3RoaXMuZW1pdCgiZXJyb3IiLHQpOnRoaXMu ZW1pdCh3KSx0aGlzO3RoaXNbd109ITAsdGhpc1tDXT0hMCx0aGlzW2ddLmxlbmd0aD0wLHRoaXNb X109MDtsZXQgZT10aGlzO3JldHVybiB0eXBlb2YgZS5jbG9zZT09ImZ1bmN0aW9uIiYmIXRoaXNb TGVdJiZlLmNsb3NlKCksdD90aGlzLmVtaXQoImVycm9yIix0KTp0aGlzLmVtaXQodyksdGhpc31z dGF0aWMgZ2V0IGlzU3RyZWFtKCl7cmV0dXJuIENyfX07dmFyIFdyPUkud3JpdGV2LG90PVN5bWJv bCgiX2F1dG9DbG9zZSIpLEg9U3ltYm9sKCJfY2xvc2UiKSxlZT1TeW1ib2woIl9lbmRlZCIpLG09 U3ltYm9sKCJfZmQiKSxUaT1TeW1ib2woIl9maW5pc2hlZCIpLEo9U3ltYm9sKCJfZmxhZ3MiKSx4 aT1TeW1ib2woIl9mbHVzaCIpLEFpPVN5bWJvbCgiX2hhbmRsZUNodW5rIiksSWk9U3ltYm9sKCJf bWFrZUJ1ZiIpLHNlPVN5bWJvbCgiX21vZGUiKSxDZT1TeW1ib2woIl9uZWVkRHJhaW4iKSxVdD1T eW1ib2woIl9vbmVycm9yIiksSHQ9U3ltYm9sKCJfb25vcGVuIiksTGk9U3ltYm9sKCJfb25yZWFk IiksUHQ9U3ltYm9sKCJfb253cml0ZSIpLGh0PVN5bWJvbCgiX29wZW4iKSxVPVN5bWJvbCgiX3Bh dGgiKSxudD1TeW1ib2woIl9wb3MiKSxZPVN5bWJvbCgiX3F1ZXVlIiksenQ9U3ltYm9sKCJfcmVh ZCIpLE5pPVN5bWJvbCgiX3JlYWRTaXplIiksUT1TeW1ib2woIl9yZWFkaW5nIiksaWU9U3ltYm9s KCJfcmVtYWluIiksRGk9U3ltYm9sKCJfc2l6ZSIpLEZlPVN5bWJvbCgiX3dyaXRlIiksUnQ9U3lt Ym9sKCJfd3JpdGluZyIpLGtlPVN5bWJvbCgiX2RlZmF1bHRGbGFnIiksYnQ9U3ltYm9sKCJfZXJy b3JlZCIpLGd0PWNsYXNzIGV4dGVuZHMgQXtbYnRdPSExO1ttXTtbVV07W05pXTtbUV09ITE7W0Rp XTtbaWVdO1tvdF07Y29uc3RydWN0b3IodCxlKXtpZihlPWV8fHt9LHN1cGVyKGUpLHRoaXMucmVh ZGFibGU9ITAsdGhpcy53cml0YWJsZT0hMSx0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IFR5 cGVFcnJvcigicGF0aCBtdXN0IGJlIGEgc3RyaW5nIik7dGhpc1tidF09ITEsdGhpc1ttXT10eXBl b2YgZS5mZD09Im51bWJlciI/ZS5mZDp2b2lkIDAsdGhpc1tVXT10LHRoaXNbTmldPWUucmVhZFNp emV8fDE2KjEwMjQqMTAyNCx0aGlzW1FdPSExLHRoaXNbRGldPXR5cGVvZiBlLnNpemU9PSJudW1i ZXIiP2Uuc2l6ZToxLzAsdGhpc1tpZV09dGhpc1tEaV0sdGhpc1tvdF09dHlwZW9mIGUuYXV0b0Ns b3NlPT0iYm9vbGVhbiI/ZS5hdXRvQ2xvc2U6ITAsdHlwZW9mIHRoaXNbbV09PSJudW1iZXIiP3Ro aXNbenRdKCk6dGhpc1todF0oKX1nZXQgZmQoKXtyZXR1cm4gdGhpc1ttXX1nZXQgcGF0aCgpe3Jl dHVybiB0aGlzW1VdfXdyaXRlKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigidGhpcyBpcyBhIHJlYWRh YmxlIHN0cmVhbSIpfWVuZCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoInRoaXMgaXMgYSByZWFkYWJs ZSBzdHJlYW0iKX1baHRdKCl7SS5vcGVuKHRoaXNbVV0sInIiLCh0LGUpPT50aGlzW0h0XSh0LGUp KX1bSHRdKHQsZSl7dD90aGlzW1V0XSh0KToodGhpc1ttXT1lLHRoaXMuZW1pdCgib3BlbiIsZSks dGhpc1t6dF0oKSl9W0lpXSgpe3JldHVybiBCdWZmZXIuYWxsb2NVbnNhZmUoTWF0aC5taW4odGhp c1tOaV0sdGhpc1tpZV0pKX1benRdKCl7aWYoIXRoaXNbUV0pe3RoaXNbUV09ITA7bGV0IHQ9dGhp c1tJaV0oKTtpZih0Lmxlbmd0aD09PTApcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soKCk9PnRoaXNb TGldKG51bGwsMCx0KSk7SS5yZWFkKHRoaXNbbV0sdCwwLHQubGVuZ3RoLG51bGwsKGUsaSxyKT0+ dGhpc1tMaV0oZSxpLHIpKX19W0xpXSh0LGUsaSl7dGhpc1tRXT0hMSx0P3RoaXNbVXRdKHQpOnRo aXNbQWldKGUsaSkmJnRoaXNbenRdKCl9W0hdKCl7aWYodGhpc1tvdF0mJnR5cGVvZiB0aGlzW21d PT0ibnVtYmVyIil7bGV0IHQ9dGhpc1ttXTt0aGlzW21dPXZvaWQgMCxJLmNsb3NlKHQsZT0+ZT90 aGlzLmVtaXQoImVycm9yIixlKTp0aGlzLmVtaXQoImNsb3NlIikpfX1bVXRdKHQpe3RoaXNbUV09 ITAsdGhpc1tIXSgpLHRoaXMuZW1pdCgiZXJyb3IiLHQpfVtBaV0odCxlKXtsZXQgaT0hMTtyZXR1 cm4gdGhpc1tpZV0tPXQsdD4wJiYoaT1zdXBlci53cml0ZSh0PGUubGVuZ3RoP2Uuc3ViYXJyYXko MCx0KTplKSksKHQ9PT0wfHx0aGlzW2llXTw9MCkmJihpPSExLHRoaXNbSF0oKSxzdXBlci5lbmQo KSksaX1lbWl0KHQsLi4uZSl7c3dpdGNoKHQpe2Nhc2UicHJlZmluaXNoIjpjYXNlImZpbmlzaCI6 cmV0dXJuITE7Y2FzZSJkcmFpbiI6cmV0dXJuIHR5cGVvZiB0aGlzW21dPT0ibnVtYmVyIiYmdGhp c1t6dF0oKSwhMTtjYXNlImVycm9yIjpyZXR1cm4gdGhpc1tidF0/ITE6KHRoaXNbYnRdPSEwLHN1 cGVyLmVtaXQodCwuLi5lKSk7ZGVmYXVsdDpyZXR1cm4gc3VwZXIuZW1pdCh0LC4uLmUpfX19LHZl PWNsYXNzIGV4dGVuZHMgZ3R7W2h0XSgpe2xldCB0PSEwO3RyeXt0aGlzW0h0XShudWxsLEkub3Bl blN5bmModGhpc1tVXSwiciIpKSx0PSExfWZpbmFsbHl7dCYmdGhpc1tIXSgpfX1benRdKCl7bGV0 IHQ9ITA7dHJ5e2lmKCF0aGlzW1FdKXt0aGlzW1FdPSEwO2Rve2xldCBlPXRoaXNbSWldKCksaT1l Lmxlbmd0aD09PTA/MDpJLnJlYWRTeW5jKHRoaXNbbV0sZSwwLGUubGVuZ3RoLG51bGwpO2lmKCF0 aGlzW0FpXShpLGUpKWJyZWFrfXdoaWxlKCEwKTt0aGlzW1FdPSExfXQ9ITF9ZmluYWxseXt0JiZ0 aGlzW0hdKCl9fVtIXSgpe2lmKHRoaXNbb3RdJiZ0eXBlb2YgdGhpc1ttXT09Im51bWJlciIpe2xl dCB0PXRoaXNbbV07dGhpc1ttXT12b2lkIDAsSS5jbG9zZVN5bmModCksdGhpcy5lbWl0KCJjbG9z ZSIpfX19LHR0PWNsYXNzIGV4dGVuZHMgSHJ7cmVhZGFibGU9ITE7d3JpdGFibGU9ITA7W2J0XT0h MTtbUnRdPSExO1tlZV09ITE7W1ldPVtdO1tDZV09ITE7W1VdO1tzZV07W290XTtbbV07W2tlXTtb Sl07W1RpXT0hMTtbbnRdO2NvbnN0cnVjdG9yKHQsZSl7ZT1lfHx7fSxzdXBlcihlKSx0aGlzW1Vd PXQsdGhpc1ttXT10eXBlb2YgZS5mZD09Im51bWJlciI/ZS5mZDp2b2lkIDAsdGhpc1tzZV09ZS5t b2RlPT09dm9pZCAwPzQzODplLm1vZGUsdGhpc1tudF09dHlwZW9mIGUuc3RhcnQ9PSJudW1iZXIi P2Uuc3RhcnQ6dm9pZCAwLHRoaXNbb3RdPXR5cGVvZiBlLmF1dG9DbG9zZT09ImJvb2xlYW4iP2Uu YXV0b0Nsb3NlOiEwO2xldCBpPXRoaXNbbnRdIT09dm9pZCAwPyJyKyI6InciO3RoaXNba2VdPWUu ZmxhZ3M9PT12b2lkIDAsdGhpc1tKXT1lLmZsYWdzPT09dm9pZCAwP2k6ZS5mbGFncyx0aGlzW21d PT09dm9pZCAwJiZ0aGlzW2h0XSgpfWVtaXQodCwuLi5lKXtpZih0PT09ImVycm9yIil7aWYodGhp c1tidF0pcmV0dXJuITE7dGhpc1tidF09ITB9cmV0dXJuIHN1cGVyLmVtaXQodCwuLi5lKX1nZXQg ZmQoKXtyZXR1cm4gdGhpc1ttXX1nZXQgcGF0aCgpe3JldHVybiB0aGlzW1VdfVtVdF0odCl7dGhp c1tIXSgpLHRoaXNbUnRdPSEwLHRoaXMuZW1pdCgiZXJyb3IiLHQpfVtodF0oKXtJLm9wZW4odGhp c1tVXSx0aGlzW0pdLHRoaXNbc2VdLCh0LGUpPT50aGlzW0h0XSh0LGUpKX1bSHRdKHQsZSl7dGhp c1trZV0mJnRoaXNbSl09PT0icisiJiZ0JiZ0LmNvZGU9PT0iRU5PRU5UIj8odGhpc1tKXT0idyIs dGhpc1todF0oKSk6dD90aGlzW1V0XSh0KToodGhpc1ttXT1lLHRoaXMuZW1pdCgib3BlbiIsZSks dGhpc1tSdF18fHRoaXNbeGldKCkpfWVuZCh0LGUpe3JldHVybiB0JiZ0aGlzLndyaXRlKHQsZSks dGhpc1tlZV09ITAsIXRoaXNbUnRdJiYhdGhpc1tZXS5sZW5ndGgmJnR5cGVvZiB0aGlzW21dPT0i bnVtYmVyIiYmdGhpc1tQdF0obnVsbCwwKSx0aGlzfXdyaXRlKHQsZSl7cmV0dXJuIHR5cGVvZiB0 PT0ic3RyaW5nIiYmKHQ9QnVmZmVyLmZyb20odCxlKSksdGhpc1tlZV0/KHRoaXMuZW1pdCgiZXJy b3IiLG5ldyBFcnJvcigid3JpdGUoKSBhZnRlciBlbmQoKSIpKSwhMSk6dGhpc1ttXT09PXZvaWQg MHx8dGhpc1tSdF18fHRoaXNbWV0ubGVuZ3RoPyh0aGlzW1ldLnB1c2godCksdGhpc1tDZV09ITAs ITEpOih0aGlzW1J0XT0hMCx0aGlzW0ZlXSh0KSwhMCl9W0ZlXSh0KXtJLndyaXRlKHRoaXNbbV0s dCwwLHQubGVuZ3RoLHRoaXNbbnRdLChlLGkpPT50aGlzW1B0XShlLGkpKX1bUHRdKHQsZSl7dD90 aGlzW1V0XSh0KToodGhpc1tudF0hPT12b2lkIDAmJnR5cGVvZiBlPT0ibnVtYmVyIiYmKHRoaXNb bnRdKz1lKSx0aGlzW1ldLmxlbmd0aD90aGlzW3hpXSgpOih0aGlzW1J0XT0hMSx0aGlzW2VlXSYm IXRoaXNbVGldPyh0aGlzW1RpXT0hMCx0aGlzW0hdKCksdGhpcy5lbWl0KCJmaW5pc2giKSk6dGhp c1tDZV0mJih0aGlzW0NlXT0hMSx0aGlzLmVtaXQoImRyYWluIikpKSl9W3hpXSgpe2lmKHRoaXNb WV0ubGVuZ3RoPT09MCl0aGlzW2VlXSYmdGhpc1tQdF0obnVsbCwwKTtlbHNlIGlmKHRoaXNbWV0u bGVuZ3RoPT09MSl0aGlzW0ZlXSh0aGlzW1ldLnBvcCgpKTtlbHNle2xldCB0PXRoaXNbWV07dGhp c1tZXT1bXSxXcih0aGlzW21dLHQsdGhpc1tudF0sKGUsaSk9PnRoaXNbUHRdKGUsaSkpfX1bSF0o KXtpZih0aGlzW290XSYmdHlwZW9mIHRoaXNbbV09PSJudW1iZXIiKXtsZXQgdD10aGlzW21dO3Ro aXNbbV09dm9pZCAwLEkuY2xvc2UodCxlPT5lP3RoaXMuZW1pdCgiZXJyb3IiLGUpOnRoaXMuZW1p dCgiY2xvc2UiKSl9fX0sV3Q9Y2xhc3MgZXh0ZW5kcyB0dHtbaHRdKCl7bGV0IHQ7aWYodGhpc1tr ZV0mJnRoaXNbSl09PT0icisiKXRyeXt0PUkub3BlblN5bmModGhpc1tVXSx0aGlzW0pdLHRoaXNb c2VdKX1jYXRjaChlKXtpZihlPy5jb2RlPT09IkVOT0VOVCIpcmV0dXJuIHRoaXNbSl09InciLHRo aXNbaHRdKCk7dGhyb3cgZX1lbHNlIHQ9SS5vcGVuU3luYyh0aGlzW1VdLHRoaXNbSl0sdGhpc1tz ZV0pO3RoaXNbSHRdKG51bGwsdCl9W0hdKCl7aWYodGhpc1tvdF0mJnR5cGVvZiB0aGlzW21dPT0i bnVtYmVyIil7bGV0IHQ9dGhpc1ttXTt0aGlzW21dPXZvaWQgMCxJLmNsb3NlU3luYyh0KSx0aGlz LmVtaXQoImNsb3NlIil9fVtGZV0odCl7bGV0IGU9ITA7dHJ5e3RoaXNbUHRdKG51bGwsSS53cml0 ZVN5bmModGhpc1ttXSx0LDAsdC5sZW5ndGgsdGhpc1tudF0pKSxlPSExfWZpbmFsbHl7aWYoZSl0 cnl7dGhpc1tIXSgpfWNhdGNoe319fX07aW1wb3J0IG9yIGZyb20ibm9kZTpwYXRoIjtpbXBvcnQg VnQgZnJvbSJub2RlOmZzIjtpbXBvcnR7ZGlybmFtZSBhcyBibixwYXJzZSBhcyBnbn1mcm9tInBh dGgiO3ZhciBHcj1uZXcgTWFwKFtbIkMiLCJjd2QiXSxbImYiLCJmaWxlIl0sWyJ6IiwiZ3ppcCJd LFsiUCIsInByZXNlcnZlUGF0aHMiXSxbIlUiLCJ1bmxpbmsiXSxbInN0cmlwLWNvbXBvbmVudHMi LCJzdHJpcCJdLFsic3RyaXBDb21wb25lbnRzIiwic3RyaXAiXSxbImtlZXAtbmV3ZXIiLCJuZXdl ciJdLFsia2VlcE5ld2VyIiwibmV3ZXIiXSxbImtlZXAtbmV3ZXItZmlsZXMiLCJuZXdlciJdLFsi a2VlcE5ld2VyRmlsZXMiLCJuZXdlciJdLFsiayIsImtlZXAiXSxbImtlZXAtZXhpc3RpbmciLCJr ZWVwIl0sWyJrZWVwRXhpc3RpbmciLCJrZWVwIl0sWyJtIiwibm9NdGltZSJdLFsibm8tbXRpbWUi LCJub010aW1lIl0sWyJwIiwicHJlc2VydmVPd25lciJdLFsiTCIsImZvbGxvdyJdLFsiaCIsImZv bGxvdyJdLFsib25lbnRyeSIsIm9uUmVhZEVudHJ5Il1dKSxBcz1zPT4hIXMuc3luYyYmISFzLmZp bGUsSXM9cz0+IXMuc3luYyYmISFzLmZpbGUsQ3M9cz0+ISFzLnN5bmMmJiFzLmZpbGUsRnM9cz0+ IXMuc3luYyYmIXMuZmlsZTt2YXIga3M9cz0+ISFzLmZpbGU7dmFyIFpyPXM9PntsZXQgdD1Hci5n ZXQocyk7cmV0dXJuIHR8fHN9LHJlPShzPXt9KT0+e2lmKCFzKXJldHVybnt9O2xldCB0PXt9O2Zv cihsZXRbZSxpXW9mIE9iamVjdC5lbnRyaWVzKHMpKXtsZXQgcj1acihlKTt0W3JdPWl9cmV0dXJu IHQuY2htb2Q9PT12b2lkIDAmJnQubm9DaG1vZD09PSExJiYodC5jaG1vZD0hMCksZGVsZXRlIHQu bm9DaG1vZCx0fTt2YXIgSz0ocyx0LGUsaSxyKT0+T2JqZWN0LmFzc2lnbigobj1bXSxvLGgpPT57 QXJyYXkuaXNBcnJheShuKSYmKG89bixuPXt9KSx0eXBlb2Ygbz09ImZ1bmN0aW9uIiYmKGg9byxv PXZvaWQgMCksbz9vPUFycmF5LmZyb20obyk6bz1bXTtsZXQgYT1yZShuKTtpZihyPy4oYSxvKSxB cyhhKSl7aWYodHlwZW9mIGg9PSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJh Y2sgbm90IHN1cHBvcnRlZCBmb3Igc3luYyB0YXIgZnVuY3Rpb25zIik7cmV0dXJuIHMoYSxvKX1l bHNlIGlmKElzKGEpKXtsZXQgbD10KGEsbyksYz1ofHx2b2lkIDA7cmV0dXJuIGM/bC50aGVuKCgp PT5jKCksYyk6bH1lbHNlIGlmKENzKGEpKXtpZih0eXBlb2YgaD09ImZ1bmN0aW9uIil0aHJvdyBu ZXcgVHlwZUVycm9yKCJjYWxsYmFjayBub3Qgc3VwcG9ydGVkIGZvciBzeW5jIHRhciBmdW5jdGlv bnMiKTtyZXR1cm4gZShhLG8pfWVsc2UgaWYoRnMoYSkpe2lmKHR5cGVvZiBoPT0iZnVuY3Rpb24i KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIG9ubHkgc3VwcG9ydGVkIHdpdGggZmlsZSBv cHRpb24iKTtyZXR1cm4gaShhLG8pfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJpbXBvc3NpYmxlIG9w dGlvbnM/PyIpfSx7c3luY0ZpbGU6cyxhc3luY0ZpbGU6dCxzeW5jTm9GaWxlOmUsYXN5bmNOb0Zp bGU6aSx2YWxpZGF0ZTpyfSk7aW1wb3J0e0V2ZW50RW1pdHRlciBhcyB3bn1mcm9tImV2ZW50cyI7 aW1wb3J0IHZpIGZyb20iYXNzZXJ0IjtpbXBvcnR7QnVmZmVyIGFzIF90fWZyb20iYnVmZmVyIjtp bXBvcnQqYXMgdnMgZnJvbSJ6bGliIjtpbXBvcnQgWXIgZnJvbSJ6bGliIjt2YXIgS3I9WXIuY29u c3RhbnRzfHx7WkxJQl9WRVJOVU06NDczNn0sTT1PYmplY3QuZnJlZXplKE9iamVjdC5hc3NpZ24o T2JqZWN0LmNyZWF0ZShudWxsKSx7Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lO Q19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfT0s6MCxaX1NU UkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9E QVRBX0VSUk9SOi0zLFpfTUVNX0VSUk9SOi00LFpfQlVGX0VSUk9SOi01LFpfVkVSU0lPTl9FUlJP UjotNixaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9O OjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToy LFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLERFRkxBVEU6MSxJTkZMQVRF OjIsR1pJUDozLEdVTlpJUDo0LERFRkxBVEVSQVc6NSxJTkZMQVRFUkFXOjYsVU5aSVA6NyxCUk9U TElfREVDT0RFOjgsQlJPVExJX0VOQ09ERTo5LFpfTUlOX1dJTkRPV0JJVFM6OCxaX01BWF9XSU5E T1dCSVRTOjE1LFpfREVGQVVMVF9XSU5ET1dCSVRTOjE1LFpfTUlOX0NIVU5LOjY0LFpfTUFYX0NI VU5LOjEvMCxaX0RFRkFVTFRfQ0hVTks6MTYzODQsWl9NSU5fTUVNTEVWRUw6MSxaX01BWF9NRU1M RVZFTDo5LFpfREVGQVVMVF9NRU1MRVZFTDo4LFpfTUlOX0xFVkVMOi0xLFpfTUFYX0xFVkVMOjks Wl9ERUZBVUxUX0xFVkVMOi0xLEJST1RMSV9PUEVSQVRJT05fUFJPQ0VTUzowLEJST1RMSV9PUEVS QVRJT05fRkxVU0g6MSxCUk9UTElfT1BFUkFUSU9OX0ZJTklTSDoyLEJST1RMSV9PUEVSQVRJT05f RU1JVF9NRVRBREFUQTozLEJST1RMSV9NT0RFX0dFTkVSSUM6MCxCUk9UTElfTU9ERV9URVhUOjEs QlJPVExJX01PREVfRk9OVDoyLEJST1RMSV9ERUZBVUxUX01PREU6MCxCUk9UTElfTUlOX1FVQUxJ VFk6MCxCUk9UTElfTUFYX1FVQUxJVFk6MTEsQlJPVExJX0RFRkFVTFRfUVVBTElUWToxMSxCUk9U TElfTUlOX1dJTkRPV19CSVRTOjEwLEJST1RMSV9NQVhfV0lORE9XX0JJVFM6MjQsQlJPVExJX0xB UkdFX01BWF9XSU5ET1dfQklUUzozMCxCUk9UTElfREVGQVVMVF9XSU5ET1c6MjIsQlJPVExJX01J Tl9JTlBVVF9CTE9DS19CSVRTOjE2LEJST1RMSV9NQVhfSU5QVVRfQkxPQ0tfQklUUzoyNCxCUk9U TElfUEFSQU1fTU9ERTowLEJST1RMSV9QQVJBTV9RVUFMSVRZOjEsQlJPVExJX1BBUkFNX0xHV0lO OjIsQlJPVExJX1BBUkFNX0xHQkxPQ0s6MyxCUk9UTElfUEFSQU1fRElTQUJMRV9MSVRFUkFMX0NP TlRFWFRfTU9ERUxJTkc6NCxCUk9UTElfUEFSQU1fU0laRV9ISU5UOjUsQlJPVExJX1BBUkFNX0xB UkdFX1dJTkRPVzo2LEJST1RMSV9QQVJBTV9OUE9TVEZJWDo3LEJST1RMSV9QQVJBTV9ORElSRUNU OjgsQlJPVExJX0RFQ09ERVJfUkVTVUxUX0VSUk9SOjAsQlJPVExJX0RFQ09ERVJfUkVTVUxUX1NV Q0NFU1M6MSxCUk9UTElfREVDT0RFUl9SRVNVTFRfTkVFRFNfTU9SRV9JTlBVVDoyLEJST1RMSV9E RUNPREVSX1JFU1VMVF9ORUVEU19NT1JFX09VVFBVVDozLEJST1RMSV9ERUNPREVSX1BBUkFNX0RJ U0FCTEVfUklOR19CVUZGRVJfUkVBTExPQ0FUSU9OOjAsQlJPVExJX0RFQ09ERVJfUEFSQU1fTEFS R0VfV0lORE9XOjEsQlJPVExJX0RFQ09ERVJfTk9fRVJST1I6MCxCUk9UTElfREVDT0RFUl9TVUND RVNTOjEsQlJPVExJX0RFQ09ERVJfTkVFRFNfTU9SRV9JTlBVVDoyLEJST1RMSV9ERUNPREVSX05F RURTX01PUkVfT1VUUFVUOjMsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0VYVUJFUkFOVF9O SUJCTEU6LTEsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1JFU0VSVkVEOi0yLEJST1RMSV9E RUNPREVSX0VSUk9SX0ZPUk1BVF9FWFVCRVJBTlRfTUVUQV9OSUJCTEU6LTMsQlJPVExJX0RFQ09E RVJfRVJST1JfRk9STUFUX1NJTVBMRV9IVUZGTUFOX0FMUEhBQkVUOi00LEJST1RMSV9ERUNPREVS X0VSUk9SX0ZPUk1BVF9TSU1QTEVfSFVGRk1BTl9TQU1FOi01LEJST1RMSV9ERUNPREVSX0VSUk9S X0ZPUk1BVF9DTF9TUEFDRTotNixCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfSFVGRk1BTl9T UEFDRTotNyxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQ09OVEVYVF9NQVBfUkVQRUFUOi04 LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9CTE9DS19MRU5HVEhfMTotOSxCUk9UTElfREVD T0RFUl9FUlJPUl9GT1JNQVRfQkxPQ0tfTEVOR1RIXzI6LTEwLEJST1RMSV9ERUNPREVSX0VSUk9S X0ZPUk1BVF9UUkFOU0ZPUk06LTExLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESUNUSU9O QVJZOi0xMixCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfV0lORE9XX0JJVFM6LTEzLEJST1RM SV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9QQURESU5HXzE6LTE0LEJST1RMSV9ERUNPREVSX0VSUk9S X0ZPUk1BVF9QQURESU5HXzI6LTE1LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESVNUQU5D RTotMTYsQlJPVExJX0RFQ09ERVJfRVJST1JfRElDVElPTkFSWV9OT1RfU0VUOi0xOSxCUk9UTElf REVDT0RFUl9FUlJPUl9JTlZBTElEX0FSR1VNRU5UUzotMjAsQlJPVExJX0RFQ09ERVJfRVJST1Jf QUxMT0NfQ09OVEVYVF9NT0RFUzotMjEsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfVFJFRV9H Uk9VUFM6LTIyLEJST1RMSV9ERUNPREVSX0VSUk9SX0FMTE9DX0NPTlRFWFRfTUFQOi0yNSxCUk9U TElfREVDT0RFUl9FUlJPUl9BTExPQ19SSU5HX0JVRkZFUl8xOi0yNixCUk9UTElfREVDT0RFUl9F UlJPUl9BTExPQ19SSU5HX0JVRkZFUl8yOi0yNyxCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19C TE9DS19UWVBFX1RSRUVTOi0zMCxCUk9UTElfREVDT0RFUl9FUlJPUl9VTlJFQUNIQUJMRTotMzF9 LEtyKSk7dmFyIFZyPV90LmNvbmNhdCxNcz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y KF90LCJjb25jYXQiKSwkcj1zPT5zLEZpPU1zPy53cml0YWJsZT09PSEwfHxNcz8uc2V0IT09dm9p ZCAwP3M9PntfdC5jb25jYXQ9cz8kcjpWcn06cz0+e30sT3Q9U3ltYm9sKCJfc3VwZXJXcml0ZSIp LEd0PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29kZTtlcnJubztjb25zdHJ1Y3Rvcih0LGUpe3N1cGVy KCJ6bGliOiAiK3QubWVzc2FnZSx7Y2F1c2U6dH0pLHRoaXMuY29kZT10LmNvZGUsdGhpcy5lcnJu bz10LmVycm5vLHRoaXMuY29kZXx8KHRoaXMuY29kZT0iWkxJQl9FUlJPUiIpLHRoaXMubWVzc2Fn ZT0iemxpYjogIit0Lm1lc3NhZ2UsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxlPz90aGlz LmNvbnN0cnVjdG9yKX1nZXQgbmFtZSgpe3JldHVybiJabGliRXJyb3IifX0sa2k9U3ltYm9sKCJm bHVzaEZsYWciKSxuZT1jbGFzcyBleHRlbmRzIEF7I3Q9ITE7I2k9ITE7I3M7I247I3I7I2U7I287 Z2V0IHNhd0Vycm9yKCl7cmV0dXJuIHRoaXMuI3R9Z2V0IGhhbmRsZSgpe3JldHVybiB0aGlzLiNl fWdldCBmbHVzaEZsYWcoKXtyZXR1cm4gdGhpcy4jc31jb25zdHJ1Y3Rvcih0LGUpe2lmKCF0fHx0 eXBlb2YgdCE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBvcHRpb25zIGZv ciBabGliQmFzZSBjb25zdHJ1Y3RvciIpO2lmKHN1cGVyKHQpLHRoaXMuI3M9dC5mbHVzaD8/MCx0 aGlzLiNuPXQuZmluaXNoRmx1c2g/PzAsdGhpcy4jcj10LmZ1bGxGbHVzaEZsYWc/PzAsdHlwZW9m IHZzW2VdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbXByZXNzaW9uIG1ldGhv ZCBub3Qgc3VwcG9ydGVkOiAiK2UpO3RyeXt0aGlzLiNlPW5ldyB2c1tlXSh0KX1jYXRjaChpKXt0 aHJvdyBuZXcgR3QoaSx0aGlzLmNvbnN0cnVjdG9yKX10aGlzLiNvPWk9Pnt0aGlzLiN0fHwodGhp cy4jdD0hMCx0aGlzLmNsb3NlKCksdGhpcy5lbWl0KCJlcnJvciIsaSkpfSx0aGlzLiNlPy5vbigi ZXJyb3IiLGk9PnRoaXMuI28obmV3IEd0KGkpKSksdGhpcy5vbmNlKCJlbmQiLCgpPT50aGlzLmNs b3NlKX1jbG9zZSgpe3RoaXMuI2UmJih0aGlzLiNlLmNsb3NlKCksdGhpcy4jZT12b2lkIDAsdGhp cy5lbWl0KCJjbG9zZSIpKX1yZXNldCgpe2lmKCF0aGlzLiN0KXJldHVybiB2aSh0aGlzLiNlLCJ6 bGliIGJpbmRpbmcgY2xvc2VkIiksdGhpcy4jZS5yZXNldD8uKCl9Zmx1c2godCl7dGhpcy5lbmRl ZHx8KHR5cGVvZiB0IT0ibnVtYmVyIiYmKHQ9dGhpcy4jciksdGhpcy53cml0ZShPYmplY3QuYXNz aWduKF90LmFsbG9jKDApLHtba2ldOnR9KSkpfWVuZCh0LGUsaSl7cmV0dXJuIHR5cGVvZiB0PT0i ZnVuY3Rpb24iJiYoaT10LGU9dm9pZCAwLHQ9dm9pZCAwKSx0eXBlb2YgZT09ImZ1bmN0aW9uIiYm KGk9ZSxlPXZvaWQgMCksdCYmKGU/dGhpcy53cml0ZSh0LGUpOnRoaXMud3JpdGUodCkpLHRoaXMu Zmx1c2godGhpcy4jbiksdGhpcy4jaT0hMCxzdXBlci5lbmQoaSl9Z2V0IGVuZGVkKCl7cmV0dXJu IHRoaXMuI2l9W090XSh0KXtyZXR1cm4gc3VwZXIud3JpdGUodCl9d3JpdGUodCxlLGkpe2lmKHR5 cGVvZiBlPT0iZnVuY3Rpb24iJiYoaT1lLGU9InV0ZjgiKSx0eXBlb2YgdD09InN0cmluZyImJih0 PV90LmZyb20odCxlKSksdGhpcy4jdClyZXR1cm47dmkodGhpcy4jZSwiemxpYiBiaW5kaW5nIGNs b3NlZCIpO2xldCByPXRoaXMuI2UuX2hhbmRsZSxuPXIuY2xvc2U7ci5jbG9zZT0oKT0+e307bGV0 IG89dGhpcy4jZS5jbG9zZTt0aGlzLiNlLmNsb3NlPSgpPT57fSxGaSghMCk7bGV0IGg7dHJ5e2xl dCBsPXR5cGVvZiB0W2tpXT09Im51bWJlciI/dFtraV06dGhpcy4jcztoPXRoaXMuI2UuX3Byb2Nl c3NDaHVuayh0LGwpLEZpKCExKX1jYXRjaChsKXtGaSghMSksdGhpcy4jbyhuZXcgR3QobCx0aGlz LndyaXRlKSl9ZmluYWxseXt0aGlzLiNlJiYodGhpcy4jZS5faGFuZGxlPXIsci5jbG9zZT1uLHRo aXMuI2UuY2xvc2U9byx0aGlzLiNlLnJlbW92ZUFsbExpc3RlbmVycygiZXJyb3IiKSl9dGhpcy4j ZSYmdGhpcy4jZS5vbigiZXJyb3IiLGw9PnRoaXMuI28obmV3IEd0KGwsdGhpcy53cml0ZSkpKTts ZXQgYTtpZihoKWlmKEFycmF5LmlzQXJyYXkoaCkmJmgubGVuZ3RoPjApe2xldCBsPWhbMF07YT10 aGlzW090XShfdC5mcm9tKGwpKTtmb3IobGV0IGM9MTtjPGgubGVuZ3RoO2MrKylhPXRoaXNbT3Rd KGhbY10pfWVsc2UgYT10aGlzW090XShfdC5mcm9tKGgpKTtyZXR1cm4gaSYmaSgpLGF9fSxNZT1j bGFzcyBleHRlbmRzIG5leyN0OyNpO2NvbnN0cnVjdG9yKHQsZSl7dD10fHx7fSx0LmZsdXNoPXQu Zmx1c2h8fE0uWl9OT19GTFVTSCx0LmZpbmlzaEZsdXNoPXQuZmluaXNoRmx1c2h8fE0uWl9GSU5J U0gsdC5mdWxsRmx1c2hGbGFnPU0uWl9GVUxMX0ZMVVNILHN1cGVyKHQsZSksdGhpcy4jdD10Lmxl dmVsLHRoaXMuI2k9dC5zdHJhdGVneX1wYXJhbXModCxlKXtpZighdGhpcy5zYXdFcnJvcil7aWYo IXRoaXMuaGFuZGxlKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHN3aXRjaCBwYXJhbXMgd2hlbiBi aW5kaW5nIGlzIGNsb3NlZCIpO2lmKCF0aGlzLmhhbmRsZS5wYXJhbXMpdGhyb3cgbmV3IEVycm9y KCJub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24iKTtpZih0aGlzLiN0IT09dHx8 dGhpcy4jaSE9PWUpe3RoaXMuZmx1c2goTS5aX1NZTkNfRkxVU0gpLHZpKHRoaXMuaGFuZGxlLCJ6 bGliIGJpbmRpbmcgY2xvc2VkIik7bGV0IGk9dGhpcy5oYW5kbGUuZmx1c2g7dGhpcy5oYW5kbGUu Zmx1c2g9KHIsbik9Pnt0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXRoaXMuZmx1c2hGbGFn KSx0aGlzLmZsdXNoKHIpLG4/LigpfTt0cnl7dGhpcy5oYW5kbGUucGFyYW1zKHQsZSl9ZmluYWxs eXt0aGlzLmhhbmRsZS5mbHVzaD1pfXRoaXMuaGFuZGxlJiYodGhpcy4jdD10LHRoaXMuI2k9ZSl9 fX19O3ZhciBCZT1jbGFzcyBleHRlbmRzIE1leyN0O2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsIkd6 aXAiKSx0aGlzLiN0PXQmJiEhdC5wb3J0YWJsZX1bT3RdKHQpe3JldHVybiB0aGlzLiN0Pyh0aGlz LiN0PSExLHRbOV09MjU1LHN1cGVyW090XSh0KSk6c3VwZXJbT3RdKHQpfX07dmFyIFBlPWNsYXNz IGV4dGVuZHMgTWV7Y29uc3RydWN0b3IodCl7c3VwZXIodCwiVW56aXAiKX19LHplPWNsYXNzIGV4 dGVuZHMgbmV7Y29uc3RydWN0b3IodCxlKXt0PXR8fHt9LHQuZmx1c2g9dC5mbHVzaHx8TS5CUk9U TElfT1BFUkFUSU9OX1BST0NFU1MsdC5maW5pc2hGbHVzaD10LmZpbmlzaEZsdXNofHxNLkJST1RM SV9PUEVSQVRJT05fRklOSVNILHQuZnVsbEZsdXNoRmxhZz1NLkJST1RMSV9PUEVSQVRJT05fRkxV U0gsc3VwZXIodCxlKX19LFVlPWNsYXNzIGV4dGVuZHMgemV7Y29uc3RydWN0b3IodCl7c3VwZXIo dCwiQnJvdGxpQ29tcHJlc3MiKX19LEhlPWNsYXNzIGV4dGVuZHMgemV7Y29uc3RydWN0b3IodCl7 c3VwZXIodCwiQnJvdGxpRGVjb21wcmVzcyIpfX0sV2U9Y2xhc3MgZXh0ZW5kcyBuZXtjb25zdHJ1 Y3Rvcih0LGUpe3Q9dHx8e30sdC5mbHVzaD10LmZsdXNofHxNLlpTVERfZV9jb250aW51ZSx0LmZp bmlzaEZsdXNoPXQuZmluaXNoRmx1c2h8fE0uWlNURF9lX2VuZCx0LmZ1bGxGbHVzaEZsYWc9TS5a U1REX2VfZmx1c2gsc3VwZXIodCxlKX19LEdlPWNsYXNzIGV4dGVuZHMgV2V7Y29uc3RydWN0b3Io dCl7c3VwZXIodCwiWnN0ZENvbXByZXNzIil9fSxaZT1jbGFzcyBleHRlbmRzIFdle2NvbnN0cnVj dG9yKHQpe3N1cGVyKHQsIlpzdGREZWNvbXByZXNzIil9fTtpbXBvcnR7cG9zaXggYXMgWnR9ZnJv bSJub2RlOnBhdGgiO3ZhciBCcz0ocyx0KT0+e2lmKE51bWJlci5pc1NhZmVJbnRlZ2VyKHMpKXM8 MD9qcihzLHQpOnFyKHMsdCk7ZWxzZSB0aHJvdyBFcnJvcigiY2Fubm90IGVuY29kZSBudW1iZXIg b3V0c2lkZSBvZiBqYXZhc2NyaXB0IHNhZmUgaW50ZWdlciByYW5nZSIpO3JldHVybiB0fSxxcj0o cyx0KT0+e3RbMF09MTI4O2Zvcih2YXIgZT10Lmxlbmd0aDtlPjE7ZS0tKXRbZS0xXT1zJjI1NSxz PU1hdGguZmxvb3Iocy8yNTYpfSxqcj0ocyx0KT0+e3RbMF09MjU1O3ZhciBlPSExO3M9cyotMTtm b3IodmFyIGk9dC5sZW5ndGg7aT4xO2ktLSl7dmFyIHI9cyYyNTU7cz1NYXRoLmZsb29yKHMvMjU2 KSxlP3RbaS0xXT16cyhyKTpyPT09MD90W2ktMV09MDooZT0hMCx0W2ktMV09VXMocikpfX0sUHM9 cz0+e2xldCB0PXNbMF0sZT10PT09MTI4P0pyKHMuc3ViYXJyYXkoMSxzLmxlbmd0aCkpOnQ9PT0y NTU/UXIocyk6bnVsbDtpZihlPT09bnVsbCl0aHJvdyBFcnJvcigiaW52YWxpZCBiYXNlMjU2IGVu Y29kaW5nIik7aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGUpKXRocm93IEVycm9yKCJwYXJzZWQg bnVtYmVyIG91dHNpZGUgb2YgamF2YXNjcmlwdCBzYWZlIGludGVnZXIgcmFuZ2UiKTtyZXR1cm4g ZX0sUXI9cz0+e2Zvcih2YXIgdD1zLmxlbmd0aCxlPTAsaT0hMSxyPXQtMTtyPi0xO3ItLSl7dmFy IG49TnVtYmVyKHNbcl0pLG87aT9vPXpzKG4pOm49PT0wP289bjooaT0hMCxvPVVzKG4pKSxvIT09 MCYmKGUtPW8qTWF0aC5wb3coMjU2LHQtci0xKSl9cmV0dXJuIGV9LEpyPXM9Pntmb3IodmFyIHQ9 cy5sZW5ndGgsZT0wLGk9dC0xO2k+LTE7aS0tKXt2YXIgcj1OdW1iZXIoc1tpXSk7ciE9PTAmJihl Kz1yKk1hdGgucG93KDI1Nix0LWktMSkpfXJldHVybiBlfSx6cz1zPT4oMjU1XnMpJjI1NSxVcz1z PT4oMjU1XnMpKzEmMjU1O3ZhciBNaT17fTtBcihNaSx7Y29kZTooKT0+WWUsaXNDb2RlOigpPT5v ZSxpc05hbWU6KCk9PmVuLG5hbWU6KCk9PmhlfSk7dmFyIG9lPXM9PmhlLmhhcyhzKSxlbj1zPT5Z ZS5oYXMocyksaGU9bmV3IE1hcChbWyIwIiwiRmlsZSJdLFsiIiwiT2xkRmlsZSJdLFsiMSIsIkxp bmsiXSxbIjIiLCJTeW1ib2xpY0xpbmsiXSxbIjMiLCJDaGFyYWN0ZXJEZXZpY2UiXSxbIjQiLCJC bG9ja0RldmljZSJdLFsiNSIsIkRpcmVjdG9yeSJdLFsiNiIsIkZJRk8iXSxbIjciLCJDb250aWd1 b3VzRmlsZSJdLFsiZyIsIkdsb2JhbEV4dGVuZGVkSGVhZGVyIl0sWyJ4IiwiRXh0ZW5kZWRIZWFk ZXIiXSxbIkEiLCJTb2xhcmlzQUNMIl0sWyJEIiwiR05VRHVtcERpciJdLFsiSSIsIklub2RlIl0s WyJLIiwiTmV4dEZpbGVIYXNMb25nTGlua3BhdGgiXSxbIkwiLCJOZXh0RmlsZUhhc0xvbmdQYXRo Il0sWyJNIiwiQ29udGludWF0aW9uRmlsZSJdLFsiTiIsIk9sZEdudUxvbmdQYXRoIl0sWyJTIiwi U3BhcnNlRmlsZSJdLFsiViIsIlRhcGVWb2x1bWVIZWFkZXIiXSxbIlgiLCJPbGRFeHRlbmRlZEhl YWRlciJdXSksWWU9bmV3IE1hcChBcnJheS5mcm9tKGhlKS5tYXAocz0+W3NbMV0sc1swXV0pKTt2 YXIgRj1jbGFzc3tja3N1bVZhbGlkPSExO25lZWRQYXg9ITE7bnVsbEJsb2NrPSExO2Jsb2NrO3Bh dGg7bW9kZTt1aWQ7Z2lkO3NpemU7Y2tzdW07I3Q9IlVuc3VwcG9ydGVkIjtsaW5rcGF0aDt1bmFt ZTtnbmFtZTtkZXZtYWo9MDtkZXZtaW49MDthdGltZTtjdGltZTttdGltZTtjaGFyc2V0O2NvbW1l bnQ7Y29uc3RydWN0b3IodCxlPTAsaSxyKXtCdWZmZXIuaXNCdWZmZXIodCk/dGhpcy5kZWNvZGUo dCxlfHwwLGkscik6dCYmdGhpcy4jaSh0KX1kZWNvZGUodCxlLGkscil7aWYoZXx8KGU9MCksIXR8 fCEodC5sZW5ndGg+PWUrNTEyKSl0aHJvdyBuZXcgRXJyb3IoIm5lZWQgNTEyIGJ5dGVzIGZvciBo ZWFkZXIiKTt0aGlzLnBhdGg9aT8ucGF0aD8/VHQodCxlLDEwMCksdGhpcy5tb2RlPWk/Lm1vZGU/ P3I/Lm1vZGU/P2F0KHQsZSsxMDAsOCksdGhpcy51aWQ9aT8udWlkPz9yPy51aWQ/P2F0KHQsZSsx MDgsOCksdGhpcy5naWQ9aT8uZ2lkPz9yPy5naWQ/P2F0KHQsZSsxMTYsOCksdGhpcy5zaXplPWk/ LnNpemU/P3I/LnNpemU/P2F0KHQsZSsxMjQsMTIpLHRoaXMubXRpbWU9aT8ubXRpbWU/P3I/Lm10 aW1lPz9CaSh0LGUrMTM2LDEyKSx0aGlzLmNrc3VtPWF0KHQsZSsxNDgsMTIpLHImJnRoaXMuI2ko ciwhMCksaSYmdGhpcy4jaShpKTtsZXQgbj1UdCh0LGUrMTU2LDEpO2lmKG9lKG4pJiYodGhpcy4j dD1ufHwiMCIpLHRoaXMuI3Q9PT0iMCImJnRoaXMucGF0aC5zbGljZSgtMSk9PT0iLyImJih0aGlz LiN0PSI1IiksdGhpcy4jdD09PSI1IiYmKHRoaXMuc2l6ZT0wKSx0aGlzLmxpbmtwYXRoPVR0KHQs ZSsxNTcsMTAwKSx0LnN1YmFycmF5KGUrMjU3LGUrMjY1KS50b1N0cmluZygpPT09InVzdGFyXHgw MDAwIilpZih0aGlzLnVuYW1lPWk/LnVuYW1lPz9yPy51bmFtZT8/VHQodCxlKzI2NSwzMiksdGhp cy5nbmFtZT1pPy5nbmFtZT8/cj8uZ25hbWU/P1R0KHQsZSsyOTcsMzIpLHRoaXMuZGV2bWFqPWk/ LmRldm1haj8/cj8uZGV2bWFqPz9hdCh0LGUrMzI5LDgpPz8wLHRoaXMuZGV2bWluPWk/LmRldm1p bj8/cj8uZGV2bWluPz9hdCh0LGUrMzM3LDgpPz8wLHRbZSs0NzVdIT09MCl7bGV0IGg9VHQodCxl KzM0NSwxNTUpO3RoaXMucGF0aD1oKyIvIit0aGlzLnBhdGh9ZWxzZXtsZXQgaD1UdCh0LGUrMzQ1 LDEzMCk7aCYmKHRoaXMucGF0aD1oKyIvIit0aGlzLnBhdGgpLHRoaXMuYXRpbWU9aT8uYXRpbWU/ P3I/LmF0aW1lPz9CaSh0LGUrNDc2LDEyKSx0aGlzLmN0aW1lPWk/LmN0aW1lPz9yPy5jdGltZT8/ QmkodCxlKzQ4OCwxMil9bGV0IG89MjU2O2ZvcihsZXQgaD1lO2g8ZSsxNDg7aCsrKW8rPXRbaF07 Zm9yKGxldCBoPWUrMTU2O2g8ZSs1MTI7aCsrKW8rPXRbaF07dGhpcy5ja3N1bVZhbGlkPW89PT10 aGlzLmNrc3VtLHRoaXMuY2tzdW09PT12b2lkIDAmJm89PT0yNTYmJih0aGlzLm51bGxCbG9jaz0h MCl9I2kodCxlPSExKXtPYmplY3QuYXNzaWduKHRoaXMsT2JqZWN0LmZyb21FbnRyaWVzKE9iamVj dC5lbnRyaWVzKHQpLmZpbHRlcigoW2kscl0pPT4hKHI9PW51bGx8fGk9PT0icGF0aCImJmV8fGk9 PT0ibGlua3BhdGgiJiZlfHxpPT09Imdsb2JhbCIpKSkpfWVuY29kZSh0LGU9MCl7aWYodHx8KHQ9 dGhpcy5ibG9jaz1CdWZmZXIuYWxsb2MoNTEyKSksdGhpcy4jdD09PSJVbnN1cHBvcnRlZCImJih0 aGlzLiN0PSIwIiksISh0Lmxlbmd0aD49ZSs1MTIpKXRocm93IG5ldyBFcnJvcigibmVlZCA1MTIg Ynl0ZXMgZm9yIGhlYWRlciIpO2xldCBpPXRoaXMuY3RpbWV8fHRoaXMuYXRpbWU/MTMwOjE1NSxy PXNuKHRoaXMucGF0aHx8IiIsaSksbj1yWzBdLG89clsxXTt0aGlzLm5lZWRQYXg9ISFyWzJdLHRo aXMubmVlZFBheD14dCh0LGUsMTAwLG4pfHx0aGlzLm5lZWRQYXgsdGhpcy5uZWVkUGF4PWx0KHQs ZSsxMDAsOCx0aGlzLm1vZGUpfHx0aGlzLm5lZWRQYXgsdGhpcy5uZWVkUGF4PWx0KHQsZSsxMDgs OCx0aGlzLnVpZCl8fHRoaXMubmVlZFBheCx0aGlzLm5lZWRQYXg9bHQodCxlKzExNiw4LHRoaXMu Z2lkKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1sdCh0LGUrMTI0LDEyLHRoaXMuc2l6ZSl8 fHRoaXMubmVlZFBheCx0aGlzLm5lZWRQYXg9UGkodCxlKzEzNiwxMix0aGlzLm10aW1lKXx8dGhp cy5uZWVkUGF4LHRbZSsxNTZdPXRoaXMuI3QuY2hhckNvZGVBdCgwKSx0aGlzLm5lZWRQYXg9eHQo dCxlKzE1NywxMDAsdGhpcy5saW5rcGF0aCl8fHRoaXMubmVlZFBheCx0LndyaXRlKCJ1c3Rhclx4 MDAwMCIsZSsyNTcsOCksdGhpcy5uZWVkUGF4PXh0KHQsZSsyNjUsMzIsdGhpcy51bmFtZSl8fHRo aXMubmVlZFBheCx0aGlzLm5lZWRQYXg9eHQodCxlKzI5NywzMix0aGlzLmduYW1lKXx8dGhpcy5u ZWVkUGF4LHRoaXMubmVlZFBheD1sdCh0LGUrMzI5LDgsdGhpcy5kZXZtYWopfHx0aGlzLm5lZWRQ YXgsdGhpcy5uZWVkUGF4PWx0KHQsZSszMzcsOCx0aGlzLmRldm1pbil8fHRoaXMubmVlZFBheCx0 aGlzLm5lZWRQYXg9eHQodCxlKzM0NSxpLG8pfHx0aGlzLm5lZWRQYXgsdFtlKzQ3NV0hPT0wP3Ro aXMubmVlZFBheD14dCh0LGUrMzQ1LDE1NSxvKXx8dGhpcy5uZWVkUGF4Oih0aGlzLm5lZWRQYXg9 eHQodCxlKzM0NSwxMzAsbyl8fHRoaXMubmVlZFBheCx0aGlzLm5lZWRQYXg9UGkodCxlKzQ3Niwx Mix0aGlzLmF0aW1lKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1QaSh0LGUrNDg4LDEyLHRo aXMuY3RpbWUpfHx0aGlzLm5lZWRQYXgpO2xldCBoPTI1Njtmb3IobGV0IGE9ZTthPGUrMTQ4O2Er KyloKz10W2FdO2ZvcihsZXQgYT1lKzE1NjthPGUrNTEyO2ErKyloKz10W2FdO3JldHVybiB0aGlz LmNrc3VtPWgsbHQodCxlKzE0OCw4LHRoaXMuY2tzdW0pLHRoaXMuY2tzdW1WYWxpZD0hMCx0aGlz Lm5lZWRQYXh9Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy4jdD09PSJVbnN1cHBvcnRlZCI/dGhpcy4j dDpoZS5nZXQodGhpcy4jdCl9Z2V0IHR5cGVLZXkoKXtyZXR1cm4gdGhpcy4jdH1zZXQgdHlwZSh0 KXtsZXQgZT1TdHJpbmcoWWUuZ2V0KHQpKTtpZihvZShlKXx8ZT09PSJVbnN1cHBvcnRlZCIpdGhp cy4jdD1lO2Vsc2UgaWYob2UodCkpdGhpcy4jdD10O2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigi aW52YWxpZCBlbnRyeSB0eXBlOiAiK3QpfX0sc249KHMsdCk9PntsZXQgaT1zLHI9IiIsbixvPVp0 LnBhcnNlKHMpLnJvb3R8fCIuIjtpZihCdWZmZXIuYnl0ZUxlbmd0aChpKTwxMDApbj1baSxyLCEx XTtlbHNle3I9WnQuZGlybmFtZShpKSxpPVp0LmJhc2VuYW1lKGkpO2RvIEJ1ZmZlci5ieXRlTGVu Z3RoKGkpPD0xMDAmJkJ1ZmZlci5ieXRlTGVuZ3RoKHIpPD10P249W2ksciwhMV06QnVmZmVyLmJ5 dGVMZW5ndGgoaSk+MTAwJiZCdWZmZXIuYnl0ZUxlbmd0aChyKTw9dD9uPVtpLnNsaWNlKDAsOTkp LHIsITBdOihpPVp0LmpvaW4oWnQuYmFzZW5hbWUociksaSkscj1adC5kaXJuYW1lKHIpKTt3aGls ZShyIT09byYmbj09PXZvaWQgMCk7bnx8KG49W3Muc2xpY2UoMCw5OSksIiIsITBdKX1yZXR1cm4g bn0sVHQ9KHMsdCxlKT0+cy5zdWJhcnJheSh0LHQrZSkudG9TdHJpbmcoInV0ZjgiKS5yZXBsYWNl KC9cMC4qLywiIiksQmk9KHMsdCxlKT0+cm4oYXQocyx0LGUpKSxybj1zPT5zPT09dm9pZCAwP3Zv aWQgMDpuZXcgRGF0ZShzKjFlMyksYXQ9KHMsdCxlKT0+TnVtYmVyKHNbdF0pJjEyOD9QcyhzLnN1 YmFycmF5KHQsdCtlKSk6b24ocyx0LGUpLG5uPXM9PmlzTmFOKHMpP3ZvaWQgMDpzLG9uPShzLHQs ZSk9Pm5uKHBhcnNlSW50KHMuc3ViYXJyYXkodCx0K2UpLnRvU3RyaW5nKCJ1dGY4IikucmVwbGFj ZSgvXDAuKiQvLCIiKS50cmltKCksOCkpLGhuPXsxMjo4NTg5OTM0NTkxLDg6MjA5NzE1MX0sbHQ9 KHMsdCxlLGkpPT5pPT09dm9pZCAwPyExOmk+aG5bZV18fGk8MD8oQnMoaSxzLnN1YmFycmF5KHQs dCtlKSksITApOihhbihzLHQsZSxpKSwhMSksYW49KHMsdCxlLGkpPT5zLndyaXRlKGxuKGksZSks dCxlLCJhc2NpaSIpLGxuPShzLHQpPT5jbihNYXRoLmZsb29yKHMpLnRvU3RyaW5nKDgpLHQpLGNu PShzLHQpPT4ocy5sZW5ndGg9PT10LTE/czpuZXcgQXJyYXkodC1zLmxlbmd0aC0xKS5qb2luKCIw IikrcysiICIpKyJcMCIsUGk9KHMsdCxlLGkpPT5pPT09dm9pZCAwPyExOmx0KHMsdCxlLGkuZ2V0 VGltZSgpLzFlMyksZm49bmV3IEFycmF5KDE1Nikuam9pbigiXDAiKSx4dD0ocyx0LGUsaSk9Pmk9 PT12b2lkIDA/ITE6KHMud3JpdGUoaStmbix0LGUsInV0ZjgiKSxpLmxlbmd0aCE9PUJ1ZmZlci5i eXRlTGVuZ3RoKGkpfHxpLmxlbmd0aD5lKTtpbXBvcnR7YmFzZW5hbWUgYXMgZG59ZnJvbSJub2Rl OnBhdGgiO3ZhciBjdD1jbGFzcyBze2F0aW1lO210aW1lO2N0aW1lO2NoYXJzZXQ7Y29tbWVudDtn aWQ7dWlkO2duYW1lO3VuYW1lO2xpbmtwYXRoO2Rldjtpbm87bmxpbms7cGF0aDtzaXplO21vZGU7 Z2xvYmFsO2NvbnN0cnVjdG9yKHQsZT0hMSl7dGhpcy5hdGltZT10LmF0aW1lLHRoaXMuY2hhcnNl dD10LmNoYXJzZXQsdGhpcy5jb21tZW50PXQuY29tbWVudCx0aGlzLmN0aW1lPXQuY3RpbWUsdGhp cy5kZXY9dC5kZXYsdGhpcy5naWQ9dC5naWQsdGhpcy5nbG9iYWw9ZSx0aGlzLmduYW1lPXQuZ25h bWUsdGhpcy5pbm89dC5pbm8sdGhpcy5saW5rcGF0aD10LmxpbmtwYXRoLHRoaXMubXRpbWU9dC5t dGltZSx0aGlzLm5saW5rPXQubmxpbmssdGhpcy5wYXRoPXQucGF0aCx0aGlzLnNpemU9dC5zaXpl LHRoaXMudWlkPXQudWlkLHRoaXMudW5hbWU9dC51bmFtZX1lbmNvZGUoKXtsZXQgdD10aGlzLmVu Y29kZUJvZHkoKTtpZih0PT09IiIpcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKTtsZXQgZT1C dWZmZXIuYnl0ZUxlbmd0aCh0KSxpPTUxMipNYXRoLmNlaWwoMStlLzUxMikscj1CdWZmZXIuYWxs b2NVbnNhZmUoaSk7Zm9yKGxldCBuPTA7bjw1MTI7bisrKXJbbl09MDtuZXcgRih7cGF0aDooIlBh eEhlYWRlci8iK2RuKHRoaXMucGF0aD8/IiIpKS5zbGljZSgwLDk5KSxtb2RlOnRoaXMubW9kZXx8 NDIwLHVpZDp0aGlzLnVpZCxnaWQ6dGhpcy5naWQsc2l6ZTplLG10aW1lOnRoaXMubXRpbWUsdHlw ZTp0aGlzLmdsb2JhbD8iR2xvYmFsRXh0ZW5kZWRIZWFkZXIiOiJFeHRlbmRlZEhlYWRlciIsbGlu a3BhdGg6IiIsdW5hbWU6dGhpcy51bmFtZXx8IiIsZ25hbWU6dGhpcy5nbmFtZXx8IiIsZGV2bWFq OjAsZGV2bWluOjAsYXRpbWU6dGhpcy5hdGltZSxjdGltZTp0aGlzLmN0aW1lfSkuZW5jb2RlKHIp LHIud3JpdGUodCw1MTIsZSwidXRmOCIpO2ZvcihsZXQgbj1lKzUxMjtuPHIubGVuZ3RoO24rKyly W25dPTA7cmV0dXJuIHJ9ZW5jb2RlQm9keSgpe3JldHVybiB0aGlzLmVuY29kZUZpZWxkKCJwYXRo IikrdGhpcy5lbmNvZGVGaWVsZCgiY3RpbWUiKSt0aGlzLmVuY29kZUZpZWxkKCJhdGltZSIpK3Ro aXMuZW5jb2RlRmllbGQoImRldiIpK3RoaXMuZW5jb2RlRmllbGQoImlubyIpK3RoaXMuZW5jb2Rl RmllbGQoIm5saW5rIikrdGhpcy5lbmNvZGVGaWVsZCgiY2hhcnNldCIpK3RoaXMuZW5jb2RlRmll bGQoImNvbW1lbnQiKSt0aGlzLmVuY29kZUZpZWxkKCJnaWQiKSt0aGlzLmVuY29kZUZpZWxkKCJn bmFtZSIpK3RoaXMuZW5jb2RlRmllbGQoImxpbmtwYXRoIikrdGhpcy5lbmNvZGVGaWVsZCgibXRp bWUiKSt0aGlzLmVuY29kZUZpZWxkKCJzaXplIikrdGhpcy5lbmNvZGVGaWVsZCgidWlkIikrdGhp cy5lbmNvZGVGaWVsZCgidW5hbWUiKX1lbmNvZGVGaWVsZCh0KXtpZih0aGlzW3RdPT09dm9pZCAw KXJldHVybiIiO2xldCBlPXRoaXNbdF0saT1lIGluc3RhbmNlb2YgRGF0ZT9lLmdldFRpbWUoKS8x ZTM6ZSxyPSIgIisodD09PSJkZXYifHx0PT09ImlubyJ8fHQ9PT0ibmxpbmsiPyJTQ0hJTFkuIjoi IikrdCsiPSIraStgCistYCxuPUJ1ZmZlci5ieXRlTGVuZ3RoKHIpLG89TWF0aC5mbG9vcihNYXRo LmxvZyhuKS9NYXRoLmxvZygxMCkpKzE7cmV0dXJuIG4rbz49TWF0aC5wb3coMTAsbykmJihvKz0x KSxvK24rcn1zdGF0aWMgcGFyc2UodCxlLGk9ITEpe3JldHVybiBuZXcgcyh1bihtbih0KSxlKSxp KX19LHVuPShzLHQpPT50P09iamVjdC5hc3NpZ24oe30sdCxzKTpzLG1uPXM9PnMucmVwbGFjZSgv XG4kLywiIikuc3BsaXQoYAorLWApLnJlZHVjZShwbixPYmplY3QuY3JlYXRlKG51bGwpKSxwbj0o cyx0KT0+e2xldCBlPXBhcnNlSW50KHQsMTApO2lmKGUhPT1CdWZmZXIuYnl0ZUxlbmd0aCh0KSsx KXJldHVybiBzO3Q9dC5zbGljZSgoZSsiICIpLmxlbmd0aCk7bGV0IGk9dC5zcGxpdCgiPSIpLHI9 aS5zaGlmdCgpO2lmKCFyKXJldHVybiBzO2xldCBuPXIucmVwbGFjZSgvXlNDSElMWVwuKGRldnxp bm98bmxpbmspLywiJDEiKSxvPWkuam9pbigiPSIpO3JldHVybiBzW25dPS9eKFtBLVpdK1wuKT8o W21hY118YmlydGh8Y3JlYXRpb24pdGltZSQvLnRlc3Qobik/bmV3IERhdGUoTnVtYmVyKG8pKjFl Myk6L15bMC05XSskLy50ZXN0KG8pPytvOm8sc307dmFyIEVuPXByb2Nlc3MuZW52LlRFU1RJTkdf VEFSX0ZBS0VfUExBVEZPUk18fHByb2Nlc3MucGxhdGZvcm0sZj1FbiE9PSJ3aW4zMiI/cz0+czpz PT5zJiZzLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgWXQ9Y2xhc3MgZXh0ZW5kcyBBe2V4dGVuZGVk O2dsb2JhbEV4dGVuZGVkO2hlYWRlcjtzdGFydEJsb2NrU2l6ZTtibG9ja1JlbWFpbjtyZW1haW47 dHlwZTttZXRhPSExO2lnbm9yZT0hMTtwYXRoO21vZGU7dWlkO2dpZDt1bmFtZTtnbmFtZTtzaXpl PTA7bXRpbWU7YXRpbWU7Y3RpbWU7bGlua3BhdGg7ZGV2O2lubztubGluaztpbnZhbGlkPSExO2Fi c29sdXRlO3Vuc3VwcG9ydGVkPSExO2NvbnN0cnVjdG9yKHQsZSxpKXtzd2l0Y2goc3VwZXIoe30p LHRoaXMucGF1c2UoKSx0aGlzLmV4dGVuZGVkPWUsdGhpcy5nbG9iYWxFeHRlbmRlZD1pLHRoaXMu aGVhZGVyPXQsdGhpcy5yZW1haW49dC5zaXplPz8wLHRoaXMuc3RhcnRCbG9ja1NpemU9NTEyKk1h dGguY2VpbCh0aGlzLnJlbWFpbi81MTIpLHRoaXMuYmxvY2tSZW1haW49dGhpcy5zdGFydEJsb2Nr U2l6ZSx0aGlzLnR5cGU9dC50eXBlLHRoaXMudHlwZSl7Y2FzZSJGaWxlIjpjYXNlIk9sZEZpbGUi OmNhc2UiTGluayI6Y2FzZSJTeW1ib2xpY0xpbmsiOmNhc2UiQ2hhcmFjdGVyRGV2aWNlIjpjYXNl IkJsb2NrRGV2aWNlIjpjYXNlIkRpcmVjdG9yeSI6Y2FzZSJGSUZPIjpjYXNlIkNvbnRpZ3VvdXNG aWxlIjpjYXNlIkdOVUR1bXBEaXIiOmJyZWFrO2Nhc2UiTmV4dEZpbGVIYXNMb25nTGlua3BhdGgi OmNhc2UiTmV4dEZpbGVIYXNMb25nUGF0aCI6Y2FzZSJPbGRHbnVMb25nUGF0aCI6Y2FzZSJHbG9i YWxFeHRlbmRlZEhlYWRlciI6Y2FzZSJFeHRlbmRlZEhlYWRlciI6Y2FzZSJPbGRFeHRlbmRlZEhl YWRlciI6dGhpcy5tZXRhPSEwO2JyZWFrO2RlZmF1bHQ6dGhpcy5pZ25vcmU9ITB9aWYoIXQucGF0 aCl0aHJvdyBuZXcgRXJyb3IoIm5vIHBhdGggcHJvdmlkZWQgZm9yIHRhci5SZWFkRW50cnkiKTt0 aGlzLnBhdGg9Zih0LnBhdGgpLHRoaXMubW9kZT10Lm1vZGUsdGhpcy5tb2RlJiYodGhpcy5tb2Rl PXRoaXMubW9kZSY0MDk1KSx0aGlzLnVpZD10LnVpZCx0aGlzLmdpZD10LmdpZCx0aGlzLnVuYW1l PXQudW5hbWUsdGhpcy5nbmFtZT10LmduYW1lLHRoaXMuc2l6ZT10aGlzLnJlbWFpbix0aGlzLm10 aW1lPXQubXRpbWUsdGhpcy5hdGltZT10LmF0aW1lLHRoaXMuY3RpbWU9dC5jdGltZSx0aGlzLmxp bmtwYXRoPXQubGlua3BhdGg/Zih0LmxpbmtwYXRoKTp2b2lkIDAsdGhpcy51bmFtZT10LnVuYW1l LHRoaXMuZ25hbWU9dC5nbmFtZSxlJiZ0aGlzLiN0KGUpLGkmJnRoaXMuI3QoaSwhMCl9d3JpdGUo dCl7bGV0IGU9dC5sZW5ndGg7aWYoZT50aGlzLmJsb2NrUmVtYWluKXRocm93IG5ldyBFcnJvcigi d3JpdGluZyBtb3JlIHRvIGVudHJ5IHRoYW4gaXMgYXBwcm9wcmlhdGUiKTtsZXQgaT10aGlzLnJl bWFpbixyPXRoaXMuYmxvY2tSZW1haW47cmV0dXJuIHRoaXMucmVtYWluPU1hdGgubWF4KDAsaS1l KSx0aGlzLmJsb2NrUmVtYWluPU1hdGgubWF4KDAsci1lKSx0aGlzLmlnbm9yZT8hMDppPj1lP3N1 cGVyLndyaXRlKHQpOnN1cGVyLndyaXRlKHQuc3ViYXJyYXkoMCxpKSl9I3QodCxlPSExKXt0LnBh dGgmJih0LnBhdGg9Zih0LnBhdGgpKSx0LmxpbmtwYXRoJiYodC5saW5rcGF0aD1mKHQubGlua3Bh dGgpKSxPYmplY3QuYXNzaWduKHRoaXMsT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVz KHQpLmZpbHRlcigoW2kscl0pPT4hKHI9PW51bGx8fGk9PT0icGF0aCImJmUpKSkpfX07dmFyIEx0 PShzLHQsZSxpPXt9KT0+e3MuZmlsZSYmKGkuZmlsZT1zLmZpbGUpLHMuY3dkJiYoaS5jd2Q9cy5j d2QpLGkuY29kZT1lIGluc3RhbmNlb2YgRXJyb3ImJmUuY29kZXx8dCxpLnRhckNvZGU9dCwhcy5z dHJpY3QmJmkucmVjb3ZlcmFibGUhPT0hMT8oZSBpbnN0YW5jZW9mIEVycm9yJiYoaT1PYmplY3Qu YXNzaWduKGUsaSksZT1lLm1lc3NhZ2UpLHMuZW1pdCgid2FybiIsdCxlLGkpKTplIGluc3RhbmNl b2YgRXJyb3I/cy5lbWl0KCJlcnJvciIsT2JqZWN0LmFzc2lnbihlLGkpKTpzLmVtaXQoImVycm9y IixPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgJHt0fTogJHtlfWApLGkpKX07dmFyIFNuPTEwMjQq MTAyNCxHaT1CdWZmZXIuZnJvbShbMzEsMTM5XSksWmk9QnVmZmVyLmZyb20oWzQwLDE4MSw0Nywy NTNdKSx5bj1NYXRoLm1heChHaS5sZW5ndGgsWmkubGVuZ3RoKSxCPVN5bWJvbCgic3RhdGUiKSxO dD1TeW1ib2woIndyaXRlRW50cnkiKSxldD1TeW1ib2woInJlYWRFbnRyeSIpLHppPVN5bWJvbCgi bmV4dEVudHJ5IiksSHM9U3ltYm9sKCJwcm9jZXNzRW50cnkiKSxWPVN5bWJvbCgiZXh0ZW5kZWRI ZWFkZXIiKSxhZT1TeW1ib2woImdsb2JhbEV4dGVuZGVkSGVhZGVyIiksZnQ9U3ltYm9sKCJtZXRh IiksV3M9U3ltYm9sKCJlbWl0TWV0YSIpLHA9U3ltYm9sKCJidWZmZXIiKSxpdD1TeW1ib2woInF1 ZXVlIiksZHQ9U3ltYm9sKCJlbmRlZCIpLFVpPVN5bWJvbCgiZW1pdHRlZEVuZCIpLER0PVN5bWJv bCgiZW1pdCIpLHk9U3ltYm9sKCJ1bnppcCIpLEtlPVN5bWJvbCgiY29uc3VtZUNodW5rIiksVmU9 U3ltYm9sKCJjb25zdW1lQ2h1bmtTdWIiKSxIaT1TeW1ib2woImNvbnN1bWVCb2R5IiksR3M9U3lt Ym9sKCJjb25zdW1lTWV0YSIpLFpzPVN5bWJvbCgiY29uc3VtZUhlYWRlciIpLGxlPVN5bWJvbCgi Y29uc3VtaW5nIiksV2k9U3ltYm9sKCJidWZmZXJDb25jYXQiKSwkZT1TeW1ib2woIm1heWJlRW5k IiksS3Q9U3ltYm9sKCJ3cml0aW5nIiksdXQ9U3ltYm9sKCJhYm9ydGVkIiksWGU9U3ltYm9sKCJv bkRvbmUiKSxBdD1TeW1ib2woInNhd1ZhbGlkRW50cnkiKSxxZT1TeW1ib2woInNhd051bGxCbG9j ayIpLGplPVN5bWJvbCgic2F3RU9GIiksWXM9U3ltYm9sKCJjbG9zZVN0cmVhbSIpLFJuPSgpPT4h MCxzdD1jbGFzcyBleHRlbmRzIHdue2ZpbGU7c3RyaWN0O21heE1ldGFFbnRyeVNpemU7ZmlsdGVy O2Jyb3RsaTt6c3RkO3dyaXRhYmxlPSEwO3JlYWRhYmxlPSExO1tpdF09W107W3BdO1tldF07W050 XTtbQl09ImJlZ2luIjtbZnRdPSIiO1tWXTtbYWVdO1tkdF09ITE7W3ldO1t1dF09ITE7W0F0XTtb cWVdPSExO1tqZV09ITE7W0t0XT0hMTtbbGVdPSExO1tVaV09ITE7Y29uc3RydWN0b3IodD17fSl7 c3VwZXIoKSx0aGlzLmZpbGU9dC5maWxlfHwiIix0aGlzLm9uKFhlLCgpPT57KHRoaXNbQl09PT0i YmVnaW4ifHx0aGlzW0F0XT09PSExKSYmdGhpcy53YXJuKCJUQVJfQkFEX0FSQ0hJVkUiLCJVbnJl Y29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQiKX0pLHQub25kb25lP3RoaXMub24oWGUsdC5vbmRvbmUp OnRoaXMub24oWGUsKCk9Pnt0aGlzLmVtaXQoInByZWZpbmlzaCIpLHRoaXMuZW1pdCgiZmluaXNo IiksdGhpcy5lbWl0KCJlbmQiKX0pLHRoaXMuc3RyaWN0PSEhdC5zdHJpY3QsdGhpcy5tYXhNZXRh RW50cnlTaXplPXQubWF4TWV0YUVudHJ5U2l6ZXx8U24sdGhpcy5maWx0ZXI9dHlwZW9mIHQuZmls dGVyPT0iZnVuY3Rpb24iP3QuZmlsdGVyOlJuO2xldCBlPXQuZmlsZSYmKHQuZmlsZS5lbmRzV2l0 aCgiLnRhci5iciIpfHx0LmZpbGUuZW5kc1dpdGgoIi50YnIiKSk7dGhpcy5icm90bGk9ISh0Lmd6 aXB8fHQuenN0ZCkmJnQuYnJvdGxpIT09dm9pZCAwP3QuYnJvdGxpOmU/dm9pZCAwOiExO2xldCBp PXQuZmlsZSYmKHQuZmlsZS5lbmRzV2l0aCgiLnRhci56c3QiKXx8dC5maWxlLmVuZHNXaXRoKCIu dHpzdCIpKTt0aGlzLnpzdGQ9ISh0Lmd6aXB8fHQuYnJvdGxpKSYmdC56c3RkIT09dm9pZCAwP3Qu enN0ZDppPyEwOnZvaWQgMCx0aGlzLm9uKCJlbmQiLCgpPT50aGlzW1lzXSgpKSx0eXBlb2YgdC5v bndhcm49PSJmdW5jdGlvbiImJnRoaXMub24oIndhcm4iLHQub253YXJuKSx0eXBlb2YgdC5vblJl YWRFbnRyeT09ImZ1bmN0aW9uIiYmdGhpcy5vbigiZW50cnkiLHQub25SZWFkRW50cnkpfXdhcm4o dCxlLGk9e30pe0x0KHRoaXMsdCxlLGkpfVtac10odCxlKXt0aGlzW0F0XT09PXZvaWQgMCYmKHRo aXNbQXRdPSExKTtsZXQgaTt0cnl7aT1uZXcgRih0LGUsdGhpc1tWXSx0aGlzW2FlXSl9Y2F0Y2go cil7cmV0dXJuIHRoaXMud2FybigiVEFSX0VOVFJZX0lOVkFMSUQiLHIpfWlmKGkubnVsbEJsb2Nr KXRoaXNbcWVdPyh0aGlzW2plXT0hMCx0aGlzW0JdPT09ImJlZ2luIiYmKHRoaXNbQl09ImhlYWRl ciIpLHRoaXNbRHRdKCJlb2YiKSk6KHRoaXNbcWVdPSEwLHRoaXNbRHRdKCJudWxsQmxvY2siKSk7 ZWxzZSBpZih0aGlzW3FlXT0hMSwhaS5ja3N1bVZhbGlkKXRoaXMud2FybigiVEFSX0VOVFJZX0lO VkFMSUQiLCJjaGVja3N1bSBmYWlsdXJlIix7aGVhZGVyOml9KTtlbHNlIGlmKCFpLnBhdGgpdGhp cy53YXJuKCJUQVJfRU5UUllfSU5WQUxJRCIsInBhdGggaXMgcmVxdWlyZWQiLHtoZWFkZXI6aX0p O2Vsc2V7bGV0IHI9aS50eXBlO2lmKC9eKFN5bWJvbGljKT9MaW5rJC8udGVzdChyKSYmIWkubGlu a3BhdGgpdGhpcy53YXJuKCJUQVJfRU5UUllfSU5WQUxJRCIsImxpbmtwYXRoIHJlcXVpcmVkIix7 aGVhZGVyOml9KTtlbHNlIGlmKCEvXihTeW1ib2xpYyk/TGluayQvLnRlc3QocikmJiEvXihHbG9i YWwpP0V4dGVuZGVkSGVhZGVyJC8udGVzdChyKSYmaS5saW5rcGF0aCl0aGlzLndhcm4oIlRBUl9F TlRSWV9JTlZBTElEIiwibGlua3BhdGggZm9yYmlkZGVuIix7aGVhZGVyOml9KTtlbHNle2xldCBu PXRoaXNbTnRdPW5ldyBZdChpLHRoaXNbVl0sdGhpc1thZV0pO2lmKCF0aGlzW0F0XSlpZihuLnJl bWFpbil7bGV0IG89KCk9PntuLmludmFsaWR8fCh0aGlzW0F0XT0hMCl9O24ub24oImVuZCIsbyl9 ZWxzZSB0aGlzW0F0XT0hMDtuLm1ldGE/bi5zaXplPnRoaXMubWF4TWV0YUVudHJ5U2l6ZT8obi5p Z25vcmU9ITAsdGhpc1tEdF0oImlnbm9yZWRFbnRyeSIsbiksdGhpc1tCXT0iaWdub3JlIixuLnJl c3VtZSgpKTpuLnNpemU+MCYmKHRoaXNbZnRdPSIiLG4ub24oImRhdGEiLG89PnRoaXNbZnRdKz1v KSx0aGlzW0JdPSJtZXRhIik6KHRoaXNbVl09dm9pZCAwLG4uaWdub3JlPW4uaWdub3JlfHwhdGhp cy5maWx0ZXIobi5wYXRoLG4pLG4uaWdub3JlPyh0aGlzW0R0XSgiaWdub3JlZEVudHJ5IixuKSx0 aGlzW0JdPW4ucmVtYWluPyJpZ25vcmUiOiJoZWFkZXIiLG4ucmVzdW1lKCkpOihuLnJlbWFpbj90 aGlzW0JdPSJib2R5IjoodGhpc1tCXT0iaGVhZGVyIixuLmVuZCgpKSx0aGlzW2V0XT90aGlzW2l0 XS5wdXNoKG4pOih0aGlzW2l0XS5wdXNoKG4pLHRoaXNbemldKCkpKSl9fX1bWXNdKCl7cXVldWVN aWNyb3Rhc2soKCk9PnRoaXMuZW1pdCgiY2xvc2UiKSl9W0hzXSh0KXtsZXQgZT0hMDtpZighdCl0 aGlzW2V0XT12b2lkIDAsZT0hMTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe2xldFtpLC4uLnJd PXQ7dGhpcy5lbWl0KGksLi4ucil9ZWxzZSB0aGlzW2V0XT10LHRoaXMuZW1pdCgiZW50cnkiLHQp LHQuZW1pdHRlZEVuZHx8KHQub24oImVuZCIsKCk9PnRoaXNbemldKCkpLGU9ITEpO3JldHVybiBl fVt6aV0oKXtkbzt3aGlsZSh0aGlzW0hzXSh0aGlzW2l0XS5zaGlmdCgpKSk7aWYoIXRoaXNbaXRd Lmxlbmd0aCl7bGV0IHQ9dGhpc1tldF07IXR8fHQuZmxvd2luZ3x8dC5zaXplPT09dC5yZW1haW4/ dGhpc1tLdF18fHRoaXMuZW1pdCgiZHJhaW4iKTp0Lm9uY2UoImRyYWluIiwoKT0+dGhpcy5lbWl0 KCJkcmFpbiIpKX19W0hpXSh0LGUpe2xldCBpPXRoaXNbTnRdO2lmKCFpKXRocm93IG5ldyBFcnJv cigiYXR0ZW1wdCB0byBjb25zdW1lIGJvZHkgd2l0aG91dCBlbnRyeT8/Iik7bGV0IHI9aS5ibG9j a1JlbWFpbj8/MCxuPXI+PXQubGVuZ3RoJiZlPT09MD90OnQuc3ViYXJyYXkoZSxlK3IpO3JldHVy biBpLndyaXRlKG4pLGkuYmxvY2tSZW1haW58fCh0aGlzW0JdPSJoZWFkZXIiLHRoaXNbTnRdPXZv aWQgMCxpLmVuZCgpKSxuLmxlbmd0aH1bR3NdKHQsZSl7bGV0IGk9dGhpc1tOdF0scj10aGlzW0hp XSh0LGUpO3JldHVybiF0aGlzW050XSYmaSYmdGhpc1tXc10oaSkscn1bRHRdKHQsZSxpKXshdGhp c1tpdF0ubGVuZ3RoJiYhdGhpc1tldF0/dGhpcy5lbWl0KHQsZSxpKTp0aGlzW2l0XS5wdXNoKFt0 LGUsaV0pfVtXc10odCl7c3dpdGNoKHRoaXNbRHRdKCJtZXRhIix0aGlzW2Z0XSksdC50eXBlKXtj YXNlIkV4dGVuZGVkSGVhZGVyIjpjYXNlIk9sZEV4dGVuZGVkSGVhZGVyIjp0aGlzW1ZdPWN0LnBh cnNlKHRoaXNbZnRdLHRoaXNbVl0sITEpO2JyZWFrO2Nhc2UiR2xvYmFsRXh0ZW5kZWRIZWFkZXIi OnRoaXNbYWVdPWN0LnBhcnNlKHRoaXNbZnRdLHRoaXNbYWVdLCEwKTticmVhaztjYXNlIk5leHRG aWxlSGFzTG9uZ1BhdGgiOmNhc2UiT2xkR251TG9uZ1BhdGgiOntsZXQgZT10aGlzW1ZdPz9PYmpl Y3QuY3JlYXRlKG51bGwpO3RoaXNbVl09ZSxlLnBhdGg9dGhpc1tmdF0ucmVwbGFjZSgvXDAuKi8s IiIpO2JyZWFrfWNhc2UiTmV4dEZpbGVIYXNMb25nTGlua3BhdGgiOntsZXQgZT10aGlzW1ZdfHxP YmplY3QuY3JlYXRlKG51bGwpO3RoaXNbVl09ZSxlLmxpbmtwYXRoPXRoaXNbZnRdLnJlcGxhY2Uo L1wwLiovLCIiKTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBtZXRhOiAi K3QudHlwZSl9fWFib3J0KHQpe3RoaXNbdXRdPSEwLHRoaXMuZW1pdCgiYWJvcnQiLHQpLHRoaXMu d2FybigiVEFSX0FCT1JUIix0LHtyZWNvdmVyYWJsZTohMX0pfXdyaXRlKHQsZSxpKXtpZih0eXBl b2YgZT09ImZ1bmN0aW9uIiYmKGk9ZSxlPXZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmciJiYodD1C dWZmZXIuZnJvbSh0LHR5cGVvZiBlPT0ic3RyaW5nIj9lOiJ1dGY4IikpLHRoaXNbdXRdKXJldHVy biBpPy4oKSwhMTtpZigodGhpc1t5XT09PXZvaWQgMHx8dGhpcy5icm90bGk9PT12b2lkIDAmJnRo aXNbeV09PT0hMSkmJnQpe2lmKHRoaXNbcF0mJih0PUJ1ZmZlci5jb25jYXQoW3RoaXNbcF0sdF0p LHRoaXNbcF09dm9pZCAwKSx0Lmxlbmd0aDx5bilyZXR1cm4gdGhpc1twXT10LGk/LigpLCEwO2Zv cihsZXQgYT0wO3RoaXNbeV09PT12b2lkIDAmJmE8R2kubGVuZ3RoO2ErKyl0W2FdIT09R2lbYV0m Jih0aGlzW3ldPSExKTtsZXQgbz0hMTtpZih0aGlzW3ldPT09ITEmJnRoaXMuenN0ZCE9PSExKXtv PSEwO2ZvcihsZXQgYT0wO2E8WmkubGVuZ3RoO2ErKylpZih0W2FdIT09WmlbYV0pe289ITE7YnJl YWt9fWxldCBoPXRoaXMuYnJvdGxpPT09dm9pZCAwJiYhbztpZih0aGlzW3ldPT09ITEmJmgpaWYo dC5sZW5ndGg8NTEyKWlmKHRoaXNbZHRdKXRoaXMuYnJvdGxpPSEwO2Vsc2UgcmV0dXJuIHRoaXNb cF09dCxpPy4oKSwhMDtlbHNlIHRyeXtuZXcgRih0LnN1YmFycmF5KDAsNTEyKSksdGhpcy5icm90 bGk9ITF9Y2F0Y2h7dGhpcy5icm90bGk9ITB9aWYodGhpc1t5XT09PXZvaWQgMHx8dGhpc1t5XT09 PSExJiYodGhpcy5icm90bGl8fG8pKXtsZXQgYT10aGlzW2R0XTt0aGlzW2R0XT0hMSx0aGlzW3ld PXRoaXNbeV09PT12b2lkIDA/bmV3IFBlKHt9KTpvP25ldyBaZSh7fSk6bmV3IEhlKHt9KSx0aGlz W3ldLm9uKCJkYXRhIixjPT50aGlzW0tlXShjKSksdGhpc1t5XS5vbigiZXJyb3IiLGM9PnRoaXMu YWJvcnQoYykpLHRoaXNbeV0ub24oImVuZCIsKCk9Pnt0aGlzW2R0XT0hMCx0aGlzW0tlXSgpfSks dGhpc1tLdF09ITA7bGV0IGw9ISF0aGlzW3ldW2E/ImVuZCI6IndyaXRlIl0odCk7cmV0dXJuIHRo aXNbS3RdPSExLGk/LigpLGx9fXRoaXNbS3RdPSEwLHRoaXNbeV0/dGhpc1t5XS53cml0ZSh0KTp0 aGlzW0tlXSh0KSx0aGlzW0t0XT0hMTtsZXQgbj10aGlzW2l0XS5sZW5ndGg/ITE6dGhpc1tldF0/ dGhpc1tldF0uZmxvd2luZzohMDtyZXR1cm4hbiYmIXRoaXNbaXRdLmxlbmd0aCYmdGhpc1tldF0/ Lm9uY2UoImRyYWluIiwoKT0+dGhpcy5lbWl0KCJkcmFpbiIpKSxpPy4oKSxufVtXaV0odCl7dCYm IXRoaXNbdXRdJiYodGhpc1twXT10aGlzW3BdP0J1ZmZlci5jb25jYXQoW3RoaXNbcF0sdF0pOnQp fVskZV0oKXtpZih0aGlzW2R0XSYmIXRoaXNbVWldJiYhdGhpc1t1dF0mJiF0aGlzW2xlXSl7dGhp c1tVaV09ITA7bGV0IHQ9dGhpc1tOdF07aWYodCYmdC5ibG9ja1JlbWFpbil7bGV0IGU9dGhpc1tw XT90aGlzW3BdLmxlbmd0aDowO3RoaXMud2FybigiVEFSX0JBRF9BUkNISVZFIixgVHJ1bmNhdGVk IGlucHV0IChuZWVkZWQgJHt0LmJsb2NrUmVtYWlufSBtb3JlIGJ5dGVzLCBvbmx5ICR7ZX0gYXZh aWxhYmxlKWAse2VudHJ5OnR9KSx0aGlzW3BdJiZ0LndyaXRlKHRoaXNbcF0pLHQuZW5kKCl9dGhp c1tEdF0oWGUpfX1bS2VdKHQpe2lmKHRoaXNbbGVdJiZ0KXRoaXNbV2ldKHQpO2Vsc2UgaWYoIXQm JiF0aGlzW3BdKXRoaXNbJGVdKCk7ZWxzZSBpZih0KXtpZih0aGlzW2xlXT0hMCx0aGlzW3BdKXt0 aGlzW1dpXSh0KTtsZXQgZT10aGlzW3BdO3RoaXNbcF09dm9pZCAwLHRoaXNbVmVdKGUpfWVsc2Ug dGhpc1tWZV0odCk7Zm9yKDt0aGlzW3BdJiZ0aGlzW3BdPy5sZW5ndGg+PTUxMiYmIXRoaXNbdXRd JiYhdGhpc1tqZV07KXtsZXQgZT10aGlzW3BdO3RoaXNbcF09dm9pZCAwLHRoaXNbVmVdKGUpfXRo aXNbbGVdPSExfSghdGhpc1twXXx8dGhpc1tkdF0pJiZ0aGlzWyRlXSgpfVtWZV0odCl7bGV0IGU9 MCxpPXQubGVuZ3RoO2Zvcig7ZSs1MTI8PWkmJiF0aGlzW3V0XSYmIXRoaXNbamVdOylzd2l0Y2go dGhpc1tCXSl7Y2FzZSJiZWdpbiI6Y2FzZSJoZWFkZXIiOnRoaXNbWnNdKHQsZSksZSs9NTEyO2Jy ZWFrO2Nhc2UiaWdub3JlIjpjYXNlImJvZHkiOmUrPXRoaXNbSGldKHQsZSk7YnJlYWs7Y2FzZSJt ZXRhIjplKz10aGlzW0dzXSh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZh bGlkIHN0YXRlOiAiK3RoaXNbQl0pfWU8aSYmKHRoaXNbcF0/dGhpc1twXT1CdWZmZXIuY29uY2F0 KFt0LnN1YmFycmF5KGUpLHRoaXNbcF1dKTp0aGlzW3BdPXQuc3ViYXJyYXkoZSkpfWVuZCh0LGUs aSl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iJiYoaT10LGU9dm9pZCAwLHQ9dm9pZCAwKSx0 eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGk9ZSxlPXZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmciJiYo dD1CdWZmZXIuZnJvbSh0LGUpKSxpJiZ0aGlzLm9uY2UoImZpbmlzaCIsaSksdGhpc1t1dF18fCh0 aGlzW3ldPyh0JiZ0aGlzW3ldLndyaXRlKHQpLHRoaXNbeV0uZW5kKCkpOih0aGlzW2R0XT0hMCwo dGhpcy5icm90bGk9PT12b2lkIDB8fHRoaXMuenN0ZD09PXZvaWQgMCkmJih0PXR8fEJ1ZmZlci5h bGxvYygwKSksdCYmdGhpcy53cml0ZSh0KSx0aGlzWyRlXSgpKSksdGhpc319O3ZhciBtdD1zPT57 bGV0IHQ9cy5sZW5ndGgtMSxlPS0xO2Zvcig7dD4tMSYmcy5jaGFyQXQodCk9PT0iLyI7KWU9dCx0 LS07cmV0dXJuIGU9PT0tMT9zOnMuc2xpY2UoMCxlKX07dmFyIF9uPXM9PntsZXQgdD1zLm9uUmVh ZEVudHJ5O3Mub25SZWFkRW50cnk9dD9lPT57dChlKSxlLnJlc3VtZSgpfTplPT5lLnJlc3VtZSgp fSxZaT0ocyx0KT0+e2xldCBlPW5ldyBNYXAodC5tYXAobj0+W210KG4pLCEwXSkpLGk9cy5maWx0 ZXIscj0obixvPSIiKT0+e2xldCBoPW98fGduKG4pLnJvb3R8fCIuIixhO2lmKG49PT1oKWE9ITE7 ZWxzZXtsZXQgbD1lLmdldChuKTtsIT09dm9pZCAwP2E9bDphPXIoYm4obiksaCl9cmV0dXJuIGUu c2V0KG4sYSksYX07cy5maWx0ZXI9aT8obixvKT0+aShuLG8pJiZyKG10KG4pKTpuPT5yKG10KG4p KX0sT249cz0+e2xldCB0PW5ldyBzdChzKSxlPXMuZmlsZSxpO3RyeXtpPVZ0Lm9wZW5TeW5jKGUs InIiKTtsZXQgcj1WdC5mc3RhdFN5bmMoaSksbj1zLm1heFJlYWRTaXplfHwxNioxMDI0KjEwMjQ7 aWYoci5zaXplPG4pe2xldCBvPUJ1ZmZlci5hbGxvY1Vuc2FmZShyLnNpemUpLGg9VnQucmVhZFN5 bmMoaSxvLDAsci5zaXplLDApO3QuZW5kKGg9PT1vLmJ5dGVMZW5ndGg/bzpvLnN1YmFycmF5KDAs aCkpfWVsc2V7bGV0IG89MCxoPUJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtmb3IoO288ci5zaXplOyl7 bGV0IGE9VnQucmVhZFN5bmMoaSxoLDAsbixvKTtpZihhPT09MClicmVhaztvKz1hLHQud3JpdGUo aC5zdWJhcnJheSgwLGEpKX10LmVuZCgpfX1maW5hbGx5e2lmKHR5cGVvZiBpPT0ibnVtYmVyIil0 cnl7VnQuY2xvc2VTeW5jKGkpfWNhdGNoe319fSxUbj0ocyx0KT0+e2xldCBlPW5ldyBzdChzKSxp PXMubWF4UmVhZFNpemV8fDE2KjEwMjQqMTAyNCxyPXMuZmlsZTtyZXR1cm4gbmV3IFByb21pc2Uo KG8saCk9PntlLm9uKCJlcnJvciIsaCksZS5vbigiZW5kIixvKSxWdC5zdGF0KHIsKGEsbCk9Pntp ZihhKWgoYSk7ZWxzZXtsZXQgYz1uZXcgZ3Qocix7cmVhZFNpemU6aSxzaXplOmwuc2l6ZX0pO2Mu b24oImVycm9yIixoKSxjLnBpcGUoZSl9fSl9KX0sSXQ9SyhPbixUbixzPT5uZXcgc3Qocykscz0+ bmV3IHN0KHMpLChzLHQpPT57dD8ubGVuZ3RoJiZZaShzLHQpLHMubm9SZXN1bWV8fF9uKHMpfSk7 aW1wb3J0IGNpIGZyb20iZnMiO2ltcG9ydCAkIGZyb20iZnMiO2ltcG9ydCBYcyBmcm9tInBhdGgi O3ZhciBLaT0ocyx0LGUpPT4ocyY9NDA5NSxlJiYocz0oc3wzODQpJi0xOSksdCYmKHMmMjU2JiYo c3w9NjQpLHMmMzImJihzfD04KSxzJjQmJihzfD0xKSkscyk7aW1wb3J0e3dpbjMyIGFzIHhufWZy b20ibm9kZTpwYXRoIjt2YXJ7aXNBYnNvbHV0ZTpMbixwYXJzZTpLc309eG4sY2U9cz0+e2xldCB0 PSIiLGU9S3Mocyk7Zm9yKDtMbihzKXx8ZS5yb290Oyl7bGV0IGk9cy5jaGFyQXQoMCk9PT0iLyIm JnMuc2xpY2UoMCw0KSE9PSIvLz8vIj8iLyI6ZS5yb290O3M9cy5zbGljZShpLmxlbmd0aCksdCs9 aSxlPUtzKHMpfXJldHVyblt0LHNdfTt2YXIgUWU9WyJ8IiwiPCIsIj4iLCI/IiwiOiJdLFZpPVFl Lm1hcChzPT5TdHJpbmcuZnJvbUNoYXJDb2RlKDYxNDQwK3MuY2hhckNvZGVBdCgwKSkpLE5uPW5l dyBNYXAoUWUubWFwKChzLHQpPT5bcyxWaVt0XV0pKSxEbj1uZXcgTWFwKFZpLm1hcCgocyx0KT0+ W3MsUWVbdF1dKSksJGk9cz0+UWUucmVkdWNlKCh0LGUpPT50LnNwbGl0KGUpLmpvaW4oTm4uZ2V0 KGUpKSxzKSxWcz1zPT5WaS5yZWR1Y2UoKHQsZSk9PnQuc3BsaXQoZSkuam9pbihEbi5nZXQoZSkp LHMpO3ZhciB0cj0ocyx0KT0+dD8ocz1mKHMpLnJlcGxhY2UoL15cLihcL3wkKS8sIiIpLG10KHQp KyIvIitzKTpmKHMpLEFuPTE2KjEwMjQqMTAyNCxxcz1TeW1ib2woInByb2Nlc3MiKSxqcz1TeW1i b2woImZpbGUiKSxRcz1TeW1ib2woImRpcmVjdG9yeSIpLHFpPVN5bWJvbCgic3ltbGluayIpLEpz PVN5bWJvbCgiaGFyZGxpbmsiKSxmZT1TeW1ib2woImhlYWRlciIpLEplPVN5bWJvbCgicmVhZCIp LGppPVN5bWJvbCgibHN0YXQiKSx0aT1TeW1ib2woIm9ubHN0YXQiKSxRaT1TeW1ib2woIm9ucmVh ZCIpLEppPVN5bWJvbCgib25yZWFkbGluayIpLHRzPVN5bWJvbCgib3BlbmZpbGUiKSxlcz1TeW1i b2woIm9ub3BlbmZpbGUiKSxwdD1TeW1ib2woImNsb3NlIiksZWk9U3ltYm9sKCJtb2RlIiksaXM9 U3ltYm9sKCJhd2FpdERyYWluIiksWGk9U3ltYm9sKCJvbmRyYWluIiksWD1TeW1ib2woInByZWZp eCIpLGRlPWNsYXNzIGV4dGVuZHMgQXtwYXRoO3BvcnRhYmxlO215dWlkPXByb2Nlc3MuZ2V0dWlk JiZwcm9jZXNzLmdldHVpZCgpfHwwO215dXNlcj1wcm9jZXNzLmVudi5VU0VSfHwiIjttYXhSZWFk U2l6ZTtsaW5rQ2FjaGU7c3RhdENhY2hlO3ByZXNlcnZlUGF0aHM7Y3dkO3N0cmljdDttdGltZTtu b1BheDtub010aW1lO3ByZWZpeDtmZDtibG9ja0xlbj0wO2Jsb2NrUmVtYWluPTA7YnVmO3Bvcz0w O3JlbWFpbj0wO2xlbmd0aD0wO29mZnNldD0wO3dpbjMyO2Fic29sdXRlO2hlYWRlcjt0eXBlO2xp bmtwYXRoO3N0YXQ7b25Xcml0ZUVudHJ5OyN0PSExO2NvbnN0cnVjdG9yKHQsZT17fSl7bGV0IGk9 cmUoZSk7c3VwZXIoKSx0aGlzLnBhdGg9Zih0KSx0aGlzLnBvcnRhYmxlPSEhaS5wb3J0YWJsZSx0 aGlzLm1heFJlYWRTaXplPWkubWF4UmVhZFNpemV8fEFuLHRoaXMubGlua0NhY2hlPWkubGlua0Nh Y2hlfHxuZXcgTWFwLHRoaXMuc3RhdENhY2hlPWkuc3RhdENhY2hlfHxuZXcgTWFwLHRoaXMucHJl c2VydmVQYXRocz0hIWkucHJlc2VydmVQYXRocyx0aGlzLmN3ZD1mKGkuY3dkfHxwcm9jZXNzLmN3 ZCgpKSx0aGlzLnN0cmljdD0hIWkuc3RyaWN0LHRoaXMubm9QYXg9ISFpLm5vUGF4LHRoaXMubm9N dGltZT0hIWkubm9NdGltZSx0aGlzLm10aW1lPWkubXRpbWUsdGhpcy5wcmVmaXg9aS5wcmVmaXg/ ZihpLnByZWZpeCk6dm9pZCAwLHRoaXMub25Xcml0ZUVudHJ5PWkub25Xcml0ZUVudHJ5LHR5cGVv ZiBpLm9ud2Fybj09ImZ1bmN0aW9uIiYmdGhpcy5vbigid2FybiIsaS5vbndhcm4pO2xldCByPSEx O2lmKCF0aGlzLnByZXNlcnZlUGF0aHMpe2xldFtvLGhdPWNlKHRoaXMucGF0aCk7byYmdHlwZW9m IGg9PSJzdHJpbmciJiYodGhpcy5wYXRoPWgscj1vKX10aGlzLndpbjMyPSEhaS53aW4zMnx8cHJv Y2Vzcy5wbGF0Zm9ybT09PSJ3aW4zMiIsdGhpcy53aW4zMiYmKHRoaXMucGF0aD1Wcyh0aGlzLnBh dGgucmVwbGFjZSgvXFwvZywiLyIpKSx0PXQucmVwbGFjZSgvXFwvZywiLyIpKSx0aGlzLmFic29s dXRlPWYoaS5hYnNvbHV0ZXx8WHMucmVzb2x2ZSh0aGlzLmN3ZCx0KSksdGhpcy5wYXRoPT09IiIm Jih0aGlzLnBhdGg9Ii4vIiksciYmdGhpcy53YXJuKCJUQVJfRU5UUllfSU5GTyIsYHN0cmlwcGlu ZyAke3J9IGZyb20gYWJzb2x1dGUgcGF0aGAse2VudHJ5OnRoaXMscGF0aDpyK3RoaXMucGF0aH0p O2xldCBuPXRoaXMuc3RhdENhY2hlLmdldCh0aGlzLmFic29sdXRlKTtuP3RoaXNbdGldKG4pOnRo aXNbamldKCl9d2Fybih0LGUsaT17fSl7cmV0dXJuIEx0KHRoaXMsdCxlLGkpfWVtaXQodCwuLi5l KXtyZXR1cm4gdD09PSJlcnJvciImJih0aGlzLiN0PSEwKSxzdXBlci5lbWl0KHQsLi4uZSl9W2pp XSgpeyQubHN0YXQodGhpcy5hYnNvbHV0ZSwodCxlKT0+e2lmKHQpcmV0dXJuIHRoaXMuZW1pdCgi ZXJyb3IiLHQpO3RoaXNbdGldKGUpfSl9W3RpXSh0KXt0aGlzLnN0YXRDYWNoZS5zZXQodGhpcy5h YnNvbHV0ZSx0KSx0aGlzLnN0YXQ9dCx0LmlzRmlsZSgpfHwodC5zaXplPTApLHRoaXMudHlwZT1J bih0KSx0aGlzLmVtaXQoInN0YXQiLHQpLHRoaXNbcXNdKCl9W3FzXSgpe3N3aXRjaCh0aGlzLnR5 cGUpe2Nhc2UiRmlsZSI6cmV0dXJuIHRoaXNbanNdKCk7Y2FzZSJEaXJlY3RvcnkiOnJldHVybiB0 aGlzW1FzXSgpO2Nhc2UiU3ltYm9saWNMaW5rIjpyZXR1cm4gdGhpc1txaV0oKTtkZWZhdWx0OnJl dHVybiB0aGlzLmVuZCgpfX1bZWldKHQpe3JldHVybiBLaSh0LHRoaXMudHlwZT09PSJEaXJlY3Rv cnkiLHRoaXMucG9ydGFibGUpfVtYXSh0KXtyZXR1cm4gdHIodCx0aGlzLnByZWZpeCl9W2ZlXSgp e2lmKCF0aGlzLnN0YXQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgd3JpdGUgaGVhZGVyIGJlZm9y ZSBzdGF0Iik7dGhpcy50eXBlPT09IkRpcmVjdG9yeSImJnRoaXMucG9ydGFibGUmJih0aGlzLm5v TXRpbWU9ITApLHRoaXMub25Xcml0ZUVudHJ5Py4odGhpcyksdGhpcy5oZWFkZXI9bmV3IEYoe3Bh dGg6dGhpc1tYXSh0aGlzLnBhdGgpLGxpbmtwYXRoOnRoaXMudHlwZT09PSJMaW5rIiYmdGhpcy5s aW5rcGF0aCE9PXZvaWQgMD90aGlzW1hdKHRoaXMubGlua3BhdGgpOnRoaXMubGlua3BhdGgsbW9k ZTp0aGlzW2VpXSh0aGlzLnN0YXQubW9kZSksdWlkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMu c3RhdC51aWQsZ2lkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuc3RhdC5naWQsc2l6ZTp0aGlz LnN0YXQuc2l6ZSxtdGltZTp0aGlzLm5vTXRpbWU/dm9pZCAwOnRoaXMubXRpbWV8fHRoaXMuc3Rh dC5tdGltZSx0eXBlOnRoaXMudHlwZT09PSJVbnN1cHBvcnRlZCI/dm9pZCAwOnRoaXMudHlwZSx1 bmFtZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQudWlkPT09dGhpcy5teXVpZD90aGlz Lm15dXNlcjoiIixhdGltZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQuYXRpbWUsY3Rp bWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5zdGF0LmN0aW1lfSksdGhpcy5oZWFkZXIuZW5j b2RlKCkmJiF0aGlzLm5vUGF4JiZzdXBlci53cml0ZShuZXcgY3Qoe2F0aW1lOnRoaXMucG9ydGFi bGU/dm9pZCAwOnRoaXMuaGVhZGVyLmF0aW1lLGN0aW1lOnRoaXMucG9ydGFibGU/dm9pZCAwOnRo aXMuaGVhZGVyLmN0aW1lLGdpZDp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLmhlYWRlci5naWQs bXRpbWU6dGhpcy5ub010aW1lP3ZvaWQgMDp0aGlzLm10aW1lfHx0aGlzLmhlYWRlci5tdGltZSxw YXRoOnRoaXNbWF0odGhpcy5wYXRoKSxsaW5rcGF0aDp0aGlzLnR5cGU9PT0iTGluayImJnRoaXMu bGlua3BhdGghPT12b2lkIDA/dGhpc1tYXSh0aGlzLmxpbmtwYXRoKTp0aGlzLmxpbmtwYXRoLHNp emU6dGhpcy5oZWFkZXIuc2l6ZSx1aWQ6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5oZWFkZXIu dWlkLHVuYW1lOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuaGVhZGVyLnVuYW1lLGRldjp0aGlz LnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQuZGV2LGlubzp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0 aGlzLnN0YXQuaW5vLG5saW5rOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuc3RhdC5ubGlua30p LmVuY29kZSgpKTtsZXQgdD10aGlzLmhlYWRlcj8uYmxvY2s7aWYoIXQpdGhyb3cgbmV3IEVycm9y KCJmYWlsZWQgdG8gZW5jb2RlIGhlYWRlciIpO3N1cGVyLndyaXRlKHQpfVtRc10oKXtpZighdGhp cy5zdGF0KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgZW50cnkgd2l0 aG91dCBzdGF0Iik7dGhpcy5wYXRoLnNsaWNlKC0xKSE9PSIvIiYmKHRoaXMucGF0aCs9Ii8iKSx0 aGlzLnN0YXQuc2l6ZT0wLHRoaXNbZmVdKCksdGhpcy5lbmQoKX1bcWldKCl7JC5yZWFkbGluayh0 aGlzLmFic29sdXRlLCh0LGUpPT57aWYodClyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsdCk7dGhp c1tKaV0oZSl9KX1bSmldKHQpe3RoaXMubGlua3BhdGg9Zih0KSx0aGlzW2ZlXSgpLHRoaXMuZW5k KCl9W0pzXSh0KXtpZighdGhpcy5zdGF0KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGNyZWF0ZSBs aW5rIGVudHJ5IHdpdGhvdXQgc3RhdCIpO3RoaXMudHlwZT0iTGluayIsdGhpcy5saW5rcGF0aD1m KFhzLnJlbGF0aXZlKHRoaXMuY3dkLHQpKSx0aGlzLnN0YXQuc2l6ZT0wLHRoaXNbZmVdKCksdGhp cy5lbmQoKX1banNdKCl7aWYoIXRoaXMuc3RhdCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBjcmVh dGUgZmlsZSBlbnRyeSB3aXRob3V0IHN0YXQiKTtpZih0aGlzLnN0YXQubmxpbms+MSl7bGV0IHQ9 YCR7dGhpcy5zdGF0LmRldn06JHt0aGlzLnN0YXQuaW5vfWAsZT10aGlzLmxpbmtDYWNoZS5nZXQo dCk7aWYoZT8uaW5kZXhPZih0aGlzLmN3ZCk9PT0wKXJldHVybiB0aGlzW0pzXShlKTt0aGlzLmxp bmtDYWNoZS5zZXQodCx0aGlzLmFic29sdXRlKX1pZih0aGlzW2ZlXSgpLHRoaXMuc3RhdC5zaXpl PT09MClyZXR1cm4gdGhpcy5lbmQoKTt0aGlzW3RzXSgpfVt0c10oKXskLm9wZW4odGhpcy5hYnNv bHV0ZSwiciIsKHQsZSk9PntpZih0KXJldHVybiB0aGlzLmVtaXQoImVycm9yIix0KTt0aGlzW2Vz XShlKX0pfVtlc10odCl7aWYodGhpcy5mZD10LHRoaXMuI3QpcmV0dXJuIHRoaXNbcHRdKCk7aWYo IXRoaXMuc3RhdCl0aHJvdyBuZXcgRXJyb3IoInNob3VsZCBzdGF0IGJlZm9yZSBjYWxsaW5nIG9u b3BlbmZpbGUiKTt0aGlzLmJsb2NrTGVuPTUxMipNYXRoLmNlaWwodGhpcy5zdGF0LnNpemUvNTEy KSx0aGlzLmJsb2NrUmVtYWluPXRoaXMuYmxvY2tMZW47bGV0IGU9TWF0aC5taW4odGhpcy5ibG9j a0xlbix0aGlzLm1heFJlYWRTaXplKTt0aGlzLmJ1Zj1CdWZmZXIuYWxsb2NVbnNhZmUoZSksdGhp cy5vZmZzZXQ9MCx0aGlzLnBvcz0wLHRoaXMucmVtYWluPXRoaXMuc3RhdC5zaXplLHRoaXMubGVu Z3RoPXRoaXMuYnVmLmxlbmd0aCx0aGlzW0plXSgpfVtKZV0oKXtsZXR7ZmQ6dCxidWY6ZSxvZmZz ZXQ6aSxsZW5ndGg6cixwb3M6bn09dGhpcztpZih0PT09dm9pZCAwfHxlPT09dm9pZCAwKXRocm93 IG5ldyBFcnJvcigiY2Fubm90IHJlYWQgZmlsZSB3aXRob3V0IGZpcnN0IG9wZW5pbmciKTskLnJl YWQodCxlLGkscixuLChvLGgpPT57aWYobylyZXR1cm4gdGhpc1twdF0oKCk9PnRoaXMuZW1pdCgi ZXJyb3IiLG8pKTt0aGlzW1FpXShoKX0pfVtwdF0odD0oKT0+e30pe3RoaXMuZmQhPT12b2lkIDAm JiQuY2xvc2UodGhpcy5mZCx0KX1bUWldKHQpe2lmKHQ8PTAmJnRoaXMucmVtYWluPjApe2xldCBy PU9iamVjdC5hc3NpZ24obmV3IEVycm9yKCJlbmNvdW50ZXJlZCB1bmV4cGVjdGVkIEVPRiIpLHtw YXRoOnRoaXMuYWJzb2x1dGUsc3lzY2FsbDoicmVhZCIsY29kZToiRU9GIn0pO3JldHVybiB0aGlz W3B0XSgoKT0+dGhpcy5lbWl0KCJlcnJvciIscikpfWlmKHQ+dGhpcy5yZW1haW4pe2xldCByPU9i amVjdC5hc3NpZ24obmV3IEVycm9yKCJkaWQgbm90IGVuY291bnRlciBleHBlY3RlZCBFT0YiKSx7 cGF0aDp0aGlzLmFic29sdXRlLHN5c2NhbGw6InJlYWQiLGNvZGU6IkVPRiJ9KTtyZXR1cm4gdGhp c1twdF0oKCk9PnRoaXMuZW1pdCgiZXJyb3IiLHIpKX1pZighdGhpcy5idWYpdGhyb3cgbmV3IEVy cm9yKCJzaG91bGQgaGF2ZSBjcmVhdGVkIGJ1ZmZlciBwcmlvciB0byByZWFkaW5nIik7aWYodD09 PXRoaXMucmVtYWluKWZvcihsZXQgcj10O3I8dGhpcy5sZW5ndGgmJnQ8dGhpcy5ibG9ja1JlbWFp bjtyKyspdGhpcy5idWZbcit0aGlzLm9mZnNldF09MCx0KyssdGhpcy5yZW1haW4rKztsZXQgZT10 aGlzLm9mZnNldD09PTAmJnQ9PT10aGlzLmJ1Zi5sZW5ndGg/dGhpcy5idWY6dGhpcy5idWYuc3Vi YXJyYXkodGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrdCk7dGhpcy53cml0ZShlKT90aGlzW1hpXSgp OnRoaXNbaXNdKCgpPT50aGlzW1hpXSgpKX1baXNdKHQpe3RoaXMub25jZSgiZHJhaW4iLHQpfXdy aXRlKHQsZSxpKXtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGk9ZSxlPXZvaWQgMCksdHlwZW9m IHQ9PSJzdHJpbmciJiYodD1CdWZmZXIuZnJvbSh0LHR5cGVvZiBlPT0ic3RyaW5nIj9lOiJ1dGY4 IikpLHRoaXMuYmxvY2tSZW1haW48dC5sZW5ndGgpe2xldCByPU9iamVjdC5hc3NpZ24obmV3IEVy cm9yKCJ3cml0aW5nIG1vcmUgZGF0YSB0aGFuIGV4cGVjdGVkIikse3BhdGg6dGhpcy5hYnNvbHV0 ZX0pO3JldHVybiB0aGlzLmVtaXQoImVycm9yIixyKX1yZXR1cm4gdGhpcy5yZW1haW4tPXQubGVu Z3RoLHRoaXMuYmxvY2tSZW1haW4tPXQubGVuZ3RoLHRoaXMucG9zKz10Lmxlbmd0aCx0aGlzLm9m ZnNldCs9dC5sZW5ndGgsc3VwZXIud3JpdGUodCxudWxsLGkpfVtYaV0oKXtpZighdGhpcy5yZW1h aW4pcmV0dXJuIHRoaXMuYmxvY2tSZW1haW4mJnN1cGVyLndyaXRlKEJ1ZmZlci5hbGxvYyh0aGlz LmJsb2NrUmVtYWluKSksdGhpc1twdF0odD0+dD90aGlzLmVtaXQoImVycm9yIix0KTp0aGlzLmVu ZCgpKTtpZighdGhpcy5idWYpdGhyb3cgbmV3IEVycm9yKCJidWZmZXIgbG9zdCBzb21laG93IGlu IE9ORFJBSU4iKTt0aGlzLm9mZnNldD49dGhpcy5sZW5ndGgmJih0aGlzLmJ1Zj1CdWZmZXIuYWxs b2NVbnNhZmUoTWF0aC5taW4odGhpcy5ibG9ja1JlbWFpbix0aGlzLmJ1Zi5sZW5ndGgpKSx0aGlz Lm9mZnNldD0wKSx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGgtdGhpcy5vZmZzZXQsdGhpc1tK ZV0oKX19LGlpPWNsYXNzIGV4dGVuZHMgZGV7c3luYz0hMDtbamldKCl7dGhpc1t0aV0oJC5sc3Rh dFN5bmModGhpcy5hYnNvbHV0ZSkpfVtxaV0oKXt0aGlzW0ppXSgkLnJlYWRsaW5rU3luYyh0aGlz LmFic29sdXRlKSl9W3RzXSgpe3RoaXNbZXNdKCQub3BlblN5bmModGhpcy5hYnNvbHV0ZSwiciIp KX1bSmVdKCl7bGV0IHQ9ITA7dHJ5e2xldHtmZDplLGJ1ZjppLG9mZnNldDpyLGxlbmd0aDpuLHBv czpvfT10aGlzO2lmKGU9PT12b2lkIDB8fGk9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJmZCBh bmQgYnVmIG11c3QgYmUgc2V0IGluIFJFQUQgbWV0aG9kIik7bGV0IGg9JC5yZWFkU3luYyhlLGks cixuLG8pO3RoaXNbUWldKGgpLHQ9ITF9ZmluYWxseXtpZih0KXRyeXt0aGlzW3B0XSgoKT0+e30p fWNhdGNoe319fVtpc10odCl7dCgpfVtwdF0odD0oKT0+e30pe3RoaXMuZmQhPT12b2lkIDAmJiQu Y2xvc2VTeW5jKHRoaXMuZmQpLHQoKX19LHNpPWNsYXNzIGV4dGVuZHMgQXtibG9ja0xlbj0wO2Js b2NrUmVtYWluPTA7YnVmPTA7cG9zPTA7cmVtYWluPTA7bGVuZ3RoPTA7cHJlc2VydmVQYXRocztw b3J0YWJsZTtzdHJpY3Q7bm9QYXg7bm9NdGltZTtyZWFkRW50cnk7dHlwZTtwcmVmaXg7cGF0aDtt b2RlO3VpZDtnaWQ7dW5hbWU7Z25hbWU7aGVhZGVyO210aW1lO2F0aW1lO2N0aW1lO2xpbmtwYXRo O3NpemU7b25Xcml0ZUVudHJ5O3dhcm4odCxlLGk9e30pe3JldHVybiBMdCh0aGlzLHQsZSxpKX1j b25zdHJ1Y3Rvcih0LGU9e30pe2xldCBpPXJlKGUpO3N1cGVyKCksdGhpcy5wcmVzZXJ2ZVBhdGhz PSEhaS5wcmVzZXJ2ZVBhdGhzLHRoaXMucG9ydGFibGU9ISFpLnBvcnRhYmxlLHRoaXMuc3RyaWN0 PSEhaS5zdHJpY3QsdGhpcy5ub1BheD0hIWkubm9QYXgsdGhpcy5ub010aW1lPSEhaS5ub010aW1l LHRoaXMub25Xcml0ZUVudHJ5PWkub25Xcml0ZUVudHJ5LHRoaXMucmVhZEVudHJ5PXQ7bGV0e3R5 cGU6cn09dDtpZihyPT09IlVuc3VwcG9ydGVkIil0aHJvdyBuZXcgRXJyb3IoIndyaXRpbmcgZW50 cnkgdGhhdCBzaG91bGQgYmUgaWdub3JlZCIpO3RoaXMudHlwZT1yLHRoaXMudHlwZT09PSJEaXJl Y3RvcnkiJiZ0aGlzLnBvcnRhYmxlJiYodGhpcy5ub010aW1lPSEwKSx0aGlzLnByZWZpeD1pLnBy ZWZpeCx0aGlzLnBhdGg9Zih0LnBhdGgpLHRoaXMubW9kZT10Lm1vZGUhPT12b2lkIDA/dGhpc1tl aV0odC5tb2RlKTp2b2lkIDAsdGhpcy51aWQ9dGhpcy5wb3J0YWJsZT92b2lkIDA6dC51aWQsdGhp cy5naWQ9dGhpcy5wb3J0YWJsZT92b2lkIDA6dC5naWQsdGhpcy51bmFtZT10aGlzLnBvcnRhYmxl P3ZvaWQgMDp0LnVuYW1lLHRoaXMuZ25hbWU9dGhpcy5wb3J0YWJsZT92b2lkIDA6dC5nbmFtZSx0 aGlzLnNpemU9dC5zaXplLHRoaXMubXRpbWU9dGhpcy5ub010aW1lP3ZvaWQgMDppLm10aW1lfHx0 Lm10aW1lLHRoaXMuYXRpbWU9dGhpcy5wb3J0YWJsZT92b2lkIDA6dC5hdGltZSx0aGlzLmN0aW1l PXRoaXMucG9ydGFibGU/dm9pZCAwOnQuY3RpbWUsdGhpcy5saW5rcGF0aD10LmxpbmtwYXRoIT09 dm9pZCAwP2YodC5saW5rcGF0aCk6dm9pZCAwLHR5cGVvZiBpLm9ud2Fybj09ImZ1bmN0aW9uIiYm dGhpcy5vbigid2FybiIsaS5vbndhcm4pO2xldCBuPSExO2lmKCF0aGlzLnByZXNlcnZlUGF0aHMp e2xldFtoLGFdPWNlKHRoaXMucGF0aCk7aCYmdHlwZW9mIGE9PSJzdHJpbmciJiYodGhpcy5wYXRo PWEsbj1oKX10aGlzLnJlbWFpbj10LnNpemUsdGhpcy5ibG9ja1JlbWFpbj10LnN0YXJ0QmxvY2tT aXplLHRoaXMub25Xcml0ZUVudHJ5Py4odGhpcyksdGhpcy5oZWFkZXI9bmV3IEYoe3BhdGg6dGhp c1tYXSh0aGlzLnBhdGgpLGxpbmtwYXRoOnRoaXMudHlwZT09PSJMaW5rIiYmdGhpcy5saW5rcGF0 aCE9PXZvaWQgMD90aGlzW1hdKHRoaXMubGlua3BhdGgpOnRoaXMubGlua3BhdGgsbW9kZTp0aGlz Lm1vZGUsdWlkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMudWlkLGdpZDp0aGlzLnBvcnRhYmxl P3ZvaWQgMDp0aGlzLmdpZCxzaXplOnRoaXMuc2l6ZSxtdGltZTp0aGlzLm5vTXRpbWU/dm9pZCAw OnRoaXMubXRpbWUsdHlwZTp0aGlzLnR5cGUsdW5hbWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhp cy51bmFtZSxhdGltZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLmF0aW1lLGN0aW1lOnRoaXMu cG9ydGFibGU/dm9pZCAwOnRoaXMuY3RpbWV9KSxuJiZ0aGlzLndhcm4oIlRBUl9FTlRSWV9JTkZP Iixgc3RyaXBwaW5nICR7bn0gZnJvbSBhYnNvbHV0ZSBwYXRoYCx7ZW50cnk6dGhpcyxwYXRoOm4r dGhpcy5wYXRofSksdGhpcy5oZWFkZXIuZW5jb2RlKCkmJiF0aGlzLm5vUGF4JiZzdXBlci53cml0 ZShuZXcgY3Qoe2F0aW1lOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuYXRpbWUsY3RpbWU6dGhp cy5wb3J0YWJsZT92b2lkIDA6dGhpcy5jdGltZSxnaWQ6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhp cy5naWQsbXRpbWU6dGhpcy5ub010aW1lP3ZvaWQgMDp0aGlzLm10aW1lLHBhdGg6dGhpc1tYXSh0 aGlzLnBhdGgpLGxpbmtwYXRoOnRoaXMudHlwZT09PSJMaW5rIiYmdGhpcy5saW5rcGF0aCE9PXZv aWQgMD90aGlzW1hdKHRoaXMubGlua3BhdGgpOnRoaXMubGlua3BhdGgsc2l6ZTp0aGlzLnNpemUs dWlkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMudWlkLHVuYW1lOnRoaXMucG9ydGFibGU/dm9p ZCAwOnRoaXMudW5hbWUsZGV2OnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMucmVhZEVudHJ5LmRl dixpbm86dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5yZWFkRW50cnkuaW5vLG5saW5rOnRoaXMu cG9ydGFibGU/dm9pZCAwOnRoaXMucmVhZEVudHJ5Lm5saW5rfSkuZW5jb2RlKCkpO2xldCBvPXRo aXMuaGVhZGVyPy5ibG9jaztpZighbyl0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBlbmNvZGUg aGVhZGVyIik7c3VwZXIud3JpdGUobyksdC5waXBlKHRoaXMpfVtYXSh0KXtyZXR1cm4gdHIodCx0 aGlzLnByZWZpeCl9W2VpXSh0KXtyZXR1cm4gS2kodCx0aGlzLnR5cGU9PT0iRGlyZWN0b3J5Iix0 aGlzLnBvcnRhYmxlKX13cml0ZSh0LGUsaSl7dHlwZW9mIGU9PSJmdW5jdGlvbiImJihpPWUsZT12 b2lkIDApLHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9QnVmZmVyLmZyb20odCx0eXBlb2YgZT09InN0 cmluZyI/ZToidXRmOCIpKTtsZXQgcj10Lmxlbmd0aDtpZihyPnRoaXMuYmxvY2tSZW1haW4pdGhy b3cgbmV3IEVycm9yKCJ3cml0aW5nIG1vcmUgdG8gZW50cnkgdGhhbiBpcyBhcHByb3ByaWF0ZSIp O3JldHVybiB0aGlzLmJsb2NrUmVtYWluLT1yLHN1cGVyLndyaXRlKHQsaSl9ZW5kKHQsZSxpKXty ZXR1cm4gdGhpcy5ibG9ja1JlbWFpbiYmc3VwZXIud3JpdGUoQnVmZmVyLmFsbG9jKHRoaXMuYmxv Y2tSZW1haW4pKSx0eXBlb2YgdD09ImZ1bmN0aW9uIiYmKGk9dCxlPXZvaWQgMCx0PXZvaWQgMCks dHlwZW9mIGU9PSJmdW5jdGlvbiImJihpPWUsZT12b2lkIDApLHR5cGVvZiB0PT0ic3RyaW5nIiYm KHQ9QnVmZmVyLmZyb20odCxlPz8idXRmOCIpKSxpJiZ0aGlzLm9uY2UoImZpbmlzaCIsaSksdD9z dXBlci5lbmQodCxpKTpzdXBlci5lbmQoaSksdGhpc319LEluPXM9PnMuaXNGaWxlKCk/IkZpbGUi OnMuaXNEaXJlY3RvcnkoKT8iRGlyZWN0b3J5IjpzLmlzU3ltYm9saWNMaW5rKCk/IlN5bWJvbGlj TGluayI6IlVuc3VwcG9ydGVkIjt2YXIgcmk9Y2xhc3Mgc3t0YWlsO2hlYWQ7bGVuZ3RoPTA7c3Rh dGljIGNyZWF0ZSh0PVtdKXtyZXR1cm4gbmV3IHModCl9Y29uc3RydWN0b3IodD1bXSl7Zm9yKGxl dCBlIG9mIHQpdGhpcy5wdXNoKGUpfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2ZvcihsZXQgdD10aGlz LmhlYWQ7dDt0PXQubmV4dCl5aWVsZCB0LnZhbHVlfXJlbW92ZU5vZGUodCl7aWYodC5saXN0IT09 dGhpcyl0aHJvdyBuZXcgRXJyb3IoInJlbW92aW5nIG5vZGUgd2hpY2ggZG9lcyBub3QgYmVsb25n IHRvIHRoaXMgbGlzdCIpO2xldCBlPXQubmV4dCxpPXQucHJldjtyZXR1cm4gZSYmKGUucHJldj1p KSxpJiYoaS5uZXh0PWUpLHQ9PT10aGlzLmhlYWQmJih0aGlzLmhlYWQ9ZSksdD09PXRoaXMudGFp bCYmKHRoaXMudGFpbD1pKSx0aGlzLmxlbmd0aC0tLHQubmV4dD12b2lkIDAsdC5wcmV2PXZvaWQg MCx0Lmxpc3Q9dm9pZCAwLGV9dW5zaGlmdE5vZGUodCl7aWYodD09PXRoaXMuaGVhZClyZXR1cm47 dC5saXN0JiZ0Lmxpc3QucmVtb3ZlTm9kZSh0KTtsZXQgZT10aGlzLmhlYWQ7dC5saXN0PXRoaXMs dC5uZXh0PWUsZSYmKGUucHJldj10KSx0aGlzLmhlYWQ9dCx0aGlzLnRhaWx8fCh0aGlzLnRhaWw9 dCksdGhpcy5sZW5ndGgrK31wdXNoTm9kZSh0KXtpZih0PT09dGhpcy50YWlsKXJldHVybjt0Lmxp c3QmJnQubGlzdC5yZW1vdmVOb2RlKHQpO2xldCBlPXRoaXMudGFpbDt0Lmxpc3Q9dGhpcyx0LnBy ZXY9ZSxlJiYoZS5uZXh0PXQpLHRoaXMudGFpbD10LHRoaXMuaGVhZHx8KHRoaXMuaGVhZD10KSx0 aGlzLmxlbmd0aCsrfXB1c2goLi4udCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKUZu KHRoaXMsdFtlXSk7cmV0dXJuIHRoaXMubGVuZ3RofXVuc2hpZnQoLi4udCl7Zm9yKHZhciBlPTAs aT10Lmxlbmd0aDtlPGk7ZSsrKWtuKHRoaXMsdFtlXSk7cmV0dXJuIHRoaXMubGVuZ3RofXBvcCgp e2lmKCF0aGlzLnRhaWwpcmV0dXJuO2xldCB0PXRoaXMudGFpbC52YWx1ZSxlPXRoaXMudGFpbDty ZXR1cm4gdGhpcy50YWlsPXRoaXMudGFpbC5wcmV2LHRoaXMudGFpbD90aGlzLnRhaWwubmV4dD12 b2lkIDA6dGhpcy5oZWFkPXZvaWQgMCxlLmxpc3Q9dm9pZCAwLHRoaXMubGVuZ3RoLS0sdH1zaGlm dCgpe2lmKCF0aGlzLmhlYWQpcmV0dXJuO2xldCB0PXRoaXMuaGVhZC52YWx1ZSxlPXRoaXMuaGVh ZDtyZXR1cm4gdGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LHRoaXMuaGVhZD90aGlzLmhlYWQucHJl dj12b2lkIDA6dGhpcy50YWlsPXZvaWQgMCxlLmxpc3Q9dm9pZCAwLHRoaXMubGVuZ3RoLS0sdH1m b3JFYWNoKHQsZSl7ZT1lfHx0aGlzO2ZvcihsZXQgaT10aGlzLmhlYWQscj0wO2k7cisrKXQuY2Fs bChlLGkudmFsdWUscix0aGlzKSxpPWkubmV4dH1mb3JFYWNoUmV2ZXJzZSh0LGUpe2U9ZXx8dGhp cztmb3IobGV0IGk9dGhpcy50YWlsLHI9dGhpcy5sZW5ndGgtMTtpO3ItLSl0LmNhbGwoZSxpLnZh bHVlLHIsdGhpcyksaT1pLnByZXZ9Z2V0KHQpe2xldCBlPTAsaT10aGlzLmhlYWQ7Zm9yKDtpJiZl PHQ7ZSsrKWk9aS5uZXh0O2lmKGU9PT10JiZpKXJldHVybiBpLnZhbHVlfWdldFJldmVyc2UodCl7 bGV0IGU9MCxpPXRoaXMudGFpbDtmb3IoO2kmJmU8dDtlKyspaT1pLnByZXY7aWYoZT09PXQmJmkp cmV0dXJuIGkudmFsdWV9bWFwKHQsZSl7ZT1lfHx0aGlzO2xldCBpPW5ldyBzO2ZvcihsZXQgcj10 aGlzLmhlYWQ7cjspaS5wdXNoKHQuY2FsbChlLHIudmFsdWUsdGhpcykpLHI9ci5uZXh0O3JldHVy biBpfW1hcFJldmVyc2UodCxlKXtlPWV8fHRoaXM7dmFyIGk9bmV3IHM7Zm9yKGxldCByPXRoaXMu dGFpbDtyOylpLnB1c2godC5jYWxsKGUsci52YWx1ZSx0aGlzKSkscj1yLnByZXY7cmV0dXJuIGl9 cmVkdWNlKHQsZSl7bGV0IGkscj10aGlzLmhlYWQ7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWk9ZTtl bHNlIGlmKHRoaXMuaGVhZClyPXRoaXMuaGVhZC5uZXh0LGk9dGhpcy5oZWFkLnZhbHVlO2Vsc2Ug dGhyb3cgbmV3IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGxpc3Qgd2l0aCBubyBpbml0aWFs IHZhbHVlIik7Zm9yKHZhciBuPTA7cjtuKyspaT10KGksci52YWx1ZSxuKSxyPXIubmV4dDtyZXR1 cm4gaX1yZWR1Y2VSZXZlcnNlKHQsZSl7bGV0IGkscj10aGlzLnRhaWw7aWYoYXJndW1lbnRzLmxl bmd0aD4xKWk9ZTtlbHNlIGlmKHRoaXMudGFpbClyPXRoaXMudGFpbC5wcmV2LGk9dGhpcy50YWls LnZhbHVlO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGxpc3Qgd2l0 aCBubyBpbml0aWFsIHZhbHVlIik7Zm9yKGxldCBuPXRoaXMubGVuZ3RoLTE7cjtuLS0paT10KGks ci52YWx1ZSxuKSxyPXIucHJldjtyZXR1cm4gaX10b0FycmF5KCl7bGV0IHQ9bmV3IEFycmF5KHRo aXMubGVuZ3RoKTtmb3IobGV0IGU9MCxpPXRoaXMuaGVhZDtpO2UrKyl0W2VdPWkudmFsdWUsaT1p Lm5leHQ7cmV0dXJuIHR9dG9BcnJheVJldmVyc2UoKXtsZXQgdD1uZXcgQXJyYXkodGhpcy5sZW5n dGgpO2ZvcihsZXQgZT0wLGk9dGhpcy50YWlsO2k7ZSsrKXRbZV09aS52YWx1ZSxpPWkucHJldjty ZXR1cm4gdH1zbGljZSh0PTAsZT10aGlzLmxlbmd0aCl7ZTwwJiYoZSs9dGhpcy5sZW5ndGgpLHQ8 MCYmKHQrPXRoaXMubGVuZ3RoKTtsZXQgaT1uZXcgcztpZihlPHR8fGU8MClyZXR1cm4gaTt0PDAm Jih0PTApLGU+dGhpcy5sZW5ndGgmJihlPXRoaXMubGVuZ3RoKTtsZXQgcj10aGlzLmhlYWQsbj0w O2ZvcihuPTA7ciYmbjx0O24rKylyPXIubmV4dDtmb3IoO3ImJm48ZTtuKysscj1yLm5leHQpaS5w dXNoKHIudmFsdWUpO3JldHVybiBpfXNsaWNlUmV2ZXJzZSh0PTAsZT10aGlzLmxlbmd0aCl7ZTww JiYoZSs9dGhpcy5sZW5ndGgpLHQ8MCYmKHQrPXRoaXMubGVuZ3RoKTtsZXQgaT1uZXcgcztpZihl PHR8fGU8MClyZXR1cm4gaTt0PDAmJih0PTApLGU+dGhpcy5sZW5ndGgmJihlPXRoaXMubGVuZ3Ro KTtsZXQgcj10aGlzLmxlbmd0aCxuPXRoaXMudGFpbDtmb3IoO24mJnI+ZTtyLS0pbj1uLnByZXY7 Zm9yKDtuJiZyPnQ7ci0tLG49bi5wcmV2KWkucHVzaChuLnZhbHVlKTtyZXR1cm4gaX1zcGxpY2Uo dCxlPTAsLi4uaSl7dD50aGlzLmxlbmd0aCYmKHQ9dGhpcy5sZW5ndGgtMSksdDwwJiYodD10aGlz Lmxlbmd0aCt0KTtsZXQgcj10aGlzLmhlYWQ7Zm9yKGxldCBvPTA7ciYmbzx0O28rKylyPXIubmV4 dDtsZXQgbj1bXTtmb3IobGV0IG89MDtyJiZvPGU7bysrKW4ucHVzaChyLnZhbHVlKSxyPXRoaXMu cmVtb3ZlTm9kZShyKTtyP3IhPT10aGlzLnRhaWwmJihyPXIucHJldik6cj10aGlzLnRhaWw7Zm9y KGxldCBvIG9mIGkpcj1Dbih0aGlzLHIsbyk7cmV0dXJuIG59cmV2ZXJzZSgpe2xldCB0PXRoaXMu aGVhZCxlPXRoaXMudGFpbDtmb3IobGV0IGk9dDtpO2k9aS5wcmV2KXtsZXQgcj1pLnByZXY7aS5w cmV2PWkubmV4dCxpLm5leHQ9cn1yZXR1cm4gdGhpcy5oZWFkPWUsdGhpcy50YWlsPXQsdGhpc319 O2Z1bmN0aW9uIENuKHMsdCxlKXtsZXQgaT10LHI9dD90Lm5leHQ6cy5oZWFkLG49bmV3IHVlKGUs aSxyLHMpO3JldHVybiBuLm5leHQ9PT12b2lkIDAmJihzLnRhaWw9biksbi5wcmV2PT09dm9pZCAw JiYocy5oZWFkPW4pLHMubGVuZ3RoKyssbn1mdW5jdGlvbiBGbihzLHQpe3MudGFpbD1uZXcgdWUo dCxzLnRhaWwsdm9pZCAwLHMpLHMuaGVhZHx8KHMuaGVhZD1zLnRhaWwpLHMubGVuZ3RoKyt9ZnVu Y3Rpb24ga24ocyx0KXtzLmhlYWQ9bmV3IHVlKHQsdm9pZCAwLHMuaGVhZCxzKSxzLnRhaWx8fChz LnRhaWw9cy5oZWFkKSxzLmxlbmd0aCsrfXZhciB1ZT1jbGFzc3tsaXN0O25leHQ7cHJldjt2YWx1 ZTtjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmxpc3Q9cix0aGlzLnZhbHVlPXQsZT8oZS5uZXh0 PXRoaXMsdGhpcy5wcmV2PWUpOnRoaXMucHJldj12b2lkIDAsaT8oaS5wcmV2PXRoaXMsdGhpcy5u ZXh0PWkpOnRoaXMubmV4dD12b2lkIDB9fTtpbXBvcnQgcnIgZnJvbSJwYXRoIjt2YXIgZmk9Y2xh c3N7cGF0aDthYnNvbHV0ZTtlbnRyeTtzdGF0O3JlYWRkaXI7cGVuZGluZz0hMTtpZ25vcmU9ITE7 cGlwZWQ9ITE7Y29uc3RydWN0b3IodCxlKXt0aGlzLnBhdGg9dHx8Ii4vIix0aGlzLmFic29sdXRl PWV9fSxlcj1CdWZmZXIuYWxsb2MoMTAyNCksbmk9U3ltYm9sKCJvblN0YXQiKSxtZT1TeW1ib2wo ImVuZGVkIiksVz1TeW1ib2woInF1ZXVlIiksQ3Q9U3ltYm9sKCJjdXJyZW50IiksRnQ9U3ltYm9s KCJwcm9jZXNzIikscGU9U3ltYm9sKCJwcm9jZXNzaW5nIiksc3M9U3ltYm9sKCJwcm9jZXNzSm9i IiksRz1TeW1ib2woImpvYnMiKSxycz1TeW1ib2woImpvYkRvbmUiKSxvaT1TeW1ib2woImFkZEZT RW50cnkiKSxpcj1TeW1ib2woImFkZFRhckVudHJ5IiksaHM9U3ltYm9sKCJzdGF0IiksYXM9U3lt Ym9sKCJyZWFkZGlyIiksaGk9U3ltYm9sKCJvbnJlYWRkaXIiKSxhaT1TeW1ib2woInBpcGUiKSxz cj1TeW1ib2woImVudHJ5IiksbnM9U3ltYm9sKCJlbnRyeU9wdCIpLGxpPVN5bWJvbCgid3JpdGVF bnRyeUNsYXNzIiksbnI9U3ltYm9sKCJ3cml0ZSIpLG9zPVN5bWJvbCgib25kcmFpbiIpLEV0PWNs YXNzIGV4dGVuZHMgQXtzeW5jPSExO29wdDtjd2Q7bWF4UmVhZFNpemU7cHJlc2VydmVQYXRocztz dHJpY3Q7bm9QYXg7cHJlZml4O2xpbmtDYWNoZTtzdGF0Q2FjaGU7ZmlsZTtwb3J0YWJsZTt6aXA7 cmVhZGRpckNhY2hlO25vRGlyUmVjdXJzZTtmb2xsb3c7bm9NdGltZTttdGltZTtmaWx0ZXI7am9i cztbbGldO29uV3JpdGVFbnRyeTtbV107W0ddPTA7W3BlXT0hMTtbbWVdPSExO2NvbnN0cnVjdG9y KHQ9e30pe2lmKHN1cGVyKCksdGhpcy5vcHQ9dCx0aGlzLmZpbGU9dC5maWxlfHwiIix0aGlzLmN3 ZD10LmN3ZHx8cHJvY2Vzcy5jd2QoKSx0aGlzLm1heFJlYWRTaXplPXQubWF4UmVhZFNpemUsdGhp cy5wcmVzZXJ2ZVBhdGhzPSEhdC5wcmVzZXJ2ZVBhdGhzLHRoaXMuc3RyaWN0PSEhdC5zdHJpY3Qs dGhpcy5ub1BheD0hIXQubm9QYXgsdGhpcy5wcmVmaXg9Zih0LnByZWZpeHx8IiIpLHRoaXMubGlu a0NhY2hlPXQubGlua0NhY2hlfHxuZXcgTWFwLHRoaXMuc3RhdENhY2hlPXQuc3RhdENhY2hlfHxu ZXcgTWFwLHRoaXMucmVhZGRpckNhY2hlPXQucmVhZGRpckNhY2hlfHxuZXcgTWFwLHRoaXMub25X cml0ZUVudHJ5PXQub25Xcml0ZUVudHJ5LHRoaXNbbGldPWRlLHR5cGVvZiB0Lm9ud2Fybj09ImZ1 bmN0aW9uIiYmdGhpcy5vbigid2FybiIsdC5vbndhcm4pLHRoaXMucG9ydGFibGU9ISF0LnBvcnRh YmxlLHQuZ3ppcHx8dC5icm90bGl8fHQuenN0ZCl7aWYoKHQuZ3ppcD8xOjApKyh0LmJyb3RsaT8x OjApKyh0LnpzdGQ/MTowKT4xKXRocm93IG5ldyBUeXBlRXJyb3IoImd6aXAsIGJyb3RsaSwgenN0 ZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIik7aWYodC5nemlwJiYodHlwZW9mIHQuZ3ppcCE9Im9i amVjdCImJih0Lmd6aXA9e30pLHRoaXMucG9ydGFibGUmJih0Lmd6aXAucG9ydGFibGU9ITApLHRo aXMuemlwPW5ldyBCZSh0Lmd6aXApKSx0LmJyb3RsaSYmKHR5cGVvZiB0LmJyb3RsaSE9Im9iamVj dCImJih0LmJyb3RsaT17fSksdGhpcy56aXA9bmV3IFVlKHQuYnJvdGxpKSksdC56c3RkJiYodHlw ZW9mIHQuenN0ZCE9Im9iamVjdCImJih0LnpzdGQ9e30pLHRoaXMuemlwPW5ldyBHZSh0LnpzdGQp KSwhdGhpcy56aXApdGhyb3cgbmV3IEVycm9yKCJpbXBvc3NpYmxlIik7bGV0IGU9dGhpcy56aXA7 ZS5vbigiZGF0YSIsaT0+c3VwZXIud3JpdGUoaSkpLGUub24oImVuZCIsKCk9PnN1cGVyLmVuZCgp KSxlLm9uKCJkcmFpbiIsKCk9PnRoaXNbb3NdKCkpLHRoaXMub24oInJlc3VtZSIsKCk9PmUucmVz dW1lKCkpfWVsc2UgdGhpcy5vbigiZHJhaW4iLHRoaXNbb3NdKTt0aGlzLm5vRGlyUmVjdXJzZT0h IXQubm9EaXJSZWN1cnNlLHRoaXMuZm9sbG93PSEhdC5mb2xsb3csdGhpcy5ub010aW1lPSEhdC5u b010aW1lLHQubXRpbWUmJih0aGlzLm10aW1lPXQubXRpbWUpLHRoaXMuZmlsdGVyPXR5cGVvZiB0 LmZpbHRlcj09ImZ1bmN0aW9uIj90LmZpbHRlcjooKT0+ITAsdGhpc1tXXT1uZXcgcmksdGhpc1tH XT0wLHRoaXMuam9icz1OdW1iZXIodC5qb2JzKXx8NCx0aGlzW3BlXT0hMSx0aGlzW21lXT0hMX1b bnJdKHQpe3JldHVybiBzdXBlci53cml0ZSh0KX1hZGQodCl7cmV0dXJuIHRoaXMud3JpdGUodCks dGhpc31lbmQodCxlLGkpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIiYmKGk9dCx0PXZvaWQg MCksdHlwZW9mIGU9PSJmdW5jdGlvbiImJihpPWUsZT12b2lkIDApLHQmJnRoaXMuYWRkKHQpLHRo aXNbbWVdPSEwLHRoaXNbRnRdKCksaSYmaSgpLHRoaXN9d3JpdGUodCl7aWYodGhpc1ttZV0pdGhy b3cgbmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTtyZXR1cm4gdCBpbnN0YW5jZW9mIFl0P3Ro aXNbaXJdKHQpOnRoaXNbb2ldKHQpLHRoaXMuZmxvd2luZ31baXJdKHQpe2xldCBlPWYocnIucmVz b2x2ZSh0aGlzLmN3ZCx0LnBhdGgpKTtpZighdGhpcy5maWx0ZXIodC5wYXRoLHQpKXQucmVzdW1l KCk7ZWxzZXtsZXQgaT1uZXcgZmkodC5wYXRoLGUpO2kuZW50cnk9bmV3IHNpKHQsdGhpc1tuc10o aSkpLGkuZW50cnkub24oImVuZCIsKCk9PnRoaXNbcnNdKGkpKSx0aGlzW0ddKz0xLHRoaXNbV10u cHVzaChpKX10aGlzW0Z0XSgpfVtvaV0odCl7bGV0IGU9Zihyci5yZXNvbHZlKHRoaXMuY3dkLHQp KTt0aGlzW1ddLnB1c2gobmV3IGZpKHQsZSkpLHRoaXNbRnRdKCl9W2hzXSh0KXt0LnBlbmRpbmc9 ITAsdGhpc1tHXSs9MTtsZXQgZT10aGlzLmZvbGxvdz8ic3RhdCI6ImxzdGF0IjtjaVtlXSh0LmFi c29sdXRlLChpLHIpPT57dC5wZW5kaW5nPSExLHRoaXNbR10tPTEsaT90aGlzLmVtaXQoImVycm9y IixpKTp0aGlzW25pXSh0LHIpfSl9W25pXSh0LGUpe3RoaXMuc3RhdENhY2hlLnNldCh0LmFic29s dXRlLGUpLHQuc3RhdD1lLHRoaXMuZmlsdGVyKHQucGF0aCxlKT9lLmlzRmlsZSgpJiZlLm5saW5r PjEmJnQ9PT10aGlzW0N0XSYmIXRoaXMubGlua0NhY2hlLmdldChgJHtlLmRldn06JHtlLmlub31g KSYmIXRoaXMuc3luYyYmdGhpc1tzc10odCk6dC5pZ25vcmU9ITAsdGhpc1tGdF0oKX1bYXNdKHQp e3QucGVuZGluZz0hMCx0aGlzW0ddKz0xLGNpLnJlYWRkaXIodC5hYnNvbHV0ZSwoZSxpKT0+e2lm KHQucGVuZGluZz0hMSx0aGlzW0ddLT0xLGUpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLGUpO3Ro aXNbaGldKHQsaSl9KX1baGldKHQsZSl7dGhpcy5yZWFkZGlyQ2FjaGUuc2V0KHQuYWJzb2x1dGUs ZSksdC5yZWFkZGlyPWUsdGhpc1tGdF0oKX1bRnRdKCl7aWYoIXRoaXNbcGVdKXt0aGlzW3BlXT0h MDtmb3IobGV0IHQ9dGhpc1tXXS5oZWFkO3QmJnRoaXNbR108dGhpcy5qb2JzO3Q9dC5uZXh0KWlm KHRoaXNbc3NdKHQudmFsdWUpLHQudmFsdWUuaWdub3JlKXtsZXQgZT10Lm5leHQ7dGhpc1tXXS5y ZW1vdmVOb2RlKHQpLHQubmV4dD1lfXRoaXNbcGVdPSExLHRoaXNbbWVdJiYhdGhpc1tXXS5sZW5n dGgmJnRoaXNbR109PT0wJiYodGhpcy56aXA/dGhpcy56aXAuZW5kKGVyKTooc3VwZXIud3JpdGUo ZXIpLHN1cGVyLmVuZCgpKSl9fWdldFtDdF0oKXtyZXR1cm4gdGhpc1tXXSYmdGhpc1tXXS5oZWFk JiZ0aGlzW1ddLmhlYWQudmFsdWV9W3JzXSh0KXt0aGlzW1ddLnNoaWZ0KCksdGhpc1tHXS09MSx0 aGlzW0Z0XSgpfVtzc10odCl7aWYoIXQucGVuZGluZyl7aWYodC5lbnRyeSl7dD09PXRoaXNbQ3Rd JiYhdC5waXBlZCYmdGhpc1thaV0odCk7cmV0dXJufWlmKCF0LnN0YXQpe2xldCBlPXRoaXMuc3Rh dENhY2hlLmdldCh0LmFic29sdXRlKTtlP3RoaXNbbmldKHQsZSk6dGhpc1toc10odCl9aWYodC5z dGF0JiYhdC5pZ25vcmUpe2lmKCF0aGlzLm5vRGlyUmVjdXJzZSYmdC5zdGF0LmlzRGlyZWN0b3J5 KCkmJiF0LnJlYWRkaXIpe2xldCBlPXRoaXMucmVhZGRpckNhY2hlLmdldCh0LmFic29sdXRlKTtp ZihlP3RoaXNbaGldKHQsZSk6dGhpc1thc10odCksIXQucmVhZGRpcilyZXR1cm59aWYodC5lbnRy eT10aGlzW3NyXSh0KSwhdC5lbnRyeSl7dC5pZ25vcmU9ITA7cmV0dXJufXQ9PT10aGlzW0N0XSYm IXQucGlwZWQmJnRoaXNbYWldKHQpfX19W25zXSh0KXtyZXR1cm57b253YXJuOihlLGkscik9PnRo aXMud2FybihlLGksciksbm9QYXg6dGhpcy5ub1BheCxjd2Q6dGhpcy5jd2QsYWJzb2x1dGU6dC5h YnNvbHV0ZSxwcmVzZXJ2ZVBhdGhzOnRoaXMucHJlc2VydmVQYXRocyxtYXhSZWFkU2l6ZTp0aGlz Lm1heFJlYWRTaXplLHN0cmljdDp0aGlzLnN0cmljdCxwb3J0YWJsZTp0aGlzLnBvcnRhYmxlLGxp bmtDYWNoZTp0aGlzLmxpbmtDYWNoZSxzdGF0Q2FjaGU6dGhpcy5zdGF0Q2FjaGUsbm9NdGltZTp0 aGlzLm5vTXRpbWUsbXRpbWU6dGhpcy5tdGltZSxwcmVmaXg6dGhpcy5wcmVmaXgsb25Xcml0ZUVu dHJ5OnRoaXMub25Xcml0ZUVudHJ5fX1bc3JdKHQpe3RoaXNbR10rPTE7dHJ5e3JldHVybiBuZXcg dGhpc1tsaV0odC5wYXRoLHRoaXNbbnNdKHQpKS5vbigiZW5kIiwoKT0+dGhpc1tyc10odCkpLm9u KCJlcnJvciIsaT0+dGhpcy5lbWl0KCJlcnJvciIsaSkpfWNhdGNoKGUpe3RoaXMuZW1pdCgiZXJy b3IiLGUpfX1bb3NdKCl7dGhpc1tDdF0mJnRoaXNbQ3RdLmVudHJ5JiZ0aGlzW0N0XS5lbnRyeS5y ZXN1bWUoKX1bYWldKHQpe3QucGlwZWQ9ITAsdC5yZWFkZGlyJiZ0LnJlYWRkaXIuZm9yRWFjaChy PT57bGV0IG49dC5wYXRoLG89bj09PSIuLyI/IiI6bi5yZXBsYWNlKC9cLyokLywiLyIpO3RoaXNb b2ldKG8rcil9KTtsZXQgZT10LmVudHJ5LGk9dGhpcy56aXA7aWYoIWUpdGhyb3cgbmV3IEVycm9y KCJjYW5ub3QgcGlwZSB3aXRob3V0IHNvdXJjZSIpO2k/ZS5vbigiZGF0YSIscj0+e2kud3JpdGUo cil8fGUucGF1c2UoKX0pOmUub24oImRhdGEiLHI9PntzdXBlci53cml0ZShyKXx8ZS5wYXVzZSgp fSl9cGF1c2UoKXtyZXR1cm4gdGhpcy56aXAmJnRoaXMuemlwLnBhdXNlKCksc3VwZXIucGF1c2Uo KX13YXJuKHQsZSxpPXt9KXtMdCh0aGlzLHQsZSxpKX19LGt0PWNsYXNzIGV4dGVuZHMgRXR7c3lu Yz0hMDtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzW2xpXT1paX1wYXVzZSgpe31yZXN1bWUo KXt9W2hzXSh0KXtsZXQgZT10aGlzLmZvbGxvdz8ic3RhdFN5bmMiOiJsc3RhdFN5bmMiO3RoaXNb bmldKHQsY2lbZV0odC5hYnNvbHV0ZSkpfVthc10odCl7dGhpc1toaV0odCxjaS5yZWFkZGlyU3lu Yyh0LmFic29sdXRlKSl9W2FpXSh0KXtsZXQgZT10LmVudHJ5LGk9dGhpcy56aXA7aWYodC5yZWFk ZGlyJiZ0LnJlYWRkaXIuZm9yRWFjaChyPT57bGV0IG49dC5wYXRoLG89bj09PSIuLyI/IiI6bi5y ZXBsYWNlKC9cLyokLywiLyIpO3RoaXNbb2ldKG8rcil9KSwhZSl0aHJvdyBuZXcgRXJyb3IoIkNh bm5vdCBwaXBlIHdpdGhvdXQgc291cmNlIik7aT9lLm9uKCJkYXRhIixyPT57aS53cml0ZShyKX0p OmUub24oImRhdGEiLHI9PntzdXBlcltucl0ocil9KX19O3ZhciB2bj0ocyx0KT0+e2xldCBlPW5l dyBrdChzKSxpPW5ldyBXdChzLmZpbGUse21vZGU6cy5tb2RlfHw0Mzh9KTtlLnBpcGUoaSksaHIo ZSx0KX0sTW49KHMsdCk9PntsZXQgZT1uZXcgRXQocyksaT1uZXcgdHQocy5maWxlLHttb2RlOnMu bW9kZXx8NDM4fSk7ZS5waXBlKGkpO2xldCByPW5ldyBQcm9taXNlKChuLG8pPT57aS5vbigiZXJy b3IiLG8pLGkub24oImNsb3NlIixuKSxlLm9uKCJlcnJvciIsbyl9KTtyZXR1cm4gYXIoZSx0KSxy fSxocj0ocyx0KT0+e3QuZm9yRWFjaChlPT57ZS5jaGFyQXQoMCk9PT0iQCI/SXQoe2ZpbGU6b3Iu cmVzb2x2ZShzLmN3ZCxlLnNsaWNlKDEpKSxzeW5jOiEwLG5vUmVzdW1lOiEwLG9uUmVhZEVudHJ5 Omk9PnMuYWRkKGkpfSk6cy5hZGQoZSl9KSxzLmVuZCgpfSxhcj1hc3luYyhzLHQpPT57Zm9yKGxl dCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPVN0cmluZyh0W2VdKTtpLmNoYXJBdCgwKT09PSJA Ij9hd2FpdCBJdCh7ZmlsZTpvci5yZXNvbHZlKFN0cmluZyhzLmN3ZCksaS5zbGljZSgxKSksbm9S ZXN1bWU6ITAsb25SZWFkRW50cnk6cj0+e3MuYWRkKHIpfX0pOnMuYWRkKGkpfXMuZW5kKCl9LEJu PShzLHQpPT57bGV0IGU9bmV3IGt0KHMpO3JldHVybiBocihlLHQpLGV9LFBuPShzLHQpPT57bGV0 IGU9bmV3IEV0KHMpO3JldHVybiBhcihlLHQpLGV9LHpuPUsodm4sTW4sQm4sUG4sKHMsdCk9Pntp ZighdD8ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIm5vIHBhdGhzIHNwZWNpZmllZCB0byBh ZGQgdG8gYXJjaGl2ZSIpfSk7aW1wb3J0IExyIGZyb20ibm9kZTpmcyI7aW1wb3J0IGlvIGZyb20i bm9kZTphc3NlcnQiO2ltcG9ydHtyYW5kb21CeXRlcyBhcyB4cn1mcm9tIm5vZGU6Y3J5cHRvIjtp bXBvcnQgdSBmcm9tIm5vZGU6ZnMiO2ltcG9ydCBSIGZyb20ibm9kZTpwYXRoIjtpbXBvcnQgbHIg ZnJvbSJmcyI7dmFyIFVuPXByb2Nlc3MuZW52Ll9fRkFLRV9QTEFURk9STV9ffHxwcm9jZXNzLnBs YXRmb3JtLEhuPVVuPT09IndpbjMyIix7T19DUkVBVDpXbixPX1RSVU5DOkduLE9fV1JPTkxZOlpu fT1sci5jb25zdGFudHMsY3I9TnVtYmVyKHByb2Nlc3MuZW52Ll9fRkFLRV9GU19PX0ZJTEVOQU1F X18pfHxsci5jb25zdGFudHMuVVZfRlNfT19GSUxFTUFQfHwwLFluPUhuJiYhIWNyLEtuPTUxMiox MDI0LFZuPWNyfEdufFdufFpuLGxzPVluP3M9PnM8S24/Vm46InciOigpPT4idyI7aW1wb3J0IHVp IGZyb20ibm9kZTpmcyI7aW1wb3J0IEVlIGZyb20ibm9kZTpwYXRoIjt2YXIgY3M9KHMsdCxlKT0+ e3RyeXtyZXR1cm4gdWkubGNob3duU3luYyhzLHQsZSl9Y2F0Y2goaSl7aWYoaT8uY29kZSE9PSJF Tk9FTlQiKXRocm93IGl9fSxkaT0ocyx0LGUsaSk9Pnt1aS5sY2hvd24ocyx0LGUscj0+e2kociYm cj8uY29kZSE9PSJFTk9FTlQiP3I6bnVsbCl9KX0sJG49KHMsdCxlLGkscik9PntpZih0LmlzRGly ZWN0b3J5KCkpZnMoRWUucmVzb2x2ZShzLHQubmFtZSksZSxpLG49PntpZihuKXJldHVybiByKG4p O2xldCBvPUVlLnJlc29sdmUocyx0Lm5hbWUpO2RpKG8sZSxpLHIpfSk7ZWxzZXtsZXQgbj1FZS5y ZXNvbHZlKHMsdC5uYW1lKTtkaShuLGUsaSxyKX19LGZzPShzLHQsZSxpKT0+e3VpLnJlYWRkaXIo cyx7d2l0aEZpbGVUeXBlczohMH0sKHIsbik9PntpZihyKXtpZihyLmNvZGU9PT0iRU5PRU5UIily ZXR1cm4gaSgpO2lmKHIuY29kZSE9PSJFTk9URElSIiYmci5jb2RlIT09IkVOT1RTVVAiKXJldHVy biBpKHIpfWlmKHJ8fCFuLmxlbmd0aClyZXR1cm4gZGkocyx0LGUsaSk7bGV0IG89bi5sZW5ndGgs aD1udWxsLGE9bD0+e2lmKCFoKXtpZihsKXJldHVybiBpKGg9bCk7aWYoLS1vPT09MClyZXR1cm4g ZGkocyx0LGUsaSl9fTtmb3IobGV0IGwgb2YgbikkbihzLGwsdCxlLGEpfSl9LFhuPShzLHQsZSxp KT0+e3QuaXNEaXJlY3RvcnkoKSYmZHMoRWUucmVzb2x2ZShzLHQubmFtZSksZSxpKSxjcyhFZS5y ZXNvbHZlKHMsdC5uYW1lKSxlLGkpfSxkcz0ocyx0LGUpPT57bGV0IGk7dHJ5e2k9dWkucmVhZGRp clN5bmMocyx7d2l0aEZpbGVUeXBlczohMH0pfWNhdGNoKHIpe2xldCBuPXI7aWYobj8uY29kZT09 PSJFTk9FTlQiKXJldHVybjtpZihuPy5jb2RlPT09IkVOT1RESVIifHxuPy5jb2RlPT09IkVOT1RT VVAiKXJldHVybiBjcyhzLHQsZSk7dGhyb3cgbn1mb3IobGV0IHIgb2YgaSlYbihzLHIsdCxlKTty ZXR1cm4gY3Mocyx0LGUpfTtpbXBvcnQgayBmcm9tIm5vZGU6ZnMiO2ltcG9ydCBxbiBmcm9tIm5v ZGU6ZnMvcHJvbWlzZXMiO2ltcG9ydCBtaSBmcm9tIm5vZGU6cGF0aCI7dmFyIHdlPWNsYXNzIGV4 dGVuZHMgRXJyb3J7cGF0aDtjb2RlO3N5c2NhbGw9ImNoZGlyIjtjb25zdHJ1Y3Rvcih0LGUpe3N1 cGVyKGAke2V9OiBDYW5ub3QgY2QgaW50byAnJHt0fSdgKSx0aGlzLnBhdGg9dCx0aGlzLmNvZGU9 ZX1nZXQgbmFtZSgpe3JldHVybiJDd2RFcnJvciJ9fTt2YXIgd3Q9Y2xhc3MgZXh0ZW5kcyBFcnJv cntwYXRoO3N5bWxpbms7c3lzY2FsbD0ic3ltbGluayI7Y29kZT0iVEFSX1NZTUxJTktfRVJST1Ii O2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoIlRBUl9TWU1MSU5LX0VSUk9SOiBDYW5ub3QgZXh0cmFj dCB0aHJvdWdoIHN5bWJvbGljIGxpbmsiKSx0aGlzLnN5bWxpbms9dCx0aGlzLnBhdGg9ZX1nZXQg bmFtZSgpe3JldHVybiJTeW1saW5rRXJyb3IifX07dmFyIGpuPShzLHQpPT57ay5zdGF0KHMsKGUs aSk9PnsoZXx8IWkuaXNEaXJlY3RvcnkoKSkmJihlPW5ldyB3ZShzLGU/LmNvZGV8fCJFTk9URElS IikpLHQoZSl9KX0sZnI9KHMsdCxlKT0+e3M9ZihzKTtsZXQgaT10LnVtYXNrPz8xOCxyPXQubW9k ZXw0NDgsbj0ociZpKSE9PTAsbz10LnVpZCxoPXQuZ2lkLGE9dHlwZW9mIG89PSJudW1iZXIiJiZ0 eXBlb2YgaD09Im51bWJlciImJihvIT09dC5wcm9jZXNzVWlkfHxoIT09dC5wcm9jZXNzR2lkKSxs PXQucHJlc2VydmUsYz10LnVubGluayxkPWYodC5jd2QpLFM9KEUseCk9PntFP2UoRSk6eCYmYT9m cyh4LG8saCxfcz0+UyhfcykpOm4/ay5jaG1vZChzLHIsZSk6ZSgpfTtpZihzPT09ZClyZXR1cm4g am4ocyxTKTtpZihsKXJldHVybiBxbi5ta2RpcihzLHttb2RlOnIscmVjdXJzaXZlOiEwfSkudGhl bihFPT5TKG51bGwsRT8/dm9pZCAwKSxTKTtsZXQgTj1mKG1pLnJlbGF0aXZlKGQscykpLnNwbGl0 KCIvIik7dXMoZCxOLHIsYyxkLHZvaWQgMCxTKX0sdXM9KHMsdCxlLGkscixuLG8pPT57aWYoIXQu bGVuZ3RoKXJldHVybiBvKG51bGwsbik7bGV0IGg9dC5zaGlmdCgpLGE9ZihtaS5yZXNvbHZlKHMr Ii8iK2gpKTtrLm1rZGlyKGEsZSxkcihhLHQsZSxpLHIsbixvKSl9LGRyPShzLHQsZSxpLHIsbixv KT0+aD0+e2g/ay5sc3RhdChzLChhLGwpPT57aWYoYSlhLnBhdGg9YS5wYXRoJiZmKGEucGF0aCks byhhKTtlbHNlIGlmKGwuaXNEaXJlY3RvcnkoKSl1cyhzLHQsZSxpLHIsbixvKTtlbHNlIGlmKGkp ay51bmxpbmsocyxjPT57aWYoYylyZXR1cm4gbyhjKTtrLm1rZGlyKHMsZSxkcihzLHQsZSxpLHIs bixvKSl9KTtlbHNle2lmKGwuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gbyhuZXcgd3QocyxzKyIv Iit0LmpvaW4oIi8iKSkpO28oaCl9fSk6KG49bnx8cyx1cyhzLHQsZSxpLHIsbixvKSl9LFFuPXM9 PntsZXQgdD0hMSxlO3RyeXt0PWsuc3RhdFN5bmMocykuaXNEaXJlY3RvcnkoKX1jYXRjaChpKXtl PWk/LmNvZGV9ZmluYWxseXtpZighdCl0aHJvdyBuZXcgd2UocyxlPz8iRU5PVERJUiIpfX0sdXI9 KHMsdCk9PntzPWYocyk7bGV0IGU9dC51bWFzaz8/MTgsaT10Lm1vZGV8NDQ4LHI9KGkmZSkhPT0w LG49dC51aWQsbz10LmdpZCxoPXR5cGVvZiBuPT0ibnVtYmVyIiYmdHlwZW9mIG89PSJudW1iZXIi JiYobiE9PXQucHJvY2Vzc1VpZHx8byE9PXQucHJvY2Vzc0dpZCksYT10LnByZXNlcnZlLGw9dC51 bmxpbmssYz1mKHQuY3dkKSxkPUU9PntFJiZoJiZkcyhFLG4sbyksciYmay5jaG1vZFN5bmMocyxp KX07aWYocz09PWMpcmV0dXJuIFFuKGMpLGQoKTtpZihhKXJldHVybiBkKGsubWtkaXJTeW5jKHMs e21vZGU6aSxyZWN1cnNpdmU6ITB9KT8/dm9pZCAwKTtsZXQgVD1mKG1pLnJlbGF0aXZlKGMscykp LnNwbGl0KCIvIiksTjtmb3IobGV0IEU9VC5zaGlmdCgpLHg9YztFJiYoeCs9Ii8iK0UpO0U9VC5z aGlmdCgpKXt4PWYobWkucmVzb2x2ZSh4KSk7dHJ5e2subWtkaXJTeW5jKHgsaSksTj1OfHx4fWNh dGNoe2xldCBPcz1rLmxzdGF0U3luYyh4KTtpZihPcy5pc0RpcmVjdG9yeSgpKWNvbnRpbnVlO2lm KGwpe2sudW5saW5rU3luYyh4KSxrLm1rZGlyU3luYyh4LGkpLE49Tnx8eDtjb250aW51ZX1lbHNl IGlmKE9zLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIG5ldyB3dCh4LHgrIi8iK1Quam9pbigiLyIp KX19cmV0dXJuIGQoTil9O2ltcG9ydHtqb2luIGFzIEVyfWZyb20ibm9kZTpwYXRoIjt2YXIgbXM9 T2JqZWN0LmNyZWF0ZShudWxsKSxtcj0xZTQsJHQ9bmV3IFNldCxwcj1zPT57JHQuaGFzKHMpPyR0 LmRlbGV0ZShzKTptc1tzXT1zLm5vcm1hbGl6ZSgiTkZEIikudG9Mb2NhbGVMb3dlckNhc2UoImVu IikudG9Mb2NhbGVVcHBlckNhc2UoImVuIiksJHQuYWRkKHMpO2xldCB0PW1zW3NdLGU9JHQuc2l6 ZS1tcjtpZihlPm1yLzEwKXtmb3IobGV0IGkgb2YgJHQpaWYoJHQuZGVsZXRlKGkpLGRlbGV0ZSBt c1tpXSwtLWU8PTApYnJlYWt9cmV0dXJuIHR9O3ZhciBKbj1wcm9jZXNzLmVudi5URVNUSU5HX1RB Ul9GQUtFX1BMQVRGT1JNfHxwcm9jZXNzLnBsYXRmb3JtLHRvPUpuPT09IndpbjMyIixlbz1zPT5z LnNwbGl0KCIvIikuc2xpY2UoMCwtMSkucmVkdWNlKChlLGkpPT57bGV0IHI9ZVtlLmxlbmd0aC0x XTtyZXR1cm4gciE9PXZvaWQgMCYmKGk9RXIocixpKSksZS5wdXNoKGl8fCIvIiksZX0sW10pLHBp PWNsYXNzeyN0PW5ldyBNYXA7I2k9bmV3IE1hcDsjcz1uZXcgU2V0O3Jlc2VydmUodCxlKXt0PXRv P1sid2luMzIgcGFyYWxsZWxpemF0aW9uIGRpc2FibGVkIl06dC5tYXAocj0+bXQoRXIocHIocikp KSk7bGV0IGk9bmV3IFNldCh0Lm1hcChyPT5lbyhyKSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChu KSkpO3RoaXMuI2kuc2V0KGUse2RpcnM6aSxwYXRoczp0fSk7Zm9yKGxldCByIG9mIHQpe2xldCBu PXRoaXMuI3QuZ2V0KHIpO24/bi5wdXNoKGUpOnRoaXMuI3Quc2V0KHIsW2VdKX1mb3IobGV0IHIg b2YgaSl7bGV0IG49dGhpcy4jdC5nZXQocik7aWYoIW4pdGhpcy4jdC5zZXQocixbbmV3IFNldChb ZV0pXSk7ZWxzZXtsZXQgbz1uW24ubGVuZ3RoLTFdO28gaW5zdGFuY2VvZiBTZXQ/by5hZGQoZSk6 bi5wdXNoKG5ldyBTZXQoW2VdKSl9fXJldHVybiB0aGlzLiNyKGUpfSNuKHQpe2xldCBlPXRoaXMu I2kuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBh bnkgcGF0aCByZXNlcnZhdGlvbnMiKTtyZXR1cm57cGF0aHM6ZS5wYXRocy5tYXAoaT0+dGhpcy4j dC5nZXQoaSkpLGRpcnM6Wy4uLmUuZGlyc10ubWFwKGk9PnRoaXMuI3QuZ2V0KGkpKX19Y2hlY2so dCl7bGV0e3BhdGhzOmUsZGlyczppfT10aGlzLiNuKHQpO3JldHVybiBlLmV2ZXJ5KHI9PnImJnJb MF09PT10KSYmaS5ldmVyeShyPT5yJiZyWzBdaW5zdGFuY2VvZiBTZXQmJnJbMF0uaGFzKHQpKX0j cih0KXtyZXR1cm4gdGhpcy4jcy5oYXModCl8fCF0aGlzLmNoZWNrKHQpPyExOih0aGlzLiNzLmFk ZCh0KSx0KCgpPT50aGlzLiNlKHQpKSwhMCl9I2UodCl7aWYoIXRoaXMuI3MuaGFzKHQpKXJldHVy biExO2xldCBlPXRoaXMuI2kuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBy ZXNlcnZhdGlvbiIpO2xldHtwYXRoczppLGRpcnM6cn09ZSxuPW5ldyBTZXQ7Zm9yKGxldCBvIG9m IGkpe2xldCBoPXRoaXMuI3QuZ2V0KG8pO2lmKCFofHxoPy5bMF0hPT10KWNvbnRpbnVlO2xldCBh PWhbMV07aWYoIWEpe3RoaXMuI3QuZGVsZXRlKG8pO2NvbnRpbnVlfWlmKGguc2hpZnQoKSx0eXBl b2YgYT09ImZ1bmN0aW9uIiluLmFkZChhKTtlbHNlIGZvcihsZXQgbCBvZiBhKW4uYWRkKGwpfWZv cihsZXQgbyBvZiByKXtsZXQgaD10aGlzLiN0LmdldChvKSxhPWg/LlswXTtpZighKCFofHwhKGEg aW5zdGFuY2VvZiBTZXQpKSlpZihhLnNpemU9PT0xJiZoLmxlbmd0aD09PTEpe3RoaXMuI3QuZGVs ZXRlKG8pO2NvbnRpbnVlfWVsc2UgaWYoYS5zaXplPT09MSl7aC5zaGlmdCgpO2xldCBsPWhbMF07 dHlwZW9mIGw9PSJmdW5jdGlvbiImJm4uYWRkKGwpfWVsc2UgYS5kZWxldGUodCl9cmV0dXJuIHRo aXMuI3MuZGVsZXRlKHQpLG4uZm9yRWFjaChvPT50aGlzLiNyKG8pKSwhMH19O3ZhciB3cj0oKT0+ cHJvY2Vzcy51bWFzaygpO3ZhciBTcj1TeW1ib2woIm9uRW50cnkiKSxTcz1TeW1ib2woImNoZWNr RnMiKSx5cj1TeW1ib2woImNoZWNrRnMyIikseXM9U3ltYm9sKCJpc1JldXNhYmxlIiksUD1TeW1i b2woIm1ha2VGcyIpLFJzPVN5bWJvbCgiZmlsZSIpLGJzPVN5bWJvbCgiZGlyZWN0b3J5Iiksd2k9 U3ltYm9sKCJsaW5rIiksUnI9U3ltYm9sKCJzeW1saW5rIiksYnI9U3ltYm9sKCJoYXJkbGluayIp LHllPVN5bWJvbCgiZW5zdXJlTm9TeW1saW5rIiksZ3I9U3ltYm9sKCJ1bnN1cHBvcnRlZCIpLF9y PVN5bWJvbCgiY2hlY2tQYXRoIikscHM9U3ltYm9sKCJzdHJpcEFic29sdXRlUGF0aCIpLFN0PVN5 bWJvbCgibWtkaXIiKSxPPVN5bWJvbCgib25FcnJvciIpLEVpPVN5bWJvbCgicGVuZGluZyIpLE9y PVN5bWJvbCgicGVuZCIpLFh0PVN5bWJvbCgidW5wZW5kIiksRXM9U3ltYm9sKCJlbmRlZCIpLHdz PVN5bWJvbCgibWF5YmVDbG9zZSIpLGdzPVN5bWJvbCgic2tpcCIpLFJlPVN5bWJvbCgiZG9DaG93 biIpLGJlPVN5bWJvbCgidWlkIiksZ2U9U3ltYm9sKCJnaWQiKSxfZT1TeW1ib2woImNoZWNrZWRD d2QiKSxzbz1wcm9jZXNzLmVudi5URVNUSU5HX1RBUl9GQUtFX1BMQVRGT1JNfHxwcm9jZXNzLnBs YXRmb3JtLE9lPXNvPT09IndpbjMyIixybz0xMDI0LG5vPShzLHQpPT57aWYoIU9lKXJldHVybiB1 LnVubGluayhzLHQpO2xldCBlPXMrIi5ERUxFVEUuIit4cigxNikudG9TdHJpbmcoImhleCIpO3Uu cmVuYW1lKHMsZSxpPT57aWYoaSlyZXR1cm4gdChpKTt1LnVubGluayhlLHQpfSl9LG9vPXM9Pntp ZighT2UpcmV0dXJuIHUudW5saW5rU3luYyhzKTtsZXQgdD1zKyIuREVMRVRFLiIreHIoMTYpLnRv U3RyaW5nKCJoZXgiKTt1LnJlbmFtZVN5bmMocyx0KSx1LnVubGlua1N5bmModCl9LFRyPShzLHQs ZSk9PnMhPT12b2lkIDAmJnM9PT1zPj4+MD9zOnQhPT12b2lkIDAmJnQ9PT10Pj4+MD90OmUscXQ9 Y2xhc3MgZXh0ZW5kcyBzdHtbRXNdPSExO1tfZV09ITE7W0VpXT0wO3Jlc2VydmF0aW9ucz1uZXcg cGk7dHJhbnNmb3JtO3dyaXRhYmxlPSEwO3JlYWRhYmxlPSExO3VpZDtnaWQ7c2V0T3duZXI7cHJl c2VydmVPd25lcjtwcm9jZXNzR2lkO3Byb2Nlc3NVaWQ7bWF4RGVwdGg7Zm9yY2VDaG93bjt3aW4z MjtuZXdlcjtrZWVwO25vTXRpbWU7cHJlc2VydmVQYXRoczt1bmxpbms7Y3dkO3N0cmlwO3Byb2Nl c3NVbWFzazt1bWFzaztkbW9kZTtmbW9kZTtjaG1vZDtjb25zdHJ1Y3Rvcih0PXt9KXtpZih0Lm9u ZG9uZT0oKT0+e3RoaXNbRXNdPSEwLHRoaXNbd3NdKCl9LHN1cGVyKHQpLHRoaXMudHJhbnNmb3Jt PXQudHJhbnNmb3JtLHRoaXMuY2htb2Q9ISF0LmNobW9kLHR5cGVvZiB0LnVpZD09Im51bWJlciJ8 fHR5cGVvZiB0LmdpZD09Im51bWJlciIpe2lmKHR5cGVvZiB0LnVpZCE9Im51bWJlciJ8fHR5cGVv ZiB0LmdpZCE9Im51bWJlciIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2Fubm90IHNldCBvd25lciB3 aXRob3V0IG51bWJlciB1aWQgYW5kIGdpZCIpO2lmKHQucHJlc2VydmVPd25lcil0aHJvdyBuZXcg VHlwZUVycm9yKCJjYW5ub3QgcHJlc2VydmUgb3duZXIgaW4gYXJjaGl2ZSBhbmQgYWxzbyBzZXQg b3duZXIgZXhwbGljaXRseSIpO3RoaXMudWlkPXQudWlkLHRoaXMuZ2lkPXQuZ2lkLHRoaXMuc2V0 T3duZXI9ITB9ZWxzZSB0aGlzLnVpZD12b2lkIDAsdGhpcy5naWQ9dm9pZCAwLHRoaXMuc2V0T3du ZXI9ITE7dC5wcmVzZXJ2ZU93bmVyPT09dm9pZCAwJiZ0eXBlb2YgdC51aWQhPSJudW1iZXIiP3Ro aXMucHJlc2VydmVPd25lcj0hIShwcm9jZXNzLmdldHVpZCYmcHJvY2Vzcy5nZXR1aWQoKT09PTAp OnRoaXMucHJlc2VydmVPd25lcj0hIXQucHJlc2VydmVPd25lcix0aGlzLnByb2Nlc3NVaWQ9KHRo aXMucHJlc2VydmVPd25lcnx8dGhpcy5zZXRPd25lcikmJnByb2Nlc3MuZ2V0dWlkP3Byb2Nlc3Mu Z2V0dWlkKCk6dm9pZCAwLHRoaXMucHJvY2Vzc0dpZD0odGhpcy5wcmVzZXJ2ZU93bmVyfHx0aGlz LnNldE93bmVyKSYmcHJvY2Vzcy5nZXRnaWQ/cHJvY2Vzcy5nZXRnaWQoKTp2b2lkIDAsdGhpcy5t YXhEZXB0aD10eXBlb2YgdC5tYXhEZXB0aD09Im51bWJlciI/dC5tYXhEZXB0aDpybyx0aGlzLmZv cmNlQ2hvd249dC5mb3JjZUNob3duPT09ITAsdGhpcy53aW4zMj0hIXQud2luMzJ8fE9lLHRoaXMu bmV3ZXI9ISF0Lm5ld2VyLHRoaXMua2VlcD0hIXQua2VlcCx0aGlzLm5vTXRpbWU9ISF0Lm5vTXRp bWUsdGhpcy5wcmVzZXJ2ZVBhdGhzPSEhdC5wcmVzZXJ2ZVBhdGhzLHRoaXMudW5saW5rPSEhdC51 bmxpbmssdGhpcy5jd2Q9ZihSLnJlc29sdmUodC5jd2R8fHByb2Nlc3MuY3dkKCkpKSx0aGlzLnN0 cmlwPU51bWJlcih0LnN0cmlwKXx8MCx0aGlzLnByb2Nlc3NVbWFzaz10aGlzLmNobW9kP3R5cGVv ZiB0LnByb2Nlc3NVbWFzaz09Im51bWJlciI/dC5wcm9jZXNzVW1hc2s6d3IoKTowLHRoaXMudW1h c2s9dHlwZW9mIHQudW1hc2s9PSJudW1iZXIiP3QudW1hc2s6dGhpcy5wcm9jZXNzVW1hc2ssdGhp cy5kbW9kZT10LmRtb2RlfHw1MTEmfnRoaXMudW1hc2ssdGhpcy5mbW9kZT10LmZtb2RlfHw0Mzgm fnRoaXMudW1hc2ssdGhpcy5vbigiZW50cnkiLGU9PnRoaXNbU3JdKGUpKX13YXJuKHQsZSxpPXt9 KXtyZXR1cm4odD09PSJUQVJfQkFEX0FSQ0hJVkUifHx0PT09IlRBUl9BQk9SVCIpJiYoaS5yZWNv dmVyYWJsZT0hMSksc3VwZXIud2Fybih0LGUsaSl9W3dzXSgpe3RoaXNbRXNdJiZ0aGlzW0VpXT09 PTAmJih0aGlzLmVtaXQoInByZWZpbmlzaCIpLHRoaXMuZW1pdCgiZmluaXNoIiksdGhpcy5lbWl0 KCJlbmQiKSl9W3BzXSh0LGUpe2xldCBpPXRbZV0se3R5cGU6cn09dDtpZighaXx8dGhpcy5wcmVz ZXJ2ZVBhdGhzKXJldHVybiEwO2xldFtuLG9dPWNlKGkpLGg9by5yZXBsYWNlKC9cXC9nLCIvIiku c3BsaXQoIi8iKTtpZihoLmluY2x1ZGVzKCIuLiIpfHxPZSYmL15bYS16XTpcLlwuJC9pLnRlc3Qo aFswXT8/IiIpKXtpZihlPT09InBhdGgifHxyPT09IkxpbmsiKXJldHVybiB0aGlzLndhcm4oIlRB Ul9FTlRSWV9FUlJPUiIsYCR7ZX0gY29udGFpbnMgJy4uJ2Ase2VudHJ5OnQsW2VdOml9KSwhMTt7 bGV0IGE9Ui5wb3NpeC5kaXJuYW1lKHQucGF0aCksbD1SLnBvc2l4Lm5vcm1hbGl6ZShSLnBvc2l4 LmpvaW4oYSxoLmpvaW4oIi8iKSkpO2lmKGwuc3RhcnRzV2l0aCgiLi4vIil8fGw9PT0iLi4iKXJl dHVybiB0aGlzLndhcm4oIlRBUl9FTlRSWV9FUlJPUiIsYCR7ZX0gZXNjYXBlcyBleHRyYWN0aW9u IGRpcmVjdG9yeWAse2VudHJ5OnQsW2VdOml9KSwhMX19cmV0dXJuIG4mJih0W2VdPVN0cmluZyhv KSx0aGlzLndhcm4oIlRBUl9FTlRSWV9JTkZPIixgc3RyaXBwaW5nICR7bn0gZnJvbSBhYnNvbHV0 ZSAke2V9YCx7ZW50cnk6dCxbZV06aX0pKSwhMH1bX3JdKHQpe2xldCBlPWYodC5wYXRoKSxpPWUu c3BsaXQoIi8iKTtpZih0aGlzLnN0cmlwKXtpZihpLmxlbmd0aDx0aGlzLnN0cmlwKXJldHVybiEx O2lmKHQudHlwZT09PSJMaW5rIil7bGV0IHI9ZihTdHJpbmcodC5saW5rcGF0aCkpLnNwbGl0KCIv Iik7aWYoci5sZW5ndGg+PXRoaXMuc3RyaXApdC5saW5rcGF0aD1yLnNsaWNlKHRoaXMuc3RyaXAp LmpvaW4oIi8iKTtlbHNlIHJldHVybiExfWkuc3BsaWNlKDAsdGhpcy5zdHJpcCksdC5wYXRoPWku am9pbigiLyIpfWlmKGlzRmluaXRlKHRoaXMubWF4RGVwdGgpJiZpLmxlbmd0aD50aGlzLm1heERl cHRoKXJldHVybiB0aGlzLndhcm4oIlRBUl9FTlRSWV9FUlJPUiIsInBhdGggZXhjZXNzaXZlbHkg ZGVlcCIse2VudHJ5OnQscGF0aDplLGRlcHRoOmkubGVuZ3RoLG1heERlcHRoOnRoaXMubWF4RGVw dGh9KSwhMTtpZighdGhpc1twc10odCwicGF0aCIpfHwhdGhpc1twc10odCwibGlua3BhdGgiKSly ZXR1cm4hMTtpZihSLmlzQWJzb2x1dGUodC5wYXRoKT90LmFic29sdXRlPWYoUi5yZXNvbHZlKHQu cGF0aCkpOnQuYWJzb2x1dGU9ZihSLnJlc29sdmUodGhpcy5jd2QsdC5wYXRoKSksIXRoaXMucHJl c2VydmVQYXRocyYmdHlwZW9mIHQuYWJzb2x1dGU9PSJzdHJpbmciJiZ0LmFic29sdXRlLmluZGV4 T2YodGhpcy5jd2QrIi8iKSE9PTAmJnQuYWJzb2x1dGUhPT10aGlzLmN3ZClyZXR1cm4gdGhpcy53 YXJuKCJUQVJfRU5UUllfRVJST1IiLCJwYXRoIGVzY2FwZWQgZXh0cmFjdGlvbiB0YXJnZXQiLHtl bnRyeTp0LHBhdGg6Zih0LnBhdGgpLHJlc29sdmVkUGF0aDp0LmFic29sdXRlLGN3ZDp0aGlzLmN3 ZH0pLCExO2lmKHQuYWJzb2x1dGU9PT10aGlzLmN3ZCYmdC50eXBlIT09IkRpcmVjdG9yeSImJnQu dHlwZSE9PSJHTlVEdW1wRGlyIilyZXR1cm4hMTtpZih0aGlzLndpbjMyKXtsZXR7cm9vdDpyfT1S LndpbjMyLnBhcnNlKFN0cmluZyh0LmFic29sdXRlKSk7dC5hYnNvbHV0ZT1yKyRpKFN0cmluZyh0 LmFic29sdXRlKS5zbGljZShyLmxlbmd0aCkpO2xldHtyb290Om59PVIud2luMzIucGFyc2UodC5w YXRoKTt0LnBhdGg9biskaSh0LnBhdGguc2xpY2Uobi5sZW5ndGgpKX1yZXR1cm4hMH1bU3JdKHQp e2lmKCF0aGlzW19yXSh0KSlyZXR1cm4gdC5yZXN1bWUoKTtzd2l0Y2goaW8uZXF1YWwodHlwZW9m IHQuYWJzb2x1dGUsInN0cmluZyIpLHQudHlwZSl7Y2FzZSJEaXJlY3RvcnkiOmNhc2UiR05VRHVt cERpciI6dC5tb2RlJiYodC5tb2RlPXQubW9kZXw0NDgpO2Nhc2UiRmlsZSI6Y2FzZSJPbGRGaWxl IjpjYXNlIkNvbnRpZ3VvdXNGaWxlIjpjYXNlIkxpbmsiOmNhc2UiU3ltYm9saWNMaW5rIjpyZXR1 cm4gdGhpc1tTc10odCk7ZGVmYXVsdDpyZXR1cm4gdGhpc1tncl0odCl9fVtPXSh0LGUpe3QubmFt ZT09PSJDd2RFcnJvciI/dGhpcy5lbWl0KCJlcnJvciIsdCk6KHRoaXMud2FybigiVEFSX0VOVFJZ X0VSUk9SIix0LHtlbnRyeTplfSksdGhpc1tYdF0oKSxlLnJlc3VtZSgpKX1bU3RdKHQsZSxpKXtm cihmKHQpLHt1aWQ6dGhpcy51aWQsZ2lkOnRoaXMuZ2lkLHByb2Nlc3NVaWQ6dGhpcy5wcm9jZXNz VWlkLHByb2Nlc3NHaWQ6dGhpcy5wcm9jZXNzR2lkLHVtYXNrOnRoaXMucHJvY2Vzc1VtYXNrLHBy ZXNlcnZlOnRoaXMucHJlc2VydmVQYXRocyx1bmxpbms6dGhpcy51bmxpbmssY3dkOnRoaXMuY3dk LG1vZGU6ZX0saSl9W1JlXSh0KXtyZXR1cm4gdGhpcy5mb3JjZUNob3dufHx0aGlzLnByZXNlcnZl T3duZXImJih0eXBlb2YgdC51aWQ9PSJudW1iZXIiJiZ0LnVpZCE9PXRoaXMucHJvY2Vzc1VpZHx8 dHlwZW9mIHQuZ2lkPT0ibnVtYmVyIiYmdC5naWQhPT10aGlzLnByb2Nlc3NHaWQpfHx0eXBlb2Yg dGhpcy51aWQ9PSJudW1iZXIiJiZ0aGlzLnVpZCE9PXRoaXMucHJvY2Vzc1VpZHx8dHlwZW9mIHRo aXMuZ2lkPT0ibnVtYmVyIiYmdGhpcy5naWQhPT10aGlzLnByb2Nlc3NHaWR9W2JlXSh0KXtyZXR1 cm4gVHIodGhpcy51aWQsdC51aWQsdGhpcy5wcm9jZXNzVWlkKX1bZ2VdKHQpe3JldHVybiBUcih0 aGlzLmdpZCx0LmdpZCx0aGlzLnByb2Nlc3NHaWQpfVtSc10odCxlKXtsZXQgaT10eXBlb2YgdC5t b2RlPT0ibnVtYmVyIj90Lm1vZGUmNDA5NTp0aGlzLmZtb2RlLHI9bmV3IHR0KFN0cmluZyh0LmFi c29sdXRlKSx7ZmxhZ3M6bHModC5zaXplKSxtb2RlOmksYXV0b0Nsb3NlOiExfSk7ci5vbigiZXJy b3IiLGE9PntyLmZkJiZ1LmNsb3NlKHIuZmQsKCk9Pnt9KSxyLndyaXRlPSgpPT4hMCx0aGlzW09d KGEsdCksZSgpfSk7bGV0IG49MSxvPWE9PntpZihhKXtyLmZkJiZ1LmNsb3NlKHIuZmQsKCk9Pnt9 KSx0aGlzW09dKGEsdCksZSgpO3JldHVybn0tLW49PT0wJiZyLmZkIT09dm9pZCAwJiZ1LmNsb3Nl KHIuZmQsbD0+e2w/dGhpc1tPXShsLHQpOnRoaXNbWHRdKCksZSgpfSl9O3Iub24oImZpbmlzaCIs KCk9PntsZXQgYT1TdHJpbmcodC5hYnNvbHV0ZSksbD1yLmZkO2lmKHR5cGVvZiBsPT0ibnVtYmVy IiYmdC5tdGltZSYmIXRoaXMubm9NdGltZSl7bisrO2xldCBjPXQuYXRpbWV8fG5ldyBEYXRlLGQ9 dC5tdGltZTt1LmZ1dGltZXMobCxjLGQsUz0+Uz91LnV0aW1lcyhhLGMsZCxUPT5vKFQmJlMpKTpv KCkpfWlmKHR5cGVvZiBsPT0ibnVtYmVyIiYmdGhpc1tSZV0odCkpe24rKztsZXQgYz10aGlzW2Jl XSh0KSxkPXRoaXNbZ2VdKHQpO3R5cGVvZiBjPT0ibnVtYmVyIiYmdHlwZW9mIGQ9PSJudW1iZXIi JiZ1LmZjaG93bihsLGMsZCxTPT5TP3UuY2hvd24oYSxjLGQsVD0+byhUJiZTKSk6bygpKX1vKCl9 KTtsZXQgaD10aGlzLnRyYW5zZm9ybSYmdGhpcy50cmFuc2Zvcm0odCl8fHQ7aCE9PXQmJihoLm9u KCJlcnJvciIsYT0+e3RoaXNbT10oYSx0KSxlKCl9KSx0LnBpcGUoaCkpLGgucGlwZShyKX1bYnNd KHQsZSl7bGV0IGk9dHlwZW9mIHQubW9kZT09Im51bWJlciI/dC5tb2RlJjQwOTU6dGhpcy5kbW9k ZTt0aGlzW1N0XShTdHJpbmcodC5hYnNvbHV0ZSksaSxyPT57aWYocil7dGhpc1tPXShyLHQpLGUo KTtyZXR1cm59bGV0IG49MSxvPSgpPT57LS1uPT09MCYmKGUoKSx0aGlzW1h0XSgpLHQucmVzdW1l KCkpfTt0Lm10aW1lJiYhdGhpcy5ub010aW1lJiYobisrLHUudXRpbWVzKFN0cmluZyh0LmFic29s dXRlKSx0LmF0aW1lfHxuZXcgRGF0ZSx0Lm10aW1lLG8pKSx0aGlzW1JlXSh0KSYmKG4rKyx1LmNo b3duKFN0cmluZyh0LmFic29sdXRlKSxOdW1iZXIodGhpc1tiZV0odCkpLE51bWJlcih0aGlzW2dl XSh0KSksbykpLG8oKX0pfVtncl0odCl7dC51bnN1cHBvcnRlZD0hMCx0aGlzLndhcm4oIlRBUl9F TlRSWV9VTlNVUFBPUlRFRCIsYHVuc3VwcG9ydGVkIGVudHJ5IHR5cGU6ICR7dC50eXBlfWAse2Vu dHJ5OnR9KSx0LnJlc3VtZSgpfVtScl0odCxlKXtsZXQgaT1mKFIucmVsYXRpdmUodGhpcy5jd2Qs Ui5yZXNvbHZlKFIuZGlybmFtZShTdHJpbmcodC5hYnNvbHV0ZSkpLFN0cmluZyh0LmxpbmtwYXRo KSkpKS5zcGxpdCgiLyIpO3RoaXNbeWVdKHQsdGhpcy5jd2QsaSwoKT0+dGhpc1t3aV0odCxTdHJp bmcodC5saW5rcGF0aCksInN5bWxpbmsiLGUpLHI9Pnt0aGlzW09dKHIsdCksZSgpfSl9W2JyXSh0 LGUpe2xldCBpPWYoUi5yZXNvbHZlKHRoaXMuY3dkLFN0cmluZyh0LmxpbmtwYXRoKSkpLHI9ZihT dHJpbmcodC5saW5rcGF0aCkpLnNwbGl0KCIvIik7dGhpc1t5ZV0odCx0aGlzLmN3ZCxyLCgpPT50 aGlzW3dpXSh0LGksImxpbmsiLGUpLG49Pnt0aGlzW09dKG4sdCksZSgpfSl9W3llXSh0LGUsaSxy LG4pe2xldCBvPWkuc2hpZnQoKTtpZih0aGlzLnByZXNlcnZlUGF0aHN8fG89PT12b2lkIDApcmV0 dXJuIHIoKTtsZXQgaD1SLnJlc29sdmUoZSxvKTt1LmxzdGF0KGgsKGEsbCk9PntpZihhKXJldHVy biByKCk7aWYobD8uaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gbihuZXcgd3QoaCxSLnJlc29sdmUo aCxpLmpvaW4oIi8iKSkpKTt0aGlzW3llXSh0LGgsaSxyLG4pfSl9W09yXSgpe3RoaXNbRWldKyt9 W1h0XSgpe3RoaXNbRWldLS0sdGhpc1t3c10oKX1bZ3NdKHQpe3RoaXNbWHRdKCksdC5yZXN1bWUo KX1beXNdKHQsZSl7cmV0dXJuIHQudHlwZT09PSJGaWxlIiYmIXRoaXMudW5saW5rJiZlLmlzRmls ZSgpJiZlLm5saW5rPD0xJiYhT2V9W1NzXSh0KXt0aGlzW09yXSgpO2xldCBlPVt0LnBhdGhdO3Qu bGlua3BhdGgmJmUucHVzaCh0LmxpbmtwYXRoKSx0aGlzLnJlc2VydmF0aW9ucy5yZXNlcnZlKGUs aT0+dGhpc1t5cl0odCxpKSl9W3lyXSh0LGUpe2xldCBpPWg9PntlKGgpfSxyPSgpPT57dGhpc1tT dF0odGhpcy5jd2QsdGhpcy5kbW9kZSxoPT57aWYoaCl7dGhpc1tPXShoLHQpLGkoKTtyZXR1cm59 dGhpc1tfZV09ITAsbigpfSl9LG49KCk9PntpZih0LmFic29sdXRlIT09dGhpcy5jd2Qpe2xldCBo PWYoUi5kaXJuYW1lKFN0cmluZyh0LmFic29sdXRlKSkpO2lmKGghPT10aGlzLmN3ZClyZXR1cm4g dGhpc1tTdF0oaCx0aGlzLmRtb2RlLGE9PntpZihhKXt0aGlzW09dKGEsdCksaSgpO3JldHVybn1v KCl9KX1vKCl9LG89KCk9Pnt1LmxzdGF0KFN0cmluZyh0LmFic29sdXRlKSwoaCxhKT0+e2lmKGEm Jih0aGlzLmtlZXB8fHRoaXMubmV3ZXImJmEubXRpbWU+KHQubXRpbWU/P2EubXRpbWUpKSl7dGhp c1tnc10odCksaSgpO3JldHVybn1pZihofHx0aGlzW3lzXSh0LGEpKXJldHVybiB0aGlzW1BdKG51 bGwsdCxpKTtpZihhLmlzRGlyZWN0b3J5KCkpe2lmKHQudHlwZT09PSJEaXJlY3RvcnkiKXtsZXQg bD10aGlzLmNobW9kJiZ0Lm1vZGUmJihhLm1vZGUmNDA5NSkhPT10Lm1vZGUsYz1kPT50aGlzW1Bd KGQ/P251bGwsdCxpKTtyZXR1cm4gbD91LmNobW9kKFN0cmluZyh0LmFic29sdXRlKSxOdW1iZXIo dC5tb2RlKSxjKTpjKCl9aWYodC5hYnNvbHV0ZSE9PXRoaXMuY3dkKXJldHVybiB1LnJtZGlyKFN0 cmluZyh0LmFic29sdXRlKSxsPT50aGlzW1BdKGw/P251bGwsdCxpKSl9aWYodC5hYnNvbHV0ZT09 PXRoaXMuY3dkKXJldHVybiB0aGlzW1BdKG51bGwsdCxpKTtubyhTdHJpbmcodC5hYnNvbHV0ZSks bD0+dGhpc1tQXShsPz9udWxsLHQsaSkpfSl9O3RoaXNbX2VdP24oKTpyKCl9W1BdKHQsZSxpKXtp Zih0KXt0aGlzW09dKHQsZSksaSgpO3JldHVybn1zd2l0Y2goZS50eXBlKXtjYXNlIkZpbGUiOmNh c2UiT2xkRmlsZSI6Y2FzZSJDb250aWd1b3VzRmlsZSI6cmV0dXJuIHRoaXNbUnNdKGUsaSk7Y2Fz ZSJMaW5rIjpyZXR1cm4gdGhpc1ticl0oZSxpKTtjYXNlIlN5bWJvbGljTGluayI6cmV0dXJuIHRo aXNbUnJdKGUsaSk7Y2FzZSJEaXJlY3RvcnkiOmNhc2UiR05VRHVtcERpciI6cmV0dXJuIHRoaXNb YnNdKGUsaSl9fVt3aV0odCxlLGkscil7dVtpXShlLFN0cmluZyh0LmFic29sdXRlKSxuPT57bj90 aGlzW09dKG4sdCk6KHRoaXNbWHRdKCksdC5yZXN1bWUoKSkscigpfSl9fSxTZT1zPT57dHJ5e3Jl dHVybltudWxsLHMoKV19Y2F0Y2godCl7cmV0dXJuW3QsbnVsbF19fSxUZT1jbGFzcyBleHRlbmRz IHF0e3N5bmM9ITA7W1BdKHQsZSl7cmV0dXJuIHN1cGVyW1BdKHQsZSwoKT0+e30pfVtTc10odCl7 aWYoIXRoaXNbX2VdKXtsZXQgbj10aGlzW1N0XSh0aGlzLmN3ZCx0aGlzLmRtb2RlKTtpZihuKXJl dHVybiB0aGlzW09dKG4sdCk7dGhpc1tfZV09ITB9aWYodC5hYnNvbHV0ZSE9PXRoaXMuY3dkKXts ZXQgbj1mKFIuZGlybmFtZShTdHJpbmcodC5hYnNvbHV0ZSkpKTtpZihuIT09dGhpcy5jd2Qpe2xl dCBvPXRoaXNbU3RdKG4sdGhpcy5kbW9kZSk7aWYobylyZXR1cm4gdGhpc1tPXShvLHQpfX1sZXRb ZSxpXT1TZSgoKT0+dS5sc3RhdFN5bmMoU3RyaW5nKHQuYWJzb2x1dGUpKSk7aWYoaSYmKHRoaXMu a2VlcHx8dGhpcy5uZXdlciYmaS5tdGltZT4odC5tdGltZT8/aS5tdGltZSkpKXJldHVybiB0aGlz W2dzXSh0KTtpZihlfHx0aGlzW3lzXSh0LGkpKXJldHVybiB0aGlzW1BdKG51bGwsdCk7aWYoaS5p c0RpcmVjdG9yeSgpKXtpZih0LnR5cGU9PT0iRGlyZWN0b3J5Iil7bGV0IG89dGhpcy5jaG1vZCYm dC5tb2RlJiYoaS5tb2RlJjQwOTUpIT09dC5tb2RlLFtoXT1vP1NlKCgpPT57dS5jaG1vZFN5bmMo U3RyaW5nKHQuYWJzb2x1dGUpLE51bWJlcih0Lm1vZGUpKX0pOltdO3JldHVybiB0aGlzW1BdKGgs dCl9bGV0W25dPVNlKCgpPT51LnJtZGlyU3luYyhTdHJpbmcodC5hYnNvbHV0ZSkpKTt0aGlzW1Bd KG4sdCl9bGV0W3JdPXQuYWJzb2x1dGU9PT10aGlzLmN3ZD9bXTpTZSgoKT0+b28oU3RyaW5nKHQu YWJzb2x1dGUpKSk7dGhpc1tQXShyLHQpfVtSc10odCxlKXtsZXQgaT10eXBlb2YgdC5tb2RlPT0i bnVtYmVyIj90Lm1vZGUmNDA5NTp0aGlzLmZtb2RlLHI9aD0+e2xldCBhO3RyeXt1LmNsb3NlU3lu YyhuKX1jYXRjaChsKXthPWx9KGh8fGEpJiZ0aGlzW09dKGh8fGEsdCksZSgpfSxuO3RyeXtuPXUu b3BlblN5bmMoU3RyaW5nKHQuYWJzb2x1dGUpLGxzKHQuc2l6ZSksaSl9Y2F0Y2goaCl7cmV0dXJu IHIoaCl9bGV0IG89dGhpcy50cmFuc2Zvcm0mJnRoaXMudHJhbnNmb3JtKHQpfHx0O28hPT10JiYo by5vbigiZXJyb3IiLGg9PnRoaXNbT10oaCx0KSksdC5waXBlKG8pKSxvLm9uKCJkYXRhIixoPT57 dHJ5e3Uud3JpdGVTeW5jKG4saCwwLGgubGVuZ3RoKX1jYXRjaChhKXtyKGEpfX0pLG8ub24oImVu ZCIsKCk9PntsZXQgaD1udWxsO2lmKHQubXRpbWUmJiF0aGlzLm5vTXRpbWUpe2xldCBhPXQuYXRp bWV8fG5ldyBEYXRlLGw9dC5tdGltZTt0cnl7dS5mdXRpbWVzU3luYyhuLGEsbCl9Y2F0Y2goYyl7 dHJ5e3UudXRpbWVzU3luYyhTdHJpbmcodC5hYnNvbHV0ZSksYSxsKX1jYXRjaHtoPWN9fX1pZih0 aGlzW1JlXSh0KSl7bGV0IGE9dGhpc1tiZV0odCksbD10aGlzW2dlXSh0KTt0cnl7dS5mY2hvd25T eW5jKG4sTnVtYmVyKGEpLE51bWJlcihsKSl9Y2F0Y2goYyl7dHJ5e3UuY2hvd25TeW5jKFN0cmlu Zyh0LmFic29sdXRlKSxOdW1iZXIoYSksTnVtYmVyKGwpKX1jYXRjaHtoPWh8fGN9fX1yKGgpfSl9 W2JzXSh0LGUpe2xldCBpPXR5cGVvZiB0Lm1vZGU9PSJudW1iZXIiP3QubW9kZSY0MDk1OnRoaXMu ZG1vZGUscj10aGlzW1N0XShTdHJpbmcodC5hYnNvbHV0ZSksaSk7aWYocil7dGhpc1tPXShyLHQp LGUoKTtyZXR1cm59aWYodC5tdGltZSYmIXRoaXMubm9NdGltZSl0cnl7dS51dGltZXNTeW5jKFN0 cmluZyh0LmFic29sdXRlKSx0LmF0aW1lfHxuZXcgRGF0ZSx0Lm10aW1lKX1jYXRjaHt9aWYodGhp c1tSZV0odCkpdHJ5e3UuY2hvd25TeW5jKFN0cmluZyh0LmFic29sdXRlKSxOdW1iZXIodGhpc1ti ZV0odCkpLE51bWJlcih0aGlzW2dlXSh0KSkpfWNhdGNoe31lKCksdC5yZXN1bWUoKX1bU3RdKHQs ZSl7dHJ5e3JldHVybiB1cihmKHQpLHt1aWQ6dGhpcy51aWQsZ2lkOnRoaXMuZ2lkLHByb2Nlc3NV aWQ6dGhpcy5wcm9jZXNzVWlkLHByb2Nlc3NHaWQ6dGhpcy5wcm9jZXNzR2lkLHVtYXNrOnRoaXMu cHJvY2Vzc1VtYXNrLHByZXNlcnZlOnRoaXMucHJlc2VydmVQYXRocyx1bmxpbms6dGhpcy51bmxp bmssY3dkOnRoaXMuY3dkLG1vZGU6ZX0pfWNhdGNoKGkpe3JldHVybiBpfX1beWVdKHQsZSxpLHIs bil7aWYodGhpcy5wcmVzZXJ2ZVBhdGhzfHwhaS5sZW5ndGgpcmV0dXJuIHIoKTtsZXQgbz1lO2Zv cihsZXQgaCBvZiBpKXtvPVIucmVzb2x2ZShvLGgpO2xldFthLGxdPVNlKCgpPT51LmxzdGF0U3lu YyhvKSk7aWYoYSlyZXR1cm4gcigpO2lmKGwuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gbihuZXcg d3QobyxSLnJlc29sdmUoZSxpLmpvaW4oIi8iKSkpKX1yKCl9W3dpXSh0LGUsaSxyKXtsZXQgbj1g JHtpfVN5bmNgO3RyeXt1W25dKGUsU3RyaW5nKHQuYWJzb2x1dGUpKSxyKCksdC5yZXN1bWUoKX1j YXRjaChvKXtyZXR1cm4gdGhpc1tPXShvLHQpfX19O3ZhciBobz1zPT57bGV0IHQ9bmV3IFRlKHMp LGU9cy5maWxlLGk9THIuc3RhdFN5bmMoZSkscj1zLm1heFJlYWRTaXplfHwxNioxMDI0KjEwMjQ7 bmV3IHZlKGUse3JlYWRTaXplOnIsc2l6ZTppLnNpemV9KS5waXBlKHQpfSxhbz0ocyx0KT0+e2xl dCBlPW5ldyBxdChzKSxpPXMubWF4UmVhZFNpemV8fDE2KjEwMjQqMTAyNCxyPXMuZmlsZTtyZXR1 cm4gbmV3IFByb21pc2UoKG8saCk9PntlLm9uKCJlcnJvciIsaCksZS5vbigiY2xvc2UiLG8pLExy LnN0YXQociwoYSxsKT0+e2lmKGEpaChhKTtlbHNle2xldCBjPW5ldyBndChyLHtyZWFkU2l6ZTpp LHNpemU6bC5zaXplfSk7Yy5vbigiZXJyb3IiLGgpLGMucGlwZShlKX19KX0pfSxsbz1LKGhvLGFv LHM9Pm5ldyBUZShzKSxzPT5uZXcgcXQocyksKHMsdCk9Pnt0Py5sZW5ndGgmJllpKHMsdCl9KTtp bXBvcnQgdiBmcm9tIm5vZGU6ZnMiO2ltcG9ydCBOciBmcm9tIm5vZGU6cGF0aCI7dmFyIGNvPShz LHQpPT57bGV0IGU9bmV3IGt0KHMpLGk9ITAscixuO3RyeXt0cnl7cj12Lm9wZW5TeW5jKHMuZmls ZSwicisiKX1jYXRjaChhKXtpZihhPy5jb2RlPT09IkVOT0VOVCIpcj12Lm9wZW5TeW5jKHMuZmls ZSwidysiKTtlbHNlIHRocm93IGF9bGV0IG89di5mc3RhdFN5bmMociksaD1CdWZmZXIuYWxsb2Mo NTEyKTt0OmZvcihuPTA7bjxvLnNpemU7bis9NTEyKXtmb3IobGV0IGM9MCxkPTA7Yzw1MTI7Yys9 ZCl7aWYoZD12LnJlYWRTeW5jKHIsaCxjLGgubGVuZ3RoLWMsbitjKSxuPT09MCYmaFswXT09PTMx JiZoWzFdPT09MTM5KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGFwcGVuZCB0byBjb21wcmVzc2Vk IGFyY2hpdmVzIik7aWYoIWQpYnJlYWsgdH1sZXQgYT1uZXcgRihoKTtpZighYS5ja3N1bVZhbGlk KWJyZWFrO2xldCBsPTUxMipNYXRoLmNlaWwoKGEuc2l6ZXx8MCkvNTEyKTtpZihuK2wrNTEyPm8u c2l6ZSlicmVhaztuKz1sLHMubXRpbWVDYWNoZSYmYS5tdGltZSYmcy5tdGltZUNhY2hlLnNldChT dHJpbmcoYS5wYXRoKSxhLm10aW1lKX1pPSExLGZvKHMsZSxuLHIsdCl9ZmluYWxseXtpZihpKXRy eXt2LmNsb3NlU3luYyhyKX1jYXRjaHt9fX0sZm89KHMsdCxlLGkscik9PntsZXQgbj1uZXcgV3Qo cy5maWxlLHtmZDppLHN0YXJ0OmV9KTt0LnBpcGUobiksbW8odCxyKX0sdW89KHMsdCk9Pnt0PUFy cmF5LmZyb20odCk7bGV0IGU9bmV3IEV0KHMpLGk9KG4sbyxoKT0+e2xldCBhPShULE4pPT57VD92 LmNsb3NlKG4sRT0+aChUKSk6aChudWxsLE4pfSxsPTA7aWYobz09PTApcmV0dXJuIGEobnVsbCww KTtsZXQgYz0wLGQ9QnVmZmVyLmFsbG9jKDUxMiksUz0oVCxOKT0+e2lmKFR8fHR5cGVvZiBOPiJ1 IilyZXR1cm4gYShUKTtpZihjKz1OLGM8NTEyJiZOKXJldHVybiB2LnJlYWQobixkLGMsZC5sZW5n dGgtYyxsK2MsUyk7aWYobD09PTAmJmRbMF09PT0zMSYmZFsxXT09PTEzOSlyZXR1cm4gYShuZXcg RXJyb3IoImNhbm5vdCBhcHBlbmQgdG8gY29tcHJlc3NlZCBhcmNoaXZlcyIpKTtpZihjPDUxMily ZXR1cm4gYShudWxsLGwpO2xldCBFPW5ldyBGKGQpO2lmKCFFLmNrc3VtVmFsaWQpcmV0dXJuIGEo bnVsbCxsKTtsZXQgeD01MTIqTWF0aC5jZWlsKChFLnNpemU/PzApLzUxMik7aWYobCt4KzUxMj5v fHwobCs9eCs1MTIsbD49bykpcmV0dXJuIGEobnVsbCxsKTtzLm10aW1lQ2FjaGUmJkUubXRpbWUm JnMubXRpbWVDYWNoZS5zZXQoU3RyaW5nKEUucGF0aCksRS5tdGltZSksYz0wLHYucmVhZChuLGQs MCw1MTIsbCxTKX07di5yZWFkKG4sZCwwLDUxMixsLFMpfTtyZXR1cm4gbmV3IFByb21pc2UoKG4s byk9PntlLm9uKCJlcnJvciIsbyk7bGV0IGg9InIrIixhPShsLGMpPT57aWYobCYmbC5jb2RlPT09 IkVOT0VOVCImJmg9PT0icisiKXJldHVybiBoPSJ3KyIsdi5vcGVuKHMuZmlsZSxoLGEpO2lmKGx8 fCFjKXJldHVybiBvKGwpO3YuZnN0YXQoYywoZCxTKT0+e2lmKGQpcmV0dXJuIHYuY2xvc2UoYywo KT0+byhkKSk7aShjLFMuc2l6ZSwoVCxOKT0+e2lmKFQpcmV0dXJuIG8oVCk7bGV0IEU9bmV3IHR0 KHMuZmlsZSx7ZmQ6YyxzdGFydDpOfSk7ZS5waXBlKEUpLEUub24oImVycm9yIixvKSxFLm9uKCJj bG9zZSIsbikscG8oZSx0KX0pfSl9O3Yub3BlbihzLmZpbGUsaCxhKX0pfSxtbz0ocyx0KT0+e3Qu Zm9yRWFjaChlPT57ZS5jaGFyQXQoMCk9PT0iQCI/SXQoe2ZpbGU6TnIucmVzb2x2ZShzLmN3ZCxl LnNsaWNlKDEpKSxzeW5jOiEwLG5vUmVzdW1lOiEwLG9uUmVhZEVudHJ5Omk9PnMuYWRkKGkpfSk6 cy5hZGQoZSl9KSxzLmVuZCgpfSxwbz1hc3luYyhzLHQpPT57Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0 aDtlKyspe2xldCBpPVN0cmluZyh0W2VdKTtpLmNoYXJBdCgwKT09PSJAIj9hd2FpdCBJdCh7Zmls ZTpOci5yZXNvbHZlKFN0cmluZyhzLmN3ZCksaS5zbGljZSgxKSksbm9SZXN1bWU6ITAsb25SZWFk RW50cnk6cj0+cy5hZGQocil9KTpzLmFkZChpKX1zLmVuZCgpfSx2dD1LKGNvLHVvLCgpPT57dGhy b3cgbmV3IFR5cGVFcnJvcigiZmlsZSBpcyByZXF1aXJlZCIpfSwoKT0+e3Rocm93IG5ldyBUeXBl RXJyb3IoImZpbGUgaXMgcmVxdWlyZWQiKX0sKHMsdCk9PntpZigha3MocykpdGhyb3cgbmV3IFR5 cGVFcnJvcigiZmlsZSBpcyByZXF1aXJlZCIpO2lmKHMuZ3ppcHx8cy5icm90bGl8fHMuenN0ZHx8 cy5maWxlLmVuZHNXaXRoKCIuYnIiKXx8cy5maWxlLmVuZHNXaXRoKCIudGJyIikpdGhyb3cgbmV3 IFR5cGVFcnJvcigiY2Fubm90IGFwcGVuZCB0byBjb21wcmVzc2VkIGFyY2hpdmVzIik7aWYoIXQ/ Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJubyBwYXRocyBzcGVjaWZpZWQgdG8gYWRkL3Jl cGxhY2UiKX0pO3ZhciBFbz1LKHZ0LnN5bmNGaWxlLHZ0LmFzeW5jRmlsZSx2dC5zeW5jTm9GaWxl LHZ0LmFzeW5jTm9GaWxlLChzLHQ9W10pPT57dnQudmFsaWRhdGU/LihzLHQpLHdvKHMpfSksd289 cz0+e2xldCB0PXMuZmlsdGVyO3MubXRpbWVDYWNoZXx8KHMubXRpbWVDYWNoZT1uZXcgTWFwKSxz LmZpbHRlcj10PyhlLGkpPT50KGUsaSkmJiEoKHMubXRpbWVDYWNoZT8uZ2V0KGUpPz9pLm10aW1l Pz8wKT4oaS5tdGltZT8/MCkpOihlLGkpPT4hKChzLm10aW1lQ2FjaGU/LmdldChlKT8/aS5tdGlt ZT8/MCk+KGkubXRpbWU/PzApKX07ZXhwb3J0e0YgYXMgSGVhZGVyLEV0IGFzIFBhY2ssZmkgYXMg UGFja0pvYixrdCBhcyBQYWNrU3luYyxzdCBhcyBQYXJzZXIsY3QgYXMgUGF4LFl0IGFzIFJlYWRF bnRyeSxxdCBhcyBVbnBhY2ssVGUgYXMgVW5wYWNrU3luYyxkZSBhcyBXcml0ZUVudHJ5LGlpIGFz IFdyaXRlRW50cnlTeW5jLHNpIGFzIFdyaXRlRW50cnlUYXIsem4gYXMgYyx6biBhcyBjcmVhdGUs bG8gYXMgZXh0cmFjdCxZaSBhcyBmaWxlc0ZpbHRlcixJdCBhcyBsaXN0LHZ0IGFzIHIsdnQgYXMg cmVwbGFjZSxJdCBhcyB0LE1pIGFzIHR5cGVzLEVvIGFzIHUsRW8gYXMgdXBkYXRlLGxvIGFzIHh9 OworK3ZhciB6cj1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIFVyPShzLHQpPT57Zm9yKHZhciBl IGluIHQpenIocyxlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9O2ltcG9ydCBRciBmcm9tImV2 ZW50cyI7aW1wb3J0IEkgZnJvbSJmcyI7aW1wb3J0e0V2ZW50RW1pdHRlciBhcyBEaX1mcm9tIm5v ZGU6ZXZlbnRzIjtpbXBvcnQgQ3MgZnJvbSJub2RlOnN0cmVhbSI7aW1wb3J0e1N0cmluZ0RlY29k ZXIgYXMgSHJ9ZnJvbSJub2RlOnN0cmluZ19kZWNvZGVyIjt2YXIgRHM9dHlwZW9mIHByb2Nlc3M9 PSJvYmplY3QiJiZwcm9jZXNzP3Byb2Nlc3M6e3N0ZG91dDpudWxsLHN0ZGVycjpudWxsfSxXcj1z PT4hIXMmJnR5cGVvZiBzPT0ib2JqZWN0IiYmKHMgaW5zdGFuY2VvZiBBfHxzIGluc3RhbmNlb2Yg Q3N8fEdyKHMpfHxacihzKSksR3I9cz0+ISFzJiZ0eXBlb2Ygcz09Im9iamVjdCImJnMgaW5zdGFu Y2VvZiBEaSYmdHlwZW9mIHMucGlwZT09ImZ1bmN0aW9uIiYmcy5waXBlIT09Q3MuV3JpdGFibGUu cHJvdG90eXBlLnBpcGUsWnI9cz0+ISFzJiZ0eXBlb2Ygcz09Im9iamVjdCImJnMgaW5zdGFuY2Vv ZiBEaSYmdHlwZW9mIHMud3JpdGU9PSJmdW5jdGlvbiImJnR5cGVvZiBzLmVuZD09ImZ1bmN0aW9u IixRPVN5bWJvbCgiRU9GIiksSj1TeW1ib2woIm1heWJlRW1pdEVuZCIpLG50PVN5bWJvbCgiZW1p dHRlZEVuZCIpLERlPVN5bWJvbCgiZW1pdHRpbmdFbmQiKSxxdD1TeW1ib2woImVtaXR0ZWRFcnJv ciIpLE5lPVN5bWJvbCgiY2xvc2VkIiksTnM9U3ltYm9sKCJyZWFkIiksQWU9U3ltYm9sKCJmbHVz aCIpLEFzPVN5bWJvbCgiZmx1c2hDaHVuayIpLHo9U3ltYm9sKCJlbmNvZGluZyIpLE10PVN5bWJv bCgiZGVjb2RlciIpLGc9U3ltYm9sKCJmbG93aW5nIiksUXQ9U3ltYm9sKCJwYXVzZWQiKSxCdD1T eW1ib2woInJlc3VtZSIpLGI9U3ltYm9sKCJidWZmZXIiKSxOPVN5bWJvbCgicGlwZXMiKSxfPVN5 bWJvbCgiYnVmZmVyTGVuZ3RoIiksYmk9U3ltYm9sKCJidWZmZXJQdXNoIiksSWU9U3ltYm9sKCJi dWZmZXJTaGlmdCIpLEw9U3ltYm9sKCJvYmplY3RNb2RlIiksdz1TeW1ib2woImRlc3Ryb3llZCIp LF9pPVN5bWJvbCgiZXJyb3IiKSxPaT1TeW1ib2woImVtaXREYXRhIiksSXM9U3ltYm9sKCJlbWl0 RW5kIiksVGk9U3ltYm9sKCJlbWl0RW5kMiIpLFo9U3ltYm9sKCJhc3luYyIpLHhpPVN5bWJvbCgi YWJvcnQiKSxDZT1TeW1ib2woImFib3J0ZWQiKSxKdD1TeW1ib2woInNpZ25hbCIpLFJ0PVN5bWJv bCgiZGF0YUxpc3RlbmVycyIpLEM9U3ltYm9sKCJkaXNjYXJkZWQiKSxqdD1zPT5Qcm9taXNlLnJl c29sdmUoKS50aGVuKHMpLFlyPXM9PnMoKSxLcj1zPT5zPT09ImVuZCJ8fHM9PT0iZmluaXNoInx8 cz09PSJwcmVmaW5pc2giLFZyPXM9PnMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ISFzJiZ0eXBl b2Ygcz09Im9iamVjdCImJnMuY29uc3RydWN0b3ImJnMuY29uc3RydWN0b3IubmFtZT09PSJBcnJh eUJ1ZmZlciImJnMuYnl0ZUxlbmd0aD49MCwkcj1zPT4hQnVmZmVyLmlzQnVmZmVyKHMpJiZBcnJh eUJ1ZmZlci5pc1ZpZXcocyksRmU9Y2xhc3N7c3JjO2Rlc3Q7b3B0cztvbmRyYWluO2NvbnN0cnVj dG9yKHQsZSxpKXt0aGlzLnNyYz10LHRoaXMuZGVzdD1lLHRoaXMub3B0cz1pLHRoaXMub25kcmFp bj0oKT0+dFtCdF0oKSx0aGlzLmRlc3Qub24oImRyYWluIix0aGlzLm9uZHJhaW4pfXVucGlwZSgp e3RoaXMuZGVzdC5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHRoaXMub25kcmFpbil9cHJveHlFcnJv cnModCl7fWVuZCgpe3RoaXMudW5waXBlKCksdGhpcy5vcHRzLmVuZCYmdGhpcy5kZXN0LmVuZCgp fX0sTGk9Y2xhc3MgZXh0ZW5kcyBGZXt1bnBpcGUoKXt0aGlzLnNyYy5yZW1vdmVMaXN0ZW5lcigi ZXJyb3IiLHRoaXMucHJveHlFcnJvcnMpLHN1cGVyLnVucGlwZSgpfWNvbnN0cnVjdG9yKHQsZSxp KXtzdXBlcih0LGUsaSksdGhpcy5wcm94eUVycm9ycz1yPT50aGlzLmRlc3QuZW1pdCgiZXJyb3Ii LHIpLHQub24oImVycm9yIix0aGlzLnByb3h5RXJyb3JzKX19LFhyPXM9PiEhcy5vYmplY3RNb2Rl LHFyPXM9PiFzLm9iamVjdE1vZGUmJiEhcy5lbmNvZGluZyYmcy5lbmNvZGluZyE9PSJidWZmZXIi LEE9Y2xhc3MgZXh0ZW5kcyBEaXtbZ109ITE7W1F0XT0hMTtbTl09W107W2JdPVtdO1tMXTtbel07 W1pdO1tNdF07W1FdPSExO1tudF09ITE7W0RlXT0hMTtbTmVdPSExO1txdF09bnVsbDtbX109MDtb d109ITE7W0p0XTtbQ2VdPSExO1tSdF09MDtbQ109ITE7d3JpdGFibGU9ITA7cmVhZGFibGU9ITA7 Y29uc3RydWN0b3IoLi4udCl7bGV0IGU9dFswXXx8e307aWYoc3VwZXIoKSxlLm9iamVjdE1vZGUm JnR5cGVvZiBlLmVuY29kaW5nPT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFbmNvZGlu ZyBhbmQgb2JqZWN0TW9kZSBtYXkgbm90IGJlIHVzZWQgdG9nZXRoZXIiKTtYcihlKT8odGhpc1tM XT0hMCx0aGlzW3pdPW51bGwpOnFyKGUpPyh0aGlzW3pdPWUuZW5jb2RpbmcsdGhpc1tMXT0hMSk6 KHRoaXNbTF09ITEsdGhpc1t6XT1udWxsKSx0aGlzW1pdPSEhZS5hc3luYyx0aGlzW010XT10aGlz W3pdP25ldyBIcih0aGlzW3pdKTpudWxsLGUmJmUuZGVidWdFeHBvc2VCdWZmZXI9PT0hMCYmT2Jq ZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse2dldDooKT0+dGhpc1tiXX0pLGUmJmUu ZGVidWdFeHBvc2VQaXBlcz09PSEwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicGlwZXMi LHtnZXQ6KCk9PnRoaXNbTl19KTtsZXR7c2lnbmFsOml9PWU7aSYmKHRoaXNbSnRdPWksaS5hYm9y dGVkP3RoaXNbeGldKCk6aS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PnRoaXNbeGldKCkp KX1nZXQgYnVmZmVyTGVuZ3RoKCl7cmV0dXJuIHRoaXNbX119Z2V0IGVuY29kaW5nKCl7cmV0dXJu IHRoaXNbel19c2V0IGVuY29kaW5nKHQpe3Rocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgbXVzdCBi ZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lIil9c2V0RW5jb2RpbmcodCl7dGhyb3cgbmV3IEVy cm9yKCJFbmNvZGluZyBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUiKX1nZXQgb2Jq ZWN0TW9kZSgpe3JldHVybiB0aGlzW0xdfXNldCBvYmplY3RNb2RlKHQpe3Rocm93IG5ldyBFcnJv cigib2JqZWN0TW9kZSBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUiKX1nZXQgYXN5 bmMoKXtyZXR1cm4gdGhpc1taXX1zZXQgYXN5bmModCl7dGhpc1taXT10aGlzW1pdfHwhIXR9W3hp XSgpe3RoaXNbQ2VdPSEwLHRoaXMuZW1pdCgiYWJvcnQiLHRoaXNbSnRdPy5yZWFzb24pLHRoaXMu ZGVzdHJveSh0aGlzW0p0XT8ucmVhc29uKX1nZXQgYWJvcnRlZCgpe3JldHVybiB0aGlzW0NlXX1z ZXQgYWJvcnRlZCh0KXt9d3JpdGUodCxlLGkpe2lmKHRoaXNbQ2VdKXJldHVybiExO2lmKHRoaXNb UV0pdGhyb3cgbmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTtpZih0aGlzW3ddKXJldHVybiB0 aGlzLmVtaXQoImVycm9yIixPYmplY3QuYXNzaWduKG5ldyBFcnJvcigiQ2Fubm90IGNhbGwgd3Jp dGUgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCIpLHtjb2RlOiJFUlJfU1RSRUFNX0RFU1RS T1lFRCJ9KSksITA7dHlwZW9mIGU9PSJmdW5jdGlvbiImJihpPWUsZT0idXRmOCIpLGV8fChlPSJ1 dGY4Iik7bGV0IHI9dGhpc1taXT9qdDpZcjtpZighdGhpc1tMXSYmIUJ1ZmZlci5pc0J1ZmZlcih0 KSl7aWYoJHIodCkpdD1CdWZmZXIuZnJvbSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVu Z3RoKTtlbHNlIGlmKFZyKHQpKXQ9QnVmZmVyLmZyb20odCk7ZWxzZSBpZih0eXBlb2YgdCE9InN0 cmluZyIpdGhyb3cgbmV3IEVycm9yKCJOb24tY29udGlndW91cyBkYXRhIHdyaXR0ZW4gdG8gbm9u LW9iamVjdE1vZGUgc3RyZWFtIil9cmV0dXJuIHRoaXNbTF0/KHRoaXNbZ10mJnRoaXNbX10hPT0w JiZ0aGlzW0FlXSghMCksdGhpc1tnXT90aGlzLmVtaXQoImRhdGEiLHQpOnRoaXNbYmldKHQpLHRo aXNbX10hPT0wJiZ0aGlzLmVtaXQoInJlYWRhYmxlIiksaSYmcihpKSx0aGlzW2ddKTp0Lmxlbmd0 aD8odHlwZW9mIHQ9PSJzdHJpbmciJiYhKGU9PT10aGlzW3pdJiYhdGhpc1tNdF0/Lmxhc3ROZWVk KSYmKHQ9QnVmZmVyLmZyb20odCxlKSksQnVmZmVyLmlzQnVmZmVyKHQpJiZ0aGlzW3pdJiYodD10 aGlzW010XS53cml0ZSh0KSksdGhpc1tnXSYmdGhpc1tfXSE9PTAmJnRoaXNbQWVdKCEwKSx0aGlz W2ddP3RoaXMuZW1pdCgiZGF0YSIsdCk6dGhpc1tiaV0odCksdGhpc1tfXSE9PTAmJnRoaXMuZW1p dCgicmVhZGFibGUiKSxpJiZyKGkpLHRoaXNbZ10pOih0aGlzW19dIT09MCYmdGhpcy5lbWl0KCJy ZWFkYWJsZSIpLGkmJnIoaSksdGhpc1tnXSl9cmVhZCh0KXtpZih0aGlzW3ddKXJldHVybiBudWxs O2lmKHRoaXNbQ109ITEsdGhpc1tfXT09PTB8fHQ9PT0wfHx0JiZ0PnRoaXNbX10pcmV0dXJuIHRo aXNbSl0oKSxudWxsO3RoaXNbTF0mJih0PW51bGwpLHRoaXNbYl0ubGVuZ3RoPjEmJiF0aGlzW0xd JiYodGhpc1tiXT1bdGhpc1t6XT90aGlzW2JdLmpvaW4oIiIpOkJ1ZmZlci5jb25jYXQodGhpc1ti XSx0aGlzW19dKV0pO2xldCBlPXRoaXNbTnNdKHR8fG51bGwsdGhpc1tiXVswXSk7cmV0dXJuIHRo aXNbSl0oKSxlfVtOc10odCxlKXtpZih0aGlzW0xdKXRoaXNbSWVdKCk7ZWxzZXtsZXQgaT1lO3Q9 PT1pLmxlbmd0aHx8dD09PW51bGw/dGhpc1tJZV0oKTp0eXBlb2YgaT09InN0cmluZyI/KHRoaXNb Yl1bMF09aS5zbGljZSh0KSxlPWkuc2xpY2UoMCx0KSx0aGlzW19dLT10KToodGhpc1tiXVswXT1p LnN1YmFycmF5KHQpLGU9aS5zdWJhcnJheSgwLHQpLHRoaXNbX10tPXQpfXJldHVybiB0aGlzLmVt aXQoImRhdGEiLGUpLCF0aGlzW2JdLmxlbmd0aCYmIXRoaXNbUV0mJnRoaXMuZW1pdCgiZHJhaW4i KSxlfWVuZCh0LGUsaSl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iJiYoaT10LHQ9dm9pZCAw KSx0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGk9ZSxlPSJ1dGY4IiksdCE9PXZvaWQgMCYmdGhpcy53 cml0ZSh0LGUpLGkmJnRoaXMub25jZSgiZW5kIixpKSx0aGlzW1FdPSEwLHRoaXMud3JpdGFibGU9 ITEsKHRoaXNbZ118fCF0aGlzW1F0XSkmJnRoaXNbSl0oKSx0aGlzfVtCdF0oKXt0aGlzW3ddfHwo IXRoaXNbUnRdJiYhdGhpc1tOXS5sZW5ndGgmJih0aGlzW0NdPSEwKSx0aGlzW1F0XT0hMSx0aGlz W2ddPSEwLHRoaXMuZW1pdCgicmVzdW1lIiksdGhpc1tiXS5sZW5ndGg/dGhpc1tBZV0oKTp0aGlz W1FdP3RoaXNbSl0oKTp0aGlzLmVtaXQoImRyYWluIikpfXJlc3VtZSgpe3JldHVybiB0aGlzW0J0 XSgpfXBhdXNlKCl7dGhpc1tnXT0hMSx0aGlzW1F0XT0hMCx0aGlzW0NdPSExfWdldCBkZXN0cm95 ZWQoKXtyZXR1cm4gdGhpc1t3XX1nZXQgZmxvd2luZygpe3JldHVybiB0aGlzW2ddfWdldCBwYXVz ZWQoKXtyZXR1cm4gdGhpc1tRdF19W2JpXSh0KXt0aGlzW0xdP3RoaXNbX10rPTE6dGhpc1tfXSs9 dC5sZW5ndGgsdGhpc1tiXS5wdXNoKHQpfVtJZV0oKXtyZXR1cm4gdGhpc1tMXT90aGlzW19dLT0x OnRoaXNbX10tPXRoaXNbYl1bMF0ubGVuZ3RoLHRoaXNbYl0uc2hpZnQoKX1bQWVdKHQ9ITEpe2Rv O3doaWxlKHRoaXNbQXNdKHRoaXNbSWVdKCkpJiZ0aGlzW2JdLmxlbmd0aCk7IXQmJiF0aGlzW2Jd Lmxlbmd0aCYmIXRoaXNbUV0mJnRoaXMuZW1pdCgiZHJhaW4iKX1bQXNdKHQpe3JldHVybiB0aGlz LmVtaXQoImRhdGEiLHQpLHRoaXNbZ119cGlwZSh0LGUpe2lmKHRoaXNbd10pcmV0dXJuIHQ7dGhp c1tDXT0hMTtsZXQgaT10aGlzW250XTtyZXR1cm4gZT1lfHx7fSx0PT09RHMuc3Rkb3V0fHx0PT09 RHMuc3RkZXJyP2UuZW5kPSExOmUuZW5kPWUuZW5kIT09ITEsZS5wcm94eUVycm9ycz0hIWUucHJv eHlFcnJvcnMsaT9lLmVuZCYmdC5lbmQoKToodGhpc1tOXS5wdXNoKGUucHJveHlFcnJvcnM/bmV3 IExpKHRoaXMsdCxlKTpuZXcgRmUodGhpcyx0LGUpKSx0aGlzW1pdP2p0KCgpPT50aGlzW0J0XSgp KTp0aGlzW0J0XSgpKSx0fXVucGlwZSh0KXtsZXQgZT10aGlzW05dLmZpbmQoaT0+aS5kZXN0PT09 dCk7ZSYmKHRoaXNbTl0ubGVuZ3RoPT09MT8odGhpc1tnXSYmdGhpc1tSdF09PT0wJiYodGhpc1tn XT0hMSksdGhpc1tOXT1bXSk6dGhpc1tOXS5zcGxpY2UodGhpc1tOXS5pbmRleE9mKGUpLDEpLGUu dW5waXBlKCkpfWFkZExpc3RlbmVyKHQsZSl7cmV0dXJuIHRoaXMub24odCxlKX1vbih0LGUpe2xl dCBpPXN1cGVyLm9uKHQsZSk7aWYodD09PSJkYXRhIil0aGlzW0NdPSExLHRoaXNbUnRdKyssIXRo aXNbTl0ubGVuZ3RoJiYhdGhpc1tnXSYmdGhpc1tCdF0oKTtlbHNlIGlmKHQ9PT0icmVhZGFibGUi JiZ0aGlzW19dIT09MClzdXBlci5lbWl0KCJyZWFkYWJsZSIpO2Vsc2UgaWYoS3IodCkmJnRoaXNb bnRdKXN1cGVyLmVtaXQodCksdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnModCk7ZWxzZSBpZih0PT09 ImVycm9yIiYmdGhpc1txdF0pe2xldCByPWU7dGhpc1taXT9qdCgoKT0+ci5jYWxsKHRoaXMsdGhp c1txdF0pKTpyLmNhbGwodGhpcyx0aGlzW3F0XSl9cmV0dXJuIGl9cmVtb3ZlTGlzdGVuZXIodCxl KXtyZXR1cm4gdGhpcy5vZmYodCxlKX1vZmYodCxlKXtsZXQgaT1zdXBlci5vZmYodCxlKTtyZXR1 cm4gdD09PSJkYXRhIiYmKHRoaXNbUnRdPXRoaXMubGlzdGVuZXJzKCJkYXRhIikubGVuZ3RoLHRo aXNbUnRdPT09MCYmIXRoaXNbQ10mJiF0aGlzW05dLmxlbmd0aCYmKHRoaXNbZ109ITEpKSxpfXJl bW92ZUFsbExpc3RlbmVycyh0KXtsZXQgZT1zdXBlci5yZW1vdmVBbGxMaXN0ZW5lcnModCk7cmV0 dXJuKHQ9PT0iZGF0YSJ8fHQ9PT12b2lkIDApJiYodGhpc1tSdF09MCwhdGhpc1tDXSYmIXRoaXNb Tl0ubGVuZ3RoJiYodGhpc1tnXT0hMSkpLGV9Z2V0IGVtaXR0ZWRFbmQoKXtyZXR1cm4gdGhpc1tu dF19W0pdKCl7IXRoaXNbRGVdJiYhdGhpc1tudF0mJiF0aGlzW3ddJiZ0aGlzW2JdLmxlbmd0aD09 PTAmJnRoaXNbUV0mJih0aGlzW0RlXT0hMCx0aGlzLmVtaXQoImVuZCIpLHRoaXMuZW1pdCgicHJl ZmluaXNoIiksdGhpcy5lbWl0KCJmaW5pc2giKSx0aGlzW05lXSYmdGhpcy5lbWl0KCJjbG9zZSIp LHRoaXNbRGVdPSExKX1lbWl0KHQsLi4uZSl7bGV0IGk9ZVswXTtpZih0IT09ImVycm9yIiYmdCE9 PSJjbG9zZSImJnQhPT13JiZ0aGlzW3ddKXJldHVybiExO2lmKHQ9PT0iZGF0YSIpcmV0dXJuIXRo aXNbTF0mJiFpPyExOnRoaXNbWl0/KGp0KCgpPT50aGlzW09pXShpKSksITApOnRoaXNbT2ldKGkp O2lmKHQ9PT0iZW5kIilyZXR1cm4gdGhpc1tJc10oKTtpZih0PT09ImNsb3NlIil7aWYodGhpc1tO ZV09ITAsIXRoaXNbbnRdJiYhdGhpc1t3XSlyZXR1cm4hMTtsZXQgbj1zdXBlci5lbWl0KCJjbG9z ZSIpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygiY2xvc2UiKSxufWVsc2UgaWYodD09 PSJlcnJvciIpe3RoaXNbcXRdPWksc3VwZXIuZW1pdChfaSxpKTtsZXQgbj0hdGhpc1tKdF18fHRo aXMubGlzdGVuZXJzKCJlcnJvciIpLmxlbmd0aD9zdXBlci5lbWl0KCJlcnJvciIsaSk6ITE7cmV0 dXJuIHRoaXNbSl0oKSxufWVsc2UgaWYodD09PSJyZXN1bWUiKXtsZXQgbj1zdXBlci5lbWl0KCJy ZXN1bWUiKTtyZXR1cm4gdGhpc1tKXSgpLG59ZWxzZSBpZih0PT09ImZpbmlzaCJ8fHQ9PT0icHJl ZmluaXNoIil7bGV0IG49c3VwZXIuZW1pdCh0KTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5l cnModCksbn1sZXQgcj1zdXBlci5lbWl0KHQsLi4uZSk7cmV0dXJuIHRoaXNbSl0oKSxyfVtPaV0o dCl7Zm9yKGxldCBpIG9mIHRoaXNbTl0paS5kZXN0LndyaXRlKHQpPT09ITEmJnRoaXMucGF1c2Uo KTtsZXQgZT10aGlzW0NdPyExOnN1cGVyLmVtaXQoImRhdGEiLHQpO3JldHVybiB0aGlzW0pdKCks ZX1bSXNdKCl7cmV0dXJuIHRoaXNbbnRdPyExOih0aGlzW250XT0hMCx0aGlzLnJlYWRhYmxlPSEx LHRoaXNbWl0/KGp0KCgpPT50aGlzW1RpXSgpKSwhMCk6dGhpc1tUaV0oKSl9W1RpXSgpe2lmKHRo aXNbTXRdKXtsZXQgZT10aGlzW010XS5lbmQoKTtpZihlKXtmb3IobGV0IGkgb2YgdGhpc1tOXSlp LmRlc3Qud3JpdGUoZSk7dGhpc1tDXXx8c3VwZXIuZW1pdCgiZGF0YSIsZSl9fWZvcihsZXQgZSBv ZiB0aGlzW05dKWUuZW5kKCk7bGV0IHQ9c3VwZXIuZW1pdCgiZW5kIik7cmV0dXJuIHRoaXMucmVt b3ZlQWxsTGlzdGVuZXJzKCJlbmQiKSx0fWFzeW5jIGNvbGxlY3QoKXtsZXQgdD1PYmplY3QuYXNz aWduKFtdLHtkYXRhTGVuZ3RoOjB9KTt0aGlzW0xdfHwodC5kYXRhTGVuZ3RoPTApO2xldCBlPXRo aXMucHJvbWlzZSgpO3JldHVybiB0aGlzLm9uKCJkYXRhIixpPT57dC5wdXNoKGkpLHRoaXNbTF18 fCh0LmRhdGFMZW5ndGgrPWkubGVuZ3RoKX0pLGF3YWl0IGUsdH1hc3luYyBjb25jYXQoKXtpZih0 aGlzW0xdKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGNvbmNhdCBpbiBvYmplY3RNb2RlIik7bGV0 IHQ9YXdhaXQgdGhpcy5jb2xsZWN0KCk7cmV0dXJuIHRoaXNbel0/dC5qb2luKCIiKTpCdWZmZXIu Y29uY2F0KHQsdC5kYXRhTGVuZ3RoKX1hc3luYyBwcm9taXNlKCl7cmV0dXJuIG5ldyBQcm9taXNl KCh0LGUpPT57dGhpcy5vbih3LCgpPT5lKG5ldyBFcnJvcigic3RyZWFtIGRlc3Ryb3llZCIpKSks dGhpcy5vbigiZXJyb3IiLGk9PmUoaSkpLHRoaXMub24oImVuZCIsKCk9PnQoKSl9KX1bU3ltYm9s LmFzeW5jSXRlcmF0b3JdKCl7dGhpc1tDXT0hMTtsZXQgdD0hMSxlPWFzeW5jKCk9Pih0aGlzLnBh dXNlKCksdD0hMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtyZXR1cm57bmV4dDooKT0+e2lmKHQp cmV0dXJuIGUoKTtsZXQgcj10aGlzLnJlYWQoKTtpZihyIT09bnVsbClyZXR1cm4gUHJvbWlzZS5y ZXNvbHZlKHtkb25lOiExLHZhbHVlOnJ9KTtpZih0aGlzW1FdKXJldHVybiBlKCk7bGV0IG4sbyxo PWQ9Pnt0aGlzLm9mZigiZGF0YSIsYSksdGhpcy5vZmYoImVuZCIsbCksdGhpcy5vZmYodyxjKSxl KCksbyhkKX0sYT1kPT57dGhpcy5vZmYoImVycm9yIixoKSx0aGlzLm9mZigiZW5kIixsKSx0aGlz Lm9mZih3LGMpLHRoaXMucGF1c2UoKSxuKHt2YWx1ZTpkLGRvbmU6ISF0aGlzW1FdfSl9LGw9KCk9 Pnt0aGlzLm9mZigiZXJyb3IiLGgpLHRoaXMub2ZmKCJkYXRhIixhKSx0aGlzLm9mZih3LGMpLGUo KSxuKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pfSxjPSgpPT5oKG5ldyBFcnJvcigic3RyZWFtIGRl c3Ryb3llZCIpKTtyZXR1cm4gbmV3IFByb21pc2UoKGQsUyk9PntvPVMsbj1kLHRoaXMub25jZSh3 LGMpLHRoaXMub25jZSgiZXJyb3IiLGgpLHRoaXMub25jZSgiZW5kIixsKSx0aGlzLm9uY2UoImRh dGEiLGEpfSl9LHRocm93OmUscmV0dXJuOmUsW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVy biB0aGlzfSxbU3ltYm9sLmFzeW5jRGlzcG9zZV06YXN5bmMoKT0+e319fVtTeW1ib2wuaXRlcmF0 b3JdKCl7dGhpc1tDXT0hMTtsZXQgdD0hMSxlPSgpPT4odGhpcy5wYXVzZSgpLHRoaXMub2ZmKF9p LGUpLHRoaXMub2ZmKHcsZSksdGhpcy5vZmYoImVuZCIsZSksdD0hMCx7ZG9uZTohMCx2YWx1ZTp2 b2lkIDB9KSxpPSgpPT57aWYodClyZXR1cm4gZSgpO2xldCByPXRoaXMucmVhZCgpO3JldHVybiBy PT09bnVsbD9lKCk6e2RvbmU6ITEsdmFsdWU6cn19O3JldHVybiB0aGlzLm9uY2UoImVuZCIsZSks dGhpcy5vbmNlKF9pLGUpLHRoaXMub25jZSh3LGUpLHtuZXh0OmksdGhyb3c6ZSxyZXR1cm46ZSxb U3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzfSxbU3ltYm9sLmRpc3Bvc2VdOigpPT57fX19 ZGVzdHJveSh0KXtpZih0aGlzW3ddKXJldHVybiB0P3RoaXMuZW1pdCgiZXJyb3IiLHQpOnRoaXMu ZW1pdCh3KSx0aGlzO3RoaXNbd109ITAsdGhpc1tDXT0hMCx0aGlzW2JdLmxlbmd0aD0wLHRoaXNb X109MDtsZXQgZT10aGlzO3JldHVybiB0eXBlb2YgZS5jbG9zZT09ImZ1bmN0aW9uIiYmIXRoaXNb TmVdJiZlLmNsb3NlKCksdD90aGlzLmVtaXQoImVycm9yIix0KTp0aGlzLmVtaXQodyksdGhpc31z dGF0aWMgZ2V0IGlzU3RyZWFtKCl7cmV0dXJuIFdyfX07dmFyIEpyPUkud3JpdGV2LGh0PVN5bWJv bCgiX2F1dG9DbG9zZSIpLEg9U3ltYm9sKCJfY2xvc2UiKSx0ZT1TeW1ib2woIl9lbmRlZCIpLHU9 U3ltYm9sKCJfZmQiKSxOaT1TeW1ib2woIl9maW5pc2hlZCIpLHR0PVN5bWJvbCgiX2ZsYWdzIiks QWk9U3ltYm9sKCJfZmx1c2giKSxraT1TeW1ib2woIl9oYW5kbGVDaHVuayIpLHZpPVN5bWJvbCgi X21ha2VCdWYiKSxpZT1TeW1ib2woIl9tb2RlIiksa2U9U3ltYm9sKCJfbmVlZERyYWluIiksVXQ9 U3ltYm9sKCJfb25lcnJvciIpLEh0PVN5bWJvbCgiX29ub3BlbiIpLElpPVN5bWJvbCgiX29ucmVh ZCIpLFB0PVN5bWJvbCgiX29ud3JpdGUiKSxhdD1TeW1ib2woIl9vcGVuIiksVT1TeW1ib2woIl9w YXRoIiksb3Q9U3ltYm9sKCJfcG9zIiksWT1TeW1ib2woIl9xdWV1ZSIpLHp0PVN5bWJvbCgiX3Jl YWQiKSxDaT1TeW1ib2woIl9yZWFkU2l6ZSIpLGo9U3ltYm9sKCJfcmVhZGluZyIpLGVlPVN5bWJv bCgiX3JlbWFpbiIpLEZpPVN5bWJvbCgiX3NpemUiKSx2ZT1TeW1ib2woIl93cml0ZSIpLGd0PVN5 bWJvbCgiX3dyaXRpbmciKSxNZT1TeW1ib2woIl9kZWZhdWx0RmxhZyIpLGJ0PVN5bWJvbCgiX2Vy cm9yZWQiKSxfdD1jbGFzcyBleHRlbmRzIEF7W2J0XT0hMTtbdV07W1VdO1tDaV07W2pdPSExO1tG aV07W2VlXTtbaHRdO2NvbnN0cnVjdG9yKHQsZSl7aWYoZT1lfHx7fSxzdXBlcihlKSx0aGlzLnJl YWRhYmxlPSEwLHRoaXMud3JpdGFibGU9ITEsdHlwZW9mIHQhPSJzdHJpbmciKXRocm93IG5ldyBU eXBlRXJyb3IoInBhdGggbXVzdCBiZSBhIHN0cmluZyIpO3RoaXNbYnRdPSExLHRoaXNbdV09dHlw ZW9mIGUuZmQ9PSJudW1iZXIiP2UuZmQ6dm9pZCAwLHRoaXNbVV09dCx0aGlzW0NpXT1lLnJlYWRT aXplfHwxNioxMDI0KjEwMjQsdGhpc1tqXT0hMSx0aGlzW0ZpXT10eXBlb2YgZS5zaXplPT0ibnVt YmVyIj9lLnNpemU6MS8wLHRoaXNbZWVdPXRoaXNbRmldLHRoaXNbaHRdPXR5cGVvZiBlLmF1dG9D bG9zZT09ImJvb2xlYW4iP2UuYXV0b0Nsb3NlOiEwLHR5cGVvZiB0aGlzW3VdPT0ibnVtYmVyIj90 aGlzW3p0XSgpOnRoaXNbYXRdKCl9Z2V0IGZkKCl7cmV0dXJuIHRoaXNbdV19Z2V0IHBhdGgoKXty ZXR1cm4gdGhpc1tVXX13cml0ZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoInRoaXMgaXMgYSByZWFk YWJsZSBzdHJlYW0iKX1lbmQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJ0aGlzIGlzIGEgcmVhZGFi bGUgc3RyZWFtIil9W2F0XSgpe0kub3Blbih0aGlzW1VdLCJyIiwodCxlKT0+dGhpc1tIdF0odCxl KSl9W0h0XSh0LGUpe3Q/dGhpc1tVdF0odCk6KHRoaXNbdV09ZSx0aGlzLmVtaXQoIm9wZW4iLGUp LHRoaXNbenRdKCkpfVt2aV0oKXtyZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKE1hdGgubWluKHRo aXNbQ2ldLHRoaXNbZWVdKSl9W3p0XSgpe2lmKCF0aGlzW2pdKXt0aGlzW2pdPSEwO2xldCB0PXRo aXNbdmldKCk7aWYodC5sZW5ndGg9PT0wKXJldHVybiBwcm9jZXNzLm5leHRUaWNrKCgpPT50aGlz W0lpXShudWxsLDAsdCkpO0kucmVhZCh0aGlzW3VdLHQsMCx0Lmxlbmd0aCxudWxsLChlLGkscik9 PnRoaXNbSWldKGUsaSxyKSl9fVtJaV0odCxlLGkpe3RoaXNbal09ITEsdD90aGlzW1V0XSh0KTp0 aGlzW2tpXShlLGkpJiZ0aGlzW3p0XSgpfVtIXSgpe2lmKHRoaXNbaHRdJiZ0eXBlb2YgdGhpc1t1 XT09Im51bWJlciIpe2xldCB0PXRoaXNbdV07dGhpc1t1XT12b2lkIDAsSS5jbG9zZSh0LGU9PmU/ dGhpcy5lbWl0KCJlcnJvciIsZSk6dGhpcy5lbWl0KCJjbG9zZSIpKX19W1V0XSh0KXt0aGlzW2pd PSEwLHRoaXNbSF0oKSx0aGlzLmVtaXQoImVycm9yIix0KX1ba2ldKHQsZSl7bGV0IGk9ITE7cmV0 dXJuIHRoaXNbZWVdLT10LHQ+MCYmKGk9c3VwZXIud3JpdGUodDxlLmxlbmd0aD9lLnN1YmFycmF5 KDAsdCk6ZSkpLCh0PT09MHx8dGhpc1tlZV08PTApJiYoaT0hMSx0aGlzW0hdKCksc3VwZXIuZW5k KCkpLGl9ZW1pdCh0LC4uLmUpe3N3aXRjaCh0KXtjYXNlInByZWZpbmlzaCI6Y2FzZSJmaW5pc2gi OnJldHVybiExO2Nhc2UiZHJhaW4iOnJldHVybiB0eXBlb2YgdGhpc1t1XT09Im51bWJlciImJnRo aXNbenRdKCksITE7Y2FzZSJlcnJvciI6cmV0dXJuIHRoaXNbYnRdPyExOih0aGlzW2J0XT0hMCxz dXBlci5lbWl0KHQsLi4uZSkpO2RlZmF1bHQ6cmV0dXJuIHN1cGVyLmVtaXQodCwuLi5lKX19fSxC ZT1jbGFzcyBleHRlbmRzIF90e1thdF0oKXtsZXQgdD0hMDt0cnl7dGhpc1tIdF0obnVsbCxJLm9w ZW5TeW5jKHRoaXNbVV0sInIiKSksdD0hMX1maW5hbGx5e3QmJnRoaXNbSF0oKX19W3p0XSgpe2xl dCB0PSEwO3RyeXtpZighdGhpc1tqXSl7dGhpc1tqXT0hMDtkb3tsZXQgZT10aGlzW3ZpXSgpLGk9 ZS5sZW5ndGg9PT0wPzA6SS5yZWFkU3luYyh0aGlzW3VdLGUsMCxlLmxlbmd0aCxudWxsKTtpZigh dGhpc1traV0oaSxlKSlicmVha313aGlsZSghMCk7dGhpc1tqXT0hMX10PSExfWZpbmFsbHl7dCYm dGhpc1tIXSgpfX1bSF0oKXtpZih0aGlzW2h0XSYmdHlwZW9mIHRoaXNbdV09PSJudW1iZXIiKXts ZXQgdD10aGlzW3VdO3RoaXNbdV09dm9pZCAwLEkuY2xvc2VTeW5jKHQpLHRoaXMuZW1pdCgiY2xv c2UiKX19fSxldD1jbGFzcyBleHRlbmRzIFFye3JlYWRhYmxlPSExO3dyaXRhYmxlPSEwO1tidF09 ITE7W2d0XT0hMTtbdGVdPSExO1tZXT1bXTtba2VdPSExO1tVXTtbaWVdO1todF07W3VdO1tNZV07 W3R0XTtbTmldPSExO1tvdF07Y29uc3RydWN0b3IodCxlKXtlPWV8fHt9LHN1cGVyKGUpLHRoaXNb VV09dCx0aGlzW3VdPXR5cGVvZiBlLmZkPT0ibnVtYmVyIj9lLmZkOnZvaWQgMCx0aGlzW2llXT1l Lm1vZGU9PT12b2lkIDA/NDM4OmUubW9kZSx0aGlzW290XT10eXBlb2YgZS5zdGFydD09Im51bWJl ciI/ZS5zdGFydDp2b2lkIDAsdGhpc1todF09dHlwZW9mIGUuYXV0b0Nsb3NlPT0iYm9vbGVhbiI/ ZS5hdXRvQ2xvc2U6ITA7bGV0IGk9dGhpc1tvdF0hPT12b2lkIDA/InIrIjoidyI7dGhpc1tNZV09 ZS5mbGFncz09PXZvaWQgMCx0aGlzW3R0XT1lLmZsYWdzPT09dm9pZCAwP2k6ZS5mbGFncyx0aGlz W3VdPT09dm9pZCAwJiZ0aGlzW2F0XSgpfWVtaXQodCwuLi5lKXtpZih0PT09ImVycm9yIil7aWYo dGhpc1tidF0pcmV0dXJuITE7dGhpc1tidF09ITB9cmV0dXJuIHN1cGVyLmVtaXQodCwuLi5lKX1n ZXQgZmQoKXtyZXR1cm4gdGhpc1t1XX1nZXQgcGF0aCgpe3JldHVybiB0aGlzW1VdfVtVdF0odCl7 dGhpc1tIXSgpLHRoaXNbZ3RdPSEwLHRoaXMuZW1pdCgiZXJyb3IiLHQpfVthdF0oKXtJLm9wZW4o dGhpc1tVXSx0aGlzW3R0XSx0aGlzW2llXSwodCxlKT0+dGhpc1tIdF0odCxlKSl9W0h0XSh0LGUp e3RoaXNbTWVdJiZ0aGlzW3R0XT09PSJyKyImJnQmJnQuY29kZT09PSJFTk9FTlQiPyh0aGlzW3R0 XT0idyIsdGhpc1thdF0oKSk6dD90aGlzW1V0XSh0KToodGhpc1t1XT1lLHRoaXMuZW1pdCgib3Bl biIsZSksdGhpc1tndF18fHRoaXNbQWldKCkpfWVuZCh0LGUpe3JldHVybiB0JiZ0aGlzLndyaXRl KHQsZSksdGhpc1t0ZV09ITAsIXRoaXNbZ3RdJiYhdGhpc1tZXS5sZW5ndGgmJnR5cGVvZiB0aGlz W3VdPT0ibnVtYmVyIiYmdGhpc1tQdF0obnVsbCwwKSx0aGlzfXdyaXRlKHQsZSl7cmV0dXJuIHR5 cGVvZiB0PT0ic3RyaW5nIiYmKHQ9QnVmZmVyLmZyb20odCxlKSksdGhpc1t0ZV0/KHRoaXMuZW1p dCgiZXJyb3IiLG5ldyBFcnJvcigid3JpdGUoKSBhZnRlciBlbmQoKSIpKSwhMSk6dGhpc1t1XT09 PXZvaWQgMHx8dGhpc1tndF18fHRoaXNbWV0ubGVuZ3RoPyh0aGlzW1ldLnB1c2godCksdGhpc1tr ZV09ITAsITEpOih0aGlzW2d0XT0hMCx0aGlzW3ZlXSh0KSwhMCl9W3ZlXSh0KXtJLndyaXRlKHRo aXNbdV0sdCwwLHQubGVuZ3RoLHRoaXNbb3RdLChlLGkpPT50aGlzW1B0XShlLGkpKX1bUHRdKHQs ZSl7dD90aGlzW1V0XSh0KToodGhpc1tvdF0hPT12b2lkIDAmJnR5cGVvZiBlPT0ibnVtYmVyIiYm KHRoaXNbb3RdKz1lKSx0aGlzW1ldLmxlbmd0aD90aGlzW0FpXSgpOih0aGlzW2d0XT0hMSx0aGlz W3RlXSYmIXRoaXNbTmldPyh0aGlzW05pXT0hMCx0aGlzW0hdKCksdGhpcy5lbWl0KCJmaW5pc2gi KSk6dGhpc1trZV0mJih0aGlzW2tlXT0hMSx0aGlzLmVtaXQoImRyYWluIikpKSl9W0FpXSgpe2lm KHRoaXNbWV0ubGVuZ3RoPT09MCl0aGlzW3RlXSYmdGhpc1tQdF0obnVsbCwwKTtlbHNlIGlmKHRo aXNbWV0ubGVuZ3RoPT09MSl0aGlzW3ZlXSh0aGlzW1ldLnBvcCgpKTtlbHNle2xldCB0PXRoaXNb WV07dGhpc1tZXT1bXSxKcih0aGlzW3VdLHQsdGhpc1tvdF0sKGUsaSk9PnRoaXNbUHRdKGUsaSkp fX1bSF0oKXtpZih0aGlzW2h0XSYmdHlwZW9mIHRoaXNbdV09PSJudW1iZXIiKXtsZXQgdD10aGlz W3VdO3RoaXNbdV09dm9pZCAwLEkuY2xvc2UodCxlPT5lP3RoaXMuZW1pdCgiZXJyb3IiLGUpOnRo aXMuZW1pdCgiY2xvc2UiKSl9fX0sV3Q9Y2xhc3MgZXh0ZW5kcyBldHtbYXRdKCl7bGV0IHQ7aWYo dGhpc1tNZV0mJnRoaXNbdHRdPT09InIrIil0cnl7dD1JLm9wZW5TeW5jKHRoaXNbVV0sdGhpc1t0 dF0sdGhpc1tpZV0pfWNhdGNoKGUpe2lmKGU/LmNvZGU9PT0iRU5PRU5UIilyZXR1cm4gdGhpc1t0 dF09InciLHRoaXNbYXRdKCk7dGhyb3cgZX1lbHNlIHQ9SS5vcGVuU3luYyh0aGlzW1VdLHRoaXNb dHRdLHRoaXNbaWVdKTt0aGlzW0h0XShudWxsLHQpfVtIXSgpe2lmKHRoaXNbaHRdJiZ0eXBlb2Yg dGhpc1t1XT09Im51bWJlciIpe2xldCB0PXRoaXNbdV07dGhpc1t1XT12b2lkIDAsSS5jbG9zZVN5 bmModCksdGhpcy5lbWl0KCJjbG9zZSIpfX1bdmVdKHQpe2xldCBlPSEwO3RyeXt0aGlzW1B0XShu dWxsLEkud3JpdGVTeW5jKHRoaXNbdV0sdCwwLHQubGVuZ3RoLHRoaXNbb3RdKSksZT0hMX1maW5h bGx5e2lmKGUpdHJ5e3RoaXNbSF0oKX1jYXRjaHt9fX19O2ltcG9ydCBjciBmcm9tIm5vZGU6cGF0 aCI7aW1wb3J0IEt0IGZyb20ibm9kZTpmcyI7aW1wb3J0e2Rpcm5hbWUgYXMgRm4scGFyc2UgYXMg a259ZnJvbSJwYXRoIjt2YXIganI9bmV3IE1hcChbWyJDIiwiY3dkIl0sWyJmIiwiZmlsZSJdLFsi eiIsImd6aXAiXSxbIlAiLCJwcmVzZXJ2ZVBhdGhzIl0sWyJVIiwidW5saW5rIl0sWyJzdHJpcC1j b21wb25lbnRzIiwic3RyaXAiXSxbInN0cmlwQ29tcG9uZW50cyIsInN0cmlwIl0sWyJrZWVwLW5l d2VyIiwibmV3ZXIiXSxbImtlZXBOZXdlciIsIm5ld2VyIl0sWyJrZWVwLW5ld2VyLWZpbGVzIiwi bmV3ZXIiXSxbImtlZXBOZXdlckZpbGVzIiwibmV3ZXIiXSxbImsiLCJrZWVwIl0sWyJrZWVwLWV4 aXN0aW5nIiwia2VlcCJdLFsia2VlcEV4aXN0aW5nIiwia2VlcCJdLFsibSIsIm5vTXRpbWUiXSxb Im5vLW10aW1lIiwibm9NdGltZSJdLFsicCIsInByZXNlcnZlT3duZXIiXSxbIkwiLCJmb2xsb3ci XSxbImgiLCJmb2xsb3ciXSxbIm9uZW50cnkiLCJvblJlYWRFbnRyeSJdXSksRnM9cz0+ISFzLnN5 bmMmJiEhcy5maWxlLGtzPXM9PiFzLnN5bmMmJiEhcy5maWxlLHZzPXM9PiEhcy5zeW5jJiYhcy5m aWxlLE1zPXM9PiFzLnN5bmMmJiFzLmZpbGU7dmFyIEJzPXM9PiEhcy5maWxlO3ZhciB0bj1zPT57 bGV0IHQ9anIuZ2V0KHMpO3JldHVybiB0fHxzfSxzZT0ocz17fSk9PntpZighcylyZXR1cm57fTts ZXQgdD17fTtmb3IobGV0W2UsaV1vZiBPYmplY3QuZW50cmllcyhzKSl7bGV0IHI9dG4oZSk7dFty XT1pfXJldHVybiB0LmNobW9kPT09dm9pZCAwJiZ0Lm5vQ2htb2Q9PT0hMSYmKHQuY2htb2Q9ITAp LGRlbGV0ZSB0Lm5vQ2htb2QsdH07dmFyIEs9KHMsdCxlLGkscik9Pk9iamVjdC5hc3NpZ24oKG49 W10sbyxoKT0+e0FycmF5LmlzQXJyYXkobikmJihvPW4sbj17fSksdHlwZW9mIG89PSJmdW5jdGlv biImJihoPW8sbz12b2lkIDApLG89bz9BcnJheS5mcm9tKG8pOltdO2xldCBhPXNlKG4pO2lmKHI/ LihhLG8pLEZzKGEpKXtpZih0eXBlb2YgaD09ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9y KCJjYWxsYmFjayBub3Qgc3VwcG9ydGVkIGZvciBzeW5jIHRhciBmdW5jdGlvbnMiKTtyZXR1cm4g cyhhLG8pfWVsc2UgaWYoa3MoYSkpe2xldCBsPXQoYSxvKTtyZXR1cm4gaD9sLnRoZW4oKCk9Pmgo KSxoKTpsfWVsc2UgaWYodnMoYSkpe2lmKHR5cGVvZiBoPT0iZnVuY3Rpb24iKXRocm93IG5ldyBU eXBlRXJyb3IoImNhbGxiYWNrIG5vdCBzdXBwb3J0ZWQgZm9yIHN5bmMgdGFyIGZ1bmN0aW9ucyIp O3JldHVybiBlKGEsbyl9ZWxzZSBpZihNcyhhKSl7aWYodHlwZW9mIGg9PSJmdW5jdGlvbiIpdGhy b3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgb25seSBzdXBwb3J0ZWQgd2l0aCBmaWxlIG9wdGlv biIpO3JldHVybiBpKGEsbyl9dGhyb3cgbmV3IEVycm9yKCJpbXBvc3NpYmxlIG9wdGlvbnM/PyIp fSx7c3luY0ZpbGU6cyxhc3luY0ZpbGU6dCxzeW5jTm9GaWxlOmUsYXN5bmNOb0ZpbGU6aSx2YWxp ZGF0ZTpyfSk7aW1wb3J0e0V2ZW50RW1pdHRlciBhcyBEbn1mcm9tImV2ZW50cyI7aW1wb3J0IHpp IGZyb20iYXNzZXJ0IjtpbXBvcnR7QnVmZmVyIGFzIE90fWZyb20iYnVmZmVyIjtpbXBvcnQqYXMg UHMgZnJvbSJ6bGliIjtpbXBvcnQgZW4gZnJvbSJ6bGliIjt2YXIgc249ZW4uY29uc3RhbnRzfHx7 WkxJQl9WRVJOVU06NDczNn0sTT1PYmplY3QuZnJlZXplKE9iamVjdC5hc3NpZ24oT2JqZWN0LmNy ZWF0ZShudWxsKSx7Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoy LFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfT0s6MCxaX1NUUkVBTV9FTkQ6 MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9S Oi0zLFpfTUVNX0VSUk9SOi00LFpfQlVGX0VSUk9SOi01LFpfVkVSU0lPTl9FUlJPUjotNixaX05P X0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZB VUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMs Wl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLERFRkxBVEU6MSxJTkZMQVRFOjIsR1pJUDoz LEdVTlpJUDo0LERFRkxBVEVSQVc6NSxJTkZMQVRFUkFXOjYsVU5aSVA6NyxCUk9UTElfREVDT0RF OjgsQlJPVExJX0VOQ09ERTo5LFpfTUlOX1dJTkRPV0JJVFM6OCxaX01BWF9XSU5ET1dCSVRTOjE1 LFpfREVGQVVMVF9XSU5ET1dCSVRTOjE1LFpfTUlOX0NIVU5LOjY0LFpfTUFYX0NIVU5LOjEvMCxa X0RFRkFVTFRfQ0hVTks6MTYzODQsWl9NSU5fTUVNTEVWRUw6MSxaX01BWF9NRU1MRVZFTDo5LFpf REVGQVVMVF9NRU1MRVZFTDo4LFpfTUlOX0xFVkVMOi0xLFpfTUFYX0xFVkVMOjksWl9ERUZBVUxU X0xFVkVMOi0xLEJST1RMSV9PUEVSQVRJT05fUFJPQ0VTUzowLEJST1RMSV9PUEVSQVRJT05fRkxV U0g6MSxCUk9UTElfT1BFUkFUSU9OX0ZJTklTSDoyLEJST1RMSV9PUEVSQVRJT05fRU1JVF9NRVRB REFUQTozLEJST1RMSV9NT0RFX0dFTkVSSUM6MCxCUk9UTElfTU9ERV9URVhUOjEsQlJPVExJX01P REVfRk9OVDoyLEJST1RMSV9ERUZBVUxUX01PREU6MCxCUk9UTElfTUlOX1FVQUxJVFk6MCxCUk9U TElfTUFYX1FVQUxJVFk6MTEsQlJPVExJX0RFRkFVTFRfUVVBTElUWToxMSxCUk9UTElfTUlOX1dJ TkRPV19CSVRTOjEwLEJST1RMSV9NQVhfV0lORE9XX0JJVFM6MjQsQlJPVExJX0xBUkdFX01BWF9X SU5ET1dfQklUUzozMCxCUk9UTElfREVGQVVMVF9XSU5ET1c6MjIsQlJPVExJX01JTl9JTlBVVF9C TE9DS19CSVRTOjE2LEJST1RMSV9NQVhfSU5QVVRfQkxPQ0tfQklUUzoyNCxCUk9UTElfUEFSQU1f TU9ERTowLEJST1RMSV9QQVJBTV9RVUFMSVRZOjEsQlJPVExJX1BBUkFNX0xHV0lOOjIsQlJPVExJ X1BBUkFNX0xHQkxPQ0s6MyxCUk9UTElfUEFSQU1fRElTQUJMRV9MSVRFUkFMX0NPTlRFWFRfTU9E RUxJTkc6NCxCUk9UTElfUEFSQU1fU0laRV9ISU5UOjUsQlJPVExJX1BBUkFNX0xBUkdFX1dJTkRP Vzo2LEJST1RMSV9QQVJBTV9OUE9TVEZJWDo3LEJST1RMSV9QQVJBTV9ORElSRUNUOjgsQlJPVExJ X0RFQ09ERVJfUkVTVUxUX0VSUk9SOjAsQlJPVExJX0RFQ09ERVJfUkVTVUxUX1NVQ0NFU1M6MSxC Uk9UTElfREVDT0RFUl9SRVNVTFRfTkVFRFNfTU9SRV9JTlBVVDoyLEJST1RMSV9ERUNPREVSX1JF U1VMVF9ORUVEU19NT1JFX09VVFBVVDozLEJST1RMSV9ERUNPREVSX1BBUkFNX0RJU0FCTEVfUklO R19CVUZGRVJfUkVBTExPQ0FUSU9OOjAsQlJPVExJX0RFQ09ERVJfUEFSQU1fTEFSR0VfV0lORE9X OjEsQlJPVExJX0RFQ09ERVJfTk9fRVJST1I6MCxCUk9UTElfREVDT0RFUl9TVUNDRVNTOjEsQlJP VExJX0RFQ09ERVJfTkVFRFNfTU9SRV9JTlBVVDoyLEJST1RMSV9ERUNPREVSX05FRURTX01PUkVf T1VUUFVUOjMsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0VYVUJFUkFOVF9OSUJCTEU6LTEs QlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1JFU0VSVkVEOi0yLEJST1RMSV9ERUNPREVSX0VS Uk9SX0ZPUk1BVF9FWFVCRVJBTlRfTUVUQV9OSUJCTEU6LTMsQlJPVExJX0RFQ09ERVJfRVJST1Jf Rk9STUFUX1NJTVBMRV9IVUZGTUFOX0FMUEhBQkVUOi00LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZP Uk1BVF9TSU1QTEVfSFVGRk1BTl9TQU1FOi01LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9D TF9TUEFDRTotNixCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfSFVGRk1BTl9TUEFDRTotNyxC Uk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQ09OVEVYVF9NQVBfUkVQRUFUOi04LEJST1RMSV9E RUNPREVSX0VSUk9SX0ZPUk1BVF9CTE9DS19MRU5HVEhfMTotOSxCUk9UTElfREVDT0RFUl9FUlJP Ul9GT1JNQVRfQkxPQ0tfTEVOR1RIXzI6LTEwLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9U UkFOU0ZPUk06LTExLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESUNUSU9OQVJZOi0xMixC Uk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfV0lORE9XX0JJVFM6LTEzLEJST1RMSV9ERUNPREVS X0VSUk9SX0ZPUk1BVF9QQURESU5HXzE6LTE0LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9Q QURESU5HXzI6LTE1LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESVNUQU5DRTotMTYsQlJP VExJX0RFQ09ERVJfRVJST1JfRElDVElPTkFSWV9OT1RfU0VUOi0xOSxCUk9UTElfREVDT0RFUl9F UlJPUl9JTlZBTElEX0FSR1VNRU5UUzotMjAsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfQ09O VEVYVF9NT0RFUzotMjEsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfVFJFRV9HUk9VUFM6LTIy LEJST1RMSV9ERUNPREVSX0VSUk9SX0FMTE9DX0NPTlRFWFRfTUFQOi0yNSxCUk9UTElfREVDT0RF Ul9FUlJPUl9BTExPQ19SSU5HX0JVRkZFUl8xOi0yNixCUk9UTElfREVDT0RFUl9FUlJPUl9BTExP Q19SSU5HX0JVRkZFUl8yOi0yNyxCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19CTE9DS19UWVBF X1RSRUVTOi0zMCxCUk9UTElfREVDT0RFUl9FUlJPUl9VTlJFQUNIQUJMRTotMzF9LHNuKSk7dmFy IHJuPU90LmNvbmNhdCx6cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE90LCJjb25j YXQiKSxubj1zPT5zLEJpPXpzPy53cml0YWJsZT09PSEwfHx6cz8uc2V0IT09dm9pZCAwP3M9PntP dC5jb25jYXQ9cz9ubjpybn06cz0+e30sVHQ9U3ltYm9sKCJfc3VwZXJXcml0ZSIpLEd0PWNsYXNz IGV4dGVuZHMgRXJyb3J7Y29kZTtlcnJubztjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCJ6bGliOiAi K3QubWVzc2FnZSx7Y2F1c2U6dH0pLHRoaXMuY29kZT10LmNvZGUsdGhpcy5lcnJubz10LmVycm5v LHRoaXMuY29kZXx8KHRoaXMuY29kZT0iWkxJQl9FUlJPUiIpLHRoaXMubWVzc2FnZT0iemxpYjog Iit0Lm1lc3NhZ2UsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxlPz90aGlzLmNvbnN0cnVj dG9yKX1nZXQgbmFtZSgpe3JldHVybiJabGliRXJyb3IifX0sUGk9U3ltYm9sKCJmbHVzaEZsYWci KSxyZT1jbGFzcyBleHRlbmRzIEF7I3Q9ITE7I2k9ITE7I3M7I247I3I7I2U7I287Z2V0IHNhd0Vy cm9yKCl7cmV0dXJuIHRoaXMuI3R9Z2V0IGhhbmRsZSgpe3JldHVybiB0aGlzLiNlfWdldCBmbHVz aEZsYWcoKXtyZXR1cm4gdGhpcy4jc31jb25zdHJ1Y3Rvcih0LGUpe2lmKCF0fHx0eXBlb2YgdCE9 Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBvcHRpb25zIGZvciBabGliQmFz ZSBjb25zdHJ1Y3RvciIpO2lmKHN1cGVyKHQpLHRoaXMuI3M9dC5mbHVzaD8/MCx0aGlzLiNuPXQu ZmluaXNoRmx1c2g/PzAsdGhpcy4jcj10LmZ1bGxGbHVzaEZsYWc/PzAsdHlwZW9mIFBzW2VdIT0i ZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbXByZXNzaW9uIG1ldGhvZCBub3Qgc3Vw cG9ydGVkOiAiK2UpO3RyeXt0aGlzLiNlPW5ldyBQc1tlXSh0KX1jYXRjaChpKXt0aHJvdyBuZXcg R3QoaSx0aGlzLmNvbnN0cnVjdG9yKX10aGlzLiNvPWk9Pnt0aGlzLiN0fHwodGhpcy4jdD0hMCx0 aGlzLmNsb3NlKCksdGhpcy5lbWl0KCJlcnJvciIsaSkpfSx0aGlzLiNlPy5vbigiZXJyb3IiLGk9 PnRoaXMuI28obmV3IEd0KGkpKSksdGhpcy5vbmNlKCJlbmQiLCgpPT50aGlzLmNsb3NlKX1jbG9z ZSgpe3RoaXMuI2UmJih0aGlzLiNlLmNsb3NlKCksdGhpcy4jZT12b2lkIDAsdGhpcy5lbWl0KCJj bG9zZSIpKX1yZXNldCgpe2lmKCF0aGlzLiN0KXJldHVybiB6aSh0aGlzLiNlLCJ6bGliIGJpbmRp bmcgY2xvc2VkIiksdGhpcy4jZS5yZXNldD8uKCl9Zmx1c2godCl7dGhpcy5lbmRlZHx8KHR5cGVv ZiB0IT0ibnVtYmVyIiYmKHQ9dGhpcy4jciksdGhpcy53cml0ZShPYmplY3QuYXNzaWduKE90LmFs bG9jKDApLHtbUGldOnR9KSkpfWVuZCh0LGUsaSl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24i JiYoaT10LGU9dm9pZCAwLHQ9dm9pZCAwKSx0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGk9ZSxlPXZv aWQgMCksdCYmKGU/dGhpcy53cml0ZSh0LGUpOnRoaXMud3JpdGUodCkpLHRoaXMuZmx1c2godGhp cy4jbiksdGhpcy4jaT0hMCxzdXBlci5lbmQoaSl9Z2V0IGVuZGVkKCl7cmV0dXJuIHRoaXMuI2l9 W1R0XSh0KXtyZXR1cm4gc3VwZXIud3JpdGUodCl9d3JpdGUodCxlLGkpe2lmKHR5cGVvZiBlPT0i ZnVuY3Rpb24iJiYoaT1lLGU9InV0ZjgiKSx0eXBlb2YgdD09InN0cmluZyImJih0PU90LmZyb20o dCxlKSksdGhpcy4jdClyZXR1cm47emkodGhpcy4jZSwiemxpYiBiaW5kaW5nIGNsb3NlZCIpO2xl dCByPXRoaXMuI2UuX2hhbmRsZSxuPXIuY2xvc2U7ci5jbG9zZT0oKT0+e307bGV0IG89dGhpcy4j ZS5jbG9zZTt0aGlzLiNlLmNsb3NlPSgpPT57fSxCaSghMCk7bGV0IGg7dHJ5e2xldCBsPXR5cGVv ZiB0W1BpXT09Im51bWJlciI/dFtQaV06dGhpcy4jcztoPXRoaXMuI2UuX3Byb2Nlc3NDaHVuayh0 LGwpLEJpKCExKX1jYXRjaChsKXtCaSghMSksdGhpcy4jbyhuZXcgR3QobCx0aGlzLndyaXRlKSl9 ZmluYWxseXt0aGlzLiNlJiYodGhpcy4jZS5faGFuZGxlPXIsci5jbG9zZT1uLHRoaXMuI2UuY2xv c2U9byx0aGlzLiNlLnJlbW92ZUFsbExpc3RlbmVycygiZXJyb3IiKSl9dGhpcy4jZSYmdGhpcy4j ZS5vbigiZXJyb3IiLGw9PnRoaXMuI28obmV3IEd0KGwsdGhpcy53cml0ZSkpKTtsZXQgYTtpZiho KWlmKEFycmF5LmlzQXJyYXkoaCkmJmgubGVuZ3RoPjApe2xldCBsPWhbMF07YT10aGlzW1R0XShP dC5mcm9tKGwpKTtmb3IobGV0IGM9MTtjPGgubGVuZ3RoO2MrKylhPXRoaXNbVHRdKGhbY10pfWVs c2UgYT10aGlzW1R0XShPdC5mcm9tKGgpKTtyZXR1cm4gaSYmaSgpLGF9fSxQZT1jbGFzcyBleHRl bmRzIHJleyN0OyNpO2NvbnN0cnVjdG9yKHQsZSl7dD10fHx7fSx0LmZsdXNoPXQuZmx1c2h8fE0u Wl9OT19GTFVTSCx0LmZpbmlzaEZsdXNoPXQuZmluaXNoRmx1c2h8fE0uWl9GSU5JU0gsdC5mdWxs Rmx1c2hGbGFnPU0uWl9GVUxMX0ZMVVNILHN1cGVyKHQsZSksdGhpcy4jdD10LmxldmVsLHRoaXMu I2k9dC5zdHJhdGVneX1wYXJhbXModCxlKXtpZighdGhpcy5zYXdFcnJvcil7aWYoIXRoaXMuaGFu ZGxlKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHN3aXRjaCBwYXJhbXMgd2hlbiBiaW5kaW5nIGlz IGNsb3NlZCIpO2lmKCF0aGlzLmhhbmRsZS5wYXJhbXMpdGhyb3cgbmV3IEVycm9yKCJub3Qgc3Vw cG9ydGVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24iKTtpZih0aGlzLiN0IT09dHx8dGhpcy4jaSE9 PWUpe3RoaXMuZmx1c2goTS5aX1NZTkNfRkxVU0gpLHppKHRoaXMuaGFuZGxlLCJ6bGliIGJpbmRp bmcgY2xvc2VkIik7bGV0IGk9dGhpcy5oYW5kbGUuZmx1c2g7dGhpcy5oYW5kbGUuZmx1c2g9KHIs bik9Pnt0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXRoaXMuZmx1c2hGbGFnKSx0aGlzLmZs dXNoKHIpLG4/LigpfTt0cnl7dGhpcy5oYW5kbGUucGFyYW1zKHQsZSl9ZmluYWxseXt0aGlzLmhh bmRsZS5mbHVzaD1pfXRoaXMuaGFuZGxlJiYodGhpcy4jdD10LHRoaXMuI2k9ZSl9fX19O3ZhciB6 ZT1jbGFzcyBleHRlbmRzIFBleyN0O2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsIkd6aXAiKSx0aGlz LiN0PXQmJiEhdC5wb3J0YWJsZX1bVHRdKHQpe3JldHVybiB0aGlzLiN0Pyh0aGlzLiN0PSExLHRb OV09MjU1LHN1cGVyW1R0XSh0KSk6c3VwZXJbVHRdKHQpfX07dmFyIFVlPWNsYXNzIGV4dGVuZHMg UGV7Y29uc3RydWN0b3IodCl7c3VwZXIodCwiVW56aXAiKX19LEhlPWNsYXNzIGV4dGVuZHMgcmV7 Y29uc3RydWN0b3IodCxlKXt0PXR8fHt9LHQuZmx1c2g9dC5mbHVzaHx8TS5CUk9UTElfT1BFUkFU SU9OX1BST0NFU1MsdC5maW5pc2hGbHVzaD10LmZpbmlzaEZsdXNofHxNLkJST1RMSV9PUEVSQVRJ T05fRklOSVNILHQuZnVsbEZsdXNoRmxhZz1NLkJST1RMSV9PUEVSQVRJT05fRkxVU0gsc3VwZXIo dCxlKX19LFdlPWNsYXNzIGV4dGVuZHMgSGV7Y29uc3RydWN0b3IodCl7c3VwZXIodCwiQnJvdGxp Q29tcHJlc3MiKX19LEdlPWNsYXNzIGV4dGVuZHMgSGV7Y29uc3RydWN0b3IodCl7c3VwZXIodCwi QnJvdGxpRGVjb21wcmVzcyIpfX0sWmU9Y2xhc3MgZXh0ZW5kcyByZXtjb25zdHJ1Y3Rvcih0LGUp e3Q9dHx8e30sdC5mbHVzaD10LmZsdXNofHxNLlpTVERfZV9jb250aW51ZSx0LmZpbmlzaEZsdXNo PXQuZmluaXNoRmx1c2h8fE0uWlNURF9lX2VuZCx0LmZ1bGxGbHVzaEZsYWc9TS5aU1REX2VfZmx1 c2gsc3VwZXIodCxlKX19LFllPWNsYXNzIGV4dGVuZHMgWmV7Y29uc3RydWN0b3IodCl7c3VwZXIo dCwiWnN0ZENvbXByZXNzIil9fSxLZT1jbGFzcyBleHRlbmRzIFple2NvbnN0cnVjdG9yKHQpe3N1 cGVyKHQsIlpzdGREZWNvbXByZXNzIil9fTtpbXBvcnR7cG9zaXggYXMgWnR9ZnJvbSJub2RlOnBh dGgiO3ZhciBVcz0ocyx0KT0+e2lmKE51bWJlci5pc1NhZmVJbnRlZ2VyKHMpKXM8MD9hbihzLHQp OmhuKHMsdCk7ZWxzZSB0aHJvdyBFcnJvcigiY2Fubm90IGVuY29kZSBudW1iZXIgb3V0c2lkZSBv ZiBqYXZhc2NyaXB0IHNhZmUgaW50ZWdlciByYW5nZSIpO3JldHVybiB0fSxobj0ocyx0KT0+e3Rb MF09MTI4O2Zvcih2YXIgZT10Lmxlbmd0aDtlPjE7ZS0tKXRbZS0xXT1zJjI1NSxzPU1hdGguZmxv b3Iocy8yNTYpfSxhbj0ocyx0KT0+e3RbMF09MjU1O3ZhciBlPSExO3M9cyotMTtmb3IodmFyIGk9 dC5sZW5ndGg7aT4xO2ktLSl7dmFyIHI9cyYyNTU7cz1NYXRoLmZsb29yKHMvMjU2KSxlP3RbaS0x XT1XcyhyKTpyPT09MD90W2ktMV09MDooZT0hMCx0W2ktMV09R3MocikpfX0sSHM9cz0+e2xldCB0 PXNbMF0sZT10PT09MTI4P2NuKHMuc3ViYXJyYXkoMSxzLmxlbmd0aCkpOnQ9PT0yNTU/bG4ocyk6 bnVsbDtpZihlPT09bnVsbCl0aHJvdyBFcnJvcigiaW52YWxpZCBiYXNlMjU2IGVuY29kaW5nIik7 aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGUpKXRocm93IEVycm9yKCJwYXJzZWQgbnVtYmVyIG91 dHNpZGUgb2YgamF2YXNjcmlwdCBzYWZlIGludGVnZXIgcmFuZ2UiKTtyZXR1cm4gZX0sbG49cz0+ e2Zvcih2YXIgdD1zLmxlbmd0aCxlPTAsaT0hMSxyPXQtMTtyPi0xO3ItLSl7dmFyIG49TnVtYmVy KHNbcl0pLG87aT9vPVdzKG4pOm49PT0wP289bjooaT0hMCxvPUdzKG4pKSxvIT09MCYmKGUtPW8q TWF0aC5wb3coMjU2LHQtci0xKSl9cmV0dXJuIGV9LGNuPXM9Pntmb3IodmFyIHQ9cy5sZW5ndGgs ZT0wLGk9dC0xO2k+LTE7aS0tKXt2YXIgcj1OdW1iZXIoc1tpXSk7ciE9PTAmJihlKz1yKk1hdGgu cG93KDI1Nix0LWktMSkpfXJldHVybiBlfSxXcz1zPT4oMjU1XnMpJjI1NSxHcz1zPT4oMjU1XnMp KzEmMjU1O3ZhciBIaT17fTtVcihIaSx7Y29kZTooKT0+VmUsaXNDb2RlOigpPT5uZSxpc05hbWU6 KCk9PmRuLG5hbWU6KCk9Pm9lLG5vcm1hbEZzVHlwZXM6KCk9PlVpfSk7dmFyIG5lPXM9Pm9lLmhh cyhzKSxkbj1zPT5WZS5oYXMocyksVWk9bmV3IFNldChbIjAiLCIiLCIxIiwiMiIsIjMiLCI0Iiwi NSIsIjYiLCI3IiwiRCJdKSxvZT1uZXcgTWFwKFtbIjAiLCJGaWxlIl0sWyIiLCJPbGRGaWxlIl0s WyIxIiwiTGluayJdLFsiMiIsIlN5bWJvbGljTGluayJdLFsiMyIsIkNoYXJhY3RlckRldmljZSJd LFsiNCIsIkJsb2NrRGV2aWNlIl0sWyI1IiwiRGlyZWN0b3J5Il0sWyI2IiwiRklGTyJdLFsiNyIs IkNvbnRpZ3VvdXNGaWxlIl0sWyJnIiwiR2xvYmFsRXh0ZW5kZWRIZWFkZXIiXSxbIngiLCJFeHRl bmRlZEhlYWRlciJdLFsiQSIsIlNvbGFyaXNBQ0wiXSxbIkQiLCJHTlVEdW1wRGlyIl0sWyJJIiwi SW5vZGUiXSxbIksiLCJOZXh0RmlsZUhhc0xvbmdMaW5rcGF0aCJdLFsiTCIsIk5leHRGaWxlSGFz TG9uZ1BhdGgiXSxbIk0iLCJDb250aW51YXRpb25GaWxlIl0sWyJOIiwiT2xkR251TG9uZ1BhdGgi XSxbIlMiLCJTcGFyc2VGaWxlIl0sWyJWIiwiVGFwZVZvbHVtZUhlYWRlciJdLFsiWCIsIk9sZEV4 dGVuZGVkSGVhZGVyIl1dKSxWZT1uZXcgTWFwKEFycmF5LmZyb20ob2UpLm1hcChzPT5bc1sxXSxz WzBdXSkpO3ZhciBtbj1zPT5zPT09dm9pZCAwfHxzPDA/dm9pZCAwOnMsRj1jbGFzc3tja3N1bVZh bGlkPSExO25lZWRQYXg9ITE7bnVsbEJsb2NrPSExO2Jsb2NrO3BhdGg7bW9kZTt1aWQ7Z2lkO3Np emU7Y2tzdW07I3Q9IlVuc3VwcG9ydGVkIjtsaW5rcGF0aDt1bmFtZTtnbmFtZTtkZXZtYWo9MDtk ZXZtaW49MDthdGltZTtjdGltZTttdGltZTtjaGFyc2V0O2NvbW1lbnQ7Y29uc3RydWN0b3IodCxl PTAsaSxyKXtCdWZmZXIuaXNCdWZmZXIodCk/dGhpcy5kZWNvZGUodCxlfHwwLGkscik6dCYmdGhp cy4jaSh0KX1kZWNvZGUodCxlLGkscil7aWYoZXx8KGU9MCksIXR8fCEodC5sZW5ndGg+PWUrNTEy KSl0aHJvdyBuZXcgRXJyb3IoIm5lZWQgNTEyIGJ5dGVzIGZvciBoZWFkZXIiKTtsZXQgbj14dCh0 LGUrMTU2LDEpLG89VWkuaGFzKG4pLGg9bz9pOnZvaWQgMCxhPW8/cjp2b2lkIDA7aWYodGhpcy5w YXRoPWg/LnBhdGg/P3h0KHQsZSwxMDApLHRoaXMubW9kZT1oPy5tb2RlPz9hPy5tb2RlPz9sdCh0 LGUrMTAwLDgpLHRoaXMudWlkPWg/LnVpZD8/YT8udWlkPz9sdCh0LGUrMTA4LDgpLHRoaXMuZ2lk PWg/LmdpZD8/YT8uZ2lkPz9sdCh0LGUrMTE2LDgpLHRoaXMuc2l6ZT1tbihoPy5zaXplPz9hPy5z aXplPz9sdCh0LGUrMTI0LDEyKSksdGhpcy5tdGltZT1oPy5tdGltZT8/YT8ubXRpbWU/P1dpKHQs ZSsxMzYsMTIpLHRoaXMuY2tzdW09bHQodCxlKzE0OCwxMiksYSYmdGhpcy4jaShhLCEwKSxoJiZ0 aGlzLiNpKGgpLG5lKG4pJiYodGhpcy4jdD1ufHwiMCIpLHRoaXMuI3Q9PT0iMCImJnRoaXMucGF0 aC5zbGljZSgtMSk9PT0iLyImJih0aGlzLiN0PSI1IiksdGhpcy4jdD09PSI1IiYmKHRoaXMuc2l6 ZT0wKSx0aGlzLmxpbmtwYXRoPXh0KHQsZSsxNTcsMTAwKSx0LnN1YmFycmF5KGUrMjU3LGUrMjY1 KS50b1N0cmluZygpPT09InVzdGFyXHgwMDAwIilpZih0aGlzLnVuYW1lPWg/LnVuYW1lPz9hPy51 bmFtZT8/eHQodCxlKzI2NSwzMiksdGhpcy5nbmFtZT1oPy5nbmFtZT8/YT8uZ25hbWU/P3h0KHQs ZSsyOTcsMzIpLHRoaXMuZGV2bWFqPWg/LmRldm1haj8/YT8uZGV2bWFqPz9sdCh0LGUrMzI5LDgp Pz8wLHRoaXMuZGV2bWluPWg/LmRldm1pbj8/YT8uZGV2bWluPz9sdCh0LGUrMzM3LDgpPz8wLHRb ZSs0NzVdIT09MCl7bGV0IGM9eHQodCxlKzM0NSwxNTUpO3RoaXMucGF0aD1jKyIvIit0aGlzLnBh dGh9ZWxzZXtsZXQgYz14dCh0LGUrMzQ1LDEzMCk7YyYmKHRoaXMucGF0aD1jKyIvIit0aGlzLnBh dGgpLHRoaXMuYXRpbWU9aT8uYXRpbWU/P3I/LmF0aW1lPz9XaSh0LGUrNDc2LDEyKSx0aGlzLmN0 aW1lPWk/LmN0aW1lPz9yPy5jdGltZT8/V2kodCxlKzQ4OCwxMil9bGV0IGw9MjU2O2ZvcihsZXQg Yz1lO2M8ZSsxNDg7YysrKWwrPXRbY107Zm9yKGxldCBjPWUrMTU2O2M8ZSs1MTI7YysrKWwrPXRb Y107dGhpcy5ja3N1bVZhbGlkPWw9PT10aGlzLmNrc3VtLHRoaXMuY2tzdW09PT12b2lkIDAmJmw9 PT0yNTYmJih0aGlzLm51bGxCbG9jaz0hMCl9I2kodCxlPSExKXtPYmplY3QuYXNzaWduKHRoaXMs T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHQpLmZpbHRlcigoW2kscl0pPT4hKHI9 PW51bGx8fGk9PT0ic2l6ZSImJk51bWJlcihyKTwwfHxpPT09InBhdGgiJiZlfHxpPT09Imxpbmtw YXRoIiYmZXx8aT09PSJnbG9iYWwiKSkpKX1lbmNvZGUodCxlPTApe2lmKHR8fCh0PXRoaXMuYmxv Y2s9QnVmZmVyLmFsbG9jKDUxMikpLHRoaXMuI3Q9PT0iVW5zdXBwb3J0ZWQiJiYodGhpcy4jdD0i MCIpLCEodC5sZW5ndGg+PWUrNTEyKSl0aHJvdyBuZXcgRXJyb3IoIm5lZWQgNTEyIGJ5dGVzIGZv ciBoZWFkZXIiKTtsZXQgaT10aGlzLmN0aW1lfHx0aGlzLmF0aW1lPzEzMDoxNTUscj11bih0aGlz LnBhdGh8fCIiLGkpLG49clswXSxvPXJbMV07dGhpcy5uZWVkUGF4PSEhclsyXSx0aGlzLm5lZWRQ YXg9THQodCxlLDEwMCxuKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1jdCh0LGUrMTAwLDgs dGhpcy5tb2RlKXx8dGhpcy5uZWVkUGF4LHRoaXMubmVlZFBheD1jdCh0LGUrMTA4LDgsdGhpcy51 aWQpfHx0aGlzLm5lZWRQYXgsdGhpcy5uZWVkUGF4PWN0KHQsZSsxMTYsOCx0aGlzLmdpZCl8fHRo aXMubmVlZFBheCx0aGlzLm5lZWRQYXg9Y3QodCxlKzEyNCwxMix0aGlzLnNpemUpfHx0aGlzLm5l ZWRQYXgsdGhpcy5uZWVkUGF4PUdpKHQsZSsxMzYsMTIsdGhpcy5tdGltZSl8fHRoaXMubmVlZFBh eCx0W2UrMTU2XT1OdW1iZXIodGhpcy4jdC5jb2RlUG9pbnRBdCgwKSksdGhpcy5uZWVkUGF4PUx0 KHQsZSsxNTcsMTAwLHRoaXMubGlua3BhdGgpfHx0aGlzLm5lZWRQYXgsdC53cml0ZSgidXN0YXJc eDAwMDAiLGUrMjU3LDgpLHRoaXMubmVlZFBheD1MdCh0LGUrMjY1LDMyLHRoaXMudW5hbWUpfHx0 aGlzLm5lZWRQYXgsdGhpcy5uZWVkUGF4PUx0KHQsZSsyOTcsMzIsdGhpcy5nbmFtZSl8fHRoaXMu bmVlZFBheCx0aGlzLm5lZWRQYXg9Y3QodCxlKzMyOSw4LHRoaXMuZGV2bWFqKXx8dGhpcy5uZWVk UGF4LHRoaXMubmVlZFBheD1jdCh0LGUrMzM3LDgsdGhpcy5kZXZtaW4pfHx0aGlzLm5lZWRQYXgs dGhpcy5uZWVkUGF4PUx0KHQsZSszNDUsaSxvKXx8dGhpcy5uZWVkUGF4LHRbZSs0NzVdIT09MD90 aGlzLm5lZWRQYXg9THQodCxlKzM0NSwxNTUsbyl8fHRoaXMubmVlZFBheDoodGhpcy5uZWVkUGF4 PUx0KHQsZSszNDUsMTMwLG8pfHx0aGlzLm5lZWRQYXgsdGhpcy5uZWVkUGF4PUdpKHQsZSs0NzYs MTIsdGhpcy5hdGltZSl8fHRoaXMubmVlZFBheCx0aGlzLm5lZWRQYXg9R2kodCxlKzQ4OCwxMix0 aGlzLmN0aW1lKXx8dGhpcy5uZWVkUGF4KTtsZXQgaD0yNTY7Zm9yKGxldCBhPWU7YTxlKzE0ODth KyspaCs9dFthXTtmb3IobGV0IGE9ZSsxNTY7YTxlKzUxMjthKyspaCs9dFthXTtyZXR1cm4gdGhp cy5ja3N1bT1oLGN0KHQsZSsxNDgsOCx0aGlzLmNrc3VtKSx0aGlzLmNrc3VtVmFsaWQ9ITAsdGhp cy5uZWVkUGF4fWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuI3Q9PT0iVW5zdXBwb3J0ZWQiP3RoaXMu I3Q6b2UuZ2V0KHRoaXMuI3QpfWdldCB0eXBlS2V5KCl7cmV0dXJuIHRoaXMuI3R9c2V0IHR5cGUo dCl7bGV0IGU9U3RyaW5nKFZlLmdldCh0KSk7aWYobmUoZSl8fGU9PT0iVW5zdXBwb3J0ZWQiKXRo aXMuI3Q9ZTtlbHNlIGlmKG5lKHQpKXRoaXMuI3Q9dDtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3Io ImludmFsaWQgZW50cnkgdHlwZTogIit0KX19LHVuPShzLHQpPT57bGV0IGk9cyxyPSIiLG4sbz1a dC5wYXJzZShzKS5yb290fHwiLiI7aWYoQnVmZmVyLmJ5dGVMZW5ndGgoaSk8MTAwKW49W2ksciwh MV07ZWxzZXtyPVp0LmRpcm5hbWUoaSksaT1adC5iYXNlbmFtZShpKTtkbyBCdWZmZXIuYnl0ZUxl bmd0aChpKTw9MTAwJiZCdWZmZXIuYnl0ZUxlbmd0aChyKTw9dD9uPVtpLHIsITFdOkJ1ZmZlci5i eXRlTGVuZ3RoKGkpPjEwMCYmQnVmZmVyLmJ5dGVMZW5ndGgocik8PXQ/bj1baS5zbGljZSgwLDk5 KSxyLCEwXTooaT1adC5qb2luKFp0LmJhc2VuYW1lKHIpLGkpLHI9WnQuZGlybmFtZShyKSk7d2hp bGUociE9PW8mJm49PT12b2lkIDApO258fChuPVtzLnNsaWNlKDAsOTkpLCIiLCEwXSl9cmV0dXJu IG59LHh0PShzLHQsZSk9PnMuc3ViYXJyYXkodCx0K2UpLnRvU3RyaW5nKCJ1dGY4IikucmVwbGFj ZSgvXDAuKi8sIiIpLFdpPShzLHQsZSk9PnBuKGx0KHMsdCxlKSkscG49cz0+cz09PXZvaWQgMD92 b2lkIDA6bmV3IERhdGUocyoxZTMpLGx0PShzLHQsZSk9Pk51bWJlcihzW3RdKSYxMjg/SHMocy5z dWJhcnJheSh0LHQrZSkpOnduKHMsdCxlKSxFbj1zPT5pc05hTihzKT92b2lkIDA6cyx3bj0ocyx0 LGUpPT5FbihwYXJzZUludChzLnN1YmFycmF5KHQsdCtlKS50b1N0cmluZygidXRmOCIpLnJlcGxh Y2UoL1wwLiokLywiIikudHJpbSgpLDgpKSxTbj17MTI6ODU4OTkzNDU5MSw4OjIwOTcxNTF9LGN0 PShzLHQsZSxpKT0+aT09PXZvaWQgMD8hMTppPlNuW2VdfHxpPDA/KFVzKGkscy5zdWJhcnJheSh0 LHQrZSkpLCEwKTooeW4ocyx0LGUsaSksITEpLHluPShzLHQsZSxpKT0+cy53cml0ZShSbihpLGUp LHQsZSwiYXNjaWkiKSxSbj0ocyx0KT0+Z24oTWF0aC5mbG9vcihzKS50b1N0cmluZyg4KSx0KSxn bj0ocyx0KT0+KHMubGVuZ3RoPT09dC0xP3M6bmV3IEFycmF5KHQtcy5sZW5ndGgtMSkuam9pbigi MCIpK3MrIiAiKSsiXDAiLEdpPShzLHQsZSxpKT0+aT09PXZvaWQgMD8hMTpjdChzLHQsZSxpLmdl dFRpbWUoKS8xZTMpLGJuPW5ldyBBcnJheSgxNTYpLmpvaW4oIlwwIiksTHQ9KHMsdCxlLGkpPT5p PT09dm9pZCAwPyExOihzLndyaXRlKGkrYm4sdCxlLCJ1dGY4IiksaS5sZW5ndGghPT1CdWZmZXIu Ynl0ZUxlbmd0aChpKXx8aS5sZW5ndGg+ZSk7aW1wb3J0e2Jhc2VuYW1lIGFzIF9ufWZyb20ibm9k ZTpwYXRoIjt2YXIgZnQ9Y2xhc3Mgc3thdGltZTttdGltZTtjdGltZTtjaGFyc2V0O2NvbW1lbnQ7 Z2lkO3VpZDtnbmFtZTt1bmFtZTtsaW5rcGF0aDtkZXY7aW5vO25saW5rO3BhdGg7c2l6ZTttb2Rl O2dsb2JhbDtjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMuYXRpbWU9dC5hdGltZSx0aGlzLmNoYXJz ZXQ9dC5jaGFyc2V0LHRoaXMuY29tbWVudD10LmNvbW1lbnQsdGhpcy5jdGltZT10LmN0aW1lLHRo aXMuZGV2PXQuZGV2LHRoaXMuZ2lkPXQuZ2lkLHRoaXMuZ2xvYmFsPWUsdGhpcy5nbmFtZT10Lmdu YW1lLHRoaXMuaW5vPXQuaW5vLHRoaXMubGlua3BhdGg9dC5saW5rcGF0aCx0aGlzLm10aW1lPXQu bXRpbWUsdGhpcy5ubGluaz10Lm5saW5rLHRoaXMucGF0aD10LnBhdGgsdGhpcy5zaXplPXQuc2l6 ZSx0aGlzLnVpZD10LnVpZCx0aGlzLnVuYW1lPXQudW5hbWV9ZW5jb2RlKCl7bGV0IHQ9dGhpcy5l bmNvZGVCb2R5KCk7aWYodD09PSIiKXJldHVybiBCdWZmZXIuYWxsb2NVbnNhZmUoMCk7bGV0IGU9 QnVmZmVyLmJ5dGVMZW5ndGgodCksaT01MTIqTWF0aC5jZWlsKDErZS81MTIpLHI9QnVmZmVyLmFs bG9jVW5zYWZlKGkpO2ZvcihsZXQgbj0wO248NTEyO24rKylyW25dPTA7bmV3IEYoe3BhdGg6KCJQ YXhIZWFkZXIvIitfbih0aGlzLnBhdGg/PyIiKSkuc2xpY2UoMCw5OSksbW9kZTp0aGlzLm1vZGV8 fDQyMCx1aWQ6dGhpcy51aWQsZ2lkOnRoaXMuZ2lkLHNpemU6ZSxtdGltZTp0aGlzLm10aW1lLHR5 cGU6dGhpcy5nbG9iYWw/Ikdsb2JhbEV4dGVuZGVkSGVhZGVyIjoiRXh0ZW5kZWRIZWFkZXIiLGxp bmtwYXRoOiIiLHVuYW1lOnRoaXMudW5hbWV8fCIiLGduYW1lOnRoaXMuZ25hbWV8fCIiLGRldm1h ajowLGRldm1pbjowLGF0aW1lOnRoaXMuYXRpbWUsY3RpbWU6dGhpcy5jdGltZX0pLmVuY29kZShy KSxyLndyaXRlKHQsNTEyLGUsInV0ZjgiKTtmb3IobGV0IG49ZSs1MTI7bjxyLmxlbmd0aDtuKysp cltuXT0wO3JldHVybiByfWVuY29kZUJvZHkoKXtyZXR1cm4gdGhpcy5lbmNvZGVGaWVsZCgicGF0 aCIpK3RoaXMuZW5jb2RlRmllbGQoImN0aW1lIikrdGhpcy5lbmNvZGVGaWVsZCgiYXRpbWUiKSt0 aGlzLmVuY29kZUZpZWxkKCJkZXYiKSt0aGlzLmVuY29kZUZpZWxkKCJpbm8iKSt0aGlzLmVuY29k ZUZpZWxkKCJubGluayIpK3RoaXMuZW5jb2RlRmllbGQoImNoYXJzZXQiKSt0aGlzLmVuY29kZUZp ZWxkKCJjb21tZW50IikrdGhpcy5lbmNvZGVGaWVsZCgiZ2lkIikrdGhpcy5lbmNvZGVGaWVsZCgi Z25hbWUiKSt0aGlzLmVuY29kZUZpZWxkKCJsaW5rcGF0aCIpK3RoaXMuZW5jb2RlRmllbGQoIm10 aW1lIikrdGhpcy5lbmNvZGVGaWVsZCgic2l6ZSIpK3RoaXMuZW5jb2RlRmllbGQoInVpZCIpK3Ro aXMuZW5jb2RlRmllbGQoInVuYW1lIil9ZW5jb2RlRmllbGQodCl7aWYodGhpc1t0XT09PXZvaWQg MClyZXR1cm4iIjtsZXQgZT10aGlzW3RdLGk9ZSBpbnN0YW5jZW9mIERhdGU/ZS5nZXRUaW1lKCkv MWUzOmUscj0iICIrKHQ9PT0iZGV2Inx8dD09PSJpbm8ifHx0PT09Im5saW5rIj8iU0NISUxZLiI6 IiIpK3QrIj0iK2krYAorK2Asbj1CdWZmZXIuYnl0ZUxlbmd0aChyKSxvPU1hdGguZmxvb3IoTWF0 aC5sb2cobikvTWF0aC5sb2coMTApKSsxO3JldHVybiBuK28+PU1hdGgucG93KDEwLG8pJiYobys9 MSksbytuK3J9c3RhdGljIHBhcnNlKHQsZSxpPSExKXtyZXR1cm4gbmV3IHMoT24oVG4odCksZSks aSl9fSxPbj0ocyx0KT0+dD9PYmplY3QuYXNzaWduKHt9LHQscyk6cyxUbj1zPT5zLnJlcGxhY2Uo L1xuJC8sIiIpLnNwbGl0KGAKKytgKS5yZWR1Y2UoeG4sT2JqZWN0LmNyZWF0ZShudWxsKSkseG49 KHMsdCk9PntsZXQgZT1wYXJzZUludCh0LDEwKTtpZihlIT09QnVmZmVyLmJ5dGVMZW5ndGgodCkr MSlyZXR1cm4gczt0PXQuc2xpY2UoKGUrIiAiKS5sZW5ndGgpO2xldCBpPXQuc3BsaXQoIj0iKSxy PWkuc2hpZnQoKTtpZighcilyZXR1cm4gcztsZXQgbj1yLnJlcGxhY2UoL15TQ0hJTFlcLihkZXZ8 aW5vfG5saW5rKS8sIiQxIiksbz1pLmpvaW4oIj0iKS5yZXBsYWNlKC9cMC4qLywiIik7c3dpdGNo KG4pe2Nhc2UicGF0aCI6Y2FzZSJsaW5rcGF0aCI6Y2FzZSJ0eXBlIjpjYXNlImNoYXJzZXQiOmNh c2UiY29tbWVudCI6Y2FzZSJnbmFtZSI6Y2FzZSJ1bmFtZSI6c1tuXT1vO2JyZWFrO2Nhc2UiY3Rp bWUiOmNhc2UiYXRpbWUiOmNhc2UibXRpbWUiOnNbbl09bmV3IERhdGUoTnVtYmVyKG8pKjFlMyk7 YnJlYWs7Y2FzZSJzaXplIjpsZXQgaD0rbztoPj0wJiYoc1tuXT1oKTticmVhaztjYXNlImdpZCI6 Y2FzZSJ1aWQiOmNhc2UiZGV2IjpjYXNlImlubyI6Y2FzZSJubGluayI6Y2FzZSJtb2RlIjpzW25d PStvO2JyZWFrfXJldHVybiBzfTt2YXIgTG49cHJvY2Vzcy5lbnYuVEVTVElOR19UQVJfRkFLRV9Q TEFURk9STXx8cHJvY2Vzcy5wbGF0Zm9ybSxmPUxuIT09IndpbjMyIj9zPT5TdHJpbmcocyk6cz0+ U3RyaW5nKHMpLnJlcGxhY2VBbGwoL1xcL2csIi8iKTt2YXIgJGU9Y2xhc3MgZXh0ZW5kcyBBe2V4 dGVuZGVkO2dsb2JhbEV4dGVuZGVkO2hlYWRlcjtzdGFydEJsb2NrU2l6ZTtibG9ja1JlbWFpbjty ZW1haW47dHlwZTttZXRhPSExO2lnbm9yZT0hMTtwYXRoO21vZGU7dWlkO2dpZDt1bmFtZTtnbmFt ZTtzaXplPTA7bXRpbWU7YXRpbWU7Y3RpbWU7bGlua3BhdGg7ZGV2O2lubztubGluaztpbnZhbGlk PSExO2Fic29sdXRlO3Vuc3VwcG9ydGVkPSExO2NvbnN0cnVjdG9yKHQsZSxpKXtzd2l0Y2goc3Vw ZXIoe30pLHRoaXMucGF1c2UoKSx0aGlzLmV4dGVuZGVkPWUsdGhpcy5nbG9iYWxFeHRlbmRlZD1p LHRoaXMuaGVhZGVyPXQsdGhpcy5yZW1haW49dC5zaXplPz8wLHRoaXMuc3RhcnRCbG9ja1NpemU9 NTEyKk1hdGguY2VpbCh0aGlzLnJlbWFpbi81MTIpLHRoaXMuYmxvY2tSZW1haW49dGhpcy5zdGFy dEJsb2NrU2l6ZSx0aGlzLnR5cGU9dC50eXBlLHRoaXMudHlwZSl7Y2FzZSJGaWxlIjpjYXNlIk9s ZEZpbGUiOmNhc2UiTGluayI6Y2FzZSJTeW1ib2xpY0xpbmsiOmNhc2UiQ2hhcmFjdGVyRGV2aWNl IjpjYXNlIkJsb2NrRGV2aWNlIjpjYXNlIkRpcmVjdG9yeSI6Y2FzZSJGSUZPIjpjYXNlIkNvbnRp Z3VvdXNGaWxlIjpjYXNlIkdOVUR1bXBEaXIiOmJyZWFrO2Nhc2UiTmV4dEZpbGVIYXNMb25nTGlu a3BhdGgiOmNhc2UiTmV4dEZpbGVIYXNMb25nUGF0aCI6Y2FzZSJPbGRHbnVMb25nUGF0aCI6Y2Fz ZSJHbG9iYWxFeHRlbmRlZEhlYWRlciI6Y2FzZSJFeHRlbmRlZEhlYWRlciI6Y2FzZSJPbGRFeHRl bmRlZEhlYWRlciI6dGhpcy5tZXRhPSEwO2JyZWFrO2RlZmF1bHQ6dGhpcy5pZ25vcmU9ITB9aWYo IXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIm5vIHBhdGggcHJvdmlkZWQgZm9yIHRhci5SZWFkRW50 cnkiKTt0aGlzLnBhdGg9Zih0LnBhdGgpLHRoaXMubW9kZT10Lm1vZGUsdGhpcy5tb2RlJiYodGhp cy5tb2RlPXRoaXMubW9kZSY0MDk1KSx0aGlzLnVpZD10LnVpZCx0aGlzLmdpZD10LmdpZCx0aGlz LnVuYW1lPXQudW5hbWUsdGhpcy5nbmFtZT10LmduYW1lLHRoaXMuc2l6ZT10aGlzLnJlbWFpbix0 aGlzLm10aW1lPXQubXRpbWUsdGhpcy5hdGltZT10LmF0aW1lLHRoaXMuY3RpbWU9dC5jdGltZSx0 aGlzLmxpbmtwYXRoPXQubGlua3BhdGg/Zih0LmxpbmtwYXRoKTp2b2lkIDAsdGhpcy51bmFtZT10 LnVuYW1lLHRoaXMuZ25hbWU9dC5nbmFtZSxlJiZ0aGlzLiN0KGUpLGkmJnRoaXMuI3QoaSwhMCl9 d3JpdGUodCl7bGV0IGU9dC5sZW5ndGg7aWYoZT50aGlzLmJsb2NrUmVtYWluKXRocm93IG5ldyBF cnJvcigid3JpdGluZyBtb3JlIHRvIGVudHJ5IHRoYW4gaXMgYXBwcm9wcmlhdGUiKTtsZXQgaT10 aGlzLnJlbWFpbixyPXRoaXMuYmxvY2tSZW1haW47cmV0dXJuIHRoaXMucmVtYWluPU1hdGgubWF4 KDAsaS1lKSx0aGlzLmJsb2NrUmVtYWluPU1hdGgubWF4KDAsci1lKSx0aGlzLmlnbm9yZT8hMDpp Pj1lP3N1cGVyLndyaXRlKHQpOnN1cGVyLndyaXRlKHQuc3ViYXJyYXkoMCxpKSl9I3QodCxlPSEx KXt0LnBhdGgmJih0LnBhdGg9Zih0LnBhdGgpKSx0LmxpbmtwYXRoJiYodC5saW5rcGF0aD1mKHQu bGlua3BhdGgpKSxPYmplY3QuYXNzaWduKHRoaXMsT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5l bnRyaWVzKHQpLmZpbHRlcigoW2kscl0pPT4hKHI9PW51bGx8fGk9PT0icGF0aCImJmUpKSkpfX07 dmFyIER0PShzLHQsZSxpPXt9KT0+e3MuZmlsZSYmKGkuZmlsZT1zLmZpbGUpLHMuY3dkJiYoaS5j d2Q9cy5jd2QpLGkuY29kZT1lIGluc3RhbmNlb2YgRXJyb3ImJmUuY29kZXx8dCxpLnRhckNvZGU9 dCwhcy5zdHJpY3QmJmkucmVjb3ZlcmFibGUhPT0hMT8oZSBpbnN0YW5jZW9mIEVycm9yJiYoaT1P YmplY3QuYXNzaWduKGUsaSksZT1lLm1lc3NhZ2UpLHMuZW1pdCgid2FybiIsdCxlLGkpKTplIGlu c3RhbmNlb2YgRXJyb3I/cy5lbWl0KCJlcnJvciIsT2JqZWN0LmFzc2lnbihlLGkpKTpzLmVtaXQo ImVycm9yIixPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgJHt0fTogJHtlfWApLGkpKX07dmFyIE5u PTEwMjQqMTAyNCxYaT1CdWZmZXIuZnJvbShbMzEsMTM5XSkscWk9QnVmZmVyLmZyb20oWzQwLDE4 MSw0NywyNTNdKSxBbj1NYXRoLm1heChYaS5sZW5ndGgscWkubGVuZ3RoKSxCPVN5bWJvbCgic3Rh dGUiKSxOdD1TeW1ib2woIndyaXRlRW50cnkiKSxpdD1TeW1ib2woInJlYWRFbnRyeSIpLFppPVN5 bWJvbCgibmV4dEVudHJ5IiksWnM9U3ltYm9sKCJwcm9jZXNzRW50cnkiKSxWPVN5bWJvbCgiZXh0 ZW5kZWRIZWFkZXIiKSxoZT1TeW1ib2woImdsb2JhbEV4dGVuZGVkSGVhZGVyIiksZHQ9U3ltYm9s KCJtZXRhIiksWXM9U3ltYm9sKCJlbWl0TWV0YSIpLHA9U3ltYm9sKCJidWZmZXIiKSxzdD1TeW1i b2woInF1ZXVlIiksbXQ9U3ltYm9sKCJlbmRlZCIpLFlpPVN5bWJvbCgiZW1pdHRlZEVuZCIpLEF0 PVN5bWJvbCgiZW1pdCIpLHk9U3ltYm9sKCJ1bnppcCIpLFhlPVN5bWJvbCgiY29uc3VtZUNodW5r IikscWU9U3ltYm9sKCJjb25zdW1lQ2h1bmtTdWIiKSxLaT1TeW1ib2woImNvbnN1bWVCb2R5Iiks S3M9U3ltYm9sKCJjb25zdW1lTWV0YSIpLFZzPVN5bWJvbCgiY29uc3VtZUhlYWRlciIpLGFlPVN5 bWJvbCgiY29uc3VtaW5nIiksVmk9U3ltYm9sKCJidWZmZXJDb25jYXQiKSxRZT1TeW1ib2woIm1h eWJlRW5kIiksWXQ9U3ltYm9sKCJ3cml0aW5nIiksJD1TeW1ib2woImFib3J0ZWQiKSxKZT1TeW1i b2woIm9uRG9uZSIpLEl0PVN5bWJvbCgic2F3VmFsaWRFbnRyeSIpLGplPVN5bWJvbCgic2F3TnVs bEJsb2NrIiksdGk9U3ltYm9sKCJzYXdFT0YiKSwkcz1TeW1ib2woImNsb3NlU3RyZWFtIiksSW49 MWUzLGxlPVN5bWJvbCgiY29tcHJlc3NlZEJ5dGVzUmVhZCIpLCRpPVN5bWJvbCgiZGVjb21wcmVz c2VkQnl0ZXNSZWFkIiksWHM9U3ltYm9sKCJjaGVja0RlY29tcHJlc3Npb25SYXRpbyIpLENuPSgp PT4hMCxydD1jbGFzcyBleHRlbmRzIERue2ZpbGU7c3RyaWN0O21heE1ldGFFbnRyeVNpemU7Zmls dGVyO2Jyb3RsaTt6c3RkO21heERlY29tcHJlc3Npb25SYXRpbzt3cml0YWJsZT0hMDtyZWFkYWJs ZT0hMTtbc3RdPVtdO1twXTtbaXRdO1tOdF07W0JdPSJiZWdpbiI7W2R0XT0iIjtbVl07W2hlXTtb bXRdPSExO1t5XTtbJF09ITE7W0l0XTtbamVdPSExO1t0aV09ITE7W1l0XT0hMTtbYWVdPSExO1tZ aV09ITE7W2xlXT0wO1skaV09MDtjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcigpLHRoaXMuZmlsZT10 LmZpbGV8fCIiLHRoaXMub24oSmUsKCk9PnsodGhpc1tCXT09PSJiZWdpbiJ8fHRoaXNbSXRdPT09 ITEpJiZ0aGlzLndhcm4oIlRBUl9CQURfQVJDSElWRSIsIlVucmVjb2duaXplZCBhcmNoaXZlIGZv cm1hdCIpfSksdC5vbmRvbmU/dGhpcy5vbihKZSx0Lm9uZG9uZSk6dGhpcy5vbihKZSwoKT0+e3Ro aXMuZW1pdCgicHJlZmluaXNoIiksdGhpcy5lbWl0KCJmaW5pc2giKSx0aGlzLmVtaXQoImVuZCIp fSksdGhpcy5zdHJpY3Q9ISF0LnN0cmljdCx0aGlzLm1heERlY29tcHJlc3Npb25SYXRpbz10eXBl b2YgdC5tYXhEZWNvbXByZXNzaW9uUmF0aW89PSJudW1iZXIiP3QubWF4RGVjb21wcmVzc2lvblJh dGlvOkluLHRoaXMubWF4TWV0YUVudHJ5U2l6ZT10Lm1heE1ldGFFbnRyeVNpemV8fE5uLHRoaXMu ZmlsdGVyPXR5cGVvZiB0LmZpbHRlcj09ImZ1bmN0aW9uIj90LmZpbHRlcjpDbjtsZXQgZT10LmZp bGUmJih0LmZpbGUuZW5kc1dpdGgoIi50YXIuYnIiKXx8dC5maWxlLmVuZHNXaXRoKCIudGJyIikp O3RoaXMuYnJvdGxpPSEodC5nemlwfHx0LnpzdGQpJiZ0LmJyb3RsaSE9PXZvaWQgMD90LmJyb3Rs aTplP3ZvaWQgMDohMTtsZXQgaT10LmZpbGUmJih0LmZpbGUuZW5kc1dpdGgoIi50YXIuenN0Iil8 fHQuZmlsZS5lbmRzV2l0aCgiLnR6c3QiKSk7dGhpcy56c3RkPSEodC5nemlwfHx0LmJyb3RsaSkm JnQuenN0ZCE9PXZvaWQgMD90LnpzdGQ6aT8hMDp2b2lkIDAsdGhpcy5vbigiZW5kIiwoKT0+dGhp c1skc10oKSksdHlwZW9mIHQub253YXJuPT0iZnVuY3Rpb24iJiZ0aGlzLm9uKCJ3YXJuIix0Lm9u d2FybiksdHlwZW9mIHQub25SZWFkRW50cnk9PSJmdW5jdGlvbiImJnRoaXMub24oImVudHJ5Iix0 Lm9uUmVhZEVudHJ5KX13YXJuKHQsZSxpPXt9KXtEdCh0aGlzLHQsZSxpKX1bVnNdKHQsZSl7dGhp c1tJdF09PT12b2lkIDAmJih0aGlzW0l0XT0hMSk7bGV0IGk7dHJ5e2k9bmV3IEYodCxlLHRoaXNb Vl0sdGhpc1toZV0pfWNhdGNoKHIpe3JldHVybiB0aGlzLndhcm4oIlRBUl9FTlRSWV9JTlZBTElE IixyKX1pZihpLm51bGxCbG9jayl0aGlzW2plXT8odGhpc1t0aV09ITAsdGhpc1tCXT09PSJiZWdp biImJih0aGlzW0JdPSJoZWFkZXIiKSx0aGlzW0F0XSgiZW9mIikpOih0aGlzW2plXT0hMCx0aGlz W0F0XSgibnVsbEJsb2NrIikpO2Vsc2UgaWYodGhpc1tqZV09ITEsIWkuY2tzdW1WYWxpZCl0aGlz Lndhcm4oIlRBUl9FTlRSWV9JTlZBTElEIiwiY2hlY2tzdW0gZmFpbHVyZSIse2hlYWRlcjppfSk7 ZWxzZSBpZighaS5wYXRoKXRoaXMud2FybigiVEFSX0VOVFJZX0lOVkFMSUQiLCJwYXRoIGlzIHJl cXVpcmVkIix7aGVhZGVyOml9KTtlbHNle2xldCByPWkudHlwZTtpZigvXihTeW1ib2xpYyk/TGlu ayQvLnRlc3QocikmJiFpLmxpbmtwYXRoKXRoaXMud2FybigiVEFSX0VOVFJZX0lOVkFMSUQiLCJs aW5rcGF0aCByZXF1aXJlZCIse2hlYWRlcjppfSk7ZWxzZSBpZighL14oU3ltYm9saWMpP0xpbmsk Ly50ZXN0KHIpJiYhL14oR2xvYmFsKT9FeHRlbmRlZEhlYWRlciQvLnRlc3QocikmJmkubGlua3Bh dGgpdGhpcy53YXJuKCJUQVJfRU5UUllfSU5WQUxJRCIsImxpbmtwYXRoIGZvcmJpZGRlbiIse2hl YWRlcjppfSk7ZWxzZXtsZXQgbj10aGlzW050XT1uZXcgJGUoaSx0aGlzW1ZdLHRoaXNbaGVdKTtp ZighdGhpc1tJdF0paWYobi5yZW1haW4pe2xldCBvPSgpPT57bi5pbnZhbGlkfHwodGhpc1tJdF09 ITApfTtuLm9uKCJlbmQiLG8pfWVsc2UgdGhpc1tJdF09ITA7bi5tZXRhP24uc2l6ZT50aGlzLm1h eE1ldGFFbnRyeVNpemU/KG4uaWdub3JlPSEwLHRoaXNbQXRdKCJpZ25vcmVkRW50cnkiLG4pLHRo aXNbQl09Imlnbm9yZSIsbi5yZXN1bWUoKSk6bi5zaXplPjAmJih0aGlzW2R0XT0iIixuLm9uKCJk YXRhIixvPT50aGlzW2R0XSs9byksdGhpc1tCXT0ibWV0YSIpOih0aGlzW1ZdPXZvaWQgMCxuLmln bm9yZT1uLmlnbm9yZXx8IXRoaXMuZmlsdGVyKG4ucGF0aCxuKSxuLmlnbm9yZT8odGhpc1tBdF0o Imlnbm9yZWRFbnRyeSIsbiksdGhpc1tCXT1uLnJlbWFpbj8iaWdub3JlIjoiaGVhZGVyIixuLnJl c3VtZSgpKToobi5yZW1haW4/dGhpc1tCXT0iYm9keSI6KHRoaXNbQl09ImhlYWRlciIsbi5lbmQo KSksdGhpc1tpdF0/dGhpc1tzdF0ucHVzaChuKToodGhpc1tzdF0ucHVzaChuKSx0aGlzW1ppXSgp KSkpfX19WyRzXSgpe3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLmVtaXQoImNsb3NlIikpfVtac10o dCl7bGV0IGU9ITA7aWYoIXQpdGhpc1tpdF09dm9pZCAwLGU9ITE7ZWxzZSBpZihBcnJheS5pc0Fy cmF5KHQpKXtsZXRbaSwuLi5yXT10O3RoaXMuZW1pdChpLC4uLnIpfWVsc2UgdGhpc1tpdF09dCx0 aGlzLmVtaXQoImVudHJ5Iix0KSx0LmVtaXR0ZWRFbmR8fCh0Lm9uKCJlbmQiLCgpPT50aGlzW1pp XSgpKSxlPSExKTtyZXR1cm4gZX1bWmldKCl7ZG87d2hpbGUodGhpc1tac10odGhpc1tzdF0uc2hp ZnQoKSkpO2lmKHRoaXNbc3RdLmxlbmd0aD09PTApe2xldCB0PXRoaXNbaXRdOyF0fHx0LmZsb3dp bmd8fHQuc2l6ZT09PXQucmVtYWluP3RoaXNbWXRdfHx0aGlzLmVtaXQoImRyYWluIik6dC5vbmNl KCJkcmFpbiIsKCk9PnRoaXMuZW1pdCgiZHJhaW4iKSl9fVtLaV0odCxlKXtsZXQgaT10aGlzW050 XTtpZighaSl0aHJvdyBuZXcgRXJyb3IoImF0dGVtcHQgdG8gY29uc3VtZSBib2R5IHdpdGhvdXQg ZW50cnk/PyIpO2xldCByPWkuYmxvY2tSZW1haW4/PzAsbj1yPj10Lmxlbmd0aCYmZT09PTA/dDp0 LnN1YmFycmF5KGUsZStyKTtyZXR1cm4gaS53cml0ZShuKSxpLmJsb2NrUmVtYWlufHwodGhpc1tC XT0iaGVhZGVyIix0aGlzW050XT12b2lkIDAsaS5lbmQoKSksbi5sZW5ndGh9W0tzXSh0LGUpe2xl dCBpPXRoaXNbTnRdLHI9dGhpc1tLaV0odCxlKTtyZXR1cm4hdGhpc1tOdF0mJmkmJnRoaXNbWXNd KGkpLHJ9W0F0XSh0LGUsaSl7dGhpc1tzdF0ubGVuZ3RoPT09MCYmIXRoaXNbaXRdP3RoaXMuZW1p dCh0LGUsaSk6dGhpc1tzdF0ucHVzaChbdCxlLGldKX1bWXNdKHQpe3N3aXRjaCh0aGlzW0F0XSgi bWV0YSIsdGhpc1tkdF0pLHQudHlwZSl7Y2FzZSJFeHRlbmRlZEhlYWRlciI6Y2FzZSJPbGRFeHRl bmRlZEhlYWRlciI6dGhpc1tWXT1mdC5wYXJzZSh0aGlzW2R0XSx0aGlzW1ZdLCExKTticmVhaztj YXNlIkdsb2JhbEV4dGVuZGVkSGVhZGVyIjp0aGlzW2hlXT1mdC5wYXJzZSh0aGlzW2R0XSx0aGlz W2hlXSwhMCk7YnJlYWs7Y2FzZSJOZXh0RmlsZUhhc0xvbmdQYXRoIjpjYXNlIk9sZEdudUxvbmdQ YXRoIjp7bGV0IGU9dGhpc1tWXT8/T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzW1ZdPWUsZS5wYXRo PXRoaXNbZHRdLnJlcGxhY2UoL1wwLiovLCIiKTticmVha31jYXNlIk5leHRGaWxlSGFzTG9uZ0xp bmtwYXRoIjp7bGV0IGU9dGhpc1tWXXx8T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzW1ZdPWUsZS5s aW5rcGF0aD10aGlzW2R0XS5yZXBsYWNlKC9cMC4qLywiIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBu ZXcgRXJyb3IoInVua25vd24gbWV0YTogIit0LnR5cGUpfX1hYm9ydCh0KXt0aGlzWyRdfHwodGhp c1skXT0hMCx0aGlzLmVtaXQoImFib3J0Iix0KSx0aGlzLndhcm4oIlRBUl9BQk9SVCIsdCx7cmVj b3ZlcmFibGU6ITF9KSl9W1hzXSh0KXt0aGlzWyRpXSs9dC5sZW5ndGg7bGV0IGU9dGhpc1skaV0v dGhpc1tsZV07cmV0dXJuIGU+dGhpcy5tYXhEZWNvbXByZXNzaW9uUmF0aW8/KHRoaXMuYWJvcnQo bmV3IEVycm9yKGBtYXggZGVjb21wcmVzc2lvbiByYXRpbyBleGNlZWRlZDogJHtlLnRvRml4ZWQo Mil9ID4gJHt0aGlzLm1heERlY29tcHJlc3Npb25SYXRpb31gKSksITEpOiEwfXdyaXRlKHQsZSxp KXtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGk9ZSxlPXZvaWQgMCksdHlwZW9mIHQ9PSJzdHJp bmciJiYodD1CdWZmZXIuZnJvbSh0LHR5cGVvZiBlPT0ic3RyaW5nIj9lOiJ1dGY4IikpLHRoaXNb JF0pcmV0dXJuIGk/LigpLCExO2lmKCh0aGlzW3ldPT09dm9pZCAwfHx0aGlzLmJyb3RsaT09PXZv aWQgMCYmdGhpc1t5XT09PSExKSYmdCl7aWYodGhpc1twXSYmKHQ9QnVmZmVyLmNvbmNhdChbdGhp c1twXSx0XSksdGhpc1twXT12b2lkIDApLHQubGVuZ3RoPEFuKXJldHVybiB0aGlzW3BdPXQsaT8u KCksITA7Zm9yKGxldCBhPTA7dGhpc1t5XT09PXZvaWQgMCYmYTxYaS5sZW5ndGg7YSsrKXRbYV0h PT1YaVthXSYmKHRoaXNbeV09ITEpO2xldCBvPSExO2lmKHRoaXNbeV09PT0hMSYmdGhpcy56c3Rk IT09ITEpe289ITA7Zm9yKGxldCBhPTA7YTxxaS5sZW5ndGg7YSsrKWlmKHRbYV0hPT1xaVthXSl7 bz0hMTticmVha319bGV0IGg9dGhpcy5icm90bGk9PT12b2lkIDAmJiFvO2lmKHRoaXNbeV09PT0h MSYmaClpZih0Lmxlbmd0aDw1MTIpaWYodGhpc1ttdF0pdGhpcy5icm90bGk9ITA7ZWxzZSByZXR1 cm4gdGhpc1twXT10LGk/LigpLCEwO2Vsc2UgdHJ5e25ldyBGKHQuc3ViYXJyYXkoMCw1MTIpKSx0 aGlzLmJyb3RsaT0hMX1jYXRjaHt0aGlzLmJyb3RsaT0hMH1pZih0aGlzW3ldPT09dm9pZCAwfHx0 aGlzW3ldPT09ITEmJih0aGlzLmJyb3RsaXx8bykpe2xldCBhPXRoaXNbbXRdO3RoaXNbbXRdPSEx LHRoaXNbeV09dGhpc1t5XT09PXZvaWQgMD9uZXcgVWUoe30pOm8/bmV3IEtlKHt9KTpuZXcgR2Uo e30pLHRoaXNbeV0ub24oImRhdGEiLGM9Pnt0aGlzW1hzXShjKSYmdGhpc1tYZV0oYyl9KSx0aGlz W3ldLm9uKCJlcnJvciIsYz0+e3RoaXNbJF18fHRoaXMuYWJvcnQoYyl9KSx0aGlzW3ldLm9uKCJl bmQiLCgpPT57dGhpc1ttdF09ITAsdGhpc1tYZV0oKX0pLHRoaXNbWXRdPSEwLHRoaXNbbGVdKz10 Lmxlbmd0aDtsZXQgbD0hIXRoaXNbeV1bYT8iZW5kIjoid3JpdGUiXSh0KTtyZXR1cm4gdGhpc1tZ dF09ITEsaT8uKCksbH19dGhpc1tZdF09ITAsdGhpc1t5XT8odGhpc1tsZV0rPXQubGVuZ3RoLHRo aXNbeV0ud3JpdGUodCkpOnRoaXNbWGVdKHQpLHRoaXNbWXRdPSExO2xldCBuPXRoaXNbc3RdLmxl bmd0aD4wPyExOnRoaXNbaXRdP3RoaXNbaXRdLmZsb3dpbmc6ITA7cmV0dXJuIW4mJnRoaXNbc3Rd Lmxlbmd0aD09PTAmJnRoaXNbaXRdPy5vbmNlKCJkcmFpbiIsKCk9PnRoaXMuZW1pdCgiZHJhaW4i KSksaT8uKCksbn1bVmldKHQpe3QmJiF0aGlzWyRdJiYodGhpc1twXT10aGlzW3BdP0J1ZmZlci5j b25jYXQoW3RoaXNbcF0sdF0pOnQpfVtRZV0oKXtpZih0aGlzW210XSYmIXRoaXNbWWldJiYhdGhp c1skXSYmIXRoaXNbYWVdKXt0aGlzW1lpXT0hMDtsZXQgdD10aGlzW050XTtpZih0Py5ibG9ja1Jl bWFpbil7bGV0IGU9dGhpc1twXT90aGlzW3BdLmxlbmd0aDowO3RoaXMud2FybigiVEFSX0JBRF9B UkNISVZFIixgVHJ1bmNhdGVkIGlucHV0IChuZWVkZWQgJHt0LmJsb2NrUmVtYWlufSBtb3JlIGJ5 dGVzLCBvbmx5ICR7ZX0gYXZhaWxhYmxlKWAse2VudHJ5OnR9KSx0aGlzW3BdJiZ0LndyaXRlKHRo aXNbcF0pLHQuZW5kKCl9dGhpc1tBdF0oSmUpfX1bWGVdKHQpe2lmKHRoaXNbYWVdJiZ0KXRoaXNb VmldKHQpO2Vsc2UgaWYoIXQmJiF0aGlzW3BdKXRoaXNbUWVdKCk7ZWxzZSBpZih0KXtpZih0aGlz W2FlXT0hMCx0aGlzW3BdKXt0aGlzW1ZpXSh0KTtsZXQgZT10aGlzW3BdO3RoaXNbcF09dm9pZCAw LHRoaXNbcWVdKGUpfWVsc2UgdGhpc1txZV0odCk7Zm9yKDt0aGlzW3BdJiZ0aGlzW3BdPy5sZW5n dGg+PTUxMiYmIXRoaXNbJF0mJiF0aGlzW3RpXTspe2xldCBlPXRoaXNbcF07dGhpc1twXT12b2lk IDAsdGhpc1txZV0oZSl9dGhpc1thZV09ITF9KCF0aGlzW3BdfHx0aGlzW210XSkmJnRoaXNbUWVd KCl9W3FlXSh0KXtsZXQgZT0wLGk9dC5sZW5ndGg7Zm9yKDtlKzUxMjw9aSYmIXRoaXNbJF0mJiF0 aGlzW3RpXTspc3dpdGNoKHRoaXNbQl0pe2Nhc2UiYmVnaW4iOmNhc2UiaGVhZGVyIjp0aGlzW1Zz XSh0LGUpLGUrPTUxMjticmVhaztjYXNlImlnbm9yZSI6Y2FzZSJib2R5IjplKz10aGlzW0tpXSh0 LGUpO2JyZWFrO2Nhc2UibWV0YSI6ZSs9dGhpc1tLc10odCxlKTticmVhaztkZWZhdWx0OnRocm93 IG5ldyBFcnJvcigiaW52YWxpZCBzdGF0ZTogIit0aGlzW0JdKX1lPGkmJih0aGlzW3BdPXRoaXNb cF0/QnVmZmVyLmNvbmNhdChbdC5zdWJhcnJheShlKSx0aGlzW3BdXSk6dC5zdWJhcnJheShlKSl9 ZW5kKHQsZSxpKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiImJihpPXQsZT12b2lkIDAsdD12 b2lkIDApLHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYoaT1lLGU9dm9pZCAwKSx0eXBlb2YgdD09InN0 cmluZyImJih0PUJ1ZmZlci5mcm9tKHQsZSkpLGkmJnRoaXMub25jZSgiZmluaXNoIixpKSx0aGlz WyRdfHwodGhpc1t5XT8odCYmKHRoaXNbbGVdKz10Lmxlbmd0aCx0aGlzW3ldLndyaXRlKHQpKSx0 aGlzW3ldLmVuZCgpKToodGhpc1ttdF09ITAsKHRoaXMuYnJvdGxpPT09dm9pZCAwfHx0aGlzLnpz dGQ9PT12b2lkIDApJiYodD10fHxCdWZmZXIuYWxsb2MoMCkpLHQmJnRoaXMud3JpdGUodCksdGhp c1tRZV0oKSkpLHRoaXN9fTt2YXIgdXQ9cz0+e2xldCB0PXMubGVuZ3RoLTEsZT0tMTtmb3IoO3Q+ LTEmJnMuY2hhckF0KHQpPT09Ii8iOyllPXQsdC0tO3JldHVybiBlPT09LTE/czpzLnNsaWNlKDAs ZSl9O3ZhciB2bj1zPT57bGV0IHQ9cy5vblJlYWRFbnRyeTtzLm9uUmVhZEVudHJ5PXQ/ZT0+e3Qo ZSksZS5yZXN1bWUoKX06ZT0+ZS5yZXN1bWUoKX0sUWk9KHMsdCk9PntsZXQgZT1uZXcgTWFwKHQu bWFwKG49Plt1dChuKSwhMF0pKSxpPXMuZmlsdGVyLHI9KG4sbz0iIik9PntsZXQgaD1vfHxrbihu KS5yb290fHwiLiIsYTtpZihuPT09aClhPSExO2Vsc2V7bGV0IGw9ZS5nZXQobik7YT1sIT09dm9p ZCAwP2w6cihGbihuKSxoKX1yZXR1cm4gZS5zZXQobixhKSxhfTtzLmZpbHRlcj1pPyhuLG8pPT5p KG4sbykmJnIodXQobikpOm49PnIodXQobikpfSxNbj1zPT57bGV0IHQ9bmV3IHJ0KHMpLGU9cy5m aWxlLGk7dHJ5e2k9S3Qub3BlblN5bmMoZSwiciIpO2xldCByPUt0LmZzdGF0U3luYyhpKSxuPXMu bWF4UmVhZFNpemV8fDE2KjEwMjQqMTAyNDtpZihyLnNpemU8bil7bGV0IG89QnVmZmVyLmFsbG9j VW5zYWZlKHIuc2l6ZSksaD1LdC5yZWFkU3luYyhpLG8sMCxyLnNpemUsMCk7dC5lbmQoaD09PW8u Ynl0ZUxlbmd0aD9vOm8uc3ViYXJyYXkoMCxoKSl9ZWxzZXtsZXQgbz0wLGg9QnVmZmVyLmFsbG9j VW5zYWZlKG4pO2Zvcig7bzxyLnNpemU7KXtsZXQgYT1LdC5yZWFkU3luYyhpLGgsMCxuLG8pO2lm KGE9PT0wKWJyZWFrO28rPWEsdC53cml0ZShoLnN1YmFycmF5KDAsYSkpfXQuZW5kKCl9fWZpbmFs bHl7aWYodHlwZW9mIGk9PSJudW1iZXIiKXRyeXtLdC5jbG9zZVN5bmMoaSl9Y2F0Y2h7fX19LEJu PShzLHQpPT57bGV0IGU9bmV3IHJ0KHMpLGk9cy5tYXhSZWFkU2l6ZXx8MTYqMTAyNCoxMDI0LHI9 cy5maWxlO3JldHVybiBuZXcgUHJvbWlzZSgobyxoKT0+e2Uub24oImVycm9yIixoKSxlLm9uKCJl bmQiLG8pLEt0LnN0YXQociwoYSxsKT0+e2lmKGEpaChhKTtlbHNle2xldCBjPW5ldyBfdChyLHty ZWFkU2l6ZTppLHNpemU6bC5zaXplfSk7Yy5vbigiZXJyb3IiLGgpLGMucGlwZShlKX19KX0pfSxD dD1LKE1uLEJuLHM9Pm5ldyBydChzKSxzPT5uZXcgcnQocyksKHMsdCk9Pnt0Py5sZW5ndGgmJlFp KHMsdCkscy5ub1Jlc3VtZXx8dm4ocyl9KTtpbXBvcnQgdWkgZnJvbSJmcyI7aW1wb3J0IFggZnJv bSJmcyI7aW1wb3J0IGpzIGZyb20icGF0aCI7dmFyIEppPShzLHQsZSk9PihzJj00MDk1LGUmJihz PShzfDM4NCkmLTE5KSx0JiYocyYyNTYmJihzfD02NCkscyYzMiYmKHN8PTgpLHMmNCYmKHN8PTEp KSxzKTtpbXBvcnR7d2luMzIgYXMgUG59ZnJvbSJub2RlOnBhdGgiO3Zhcntpc0Fic29sdXRlOnpu LHBhcnNlOnFzfT1QbixjZT1zPT57bGV0IHQ9IiIsZT1xcyhzKTtmb3IoO3puKHMpfHxlLnJvb3Q7 KXtsZXQgaT1zLmNoYXJBdCgwKT09PSIvIiYmcy5zbGljZSgwLDQpIT09Ii8vPy8iPyIvIjplLnJv b3Q7cz1zLnNsaWNlKGkubGVuZ3RoKSx0Kz1pLGU9cXMocyl9cmV0dXJuW3Qsc119O3ZhciBlaT1b InwiLCI8IiwiPiIsIj8iLCI6Il0samk9ZWkubWFwKHM9PlN0cmluZy5mcm9tQ29kZVBvaW50KDYx NDQwK051bWJlcihzLmNvZGVQb2ludEF0KDApKSkpLFVuPW5ldyBNYXAoZWkubWFwKChzLHQpPT5b cyxqaVt0XV0pKSxIbj1uZXcgTWFwKGppLm1hcCgocyx0KT0+W3MsZWlbdF1dKSksdHM9cz0+ZWku cmVkdWNlKCh0LGUpPT50LnNwbGl0KGUpLmpvaW4oVW4uZ2V0KGUpKSxzKSxRcz1zPT5qaS5yZWR1 Y2UoKHQsZSk9PnQuc3BsaXQoZSkuam9pbihIbi5nZXQoZSkpLHMpO3ZhciBycj0ocyx0KT0+dD8o cz1mKHMpLnJlcGxhY2UoL15cLihcL3wkKS8sIiIpLHV0KHQpKyIvIitzKTpmKHMpLFduPTE2KjEw MjQqMTAyNCx0cj1TeW1ib2woInByb2Nlc3MiKSxlcj1TeW1ib2woImZpbGUiKSxpcj1TeW1ib2wo ImRpcmVjdG9yeSIpLGlzPVN5bWJvbCgic3ltbGluayIpLHNyPVN5bWJvbCgiaGFyZGxpbmsiKSxm ZT1TeW1ib2woImhlYWRlciIpLGlpPVN5bWJvbCgicmVhZCIpLHNzPVN5bWJvbCgibHN0YXQiKSxz aT1TeW1ib2woIm9ubHN0YXQiKSxycz1TeW1ib2woIm9ucmVhZCIpLG5zPVN5bWJvbCgib25yZWFk bGluayIpLG9zPVN5bWJvbCgib3BlbmZpbGUiKSxocz1TeW1ib2woIm9ub3BlbmZpbGUiKSxwdD1T eW1ib2woImNsb3NlIikscmk9U3ltYm9sKCJtb2RlIiksYXM9U3ltYm9sKCJhd2FpdERyYWluIiks ZXM9U3ltYm9sKCJvbmRyYWluIikscT1TeW1ib2woInByZWZpeCIpLGRlPWNsYXNzIGV4dGVuZHMg QXtwYXRoO3BvcnRhYmxlO215dWlkPXByb2Nlc3MuZ2V0dWlkJiZwcm9jZXNzLmdldHVpZCgpfHww O215dXNlcj1wcm9jZXNzLmVudi5VU0VSfHwiIjttYXhSZWFkU2l6ZTtsaW5rQ2FjaGU7c3RhdENh Y2hlO3ByZXNlcnZlUGF0aHM7Y3dkO3N0cmljdDttdGltZTtub1BheDtub010aW1lO3ByZWZpeDtm ZDtibG9ja0xlbj0wO2Jsb2NrUmVtYWluPTA7YnVmO3Bvcz0wO3JlbWFpbj0wO2xlbmd0aD0wO29m ZnNldD0wO3dpbjMyO2Fic29sdXRlO2hlYWRlcjt0eXBlO2xpbmtwYXRoO3N0YXQ7b25Xcml0ZUVu dHJ5OyN0PSExO2NvbnN0cnVjdG9yKHQsZT17fSl7bGV0IGk9c2UoZSk7c3VwZXIoKSx0aGlzLnBh dGg9Zih0KSx0aGlzLnBvcnRhYmxlPSEhaS5wb3J0YWJsZSx0aGlzLm1heFJlYWRTaXplPWkubWF4 UmVhZFNpemV8fFduLHRoaXMubGlua0NhY2hlPWkubGlua0NhY2hlfHxuZXcgTWFwLHRoaXMuc3Rh dENhY2hlPWkuc3RhdENhY2hlfHxuZXcgTWFwLHRoaXMucHJlc2VydmVQYXRocz0hIWkucHJlc2Vy dmVQYXRocyx0aGlzLmN3ZD1mKGkuY3dkfHxwcm9jZXNzLmN3ZCgpKSx0aGlzLnN0cmljdD0hIWku c3RyaWN0LHRoaXMubm9QYXg9ISFpLm5vUGF4LHRoaXMubm9NdGltZT0hIWkubm9NdGltZSx0aGlz Lm10aW1lPWkubXRpbWUsdGhpcy5wcmVmaXg9aS5wcmVmaXg/ZihpLnByZWZpeCk6dm9pZCAwLHRo aXMub25Xcml0ZUVudHJ5PWkub25Xcml0ZUVudHJ5LHR5cGVvZiBpLm9ud2Fybj09ImZ1bmN0aW9u IiYmdGhpcy5vbigid2FybiIsaS5vbndhcm4pO2xldCByPSExO2lmKCF0aGlzLnByZXNlcnZlUGF0 aHMpe2xldFtvLGhdPWNlKHRoaXMucGF0aCk7byYmdHlwZW9mIGg9PSJzdHJpbmciJiYodGhpcy5w YXRoPWgscj1vKX10aGlzLndpbjMyPSEhaS53aW4zMnx8cHJvY2Vzcy5wbGF0Zm9ybT09PSJ3aW4z MiIsdGhpcy53aW4zMiYmKHRoaXMucGF0aD1Rcyh0aGlzLnBhdGgucmVwbGFjZUFsbCgvXFwvZywi LyIpKSx0PXQucmVwbGFjZUFsbCgvXFwvZywiLyIpKSx0aGlzLmFic29sdXRlPWYoaS5hYnNvbHV0 ZXx8anMucmVzb2x2ZSh0aGlzLmN3ZCx0KSksdGhpcy5wYXRoPT09IiImJih0aGlzLnBhdGg9Ii4v IiksciYmdGhpcy53YXJuKCJUQVJfRU5UUllfSU5GTyIsYHN0cmlwcGluZyAke3J9IGZyb20gYWJz b2x1dGUgcGF0aGAse2VudHJ5OnRoaXMscGF0aDpyK3RoaXMucGF0aH0pO2xldCBuPXRoaXMuc3Rh dENhY2hlLmdldCh0aGlzLmFic29sdXRlKTtuP3RoaXNbc2ldKG4pOnRoaXNbc3NdKCl9d2Fybih0 LGUsaT17fSl7cmV0dXJuIER0KHRoaXMsdCxlLGkpfWVtaXQodCwuLi5lKXtyZXR1cm4gdD09PSJl cnJvciImJih0aGlzLiN0PSEwKSxzdXBlci5lbWl0KHQsLi4uZSl9W3NzXSgpe1gubHN0YXQodGhp cy5hYnNvbHV0ZSwodCxlKT0+e2lmKHQpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLHQpO3RoaXNb c2ldKGUpfSl9W3NpXSh0KXt0aGlzLnN0YXRDYWNoZS5zZXQodGhpcy5hYnNvbHV0ZSx0KSx0aGlz LnN0YXQ9dCx0LmlzRmlsZSgpfHwodC5zaXplPTApLHRoaXMudHlwZT1Hbih0KSx0aGlzLmVtaXQo InN0YXQiLHQpLHRoaXNbdHJdKCl9W3RyXSgpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UiRmlsZSI6 cmV0dXJuIHRoaXNbZXJdKCk7Y2FzZSJEaXJlY3RvcnkiOnJldHVybiB0aGlzW2lyXSgpO2Nhc2Ui U3ltYm9saWNMaW5rIjpyZXR1cm4gdGhpc1tpc10oKTtkZWZhdWx0OnJldHVybiB0aGlzLmVuZCgp fX1bcmldKHQpe3JldHVybiBKaSh0LHRoaXMudHlwZT09PSJEaXJlY3RvcnkiLHRoaXMucG9ydGFi bGUpfVtxXSh0KXtyZXR1cm4gcnIodCx0aGlzLnByZWZpeCl9W2ZlXSgpe2lmKCF0aGlzLnN0YXQp dGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgd3JpdGUgaGVhZGVyIGJlZm9yZSBzdGF0Iik7dGhpcy50 eXBlPT09IkRpcmVjdG9yeSImJnRoaXMucG9ydGFibGUmJih0aGlzLm5vTXRpbWU9ITApLHRoaXMu b25Xcml0ZUVudHJ5Py4odGhpcyksdGhpcy5oZWFkZXI9bmV3IEYoe3BhdGg6dGhpc1txXSh0aGlz LnBhdGgpLGxpbmtwYXRoOnRoaXMudHlwZT09PSJMaW5rIiYmdGhpcy5saW5rcGF0aCE9PXZvaWQg MD90aGlzW3FdKHRoaXMubGlua3BhdGgpOnRoaXMubGlua3BhdGgsbW9kZTp0aGlzW3JpXSh0aGlz LnN0YXQubW9kZSksdWlkOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuc3RhdC51aWQsZ2lkOnRo aXMucG9ydGFibGU/dm9pZCAwOnRoaXMuc3RhdC5naWQsc2l6ZTp0aGlzLnN0YXQuc2l6ZSxtdGlt ZTp0aGlzLm5vTXRpbWU/dm9pZCAwOnRoaXMubXRpbWV8fHRoaXMuc3RhdC5tdGltZSx0eXBlOnRo aXMudHlwZT09PSJVbnN1cHBvcnRlZCI/dm9pZCAwOnRoaXMudHlwZSx1bmFtZTp0aGlzLnBvcnRh YmxlP3ZvaWQgMDp0aGlzLnN0YXQudWlkPT09dGhpcy5teXVpZD90aGlzLm15dXNlcjoiIixhdGlt ZTp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQuYXRpbWUsY3RpbWU6dGhpcy5wb3J0YWJs ZT92b2lkIDA6dGhpcy5zdGF0LmN0aW1lfSksdGhpcy5oZWFkZXIuZW5jb2RlKCkmJiF0aGlzLm5v UGF4JiZzdXBlci53cml0ZShuZXcgZnQoe2F0aW1lOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMu aGVhZGVyLmF0aW1lLGN0aW1lOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuaGVhZGVyLmN0aW1l LGdpZDp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLmhlYWRlci5naWQsbXRpbWU6dGhpcy5ub010 aW1lP3ZvaWQgMDp0aGlzLm10aW1lfHx0aGlzLmhlYWRlci5tdGltZSxwYXRoOnRoaXNbcV0odGhp cy5wYXRoKSxsaW5rcGF0aDp0aGlzLnR5cGU9PT0iTGluayImJnRoaXMubGlua3BhdGghPT12b2lk IDA/dGhpc1txXSh0aGlzLmxpbmtwYXRoKTp0aGlzLmxpbmtwYXRoLHNpemU6dGhpcy5oZWFkZXIu c2l6ZSx1aWQ6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5oZWFkZXIudWlkLHVuYW1lOnRoaXMu cG9ydGFibGU/dm9pZCAwOnRoaXMuaGVhZGVyLnVuYW1lLGRldjp0aGlzLnBvcnRhYmxlP3ZvaWQg MDp0aGlzLnN0YXQuZGV2LGlubzp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLnN0YXQuaW5vLG5s aW5rOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuc3RhdC5ubGlua30pLmVuY29kZSgpKTtsZXQg dD10aGlzLmhlYWRlcj8uYmxvY2s7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJmYWlsZWQgdG8gZW5j b2RlIGhlYWRlciIpO3N1cGVyLndyaXRlKHQpfVtpcl0oKXtpZighdGhpcy5zdGF0KXRocm93IG5l dyBFcnJvcigiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgZW50cnkgd2l0aG91dCBzdGF0Iik7dGhp cy5wYXRoLnNsaWNlKC0xKSE9PSIvIiYmKHRoaXMucGF0aCs9Ii8iKSx0aGlzLnN0YXQuc2l6ZT0w LHRoaXNbZmVdKCksdGhpcy5lbmQoKX1baXNdKCl7WC5yZWFkbGluayh0aGlzLmFic29sdXRlLCh0 LGUpPT57aWYodClyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsdCk7dGhpc1tuc10oZSl9KX1bbnNd KHQpe3RoaXMubGlua3BhdGg9Zih0KSx0aGlzW2ZlXSgpLHRoaXMuZW5kKCl9W3NyXSh0KXtpZigh dGhpcy5zdGF0KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGNyZWF0ZSBsaW5rIGVudHJ5IHdpdGhv dXQgc3RhdCIpO3RoaXMudHlwZT0iTGluayIsdGhpcy5saW5rcGF0aD1mKGpzLnJlbGF0aXZlKHRo aXMuY3dkLHQpKSx0aGlzLnN0YXQuc2l6ZT0wLHRoaXNbZmVdKCksdGhpcy5lbmQoKX1bZXJdKCl7 aWYoIXRoaXMuc3RhdCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBjcmVhdGUgZmlsZSBlbnRyeSB3 aXRob3V0IHN0YXQiKTtpZih0aGlzLnN0YXQubmxpbms+MSl7bGV0IHQ9YCR7dGhpcy5zdGF0LmRl dn06JHt0aGlzLnN0YXQuaW5vfWAsZT10aGlzLmxpbmtDYWNoZS5nZXQodCk7aWYoZT8uaW5kZXhP Zih0aGlzLmN3ZCk9PT0wKXJldHVybiB0aGlzW3NyXShlKTt0aGlzLmxpbmtDYWNoZS5zZXQodCx0 aGlzLmFic29sdXRlKX1pZih0aGlzW2ZlXSgpLHRoaXMuc3RhdC5zaXplPT09MClyZXR1cm4gdGhp cy5lbmQoKTt0aGlzW29zXSgpfVtvc10oKXtYLm9wZW4odGhpcy5hYnNvbHV0ZSwiciIsKHQsZSk9 PntpZih0KXJldHVybiB0aGlzLmVtaXQoImVycm9yIix0KTt0aGlzW2hzXShlKX0pfVtoc10odCl7 aWYodGhpcy5mZD10LHRoaXMuI3QpcmV0dXJuIHRoaXNbcHRdKCk7aWYoIXRoaXMuc3RhdCl0aHJv dyBuZXcgRXJyb3IoInNob3VsZCBzdGF0IGJlZm9yZSBjYWxsaW5nIG9ub3BlbmZpbGUiKTt0aGlz LmJsb2NrTGVuPTUxMipNYXRoLmNlaWwodGhpcy5zdGF0LnNpemUvNTEyKSx0aGlzLmJsb2NrUmVt YWluPXRoaXMuYmxvY2tMZW47bGV0IGU9TWF0aC5taW4odGhpcy5ibG9ja0xlbix0aGlzLm1heFJl YWRTaXplKTt0aGlzLmJ1Zj1CdWZmZXIuYWxsb2NVbnNhZmUoZSksdGhpcy5vZmZzZXQ9MCx0aGlz LnBvcz0wLHRoaXMucmVtYWluPXRoaXMuc3RhdC5zaXplLHRoaXMubGVuZ3RoPXRoaXMuYnVmLmxl bmd0aCx0aGlzW2lpXSgpfVtpaV0oKXtsZXR7ZmQ6dCxidWY6ZSxvZmZzZXQ6aSxsZW5ndGg6cixw b3M6bn09dGhpcztpZih0PT09dm9pZCAwfHxlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiY2Fu bm90IHJlYWQgZmlsZSB3aXRob3V0IGZpcnN0IG9wZW5pbmciKTtYLnJlYWQodCxlLGkscixuLChv LGgpPT57aWYobylyZXR1cm4gdGhpc1twdF0oKCk9PnRoaXMuZW1pdCgiZXJyb3IiLG8pKTt0aGlz W3JzXShoKX0pfVtwdF0odD0oKT0+e30pe3RoaXMuZmQhPT12b2lkIDAmJlguY2xvc2UodGhpcy5m ZCx0KX1bcnNdKHQpe2lmKHQ8PTAmJnRoaXMucmVtYWluPjApe2xldCByPU9iamVjdC5hc3NpZ24o bmV3IEVycm9yKCJlbmNvdW50ZXJlZCB1bmV4cGVjdGVkIEVPRiIpLHtwYXRoOnRoaXMuYWJzb2x1 dGUsc3lzY2FsbDoicmVhZCIsY29kZToiRU9GIn0pO3JldHVybiB0aGlzW3B0XSgoKT0+dGhpcy5l bWl0KCJlcnJvciIscikpfWlmKHQ+dGhpcy5yZW1haW4pe2xldCByPU9iamVjdC5hc3NpZ24obmV3 IEVycm9yKCJkaWQgbm90IGVuY291bnRlciBleHBlY3RlZCBFT0YiKSx7cGF0aDp0aGlzLmFic29s dXRlLHN5c2NhbGw6InJlYWQiLGNvZGU6IkVPRiJ9KTtyZXR1cm4gdGhpc1twdF0oKCk9PnRoaXMu ZW1pdCgiZXJyb3IiLHIpKX1pZighdGhpcy5idWYpdGhyb3cgbmV3IEVycm9yKCJzaG91bGQgaGF2 ZSBjcmVhdGVkIGJ1ZmZlciBwcmlvciB0byByZWFkaW5nIik7aWYodD09PXRoaXMucmVtYWluKWZv cihsZXQgcj10O3I8dGhpcy5sZW5ndGgmJnQ8dGhpcy5ibG9ja1JlbWFpbjtyKyspdGhpcy5idWZb cit0aGlzLm9mZnNldF09MCx0KyssdGhpcy5yZW1haW4rKztsZXQgZT10aGlzLm9mZnNldD09PTAm JnQ9PT10aGlzLmJ1Zi5sZW5ndGg/dGhpcy5idWY6dGhpcy5idWYuc3ViYXJyYXkodGhpcy5vZmZz ZXQsdGhpcy5vZmZzZXQrdCk7dGhpcy53cml0ZShlKT90aGlzW2VzXSgpOnRoaXNbYXNdKCgpPT50 aGlzW2VzXSgpKX1bYXNdKHQpe3RoaXMub25jZSgiZHJhaW4iLHQpfXdyaXRlKHQsZSxpKXtpZih0 eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGk9ZSxlPXZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmciJiYo dD1CdWZmZXIuZnJvbSh0LHR5cGVvZiBlPT0ic3RyaW5nIj9lOiJ1dGY4IikpLHRoaXMuYmxvY2tS ZW1haW48dC5sZW5ndGgpe2xldCByPU9iamVjdC5hc3NpZ24obmV3IEVycm9yKCJ3cml0aW5nIG1v cmUgZGF0YSB0aGFuIGV4cGVjdGVkIikse3BhdGg6dGhpcy5hYnNvbHV0ZX0pO3JldHVybiB0aGlz LmVtaXQoImVycm9yIixyKX1yZXR1cm4gdGhpcy5yZW1haW4tPXQubGVuZ3RoLHRoaXMuYmxvY2tS ZW1haW4tPXQubGVuZ3RoLHRoaXMucG9zKz10Lmxlbmd0aCx0aGlzLm9mZnNldCs9dC5sZW5ndGgs c3VwZXIud3JpdGUodCxudWxsLGkpfVtlc10oKXtpZighdGhpcy5yZW1haW4pcmV0dXJuIHRoaXMu YmxvY2tSZW1haW4mJnN1cGVyLndyaXRlKEJ1ZmZlci5hbGxvYyh0aGlzLmJsb2NrUmVtYWluKSks dGhpc1twdF0odD0+dD90aGlzLmVtaXQoImVycm9yIix0KTp0aGlzLmVuZCgpKTtpZighdGhpcy5i dWYpdGhyb3cgbmV3IEVycm9yKCJidWZmZXIgbG9zdCBzb21laG93IGluIE9ORFJBSU4iKTt0aGlz Lm9mZnNldD49dGhpcy5sZW5ndGgmJih0aGlzLmJ1Zj1CdWZmZXIuYWxsb2NVbnNhZmUoTWF0aC5t aW4odGhpcy5ibG9ja1JlbWFpbix0aGlzLmJ1Zi5sZW5ndGgpKSx0aGlzLm9mZnNldD0wKSx0aGlz Lmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGgtdGhpcy5vZmZzZXQsdGhpc1tpaV0oKX19LG5pPWNsYXNz IGV4dGVuZHMgZGV7c3luYz0hMDtbc3NdKCl7dGhpc1tzaV0oWC5sc3RhdFN5bmModGhpcy5hYnNv bHV0ZSkpfVtpc10oKXt0aGlzW25zXShYLnJlYWRsaW5rU3luYyh0aGlzLmFic29sdXRlKSl9W29z XSgpe3RoaXNbaHNdKFgub3BlblN5bmModGhpcy5hYnNvbHV0ZSwiciIpKX1baWldKCl7bGV0IHQ9 ITA7dHJ5e2xldHtmZDplLGJ1ZjppLG9mZnNldDpyLGxlbmd0aDpuLHBvczpvfT10aGlzO2lmKGU9 PT12b2lkIDB8fGk9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJmZCBhbmQgYnVmIG11c3QgYmUg c2V0IGluIFJFQUQgbWV0aG9kIik7bGV0IGg9WC5yZWFkU3luYyhlLGkscixuLG8pO3RoaXNbcnNd KGgpLHQ9ITF9ZmluYWxseXtpZih0KXRyeXt0aGlzW3B0XSgoKT0+e30pfWNhdGNoe319fVthc10o dCl7dCgpfVtwdF0odD0oKT0+e30pe3RoaXMuZmQhPT12b2lkIDAmJlguY2xvc2VTeW5jKHRoaXMu ZmQpLHQoKX19LG9pPWNsYXNzIGV4dGVuZHMgQXtibG9ja0xlbj0wO2Jsb2NrUmVtYWluPTA7YnVm PTA7cG9zPTA7cmVtYWluPTA7bGVuZ3RoPTA7cHJlc2VydmVQYXRocztwb3J0YWJsZTtzdHJpY3Q7 bm9QYXg7bm9NdGltZTtyZWFkRW50cnk7dHlwZTtwcmVmaXg7cGF0aDttb2RlO3VpZDtnaWQ7dW5h bWU7Z25hbWU7aGVhZGVyO210aW1lO2F0aW1lO2N0aW1lO2xpbmtwYXRoO3NpemU7b25Xcml0ZUVu dHJ5O3dhcm4odCxlLGk9e30pe3JldHVybiBEdCh0aGlzLHQsZSxpKX1jb25zdHJ1Y3Rvcih0LGU9 e30pe2xldCBpPXNlKGUpO3N1cGVyKCksdGhpcy5wcmVzZXJ2ZVBhdGhzPSEhaS5wcmVzZXJ2ZVBh dGhzLHRoaXMucG9ydGFibGU9ISFpLnBvcnRhYmxlLHRoaXMuc3RyaWN0PSEhaS5zdHJpY3QsdGhp cy5ub1BheD0hIWkubm9QYXgsdGhpcy5ub010aW1lPSEhaS5ub010aW1lLHRoaXMub25Xcml0ZUVu dHJ5PWkub25Xcml0ZUVudHJ5LHRoaXMucmVhZEVudHJ5PXQ7bGV0e3R5cGU6cn09dDtpZihyPT09 IlVuc3VwcG9ydGVkIil0aHJvdyBuZXcgRXJyb3IoIndyaXRpbmcgZW50cnkgdGhhdCBzaG91bGQg YmUgaWdub3JlZCIpO3RoaXMudHlwZT1yLHRoaXMudHlwZT09PSJEaXJlY3RvcnkiJiZ0aGlzLnBv cnRhYmxlJiYodGhpcy5ub010aW1lPSEwKSx0aGlzLnByZWZpeD1pLnByZWZpeCx0aGlzLnBhdGg9 Zih0LnBhdGgpLHRoaXMubW9kZT10Lm1vZGUhPT12b2lkIDA/dGhpc1tyaV0odC5tb2RlKTp2b2lk IDAsdGhpcy51aWQ9dGhpcy5wb3J0YWJsZT92b2lkIDA6dC51aWQsdGhpcy5naWQ9dGhpcy5wb3J0 YWJsZT92b2lkIDA6dC5naWQsdGhpcy51bmFtZT10aGlzLnBvcnRhYmxlP3ZvaWQgMDp0LnVuYW1l LHRoaXMuZ25hbWU9dGhpcy5wb3J0YWJsZT92b2lkIDA6dC5nbmFtZSx0aGlzLnNpemU9dC5zaXpl LHRoaXMubXRpbWU9dGhpcy5ub010aW1lP3ZvaWQgMDppLm10aW1lfHx0Lm10aW1lLHRoaXMuYXRp bWU9dGhpcy5wb3J0YWJsZT92b2lkIDA6dC5hdGltZSx0aGlzLmN0aW1lPXRoaXMucG9ydGFibGU/ dm9pZCAwOnQuY3RpbWUsdGhpcy5saW5rcGF0aD10LmxpbmtwYXRoIT09dm9pZCAwP2YodC5saW5r cGF0aCk6dm9pZCAwLHR5cGVvZiBpLm9ud2Fybj09ImZ1bmN0aW9uIiYmdGhpcy5vbigid2FybiIs aS5vbndhcm4pO2xldCBuPSExO2lmKCF0aGlzLnByZXNlcnZlUGF0aHMpe2xldFtoLGFdPWNlKHRo aXMucGF0aCk7aCYmdHlwZW9mIGE9PSJzdHJpbmciJiYodGhpcy5wYXRoPWEsbj1oKX10aGlzLnJl bWFpbj10LnNpemUsdGhpcy5ibG9ja1JlbWFpbj10LnN0YXJ0QmxvY2tTaXplLHRoaXMub25Xcml0 ZUVudHJ5Py4odGhpcyksdGhpcy5oZWFkZXI9bmV3IEYoe3BhdGg6dGhpc1txXSh0aGlzLnBhdGgp LGxpbmtwYXRoOnRoaXMudHlwZT09PSJMaW5rIiYmdGhpcy5saW5rcGF0aCE9PXZvaWQgMD90aGlz W3FdKHRoaXMubGlua3BhdGgpOnRoaXMubGlua3BhdGgsbW9kZTp0aGlzLm1vZGUsdWlkOnRoaXMu cG9ydGFibGU/dm9pZCAwOnRoaXMudWlkLGdpZDp0aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLmdp ZCxzaXplOnRoaXMuc2l6ZSxtdGltZTp0aGlzLm5vTXRpbWU/dm9pZCAwOnRoaXMubXRpbWUsdHlw ZTp0aGlzLnR5cGUsdW5hbWU6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy51bmFtZSxhdGltZTp0 aGlzLnBvcnRhYmxlP3ZvaWQgMDp0aGlzLmF0aW1lLGN0aW1lOnRoaXMucG9ydGFibGU/dm9pZCAw OnRoaXMuY3RpbWV9KSxuJiZ0aGlzLndhcm4oIlRBUl9FTlRSWV9JTkZPIixgc3RyaXBwaW5nICR7 bn0gZnJvbSBhYnNvbHV0ZSBwYXRoYCx7ZW50cnk6dGhpcyxwYXRoOm4rdGhpcy5wYXRofSksdGhp cy5oZWFkZXIuZW5jb2RlKCkmJiF0aGlzLm5vUGF4JiZzdXBlci53cml0ZShuZXcgZnQoe2F0aW1l OnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMuYXRpbWUsY3RpbWU6dGhpcy5wb3J0YWJsZT92b2lk IDA6dGhpcy5jdGltZSxnaWQ6dGhpcy5wb3J0YWJsZT92b2lkIDA6dGhpcy5naWQsbXRpbWU6dGhp cy5ub010aW1lP3ZvaWQgMDp0aGlzLm10aW1lLHBhdGg6dGhpc1txXSh0aGlzLnBhdGgpLGxpbmtw YXRoOnRoaXMudHlwZT09PSJMaW5rIiYmdGhpcy5saW5rcGF0aCE9PXZvaWQgMD90aGlzW3FdKHRo aXMubGlua3BhdGgpOnRoaXMubGlua3BhdGgsc2l6ZTp0aGlzLnNpemUsdWlkOnRoaXMucG9ydGFi bGU/dm9pZCAwOnRoaXMudWlkLHVuYW1lOnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMudW5hbWUs ZGV2OnRoaXMucG9ydGFibGU/dm9pZCAwOnRoaXMucmVhZEVudHJ5LmRldixpbm86dGhpcy5wb3J0 YWJsZT92b2lkIDA6dGhpcy5yZWFkRW50cnkuaW5vLG5saW5rOnRoaXMucG9ydGFibGU/dm9pZCAw OnRoaXMucmVhZEVudHJ5Lm5saW5rfSkuZW5jb2RlKCkpO2xldCBvPXRoaXMuaGVhZGVyPy5ibG9j aztpZighbyl0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBlbmNvZGUgaGVhZGVyIik7c3VwZXIu d3JpdGUobyksdC5waXBlKHRoaXMpfVtxXSh0KXtyZXR1cm4gcnIodCx0aGlzLnByZWZpeCl9W3Jp XSh0KXtyZXR1cm4gSmkodCx0aGlzLnR5cGU9PT0iRGlyZWN0b3J5Iix0aGlzLnBvcnRhYmxlKX13 cml0ZSh0LGUsaSl7dHlwZW9mIGU9PSJmdW5jdGlvbiImJihpPWUsZT12b2lkIDApLHR5cGVvZiB0 PT0ic3RyaW5nIiYmKHQ9QnVmZmVyLmZyb20odCx0eXBlb2YgZT09InN0cmluZyI/ZToidXRmOCIp KTtsZXQgcj10Lmxlbmd0aDtpZihyPnRoaXMuYmxvY2tSZW1haW4pdGhyb3cgbmV3IEVycm9yKCJ3 cml0aW5nIG1vcmUgdG8gZW50cnkgdGhhbiBpcyBhcHByb3ByaWF0ZSIpO3JldHVybiB0aGlzLmJs b2NrUmVtYWluLT1yLHN1cGVyLndyaXRlKHQsaSl9ZW5kKHQsZSxpKXtyZXR1cm4gdGhpcy5ibG9j a1JlbWFpbiYmc3VwZXIud3JpdGUoQnVmZmVyLmFsbG9jKHRoaXMuYmxvY2tSZW1haW4pKSx0eXBl b2YgdD09ImZ1bmN0aW9uIiYmKGk9dCxlPXZvaWQgMCx0PXZvaWQgMCksdHlwZW9mIGU9PSJmdW5j dGlvbiImJihpPWUsZT12b2lkIDApLHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9QnVmZmVyLmZyb20o dCxlPz8idXRmOCIpKSxpJiZ0aGlzLm9uY2UoImZpbmlzaCIsaSksdD9zdXBlci5lbmQodCxpKTpz dXBlci5lbmQoaSksdGhpc319LEduPXM9PnMuaXNGaWxlKCk/IkZpbGUiOnMuaXNEaXJlY3Rvcnko KT8iRGlyZWN0b3J5IjpzLmlzU3ltYm9saWNMaW5rKCk/IlN5bWJvbGljTGluayI6IlVuc3VwcG9y dGVkIjt2YXIgaGk9Y2xhc3Mgc3t0YWlsO2hlYWQ7bGVuZ3RoPTA7c3RhdGljIGNyZWF0ZSh0PVtd KXtyZXR1cm4gbmV3IHModCl9Y29uc3RydWN0b3IodD1bXSl7Zm9yKGxldCBlIG9mIHQpdGhpcy5w dXNoKGUpfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2ZvcihsZXQgdD10aGlzLmhlYWQ7dDt0PXQubmV4 dCl5aWVsZCB0LnZhbHVlfXJlbW92ZU5vZGUodCl7aWYodC5saXN0IT09dGhpcyl0aHJvdyBuZXcg RXJyb3IoInJlbW92aW5nIG5vZGUgd2hpY2ggZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgbGlzdCIp O2xldCBlPXQubmV4dCxpPXQucHJldjtyZXR1cm4gZSYmKGUucHJldj1pKSxpJiYoaS5uZXh0PWUp LHQ9PT10aGlzLmhlYWQmJih0aGlzLmhlYWQ9ZSksdD09PXRoaXMudGFpbCYmKHRoaXMudGFpbD1p KSx0aGlzLmxlbmd0aC0tLHQubmV4dD12b2lkIDAsdC5wcmV2PXZvaWQgMCx0Lmxpc3Q9dm9pZCAw LGV9dW5zaGlmdE5vZGUodCl7aWYodD09PXRoaXMuaGVhZClyZXR1cm47dC5saXN0JiZ0Lmxpc3Qu cmVtb3ZlTm9kZSh0KTtsZXQgZT10aGlzLmhlYWQ7dC5saXN0PXRoaXMsdC5uZXh0PWUsZSYmKGUu cHJldj10KSx0aGlzLmhlYWQ9dCx0aGlzLnRhaWx8fCh0aGlzLnRhaWw9dCksdGhpcy5sZW5ndGgr K31wdXNoTm9kZSh0KXtpZih0PT09dGhpcy50YWlsKXJldHVybjt0Lmxpc3QmJnQubGlzdC5yZW1v dmVOb2RlKHQpO2xldCBlPXRoaXMudGFpbDt0Lmxpc3Q9dGhpcyx0LnByZXY9ZSxlJiYoZS5uZXh0 PXQpLHRoaXMudGFpbD10LHRoaXMuaGVhZHx8KHRoaXMuaGVhZD10KSx0aGlzLmxlbmd0aCsrfXB1 c2goLi4udCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKVluKHRoaXMsdFtlXSk7cmV0 dXJuIHRoaXMubGVuZ3RofXVuc2hpZnQoLi4udCl7Zm9yKHZhciBlPTAsaT10Lmxlbmd0aDtlPGk7 ZSsrKUtuKHRoaXMsdFtlXSk7cmV0dXJuIHRoaXMubGVuZ3RofXBvcCgpe2lmKCF0aGlzLnRhaWwp cmV0dXJuO2xldCB0PXRoaXMudGFpbC52YWx1ZSxlPXRoaXMudGFpbDtyZXR1cm4gdGhpcy50YWls PXRoaXMudGFpbC5wcmV2LHRoaXMudGFpbD90aGlzLnRhaWwubmV4dD12b2lkIDA6dGhpcy5oZWFk PXZvaWQgMCxlLmxpc3Q9dm9pZCAwLHRoaXMubGVuZ3RoLS0sdH1zaGlmdCgpe2lmKCF0aGlzLmhl YWQpcmV0dXJuO2xldCB0PXRoaXMuaGVhZC52YWx1ZSxlPXRoaXMuaGVhZDtyZXR1cm4gdGhpcy5o ZWFkPXRoaXMuaGVhZC5uZXh0LHRoaXMuaGVhZD90aGlzLmhlYWQucHJldj12b2lkIDA6dGhpcy50 YWlsPXZvaWQgMCxlLmxpc3Q9dm9pZCAwLHRoaXMubGVuZ3RoLS0sdH1mb3JFYWNoKHQsZSl7ZT1l fHx0aGlzO2ZvcihsZXQgaT10aGlzLmhlYWQscj0wO2k7cisrKXQuY2FsbChlLGkudmFsdWUscix0 aGlzKSxpPWkubmV4dH1mb3JFYWNoUmV2ZXJzZSh0LGUpe2U9ZXx8dGhpcztmb3IobGV0IGk9dGhp cy50YWlsLHI9dGhpcy5sZW5ndGgtMTtpO3ItLSl0LmNhbGwoZSxpLnZhbHVlLHIsdGhpcyksaT1p LnByZXZ9Z2V0KHQpe2xldCBlPTAsaT10aGlzLmhlYWQ7Zm9yKDtpJiZlPHQ7ZSsrKWk9aS5uZXh0 O2lmKGU9PT10JiZpKXJldHVybiBpLnZhbHVlfWdldFJldmVyc2UodCl7bGV0IGU9MCxpPXRoaXMu dGFpbDtmb3IoO2kmJmU8dDtlKyspaT1pLnByZXY7aWYoZT09PXQmJmkpcmV0dXJuIGkudmFsdWV9 bWFwKHQsZSl7ZT1lfHx0aGlzO2xldCBpPW5ldyBzO2ZvcihsZXQgcj10aGlzLmhlYWQ7cjspaS5w dXNoKHQuY2FsbChlLHIudmFsdWUsdGhpcykpLHI9ci5uZXh0O3JldHVybiBpfW1hcFJldmVyc2Uo dCxlKXtlPWV8fHRoaXM7dmFyIGk9bmV3IHM7Zm9yKGxldCByPXRoaXMudGFpbDtyOylpLnB1c2go dC5jYWxsKGUsci52YWx1ZSx0aGlzKSkscj1yLnByZXY7cmV0dXJuIGl9cmVkdWNlKHQsZSl7bGV0 IGkscj10aGlzLmhlYWQ7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWk9ZTtlbHNlIGlmKHRoaXMuaGVh ZClyPXRoaXMuaGVhZC5uZXh0LGk9dGhpcy5oZWFkLnZhbHVlO2Vsc2UgdGhyb3cgbmV3IFR5cGVF cnJvcigiUmVkdWNlIG9mIGVtcHR5IGxpc3Qgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Zm9yKHZh ciBuPTA7cjtuKyspaT10KGksci52YWx1ZSxuKSxyPXIubmV4dDtyZXR1cm4gaX1yZWR1Y2VSZXZl cnNlKHQsZSl7bGV0IGkscj10aGlzLnRhaWw7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWk9ZTtlbHNl IGlmKHRoaXMudGFpbClyPXRoaXMudGFpbC5wcmV2LGk9dGhpcy50YWlsLnZhbHVlO2Vsc2UgdGhy b3cgbmV3IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGxpc3Qgd2l0aCBubyBpbml0aWFsIHZh bHVlIik7Zm9yKGxldCBuPXRoaXMubGVuZ3RoLTE7cjtuLS0paT10KGksci52YWx1ZSxuKSxyPXIu cHJldjtyZXR1cm4gaX10b0FycmF5KCl7bGV0IHQ9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3Io bGV0IGU9MCxpPXRoaXMuaGVhZDtpO2UrKyl0W2VdPWkudmFsdWUsaT1pLm5leHQ7cmV0dXJuIHR9 dG9BcnJheVJldmVyc2UoKXtsZXQgdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2ZvcihsZXQgZT0w LGk9dGhpcy50YWlsO2k7ZSsrKXRbZV09aS52YWx1ZSxpPWkucHJldjtyZXR1cm4gdH1zbGljZSh0 PTAsZT10aGlzLmxlbmd0aCl7ZTwwJiYoZSs9dGhpcy5sZW5ndGgpLHQ8MCYmKHQrPXRoaXMubGVu Z3RoKTtsZXQgaT1uZXcgcztpZihlPHR8fGU8MClyZXR1cm4gaTt0PDAmJih0PTApLGU+dGhpcy5s ZW5ndGgmJihlPXRoaXMubGVuZ3RoKTtsZXQgcj10aGlzLmhlYWQsbj0wO2ZvcihuPTA7ciYmbjx0 O24rKylyPXIubmV4dDtmb3IoO3ImJm48ZTtuKysscj1yLm5leHQpaS5wdXNoKHIudmFsdWUpO3Jl dHVybiBpfXNsaWNlUmV2ZXJzZSh0PTAsZT10aGlzLmxlbmd0aCl7ZTwwJiYoZSs9dGhpcy5sZW5n dGgpLHQ8MCYmKHQrPXRoaXMubGVuZ3RoKTtsZXQgaT1uZXcgcztpZihlPHR8fGU8MClyZXR1cm4g aTt0PDAmJih0PTApLGU+dGhpcy5sZW5ndGgmJihlPXRoaXMubGVuZ3RoKTtsZXQgcj10aGlzLmxl bmd0aCxuPXRoaXMudGFpbDtmb3IoO24mJnI+ZTtyLS0pbj1uLnByZXY7Zm9yKDtuJiZyPnQ7ci0t LG49bi5wcmV2KWkucHVzaChuLnZhbHVlKTtyZXR1cm4gaX1zcGxpY2UodCxlPTAsLi4uaSl7dD50 aGlzLmxlbmd0aCYmKHQ9dGhpcy5sZW5ndGgtMSksdDwwJiYodD10aGlzLmxlbmd0aCt0KTtsZXQg cj10aGlzLmhlYWQ7Zm9yKGxldCBvPTA7ciYmbzx0O28rKylyPXIubmV4dDtsZXQgbj1bXTtmb3Io bGV0IG89MDtyJiZvPGU7bysrKW4ucHVzaChyLnZhbHVlKSxyPXRoaXMucmVtb3ZlTm9kZShyKTty P3IhPT10aGlzLnRhaWwmJihyPXIucHJldik6cj10aGlzLnRhaWw7Zm9yKGxldCBvIG9mIGkpcj1a bih0aGlzLHIsbyk7cmV0dXJuIG59cmV2ZXJzZSgpe2xldCB0PXRoaXMuaGVhZCxlPXRoaXMudGFp bDtmb3IobGV0IGk9dDtpO2k9aS5wcmV2KXtsZXQgcj1pLnByZXY7aS5wcmV2PWkubmV4dCxpLm5l eHQ9cn1yZXR1cm4gdGhpcy5oZWFkPWUsdGhpcy50YWlsPXQsdGhpc319O2Z1bmN0aW9uIFpuKHMs dCxlKXtsZXQgaT10LHI9dD90Lm5leHQ6cy5oZWFkLG49bmV3IG1lKGUsaSxyLHMpO3JldHVybiBu Lm5leHQ9PT12b2lkIDAmJihzLnRhaWw9biksbi5wcmV2PT09dm9pZCAwJiYocy5oZWFkPW4pLHMu bGVuZ3RoKyssbn1mdW5jdGlvbiBZbihzLHQpe3MudGFpbD1uZXcgbWUodCxzLnRhaWwsdm9pZCAw LHMpLHMuaGVhZHx8KHMuaGVhZD1zLnRhaWwpLHMubGVuZ3RoKyt9ZnVuY3Rpb24gS24ocyx0KXtz LmhlYWQ9bmV3IG1lKHQsdm9pZCAwLHMuaGVhZCxzKSxzLnRhaWx8fChzLnRhaWw9cy5oZWFkKSxz Lmxlbmd0aCsrfXZhciBtZT1jbGFzc3tsaXN0O25leHQ7cHJldjt2YWx1ZTtjb25zdHJ1Y3Rvcih0 LGUsaSxyKXt0aGlzLmxpc3Q9cix0aGlzLnZhbHVlPXQsZT8oZS5uZXh0PXRoaXMsdGhpcy5wcmV2 PWUpOnRoaXMucHJldj12b2lkIDAsaT8oaS5wcmV2PXRoaXMsdGhpcy5uZXh0PWkpOnRoaXMubmV4 dD12b2lkIDB9fTtpbXBvcnQgYXIgZnJvbSJwYXRoIjt2YXIgcGk9Y2xhc3N7cGF0aDthYnNvbHV0 ZTtlbnRyeTtzdGF0O3JlYWRkaXI7cGVuZGluZz0hMTtwZW5kaW5nTGluaz0hMTtpZ25vcmU9ITE7 cGlwZWQ9ITE7Y29uc3RydWN0b3IodCxlKXt0aGlzLnBhdGg9dHx8Ii4vIix0aGlzLmFic29sdXRl PWV9fSxucj1CdWZmZXIuYWxsb2MoMTAyNCksbGk9U3ltYm9sKCJvblN0YXQiKSx1ZT1TeW1ib2wo ImVuZGVkIiksVz1TeW1ib2woInF1ZXVlIikscGU9U3ltYm9sKCJwZW5kaW5nTGlua3MiKSxFdD1T eW1ib2woImN1cnJlbnQiKSxGdD1TeW1ib2woInByb2Nlc3MiKSxFZT1TeW1ib2woInByb2Nlc3Np bmciKSxhaT1TeW1ib2woInByb2Nlc3NKb2IiKSxHPVN5bWJvbCgiam9icyIpLGxzPVN5bWJvbCgi am9iRG9uZSIpLGNpPVN5bWJvbCgiYWRkRlNFbnRyeSIpLG9yPVN5bWJvbCgiYWRkVGFyRW50cnki KSxkcz1TeW1ib2woInN0YXQiKSxtcz1TeW1ib2woInJlYWRkaXIiKSxmaT1TeW1ib2woIm9ucmVh ZGRpciIpLGRpPVN5bWJvbCgicGlwZSIpLGhyPVN5bWJvbCgiZW50cnkiKSxjcz1TeW1ib2woImVu dHJ5T3B0IiksbWk9U3ltYm9sKCJ3cml0ZUVudHJ5Q2xhc3MiKSxscj1TeW1ib2woIndyaXRlIiks ZnM9U3ltYm9sKCJvbmRyYWluIiksd3Q9Y2xhc3MgZXh0ZW5kcyBBe3N5bmM9ITE7b3B0O2N3ZDtt YXhSZWFkU2l6ZTtwcmVzZXJ2ZVBhdGhzO3N0cmljdDtub1BheDtwcmVmaXg7bGlua0NhY2hlO3N0 YXRDYWNoZTtmaWxlO3BvcnRhYmxlO3ppcDtyZWFkZGlyQ2FjaGU7bm9EaXJSZWN1cnNlO2ZvbGxv dztub010aW1lO210aW1lO2ZpbHRlcjtqb2JzO1ttaV07b25Xcml0ZUVudHJ5O1tXXTtbcGVdPW5l dyBNYXA7W0ddPTA7W0VlXT0hMTtbdWVdPSExO2NvbnN0cnVjdG9yKHQ9e30pe2lmKHN1cGVyKCks dGhpcy5vcHQ9dCx0aGlzLmZpbGU9dC5maWxlfHwiIix0aGlzLmN3ZD10LmN3ZHx8cHJvY2Vzcy5j d2QoKSx0aGlzLm1heFJlYWRTaXplPXQubWF4UmVhZFNpemUsdGhpcy5wcmVzZXJ2ZVBhdGhzPSEh dC5wcmVzZXJ2ZVBhdGhzLHRoaXMuc3RyaWN0PSEhdC5zdHJpY3QsdGhpcy5ub1BheD0hIXQubm9Q YXgsdGhpcy5wcmVmaXg9Zih0LnByZWZpeHx8IiIpLHRoaXMubGlua0NhY2hlPXQubGlua0NhY2hl fHxuZXcgTWFwLHRoaXMuc3RhdENhY2hlPXQuc3RhdENhY2hlfHxuZXcgTWFwLHRoaXMucmVhZGRp ckNhY2hlPXQucmVhZGRpckNhY2hlfHxuZXcgTWFwLHRoaXMub25Xcml0ZUVudHJ5PXQub25Xcml0 ZUVudHJ5LHRoaXNbbWldPWRlLHR5cGVvZiB0Lm9ud2Fybj09ImZ1bmN0aW9uIiYmdGhpcy5vbigi d2FybiIsdC5vbndhcm4pLHRoaXMucG9ydGFibGU9ISF0LnBvcnRhYmxlLHQuZ3ppcHx8dC5icm90 bGl8fHQuenN0ZCl7aWYoKHQuZ3ppcD8xOjApKyh0LmJyb3RsaT8xOjApKyh0LnpzdGQ/MTowKT4x KXRocm93IG5ldyBUeXBlRXJyb3IoImd6aXAsIGJyb3RsaSwgenN0ZCBhcmUgbXV0dWFsbHkgZXhj bHVzaXZlIik7aWYodC5nemlwJiYodHlwZW9mIHQuZ3ppcCE9Im9iamVjdCImJih0Lmd6aXA9e30p LHRoaXMucG9ydGFibGUmJih0Lmd6aXAucG9ydGFibGU9ITApLHRoaXMuemlwPW5ldyB6ZSh0Lmd6 aXApKSx0LmJyb3RsaSYmKHR5cGVvZiB0LmJyb3RsaSE9Im9iamVjdCImJih0LmJyb3RsaT17fSks dGhpcy56aXA9bmV3IFdlKHQuYnJvdGxpKSksdC56c3RkJiYodHlwZW9mIHQuenN0ZCE9Im9iamVj dCImJih0LnpzdGQ9e30pLHRoaXMuemlwPW5ldyBZZSh0LnpzdGQpKSwhdGhpcy56aXApdGhyb3cg bmV3IEVycm9yKCJpbXBvc3NpYmxlIik7bGV0IGU9dGhpcy56aXA7ZS5vbigiZGF0YSIsaT0+c3Vw ZXIud3JpdGUoaSkpLGUub24oImVuZCIsKCk9PnN1cGVyLmVuZCgpKSxlLm9uKCJkcmFpbiIsKCk9 PnRoaXNbZnNdKCkpLHRoaXMub24oInJlc3VtZSIsKCk9PmUucmVzdW1lKCkpfWVsc2UgdGhpcy5v bigiZHJhaW4iLHRoaXNbZnNdKTt0aGlzLm5vRGlyUmVjdXJzZT0hIXQubm9EaXJSZWN1cnNlLHRo aXMuZm9sbG93PSEhdC5mb2xsb3csdGhpcy5ub010aW1lPSEhdC5ub010aW1lLHQubXRpbWUmJih0 aGlzLm10aW1lPXQubXRpbWUpLHRoaXMuZmlsdGVyPXR5cGVvZiB0LmZpbHRlcj09ImZ1bmN0aW9u Ij90LmZpbHRlcjooKT0+ITAsdGhpc1tXXT1uZXcgaGksdGhpc1tHXT0wLHRoaXMuam9icz1OdW1i ZXIodC5qb2JzKXx8NCx0aGlzW0VlXT0hMSx0aGlzW3VlXT0hMX1bbHJdKHQpe3JldHVybiBzdXBl ci53cml0ZSh0KX1hZGQodCl7cmV0dXJuIHRoaXMud3JpdGUodCksdGhpc31lbmQodCxlLGkpe3Jl dHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIiYmKGk9dCx0PXZvaWQgMCksdHlwZW9mIGU9PSJmdW5j dGlvbiImJihpPWUsZT12b2lkIDApLHQmJnRoaXMuYWRkKHQpLHRoaXNbdWVdPSEwLHRoaXNbRnRd KCksaSYmaSgpLHRoaXN9d3JpdGUodCl7aWYodGhpc1t1ZV0pdGhyb3cgbmV3IEVycm9yKCJ3cml0 ZSBhZnRlciBlbmQiKTtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3RoaXNbY2ldKHQpOnRoaXNb b3JdKHQpLHRoaXMuZmxvd2luZ31bb3JdKHQpe2xldCBlPWYoYXIucmVzb2x2ZSh0aGlzLmN3ZCx0 LnBhdGgpKTtpZighdGhpcy5maWx0ZXIodC5wYXRoLHQpKXQucmVzdW1lKCk7ZWxzZXtsZXQgaT1u ZXcgcGkodC5wYXRoLGUpO2kuZW50cnk9bmV3IG9pKHQsdGhpc1tjc10oaSkpLGkuZW50cnkub24o ImVuZCIsKCk9PnRoaXNbbHNdKGkpKSx0aGlzW0ddKz0xLHRoaXNbV10ucHVzaChpKX10aGlzW0Z0 XSgpfVtjaV0odCl7bGV0IGU9Zihhci5yZXNvbHZlKHRoaXMuY3dkLHQpKTt0aGlzW1ddLnB1c2go bmV3IHBpKHQsZSkpLHRoaXNbRnRdKCl9W2RzXSh0KXt0LnBlbmRpbmc9ITAsdGhpc1tHXSs9MTts ZXQgZT10aGlzLmZvbGxvdz8ic3RhdCI6ImxzdGF0Ijt1aVtlXSh0LmFic29sdXRlLChpLHIpPT57 dC5wZW5kaW5nPSExLHRoaXNbR10tPTEsaT90aGlzLmVtaXQoImVycm9yIixpKTp0aGlzW2xpXSh0 LHIpfSl9W2xpXSh0LGUpe2lmKHRoaXMuc3RhdENhY2hlLnNldCh0LmFic29sdXRlLGUpLHQuc3Rh dD1lLCF0aGlzLmZpbHRlcih0LnBhdGgsZSkpdC5pZ25vcmU9ITA7ZWxzZSBpZihlLmlzRmlsZSgp JiZlLm5saW5rPjEmJiF0aGlzLmxpbmtDYWNoZS5nZXQoYCR7ZS5kZXZ9OiR7ZS5pbm99YCkmJiF0 aGlzLnN5bmMpaWYodD09PXRoaXNbRXRdKXRoaXNbYWldKHQpO2Vsc2V7bGV0IGk9YCR7ZS5kZXZ9 OiR7ZS5pbm99YCxyPXRoaXNbcGVdLmdldChpKTtyP3IucHVzaCh0KTp0aGlzW3BlXS5zZXQoaSxb dF0pLHQucGVuZGluZ0xpbms9ITAsdC5wZW5kaW5nPSEwfXRoaXNbRnRdKCl9W21zXSh0KXt0LnBl bmRpbmc9ITAsdGhpc1tHXSs9MSx1aS5yZWFkZGlyKHQuYWJzb2x1dGUsKGUsaSk9PntpZih0LnBl bmRpbmc9ITEsdGhpc1tHXS09MSxlKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixlKTt0aGlzW2Zp XSh0LGkpfSl9W2ZpXSh0LGUpe3RoaXMucmVhZGRpckNhY2hlLnNldCh0LmFic29sdXRlLGUpLHQu cmVhZGRpcj1lLHRoaXNbRnRdKCl9W0Z0XSgpe2lmKCF0aGlzW0VlXSl7dGhpc1tFZV09ITA7Zm9y KGxldCB0PXRoaXNbV10uaGVhZDt0JiZ0aGlzW0ddPHRoaXMuam9iczt0PXQubmV4dClpZih0aGlz W2FpXSh0LnZhbHVlKSx0LnZhbHVlLmlnbm9yZSl7bGV0IGU9dC5uZXh0O3RoaXNbV10ucmVtb3Zl Tm9kZSh0KSx0Lm5leHQ9ZX10aGlzW0VlXT0hMSx0aGlzW3VlXSYmdGhpc1tXXS5sZW5ndGg9PT0w JiZ0aGlzW0ddPT09MCYmKHRoaXMuemlwP3RoaXMuemlwLmVuZChucik6KHN1cGVyLndyaXRlKG5y KSxzdXBlci5lbmQoKSkpfX1nZXRbRXRdKCl7cmV0dXJuIHRoaXNbV10mJnRoaXNbV10uaGVhZCYm dGhpc1tXXS5oZWFkLnZhbHVlfVtsc10odCl7dGhpc1tXXS5zaGlmdCgpLHRoaXNbR10tPTE7bGV0 e3N0YXQ6ZX09dDtpZihlJiZlLmlzRmlsZSgpJiZlLm5saW5rPjEpe2xldCBpPWAke2UuZGV2fTok e2UuaW5vfWAscj10aGlzW3BlXS5nZXQoaSk7aWYocil7dGhpc1twZV0uZGVsZXRlKGkpO2Zvcihs ZXQgbiBvZiByKW4ucGVuZGluZz0hMSx0aGlzW2FpXShuKX19dGhpc1tGdF0oKX1bYWldKHQpe2lm KHQucGVuZGluZyYmdC5wZW5kaW5nTGluayYmdD09PXRoaXNbRXRdJiYodC5wZW5kaW5nPSExLHQu cGVuZGluZ0xpbms9ITEpLCF0LnBlbmRpbmcpe2lmKHQuZW50cnkpe3Q9PT10aGlzW0V0XSYmIXQu cGlwZWQmJnRoaXNbZGldKHQpO3JldHVybn1pZighdC5zdGF0KXtsZXQgZT10aGlzLnN0YXRDYWNo ZS5nZXQodC5hYnNvbHV0ZSk7ZT90aGlzW2xpXSh0LGUpOnRoaXNbZHNdKHQpfWlmKHQuc3RhdCYm IXQuaWdub3JlKXtpZighdGhpcy5ub0RpclJlY3Vyc2UmJnQuc3RhdC5pc0RpcmVjdG9yeSgpJiYh dC5yZWFkZGlyKXtsZXQgZT10aGlzLnJlYWRkaXJDYWNoZS5nZXQodC5hYnNvbHV0ZSk7aWYoZT90 aGlzW2ZpXSh0LGUpOnRoaXNbbXNdKHQpLCF0LnJlYWRkaXIpcmV0dXJufWlmKHQuZW50cnk9dGhp c1tocl0odCksIXQuZW50cnkpe3QuaWdub3JlPSEwO3JldHVybn10PT09dGhpc1tFdF0mJiF0LnBp cGVkJiZ0aGlzW2RpXSh0KX19fVtjc10odCl7cmV0dXJue29ud2FybjooZSxpLHIpPT50aGlzLndh cm4oZSxpLHIpLG5vUGF4OnRoaXMubm9QYXgsY3dkOnRoaXMuY3dkLGFic29sdXRlOnQuYWJzb2x1 dGUscHJlc2VydmVQYXRoczp0aGlzLnByZXNlcnZlUGF0aHMsbWF4UmVhZFNpemU6dGhpcy5tYXhS ZWFkU2l6ZSxzdHJpY3Q6dGhpcy5zdHJpY3QscG9ydGFibGU6dGhpcy5wb3J0YWJsZSxsaW5rQ2Fj aGU6dGhpcy5saW5rQ2FjaGUsc3RhdENhY2hlOnRoaXMuc3RhdENhY2hlLG5vTXRpbWU6dGhpcy5u b010aW1lLG10aW1lOnRoaXMubXRpbWUscHJlZml4OnRoaXMucHJlZml4LG9uV3JpdGVFbnRyeTp0 aGlzLm9uV3JpdGVFbnRyeX19W2hyXSh0KXt0aGlzW0ddKz0xO3RyeXtyZXR1cm4gbmV3IHRoaXNb bWldKHQucGF0aCx0aGlzW2NzXSh0KSkub24oImVuZCIsKCk9PnRoaXNbbHNdKHQpKS5vbigiZXJy b3IiLGk9PnRoaXMuZW1pdCgiZXJyb3IiLGkpKX1jYXRjaChlKXt0aGlzLmVtaXQoImVycm9yIixl KX19W2ZzXSgpe3RoaXNbRXRdJiZ0aGlzW0V0XS5lbnRyeSYmdGhpc1tFdF0uZW50cnkucmVzdW1l KCl9W2RpXSh0KXt0LnBpcGVkPSEwLHQucmVhZGRpciYmdC5yZWFkZGlyLmZvckVhY2gocj0+e2xl dCBuPXQucGF0aCxvPW49PT0iLi8iPyIiOm4ucmVwbGFjZSgvXC8qJC8sIi8iKTt0aGlzW2NpXShv K3IpfSk7bGV0IGU9dC5lbnRyeSxpPXRoaXMuemlwO2lmKCFlKXRocm93IG5ldyBFcnJvcigiY2Fu bm90IHBpcGUgd2l0aG91dCBzb3VyY2UiKTtpP2Uub24oImRhdGEiLHI9PntpLndyaXRlKHIpfHxl LnBhdXNlKCl9KTplLm9uKCJkYXRhIixyPT57c3VwZXIud3JpdGUocil8fGUucGF1c2UoKX0pfXBh dXNlKCl7cmV0dXJuIHRoaXMuemlwJiZ0aGlzLnppcC5wYXVzZSgpLHN1cGVyLnBhdXNlKCl9d2Fy bih0LGUsaT17fSl7RHQodGhpcyx0LGUsaSl9fSxrdD1jbGFzcyBleHRlbmRzIHd0e3N5bmM9ITA7 Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpc1ttaV09bml9cGF1c2UoKXt9cmVzdW1lKCl7fVtk c10odCl7bGV0IGU9dGhpcy5mb2xsb3c/InN0YXRTeW5jIjoibHN0YXRTeW5jIjt0aGlzW2xpXSh0 LHVpW2VdKHQuYWJzb2x1dGUpKX1bbXNdKHQpe3RoaXNbZmldKHQsdWkucmVhZGRpclN5bmModC5h YnNvbHV0ZSkpfVtkaV0odCl7bGV0IGU9dC5lbnRyeSxpPXRoaXMuemlwO2lmKHQucmVhZGRpciYm dC5yZWFkZGlyLmZvckVhY2gocj0+e2xldCBuPXQucGF0aCxvPW49PT0iLi8iPyIiOm4ucmVwbGFj ZSgvXC8qJC8sIi8iKTt0aGlzW2NpXShvK3IpfSksIWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qg cGlwZSB3aXRob3V0IHNvdXJjZSIpO2k/ZS5vbigiZGF0YSIscj0+e2kud3JpdGUocil9KTplLm9u KCJkYXRhIixyPT57c3VwZXJbbHJdKHIpfSl9fTt2YXIgVm49KHMsdCk9PntsZXQgZT1uZXcga3Qo cyksaT1uZXcgV3Qocy5maWxlLHttb2RlOnMubW9kZXx8NDM4fSk7ZS5waXBlKGkpLGZyKGUsdCl9 LCRuPShzLHQpPT57bGV0IGU9bmV3IHd0KHMpLGk9bmV3IGV0KHMuZmlsZSx7bW9kZTpzLm1vZGV8 fDQzOH0pO2UucGlwZShpKTtsZXQgcj1uZXcgUHJvbWlzZSgobixvKT0+e2kub24oImVycm9yIixv KSxpLm9uKCJjbG9zZSIsbiksZS5vbigiZXJyb3IiLG8pfSk7cmV0dXJuIGRyKGUsdCkuY2F0Y2go bj0+ZS5lbWl0KCJlcnJvciIsbikpLHJ9LGZyPShzLHQpPT57dC5mb3JFYWNoKGU9PntlLmNoYXJB dCgwKT09PSJAIj9DdCh7ZmlsZTpjci5yZXNvbHZlKHMuY3dkLGUuc2xpY2UoMSkpLHN5bmM6ITAs bm9SZXN1bWU6ITAsb25SZWFkRW50cnk6aT0+cy5hZGQoaSl9KTpzLmFkZChlKX0pLHMuZW5kKCl9 LGRyPWFzeW5jKHMsdCk9Pntmb3IobGV0IGUgb2YgdCllLmNoYXJBdCgwKT09PSJAIj9hd2FpdCBD dCh7ZmlsZTpjci5yZXNvbHZlKFN0cmluZyhzLmN3ZCksZS5zbGljZSgxKSksbm9SZXN1bWU6ITAs b25SZWFkRW50cnk6aT0+e3MuYWRkKGkpfX0pOnMuYWRkKGUpO3MuZW5kKCl9LFhuPShzLHQpPT57 bGV0IGU9bmV3IGt0KHMpO3JldHVybiBmcihlLHQpLGV9LHFuPShzLHQpPT57bGV0IGU9bmV3IHd0 KHMpO3JldHVybiBkcihlLHQpLmNhdGNoKGk9PmUuZW1pdCgiZXJyb3IiLGkpKSxlfSxRbj1LKFZu LCRuLFhuLHFuLChzLHQpPT57aWYoIXQ/Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJubyBw YXRocyBzcGVjaWZpZWQgdG8gYWRkIHRvIGFyY2hpdmUiKX0pO2ltcG9ydCBCciBmcm9tIm5vZGU6 ZnMiO2ltcG9ydCBjbyBmcm9tIm5vZGU6YXNzZXJ0IjtpbXBvcnR7cmFuZG9tQnl0ZXMgYXMgTXJ9 ZnJvbSJub2RlOmNyeXB0byI7aW1wb3J0IG0gZnJvbSJub2RlOmZzIjtpbXBvcnQgUiBmcm9tIm5v ZGU6cGF0aCI7aW1wb3J0IHByIGZyb20iZnMiO3ZhciBKbj1wcm9jZXNzLmVudi5fX0ZBS0VfUExB VEZPUk1fX3x8cHJvY2Vzcy5wbGF0Zm9ybSxFcj1Kbj09PSJ3aW4zMiIse09fQ1JFQVQ6d3IsT19O T0ZPTExPVzptcixPX1RSVU5DOlNyLE9fV1JPTkxZOnlyfT1wci5jb25zdGFudHMsUnI9TnVtYmVy KHByb2Nlc3MuZW52Ll9fRkFLRV9GU19PX0ZJTEVOQU1FX18pfHxwci5jb25zdGFudHMuVVZfRlNf T19GSUxFTUFQfHwwLGpuPUVyJiYhIVJyLHRvPTUxMioxMDI0LGVvPVJyfFNyfHdyfHlyLHVyPSFF ciYmdHlwZW9mIG1yPT0ibnVtYmVyIj9tcnxTcnx3cnx5cjpudWxsLHVzPXVyIT09bnVsbD8oKT0+ dXI6am4/cz0+czx0bz9lbzoidyI6KCk9PiJ3IjtpbXBvcnQgd2kgZnJvbSJub2RlOmZzIjtpbXBv cnQgd2UgZnJvbSJub2RlOnBhdGgiO3ZhciBwcz0ocyx0LGUpPT57dHJ5e3JldHVybiB3aS5sY2hv d25TeW5jKHMsdCxlKX1jYXRjaChpKXtpZihpPy5jb2RlIT09IkVOT0VOVCIpdGhyb3cgaX19LEVp PShzLHQsZSxpKT0+e3dpLmxjaG93bihzLHQsZSxyPT57aShyJiZyPy5jb2RlIT09IkVOT0VOVCI/ cjpudWxsKX0pfSxpbz0ocyx0LGUsaSxyKT0+e2lmKHQuaXNEaXJlY3RvcnkoKSlFcyh3ZS5yZXNv bHZlKHMsdC5uYW1lKSxlLGksbj0+e2lmKG4pcmV0dXJuIHIobik7bGV0IG89d2UucmVzb2x2ZShz LHQubmFtZSk7RWkobyxlLGkscil9KTtlbHNle2xldCBuPXdlLnJlc29sdmUocyx0Lm5hbWUpO0Vp KG4sZSxpLHIpfX0sRXM9KHMsdCxlLGkpPT57d2kucmVhZGRpcihzLHt3aXRoRmlsZVR5cGVzOiEw fSwocixuKT0+e2lmKHIpe2lmKHIuY29kZT09PSJFTk9FTlQiKXJldHVybiBpKCk7aWYoci5jb2Rl IT09IkVOT1RESVIiJiZyLmNvZGUhPT0iRU5PVFNVUCIpcmV0dXJuIGkocil9aWYocnx8IW4ubGVu Z3RoKXJldHVybiBFaShzLHQsZSxpKTtsZXQgbz1uLmxlbmd0aCxoPW51bGwsYT1sPT57aWYoIWgp e2lmKGwpcmV0dXJuIGkoaD1sKTtpZigtLW89PT0wKXJldHVybiBFaShzLHQsZSxpKX19O2Zvcihs ZXQgbCBvZiBuKWlvKHMsbCx0LGUsYSl9KX0sc289KHMsdCxlLGkpPT57dC5pc0RpcmVjdG9yeSgp JiZ3cyh3ZS5yZXNvbHZlKHMsdC5uYW1lKSxlLGkpLHBzKHdlLnJlc29sdmUocyx0Lm5hbWUpLGUs aSl9LHdzPShzLHQsZSk9PntsZXQgaTt0cnl7aT13aS5yZWFkZGlyU3luYyhzLHt3aXRoRmlsZVR5 cGVzOiEwfSl9Y2F0Y2gocil7bGV0IG49cjtpZihuPy5jb2RlPT09IkVOT0VOVCIpcmV0dXJuO2lm KG4/LmNvZGU9PT0iRU5PVERJUiJ8fG4/LmNvZGU9PT0iRU5PVFNVUCIpcmV0dXJuIHBzKHMsdCxl KTt0aHJvdyBufWZvcihsZXQgciBvZiBpKXNvKHMscix0LGUpO3JldHVybiBwcyhzLHQsZSl9O2lt cG9ydCBrIGZyb20ibm9kZTpmcyI7aW1wb3J0IHJvIGZyb20ibm9kZTpmcy9wcm9taXNlcyI7aW1w b3J0IFNpIGZyb20ibm9kZTpwYXRoIjt2YXIgU2U9Y2xhc3MgZXh0ZW5kcyBFcnJvcntwYXRoO2Nv ZGU7c3lzY2FsbD0iY2hkaXIiO2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoYCR7ZX06IENhbm5vdCBj ZCBpbnRvICcke3R9J2ApLHRoaXMucGF0aD10LHRoaXMuY29kZT1lfWdldCBuYW1lKCl7cmV0dXJu IkN3ZEVycm9yIn19O3ZhciBTdD1jbGFzcyBleHRlbmRzIEVycm9ye3BhdGg7c3ltbGluaztzeXNj YWxsPSJzeW1saW5rIjtjb2RlPSJUQVJfU1lNTElOS19FUlJPUiI7Y29uc3RydWN0b3IodCxlKXtz dXBlcigiVEFSX1NZTUxJTktfRVJST1I6IENhbm5vdCBleHRyYWN0IHRocm91Z2ggc3ltYm9saWMg bGluayIpLHRoaXMuc3ltbGluaz10LHRoaXMucGF0aD1lfWdldCBuYW1lKCl7cmV0dXJuIlN5bWxp bmtFcnJvciJ9fTt2YXIgbm89KHMsdCk9PntrLnN0YXQocywoZSxpKT0+eyhlfHwhaS5pc0RpcmVj dG9yeSgpKSYmKGU9bmV3IFNlKHMsZT8uY29kZXx8IkVOT1RESVIiKSksdChlKX0pfSxncj0ocyx0 LGUpPT57cz1mKHMpO2xldCBpPXQudW1hc2s/PzE4LHI9dC5tb2RlfDQ0OCxuPShyJmkpIT09MCxv PXQudWlkLGg9dC5naWQsYT10eXBlb2Ygbz09Im51bWJlciImJnR5cGVvZiBoPT0ibnVtYmVyIiYm KG8hPT10LnByb2Nlc3NVaWR8fGghPT10LnByb2Nlc3NHaWQpLGw9dC5wcmVzZXJ2ZSxjPXQudW5s aW5rLGQ9Zih0LmN3ZCksUz0oRSx4KT0+e0U/ZShFKTp4JiZhP0VzKHgsbyxoLExlPT5TKExlKSk6 bj9rLmNobW9kKHMscixlKTplKCl9O2lmKHM9PT1kKXJldHVybiBubyhzLFMpO2lmKGwpcmV0dXJu IHJvLm1rZGlyKHMse21vZGU6cixyZWN1cnNpdmU6ITB9KS50aGVuKEU9PlMobnVsbCxFPz92b2lk IDApLFMpO2xldCBEPWYoU2kucmVsYXRpdmUoZCxzKSkuc3BsaXQoIi8iKTtTcyhkLEQscixjLGQs dm9pZCAwLFMpfSxTcz0ocyx0LGUsaSxyLG4sbyk9PntpZih0Lmxlbmd0aD09PTApcmV0dXJuIG8o bnVsbCxuKTtsZXQgaD10LnNoaWZ0KCksYT1mKFNpLnJlc29sdmUocysiLyIraCkpO2subWtkaXIo YSxlLGJyKGEsdCxlLGkscixuLG8pKX0sYnI9KHMsdCxlLGkscixuLG8pPT5oPT57aD9rLmxzdGF0 KHMsKGEsbCk9PntpZihhKWEucGF0aD1hLnBhdGgmJmYoYS5wYXRoKSxvKGEpO2Vsc2UgaWYobC5p c0RpcmVjdG9yeSgpKVNzKHMsdCxlLGkscixuLG8pO2Vsc2UgaWYoaSlrLnVubGluayhzLGM9Pntp ZihjKXJldHVybiBvKGMpO2subWtkaXIocyxlLGJyKHMsdCxlLGkscixuLG8pKX0pO2Vsc2V7aWYo bC5pc1N5bWJvbGljTGluaygpKXJldHVybiBvKG5ldyBTdChzLHMrIi8iK3Quam9pbigiLyIpKSk7 byhoKX19KToobj1ufHxzLFNzKHMsdCxlLGkscixuLG8pKX0sb289cz0+e2xldCB0PSExLGU7dHJ5 e3Q9ay5zdGF0U3luYyhzKS5pc0RpcmVjdG9yeSgpfWNhdGNoKGkpe2U9aT8uY29kZX1maW5hbGx5 e2lmKCF0KXRocm93IG5ldyBTZShzLGU/PyJFTk9URElSIil9fSxfcj0ocyx0KT0+e3M9ZihzKTts ZXQgZT10LnVtYXNrPz8xOCxpPXQubW9kZXw0NDgscj0oaSZlKSE9PTAsbj10LnVpZCxvPXQuZ2lk LGg9dHlwZW9mIG49PSJudW1iZXIiJiZ0eXBlb2Ygbz09Im51bWJlciImJihuIT09dC5wcm9jZXNz VWlkfHxvIT09dC5wcm9jZXNzR2lkKSxhPXQucHJlc2VydmUsbD10LnVubGluayxjPWYodC5jd2Qp LGQ9RT0+e0UmJmgmJndzKEUsbixvKSxyJiZrLmNobW9kU3luYyhzLGkpfTtpZihzPT09YylyZXR1 cm4gb28oYyksZCgpO2lmKGEpcmV0dXJuIGQoay5ta2RpclN5bmMocyx7bW9kZTppLHJlY3Vyc2l2 ZTohMH0pPz92b2lkIDApO2xldCBUPWYoU2kucmVsYXRpdmUoYyxzKSkuc3BsaXQoIi8iKSxEO2Zv cihsZXQgRT1ULnNoaWZ0KCkseD1jO0UmJih4Kz0iLyIrRSk7RT1ULnNoaWZ0KCkpe3g9ZihTaS5y ZXNvbHZlKHgpKTt0cnl7ay5ta2RpclN5bmMoeCxpKSxEPUR8fHh9Y2F0Y2h7bGV0IExlPWsubHN0 YXRTeW5jKHgpO2lmKExlLmlzRGlyZWN0b3J5KCkpY29udGludWU7aWYobCl7ay51bmxpbmtTeW5j KHgpLGsubWtkaXJTeW5jKHgsaSksRD1EfHx4O2NvbnRpbnVlfWVsc2UgaWYoTGUuaXNTeW1ib2xp Y0xpbmsoKSlyZXR1cm4gbmV3IFN0KHgseCsiLyIrVC5qb2luKCIvIikpfX1yZXR1cm4gZChEKX07 aW1wb3J0e2pvaW4gYXMgeHJ9ZnJvbSJub2RlOnBhdGgiO3ZhciB5cz1PYmplY3QuY3JlYXRlKG51 bGwpLE9yPTFlNCxWdD1uZXcgU2V0LFRyPXM9PntWdC5oYXMocyk/VnQuZGVsZXRlKHMpOnlzW3Nd PXMubm9ybWFsaXplKCJORkQiKS50b0xvY2FsZUxvd2VyQ2FzZSgiZW4iKS50b0xvY2FsZVVwcGVy Q2FzZSgiZW4iKSxWdC5hZGQocyk7bGV0IHQ9eXNbc10sZT1WdC5zaXplLU9yO2lmKGU+T3IvMTAp e2ZvcihsZXQgaSBvZiBWdClpZihWdC5kZWxldGUoaSksZGVsZXRlIHlzW2ldLC0tZTw9MClicmVh a31yZXR1cm4gdH07dmFyIGhvPXByb2Nlc3MuZW52LlRFU1RJTkdfVEFSX0ZBS0VfUExBVEZPUk18 fHByb2Nlc3MucGxhdGZvcm0sYW89aG89PT0id2luMzIiLGxvPXM9PnMuc3BsaXQoIi8iKS5zbGlj ZSgwLC0xKS5yZWR1Y2UoKGUsaSk9PntsZXQgcj1lLmF0KC0xKTtyZXR1cm4gciE9PXZvaWQgMCYm KGk9eHIocixpKSksZS5wdXNoKGl8fCIvIiksZX0sW10pLHlpPWNsYXNzeyN0PW5ldyBNYXA7I2k9 bmV3IE1hcDsjcz1uZXcgU2V0O3Jlc2VydmUodCxlKXt0PWFvP1sid2luMzIgcGFyYWxsZWxpemF0 aW9uIGRpc2FibGVkIl06dC5tYXAocj0+dXQoeHIoVHIocikpKSk7bGV0IGk9bmV3IFNldCh0Lm1h cChyPT5sbyhyKSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChuKSkpO3RoaXMuI2kuc2V0KGUse2Rp cnM6aSxwYXRoczp0fSk7Zm9yKGxldCByIG9mIHQpe2xldCBuPXRoaXMuI3QuZ2V0KHIpO24/bi5w dXNoKGUpOnRoaXMuI3Quc2V0KHIsW2VdKX1mb3IobGV0IHIgb2YgaSl7bGV0IG49dGhpcy4jdC5n ZXQocik7aWYoIW4pdGhpcy4jdC5zZXQocixbbmV3IFNldChbZV0pXSk7ZWxzZXtsZXQgbz1uLmF0 KC0xKTtvIGluc3RhbmNlb2YgU2V0P28uYWRkKGUpOm4ucHVzaChuZXcgU2V0KFtlXSkpfX1yZXR1 cm4gdGhpcy4jcihlKX0jbih0KXtsZXQgZT10aGlzLiNpLmdldCh0KTtpZighZSl0aHJvdyBuZXcg RXJyb3IoImZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYW55IHBhdGggcmVzZXJ2YXRpb25zIik7cmV0 dXJue3BhdGhzOmUucGF0aHMubWFwKGk9PnRoaXMuI3QuZ2V0KGkpKSxkaXJzOlsuLi5lLmRpcnNd Lm1hcChpPT50aGlzLiN0LmdldChpKSl9fWNoZWNrKHQpe2xldHtwYXRoczplLGRpcnM6aX09dGhp cy4jbih0KTtyZXR1cm4gZS5ldmVyeShyPT5yJiZyWzBdPT09dCkmJmkuZXZlcnkocj0+ciYmclsw XWluc3RhbmNlb2YgU2V0JiZyWzBdLmhhcyh0KSl9I3IodCl7cmV0dXJuIHRoaXMuI3MuaGFzKHQp fHwhdGhpcy5jaGVjayh0KT8hMToodGhpcy4jcy5hZGQodCksdCgoKT0+dGhpcy4jZSh0KSksITAp fSNlKHQpe2lmKCF0aGlzLiNzLmhhcyh0KSlyZXR1cm4hMTtsZXQgZT10aGlzLiNpLmdldCh0KTtp ZighZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmVzZXJ2YXRpb24iKTtsZXR7cGF0aHM6aSxk aXJzOnJ9PWUsbj1uZXcgU2V0O2ZvcihsZXQgbyBvZiBpKXtsZXQgaD10aGlzLiN0LmdldChvKTtp ZighaHx8aD8uWzBdIT09dCljb250aW51ZTtsZXQgYT1oWzFdO2lmKCFhKXt0aGlzLiN0LmRlbGV0 ZShvKTtjb250aW51ZX1pZihoLnNoaWZ0KCksdHlwZW9mIGE9PSJmdW5jdGlvbiIpbi5hZGQoYSk7 ZWxzZSBmb3IobGV0IGwgb2YgYSluLmFkZChsKX1mb3IobGV0IG8gb2Ygcil7bGV0IGg9dGhpcy4j dC5nZXQobyksYT1oPy5bMF07aWYoISghaHx8IShhIGluc3RhbmNlb2YgU2V0KSkpaWYoYS5zaXpl PT09MSYmaC5sZW5ndGg9PT0xKXt0aGlzLiN0LmRlbGV0ZShvKTtjb250aW51ZX1lbHNlIGlmKGEu c2l6ZT09PTEpe2guc2hpZnQoKTtsZXQgbD1oWzBdO3R5cGVvZiBsPT0iZnVuY3Rpb24iJiZuLmFk ZChsKX1lbHNlIGEuZGVsZXRlKHQpfXJldHVybiB0aGlzLiNzLmRlbGV0ZSh0KSxuLmZvckVhY2go bz0+dGhpcy4jcihvKSksITB9fTt2YXIgTHI9KCk9PnByb2Nlc3MudW1hc2soKTt2YXIgRHI9U3lt Ym9sKCJvbkVudHJ5IiksX3M9U3ltYm9sKCJjaGVja0ZzIiksTnI9U3ltYm9sKCJjaGVja0ZzMiIp LE9zPVN5bWJvbCgiaXNSZXVzYWJsZSIpLFA9U3ltYm9sKCJtYWtlRnMiKSxUcz1TeW1ib2woImZp bGUiKSx4cz1TeW1ib2woImRpcmVjdG9yeSIpLGdpPVN5bWJvbCgibGluayIpLEFyPVN5bWJvbCgi c3ltbGluayIpLElyPVN5bWJvbCgiaGFyZGxpbmsiKSxSZT1TeW1ib2woImVuc3VyZU5vU3ltbGlu ayIpLENyPVN5bWJvbCgidW5zdXBwb3J0ZWQiKSxGcj1TeW1ib2woImNoZWNrUGF0aCIpLFJzPVN5 bWJvbCgic3RyaXBBYnNvbHV0ZVBhdGgiKSx5dD1TeW1ib2woIm1rZGlyIiksTz1TeW1ib2woIm9u RXJyb3IiKSxSaT1TeW1ib2woInBlbmRpbmciKSxrcj1TeW1ib2woInBlbmQiKSwkdD1TeW1ib2wo InVucGVuZCIpLGdzPVN5bWJvbCgiZW5kZWQiKSxicz1TeW1ib2woIm1heWJlQ2xvc2UiKSxMcz1T eW1ib2woInNraXAiKSxnZT1TeW1ib2woImRvQ2hvd24iKSxiZT1TeW1ib2woInVpZCIpLF9lPVN5 bWJvbCgiZ2lkIiksT2U9U3ltYm9sKCJjaGVja2VkQ3dkIiksZm89cHJvY2Vzcy5lbnYuVEVTVElO R19UQVJfRkFLRV9QTEFURk9STXx8cHJvY2Vzcy5wbGF0Zm9ybSxUZT1mbz09PSJ3aW4zMiIsbW89 MTAyNCx1bz0ocyx0KT0+e2lmKCFUZSlyZXR1cm4gbS51bmxpbmsocyx0KTtsZXQgZT1zKyIuREVM RVRFLiIrTXIoMTYpLnRvU3RyaW5nKCJoZXgiKTttLnJlbmFtZShzLGUsaT0+e2lmKGkpcmV0dXJu IHQoaSk7bS51bmxpbmsoZSx0KX0pfSxwbz1zPT57aWYoIVRlKXJldHVybiBtLnVubGlua1N5bmMo cyk7bGV0IHQ9cysiLkRFTEVURS4iK01yKDE2KS50b1N0cmluZygiaGV4Iik7bS5yZW5hbWVTeW5j KHMsdCksbS51bmxpbmtTeW5jKHQpfSx2cj0ocyx0LGUpPT5zIT09dm9pZCAwJiZzPT09cz4+PjA/ czp0IT09dm9pZCAwJiZ0PT09dD4+PjA/dDplLFh0PWNsYXNzIGV4dGVuZHMgcnR7W2dzXT0hMTtb T2VdPSExO1tSaV09MDtyZXNlcnZhdGlvbnM9bmV3IHlpO3RyYW5zZm9ybTt3cml0YWJsZT0hMDty ZWFkYWJsZT0hMTt1aWQ7Z2lkO3NldE93bmVyO3ByZXNlcnZlT3duZXI7cHJvY2Vzc0dpZDtwcm9j ZXNzVWlkO21heERlcHRoO2ZvcmNlQ2hvd247d2luMzI7bmV3ZXI7a2VlcDtub010aW1lO3ByZXNl cnZlUGF0aHM7dW5saW5rO2N3ZDtzdHJpcDtwcm9jZXNzVW1hc2s7dW1hc2s7ZG1vZGU7Zm1vZGU7 Y2htb2Q7Y29uc3RydWN0b3IodD17fSl7aWYodC5vbmRvbmU9KCk9Pnt0aGlzW2dzXT0hMCx0aGlz W2JzXSgpfSxzdXBlcih0KSx0aGlzLnRyYW5zZm9ybT10LnRyYW5zZm9ybSx0aGlzLmNobW9kPSEh dC5jaG1vZCx0eXBlb2YgdC51aWQ9PSJudW1iZXIifHx0eXBlb2YgdC5naWQ9PSJudW1iZXIiKXtp Zih0eXBlb2YgdC51aWQhPSJudW1iZXIifHx0eXBlb2YgdC5naWQhPSJudW1iZXIiKXRocm93IG5l dyBUeXBlRXJyb3IoImNhbm5vdCBzZXQgb3duZXIgd2l0aG91dCBudW1iZXIgdWlkIGFuZCBnaWQi KTtpZih0LnByZXNlcnZlT3duZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2Fubm90IHByZXNlcnZl IG93bmVyIGluIGFyY2hpdmUgYW5kIGFsc28gc2V0IG93bmVyIGV4cGxpY2l0bHkiKTt0aGlzLnVp ZD10LnVpZCx0aGlzLmdpZD10LmdpZCx0aGlzLnNldE93bmVyPSEwfWVsc2UgdGhpcy51aWQ9dm9p ZCAwLHRoaXMuZ2lkPXZvaWQgMCx0aGlzLnNldE93bmVyPSExO3RoaXMucHJlc2VydmVPd25lcj10 LnByZXNlcnZlT3duZXI9PT12b2lkIDAmJnR5cGVvZiB0LnVpZCE9Im51bWJlciI/cHJvY2Vzcy5n ZXR1aWQ/LigpPT09MDohIXQucHJlc2VydmVPd25lcix0aGlzLnByb2Nlc3NVaWQ9KHRoaXMucHJl c2VydmVPd25lcnx8dGhpcy5zZXRPd25lcikmJnByb2Nlc3MuZ2V0dWlkP3Byb2Nlc3MuZ2V0dWlk KCk6dm9pZCAwLHRoaXMucHJvY2Vzc0dpZD0odGhpcy5wcmVzZXJ2ZU93bmVyfHx0aGlzLnNldE93 bmVyKSYmcHJvY2Vzcy5nZXRnaWQ/cHJvY2Vzcy5nZXRnaWQoKTp2b2lkIDAsdGhpcy5tYXhEZXB0 aD10eXBlb2YgdC5tYXhEZXB0aD09Im51bWJlciI/dC5tYXhEZXB0aDptbyx0aGlzLmZvcmNlQ2hv d249dC5mb3JjZUNob3duPT09ITAsdGhpcy53aW4zMj0hIXQud2luMzJ8fFRlLHRoaXMubmV3ZXI9 ISF0Lm5ld2VyLHRoaXMua2VlcD0hIXQua2VlcCx0aGlzLm5vTXRpbWU9ISF0Lm5vTXRpbWUsdGhp cy5wcmVzZXJ2ZVBhdGhzPSEhdC5wcmVzZXJ2ZVBhdGhzLHRoaXMudW5saW5rPSEhdC51bmxpbmss dGhpcy5jd2Q9ZihSLnJlc29sdmUodC5jd2R8fHByb2Nlc3MuY3dkKCkpKSx0aGlzLnN0cmlwPU51 bWJlcih0LnN0cmlwKXx8MCx0aGlzLnByb2Nlc3NVbWFzaz10aGlzLmNobW9kP3R5cGVvZiB0LnBy b2Nlc3NVbWFzaz09Im51bWJlciI/dC5wcm9jZXNzVW1hc2s6THIoKTowLHRoaXMudW1hc2s9dHlw ZW9mIHQudW1hc2s9PSJudW1iZXIiP3QudW1hc2s6dGhpcy5wcm9jZXNzVW1hc2ssdGhpcy5kbW9k ZT10LmRtb2RlfHw1MTEmfnRoaXMudW1hc2ssdGhpcy5mbW9kZT10LmZtb2RlfHw0MzgmfnRoaXMu dW1hc2ssdGhpcy5vbigiZW50cnkiLGU9PnRoaXNbRHJdKGUpKX13YXJuKHQsZSxpPXt9KXtyZXR1 cm4odD09PSJUQVJfQkFEX0FSQ0hJVkUifHx0PT09IlRBUl9BQk9SVCIpJiYoaS5yZWNvdmVyYWJs ZT0hMSksc3VwZXIud2Fybih0LGUsaSl9W2JzXSgpe3RoaXNbZ3NdJiZ0aGlzW1JpXT09PTAmJih0 aGlzLmVtaXQoInByZWZpbmlzaCIpLHRoaXMuZW1pdCgiZmluaXNoIiksdGhpcy5lbWl0KCJlbmQi KSl9W1JzXSh0LGUpe2xldCBpPXRbZV0se3R5cGU6cn09dDtpZighaXx8dGhpcy5wcmVzZXJ2ZVBh dGhzKXJldHVybiEwO2xldFtuLG9dPWNlKGkpLGg9by5yZXBsYWNlQWxsKC9cXC9nLCIvIikuc3Bs aXQoIi8iKTtpZihoLmluY2x1ZGVzKCIuLiIpfHxUZSYmL15bYS16XTpcLlwuJC9pLnRlc3QoaFsw XT8/IiIpKXtpZihlPT09InBhdGgifHxyPT09IkxpbmsiKXJldHVybiB0aGlzLndhcm4oIlRBUl9F TlRSWV9FUlJPUiIsYCR7ZX0gY29udGFpbnMgJy4uJ2Ase2VudHJ5OnQsW2VdOml9KSwhMTtsZXQg YT1SLnBvc2l4LmRpcm5hbWUodC5wYXRoKSxsPVIucG9zaXgubm9ybWFsaXplKFIucG9zaXguam9p bihhLGguam9pbigiLyIpKSk7aWYobC5zdGFydHNXaXRoKCIuLi8iKXx8bD09PSIuLiIpcmV0dXJu IHRoaXMud2FybigiVEFSX0VOVFJZX0VSUk9SIixgJHtlfSBlc2NhcGVzIGV4dHJhY3Rpb24gZGly ZWN0b3J5YCx7ZW50cnk6dCxbZV06aX0pLCExfXJldHVybiBuJiYodFtlXT1TdHJpbmcobyksdGhp cy53YXJuKCJUQVJfRU5UUllfSU5GTyIsYHN0cmlwcGluZyAke259IGZyb20gYWJzb2x1dGUgJHtl fWAse2VudHJ5OnQsW2VdOml9KSksITB9W0ZyXSh0KXtsZXQgZT1mKHQucGF0aCksaT1lLnNwbGl0 KCIvIik7aWYodGhpcy5zdHJpcCl7aWYoaS5sZW5ndGg8dGhpcy5zdHJpcClyZXR1cm4hMTtpZih0 LnR5cGU9PT0iTGluayIpe2xldCByPWYoU3RyaW5nKHQubGlua3BhdGgpKS5zcGxpdCgiLyIpO2lm KHIubGVuZ3RoPj10aGlzLnN0cmlwKXQubGlua3BhdGg9ci5zbGljZSh0aGlzLnN0cmlwKS5qb2lu KCIvIik7ZWxzZSByZXR1cm4hMX1pLnNwbGljZSgwLHRoaXMuc3RyaXApLHQucGF0aD1pLmpvaW4o Ii8iKX1pZihpc0Zpbml0ZSh0aGlzLm1heERlcHRoKSYmaS5sZW5ndGg+dGhpcy5tYXhEZXB0aCly ZXR1cm4gdGhpcy53YXJuKCJUQVJfRU5UUllfRVJST1IiLCJwYXRoIGV4Y2Vzc2l2ZWx5IGRlZXAi LHtlbnRyeTp0LHBhdGg6ZSxkZXB0aDppLmxlbmd0aCxtYXhEZXB0aDp0aGlzLm1heERlcHRofSks ITE7aWYoIXRoaXNbUnNdKHQsInBhdGgiKXx8IXRoaXNbUnNdKHQsImxpbmtwYXRoIikpcmV0dXJu ITE7aWYodC5hYnNvbHV0ZT1SLmlzQWJzb2x1dGUodC5wYXRoKT9mKFIucmVzb2x2ZSh0LnBhdGgp KTpmKFIucmVzb2x2ZSh0aGlzLmN3ZCx0LnBhdGgpKSwhdGhpcy5wcmVzZXJ2ZVBhdGhzJiZ0eXBl b2YgdC5hYnNvbHV0ZT09InN0cmluZyImJnQuYWJzb2x1dGUuaW5kZXhPZih0aGlzLmN3ZCsiLyIp IT09MCYmdC5hYnNvbHV0ZSE9PXRoaXMuY3dkKXJldHVybiB0aGlzLndhcm4oIlRBUl9FTlRSWV9F UlJPUiIsInBhdGggZXNjYXBlZCBleHRyYWN0aW9uIHRhcmdldCIse2VudHJ5OnQscGF0aDpmKHQu cGF0aCkscmVzb2x2ZWRQYXRoOnQuYWJzb2x1dGUsY3dkOnRoaXMuY3dkfSksITE7aWYodC5hYnNv bHV0ZT09PXRoaXMuY3dkJiZ0LnR5cGUhPT0iRGlyZWN0b3J5IiYmdC50eXBlIT09IkdOVUR1bXBE aXIiKXJldHVybiExO2lmKHRoaXMud2luMzIpe2xldHtyb290OnJ9PVIud2luMzIucGFyc2UoU3Ry aW5nKHQuYWJzb2x1dGUpKTt0LmFic29sdXRlPXIrdHMoU3RyaW5nKHQuYWJzb2x1dGUpLnNsaWNl KHIubGVuZ3RoKSk7bGV0e3Jvb3Q6bn09Ui53aW4zMi5wYXJzZSh0LnBhdGgpO3QucGF0aD1uK3Rz KHQucGF0aC5zbGljZShuLmxlbmd0aCkpfXJldHVybiEwfVtEcl0odCl7aWYoIXRoaXNbRnJdKHQp KXJldHVybiB0LnJlc3VtZSgpO3N3aXRjaChjby5lcXVhbCh0eXBlb2YgdC5hYnNvbHV0ZSwic3Ry aW5nIiksdC50eXBlKXtjYXNlIkRpcmVjdG9yeSI6Y2FzZSJHTlVEdW1wRGlyIjp0Lm1vZGUmJih0 Lm1vZGU9dC5tb2RlfDQ0OCk7Y2FzZSJGaWxlIjpjYXNlIk9sZEZpbGUiOmNhc2UiQ29udGlndW91 c0ZpbGUiOmNhc2UiTGluayI6Y2FzZSJTeW1ib2xpY0xpbmsiOnJldHVybiB0aGlzW19zXSh0KTtk ZWZhdWx0OnJldHVybiB0aGlzW0NyXSh0KX19W09dKHQsZSl7dC5uYW1lPT09IkN3ZEVycm9yIj90 aGlzLmVtaXQoImVycm9yIix0KToodGhpcy53YXJuKCJUQVJfRU5UUllfRVJST1IiLHQse2VudHJ5 OmV9KSx0aGlzWyR0XSgpLGUucmVzdW1lKCkpfVt5dF0odCxlLGkpe2dyKGYodCkse3VpZDp0aGlz LnVpZCxnaWQ6dGhpcy5naWQscHJvY2Vzc1VpZDp0aGlzLnByb2Nlc3NVaWQscHJvY2Vzc0dpZDp0 aGlzLnByb2Nlc3NHaWQsdW1hc2s6dGhpcy5wcm9jZXNzVW1hc2sscHJlc2VydmU6dGhpcy5wcmVz ZXJ2ZVBhdGhzLHVubGluazp0aGlzLnVubGluayxjd2Q6dGhpcy5jd2QsbW9kZTplfSxpKX1bZ2Vd KHQpe3JldHVybiB0aGlzLmZvcmNlQ2hvd258fHRoaXMucHJlc2VydmVPd25lciYmKHR5cGVvZiB0 LnVpZD09Im51bWJlciImJnQudWlkIT09dGhpcy5wcm9jZXNzVWlkfHx0eXBlb2YgdC5naWQ9PSJu dW1iZXIiJiZ0LmdpZCE9PXRoaXMucHJvY2Vzc0dpZCl8fHR5cGVvZiB0aGlzLnVpZD09Im51bWJl ciImJnRoaXMudWlkIT09dGhpcy5wcm9jZXNzVWlkfHx0eXBlb2YgdGhpcy5naWQ9PSJudW1iZXIi JiZ0aGlzLmdpZCE9PXRoaXMucHJvY2Vzc0dpZH1bYmVdKHQpe3JldHVybiB2cih0aGlzLnVpZCx0 LnVpZCx0aGlzLnByb2Nlc3NVaWQpfVtfZV0odCl7cmV0dXJuIHZyKHRoaXMuZ2lkLHQuZ2lkLHRo aXMucHJvY2Vzc0dpZCl9W1RzXSh0LGUpe2xldCBpPXR5cGVvZiB0Lm1vZGU9PSJudW1iZXIiP3Qu bW9kZSY0MDk1OnRoaXMuZm1vZGUscj1uZXcgZXQoU3RyaW5nKHQuYWJzb2x1dGUpLHtmbGFnczp1 cyh0LnNpemUpLG1vZGU6aSxhdXRvQ2xvc2U6ITF9KTtyLm9uKCJlcnJvciIsYT0+e3IuZmQmJm0u Y2xvc2Uoci5mZCwoKT0+e30pLHIud3JpdGU9KCk9PiEwLHRoaXNbT10oYSx0KSxlKCl9KTtsZXQg bj0xLG89YT0+e2lmKGEpe3IuZmQmJm0uY2xvc2Uoci5mZCwoKT0+e30pLHRoaXNbT10oYSx0KSxl KCk7cmV0dXJufS0tbj09PTAmJnIuZmQhPT12b2lkIDAmJm0uY2xvc2Uoci5mZCxsPT57bD90aGlz W09dKGwsdCk6dGhpc1skdF0oKSxlKCl9KX07ci5vbigiZmluaXNoIiwoKT0+e2xldCBhPVN0cmlu Zyh0LmFic29sdXRlKSxsPXIuZmQ7aWYodHlwZW9mIGw9PSJudW1iZXIiJiZ0Lm10aW1lJiYhdGhp cy5ub010aW1lKXtuKys7bGV0IGM9dC5hdGltZXx8bmV3IERhdGUsZD10Lm10aW1lO20uZnV0aW1l cyhsLGMsZCxTPT5TP20udXRpbWVzKGEsYyxkLFQ9Pm8oVCYmUykpOm8oKSl9aWYodHlwZW9mIGw9 PSJudW1iZXIiJiZ0aGlzW2dlXSh0KSl7bisrO2xldCBjPXRoaXNbYmVdKHQpLGQ9dGhpc1tfZV0o dCk7dHlwZW9mIGM9PSJudW1iZXIiJiZ0eXBlb2YgZD09Im51bWJlciImJm0uZmNob3duKGwsYyxk LFM9PlM/bS5jaG93bihhLGMsZCxUPT5vKFQmJlMpKTpvKCkpfW8oKX0pO2xldCBoPXRoaXMudHJh bnNmb3JtJiZ0aGlzLnRyYW5zZm9ybSh0KXx8dDtoIT09dCYmKGgub24oImVycm9yIixhPT57dGhp c1tPXShhLHQpLGUoKX0pLHQucGlwZShoKSksaC5waXBlKHIpfVt4c10odCxlKXtsZXQgaT10eXBl b2YgdC5tb2RlPT0ibnVtYmVyIj90Lm1vZGUmNDA5NTp0aGlzLmRtb2RlO3RoaXNbeXRdKFN0cmlu Zyh0LmFic29sdXRlKSxpLHI9PntpZihyKXt0aGlzW09dKHIsdCksZSgpO3JldHVybn1sZXQgbj0x LG89KCk9PnstLW49PT0wJiYoZSgpLHRoaXNbJHRdKCksdC5yZXN1bWUoKSl9O3QubXRpbWUmJiF0 aGlzLm5vTXRpbWUmJihuKyssbS51dGltZXMoU3RyaW5nKHQuYWJzb2x1dGUpLHQuYXRpbWV8fG5l dyBEYXRlLHQubXRpbWUsbykpLHRoaXNbZ2VdKHQpJiYobisrLG0uY2hvd24oU3RyaW5nKHQuYWJz b2x1dGUpLE51bWJlcih0aGlzW2JlXSh0KSksTnVtYmVyKHRoaXNbX2VdKHQpKSxvKSksbygpfSl9 W0NyXSh0KXt0LnVuc3VwcG9ydGVkPSEwLHRoaXMud2FybigiVEFSX0VOVFJZX1VOU1VQUE9SVEVE IixgdW5zdXBwb3J0ZWQgZW50cnkgdHlwZTogJHt0LnR5cGV9YCx7ZW50cnk6dH0pLHQucmVzdW1l KCl9W0FyXSh0LGUpe2xldCBpPWYoUi5yZWxhdGl2ZSh0aGlzLmN3ZCxSLnJlc29sdmUoUi5kaXJu YW1lKFN0cmluZyh0LmFic29sdXRlKSksU3RyaW5nKHQubGlua3BhdGgpKSkpLnNwbGl0KCIvIik7 dGhpc1tSZV0odCx0aGlzLmN3ZCxpLCgpPT50aGlzW2dpXSh0LFN0cmluZyh0LmxpbmtwYXRoKSwi c3ltbGluayIsZSkscj0+e3RoaXNbT10ocix0KSxlKCl9KX1bSXJdKHQsZSl7bGV0IGk9ZihSLnJl c29sdmUodGhpcy5jd2QsU3RyaW5nKHQubGlua3BhdGgpKSkscj1mKFN0cmluZyh0LmxpbmtwYXRo KSkuc3BsaXQoIi8iKTt0aGlzW1JlXSh0LHRoaXMuY3dkLHIsKCk9PnRoaXNbZ2ldKHQsaSwibGlu ayIsZSksbj0+e3RoaXNbT10obix0KSxlKCl9KX1bUmVdKHQsZSxpLHIsbil7bGV0IG89aS5zaGlm dCgpO2lmKHRoaXMucHJlc2VydmVQYXRoc3x8bz09PXZvaWQgMClyZXR1cm4gcigpO2xldCBoPVIu cmVzb2x2ZShlLG8pO20ubHN0YXQoaCwoYSxsKT0+e2lmKGEpcmV0dXJuIHIoKTtpZihsPy5pc1N5 bWJvbGljTGluaygpKXJldHVybiBuKG5ldyBTdChoLFIucmVzb2x2ZShoLGkuam9pbigiLyIpKSkp O3RoaXNbUmVdKHQsaCxpLHIsbil9KX1ba3JdKCl7dGhpc1tSaV0rK31bJHRdKCl7dGhpc1tSaV0t LSx0aGlzW2JzXSgpfVtMc10odCl7dGhpc1skdF0oKSx0LnJlc3VtZSgpfVtPc10odCxlKXtyZXR1 cm4gdC50eXBlPT09IkZpbGUiJiYhdGhpcy51bmxpbmsmJmUuaXNGaWxlKCkmJmUubmxpbms8PTEm JiFUZX1bX3NdKHQpe3RoaXNba3JdKCk7bGV0IGU9W3QucGF0aF07dC5saW5rcGF0aCYmZS5wdXNo KHQubGlua3BhdGgpLHRoaXMucmVzZXJ2YXRpb25zLnJlc2VydmUoZSxpPT50aGlzW05yXSh0LGkp KX1bTnJdKHQsZSl7bGV0IGk9aD0+e2UoaCl9LHI9KCk9Pnt0aGlzW3l0XSh0aGlzLmN3ZCx0aGlz LmRtb2RlLGg9PntpZihoKXt0aGlzW09dKGgsdCksaSgpO3JldHVybn10aGlzW09lXT0hMCxuKCl9 KX0sbj0oKT0+e2lmKHQuYWJzb2x1dGUhPT10aGlzLmN3ZCl7bGV0IGg9ZihSLmRpcm5hbWUoU3Ry aW5nKHQuYWJzb2x1dGUpKSk7aWYoaCE9PXRoaXMuY3dkKXJldHVybiB0aGlzW3l0XShoLHRoaXMu ZG1vZGUsYT0+e2lmKGEpe3RoaXNbT10oYSx0KSxpKCk7cmV0dXJufW8oKX0pfW8oKX0sbz0oKT0+ e20ubHN0YXQoU3RyaW5nKHQuYWJzb2x1dGUpLChoLGEpPT57aWYoYSYmKHRoaXMua2VlcHx8dGhp cy5uZXdlciYmYS5tdGltZT4odC5tdGltZT8/YS5tdGltZSkpKXt0aGlzW0xzXSh0KSxpKCk7cmV0 dXJufWlmKGh8fHRoaXNbT3NdKHQsYSkpcmV0dXJuIHRoaXNbUF0obnVsbCx0LGkpO2lmKGEuaXNE aXJlY3RvcnkoKSl7aWYodC50eXBlPT09IkRpcmVjdG9yeSIpe2xldCBsPXRoaXMuY2htb2QmJnQu bW9kZSYmKGEubW9kZSY0MDk1KSE9PXQubW9kZSxjPWQ9PnRoaXNbUF0oZD8/bnVsbCx0LGkpO3Jl dHVybiBsP20uY2htb2QoU3RyaW5nKHQuYWJzb2x1dGUpLE51bWJlcih0Lm1vZGUpLGMpOmMoKX1p Zih0LmFic29sdXRlIT09dGhpcy5jd2QpcmV0dXJuIG0ucm1kaXIoU3RyaW5nKHQuYWJzb2x1dGUp LGw9PnRoaXNbUF0obD8/bnVsbCx0LGkpKX1pZih0LmFic29sdXRlPT09dGhpcy5jd2QpcmV0dXJu IHRoaXNbUF0obnVsbCx0LGkpO3VvKFN0cmluZyh0LmFic29sdXRlKSxsPT50aGlzW1BdKGw/P251 bGwsdCxpKSl9KX07dGhpc1tPZV0/bigpOnIoKX1bUF0odCxlLGkpe2lmKHQpe3RoaXNbT10odCxl KSxpKCk7cmV0dXJufXN3aXRjaChlLnR5cGUpe2Nhc2UiRmlsZSI6Y2FzZSJPbGRGaWxlIjpjYXNl IkNvbnRpZ3VvdXNGaWxlIjpyZXR1cm4gdGhpc1tUc10oZSxpKTtjYXNlIkxpbmsiOnJldHVybiB0 aGlzW0lyXShlLGkpO2Nhc2UiU3ltYm9saWNMaW5rIjpyZXR1cm4gdGhpc1tBcl0oZSxpKTtjYXNl IkRpcmVjdG9yeSI6Y2FzZSJHTlVEdW1wRGlyIjpyZXR1cm4gdGhpc1t4c10oZSxpKX19W2dpXSh0 LGUsaSxyKXttW2ldKGUsU3RyaW5nKHQuYWJzb2x1dGUpLG49PntuP3RoaXNbT10obix0KToodGhp c1skdF0oKSx0LnJlc3VtZSgpKSxyKCl9KX19LHllPXM9Pnt0cnl7cmV0dXJuW251bGwscygpXX1j YXRjaCh0KXtyZXR1cm5bdCxudWxsXX19LHhlPWNsYXNzIGV4dGVuZHMgWHR7c3luYz0hMDtbUF0o dCxlKXtyZXR1cm4gc3VwZXJbUF0odCxlLCgpPT57fSl9W19zXSh0KXtpZighdGhpc1tPZV0pe2xl dCBuPXRoaXNbeXRdKHRoaXMuY3dkLHRoaXMuZG1vZGUpO2lmKG4pcmV0dXJuIHRoaXNbT10obix0 KTt0aGlzW09lXT0hMH1pZih0LmFic29sdXRlIT09dGhpcy5jd2Qpe2xldCBuPWYoUi5kaXJuYW1l KFN0cmluZyh0LmFic29sdXRlKSkpO2lmKG4hPT10aGlzLmN3ZCl7bGV0IG89dGhpc1t5dF0obix0 aGlzLmRtb2RlKTtpZihvKXJldHVybiB0aGlzW09dKG8sdCl9fWxldFtlLGldPXllKCgpPT5tLmxz dGF0U3luYyhTdHJpbmcodC5hYnNvbHV0ZSkpKTtpZihpJiYodGhpcy5rZWVwfHx0aGlzLm5ld2Vy JiZpLm10aW1lPih0Lm10aW1lPz9pLm10aW1lKSkpcmV0dXJuIHRoaXNbTHNdKHQpO2lmKGV8fHRo aXNbT3NdKHQsaSkpcmV0dXJuIHRoaXNbUF0obnVsbCx0KTtpZihpLmlzRGlyZWN0b3J5KCkpe2lm KHQudHlwZT09PSJEaXJlY3RvcnkiKXtsZXQgbz10aGlzLmNobW9kJiZ0Lm1vZGUmJihpLm1vZGUm NDA5NSkhPT10Lm1vZGUsW2hdPW8/eWUoKCk9PnttLmNobW9kU3luYyhTdHJpbmcodC5hYnNvbHV0 ZSksTnVtYmVyKHQubW9kZSkpfSk6W107cmV0dXJuIHRoaXNbUF0oaCx0KX1sZXRbbl09eWUoKCk9 Pm0ucm1kaXJTeW5jKFN0cmluZyh0LmFic29sdXRlKSkpO3RoaXNbUF0obix0KX1sZXRbcl09dC5h YnNvbHV0ZT09PXRoaXMuY3dkP1tdOnllKCgpPT5wbyhTdHJpbmcodC5hYnNvbHV0ZSkpKTt0aGlz W1BdKHIsdCl9W1RzXSh0LGUpe2xldCBpPXR5cGVvZiB0Lm1vZGU9PSJudW1iZXIiP3QubW9kZSY0 MDk1OnRoaXMuZm1vZGUscj1oPT57bGV0IGE7dHJ5e20uY2xvc2VTeW5jKG4pfWNhdGNoKGwpe2E9 bH0oaHx8YSkmJnRoaXNbT10oaHx8YSx0KSxlKCl9LG47dHJ5e249bS5vcGVuU3luYyhTdHJpbmco dC5hYnNvbHV0ZSksdXModC5zaXplKSxpKX1jYXRjaChoKXtyZXR1cm4gcihoKX1sZXQgbz10aGlz LnRyYW5zZm9ybSYmdGhpcy50cmFuc2Zvcm0odCl8fHQ7byE9PXQmJihvLm9uKCJlcnJvciIsaD0+ dGhpc1tPXShoLHQpKSx0LnBpcGUobykpLG8ub24oImRhdGEiLGg9Pnt0cnl7bS53cml0ZVN5bmMo bixoLDAsaC5sZW5ndGgpfWNhdGNoKGEpe3IoYSl9fSksby5vbigiZW5kIiwoKT0+e2xldCBoPW51 bGw7aWYodC5tdGltZSYmIXRoaXMubm9NdGltZSl7bGV0IGE9dC5hdGltZXx8bmV3IERhdGUsbD10 Lm10aW1lO3RyeXttLmZ1dGltZXNTeW5jKG4sYSxsKX1jYXRjaChjKXt0cnl7bS51dGltZXNTeW5j KFN0cmluZyh0LmFic29sdXRlKSxhLGwpfWNhdGNoe2g9Y319fWlmKHRoaXNbZ2VdKHQpKXtsZXQg YT10aGlzW2JlXSh0KSxsPXRoaXNbX2VdKHQpO3RyeXttLmZjaG93blN5bmMobixOdW1iZXIoYSks TnVtYmVyKGwpKX1jYXRjaChjKXt0cnl7bS5jaG93blN5bmMoU3RyaW5nKHQuYWJzb2x1dGUpLE51 bWJlcihhKSxOdW1iZXIobCkpfWNhdGNoe2g9aHx8Y319fXIoaCl9KX1beHNdKHQsZSl7bGV0IGk9 dHlwZW9mIHQubW9kZT09Im51bWJlciI/dC5tb2RlJjQwOTU6dGhpcy5kbW9kZSxyPXRoaXNbeXRd KFN0cmluZyh0LmFic29sdXRlKSxpKTtpZihyKXt0aGlzW09dKHIsdCksZSgpO3JldHVybn1pZih0 Lm10aW1lJiYhdGhpcy5ub010aW1lKXRyeXttLnV0aW1lc1N5bmMoU3RyaW5nKHQuYWJzb2x1dGUp LHQuYXRpbWV8fG5ldyBEYXRlLHQubXRpbWUpfWNhdGNoe31pZih0aGlzW2dlXSh0KSl0cnl7bS5j aG93blN5bmMoU3RyaW5nKHQuYWJzb2x1dGUpLE51bWJlcih0aGlzW2JlXSh0KSksTnVtYmVyKHRo aXNbX2VdKHQpKSl9Y2F0Y2h7fWUoKSx0LnJlc3VtZSgpfVt5dF0odCxlKXt0cnl7cmV0dXJuIF9y KGYodCkse3VpZDp0aGlzLnVpZCxnaWQ6dGhpcy5naWQscHJvY2Vzc1VpZDp0aGlzLnByb2Nlc3NV aWQscHJvY2Vzc0dpZDp0aGlzLnByb2Nlc3NHaWQsdW1hc2s6dGhpcy5wcm9jZXNzVW1hc2sscHJl c2VydmU6dGhpcy5wcmVzZXJ2ZVBhdGhzLHVubGluazp0aGlzLnVubGluayxjd2Q6dGhpcy5jd2Qs bW9kZTplfSl9Y2F0Y2goaSl7cmV0dXJuIGl9fVtSZV0odCxlLGkscixuKXtpZih0aGlzLnByZXNl cnZlUGF0aHN8fGkubGVuZ3RoPT09MClyZXR1cm4gcigpO2xldCBvPWU7Zm9yKGxldCBoIG9mIGkp e289Ui5yZXNvbHZlKG8saCk7bGV0W2EsbF09eWUoKCk9Pm0ubHN0YXRTeW5jKG8pKTtpZihhKXJl dHVybiByKCk7aWYobC5pc1N5bWJvbGljTGluaygpKXJldHVybiBuKG5ldyBTdChvLFIucmVzb2x2 ZShlLGkuam9pbigiLyIpKSkpfXIoKX1bZ2ldKHQsZSxpLHIpe2xldCBuPWAke2l9U3luY2A7dHJ5 e21bbl0oZSxTdHJpbmcodC5hYnNvbHV0ZSkpLHIoKSx0LnJlc3VtZSgpfWNhdGNoKG8pe3JldHVy biB0aGlzW09dKG8sdCl9fX07dmFyIEVvPXM9PntsZXQgdD1uZXcgeGUocyksZT1zLmZpbGUsaT1C ci5zdGF0U3luYyhlKSxyPXMubWF4UmVhZFNpemV8fDE2KjEwMjQqMTAyNDtuZXcgQmUoZSx7cmVh ZFNpemU6cixzaXplOmkuc2l6ZX0pLnBpcGUodCl9LHdvPShzLHQpPT57bGV0IGU9bmV3IFh0KHMp LGk9cy5tYXhSZWFkU2l6ZXx8MTYqMTAyNCoxMDI0LHI9cy5maWxlO3JldHVybiBuZXcgUHJvbWlz ZSgobyxoKT0+e2Uub24oImVycm9yIixoKSxlLm9uKCJjbG9zZSIsbyksQnIuc3RhdChyLChhLGwp PT57aWYoYSloKGEpO2Vsc2V7bGV0IGM9bmV3IF90KHIse3JlYWRTaXplOmksc2l6ZTpsLnNpemV9 KTtjLm9uKCJlcnJvciIsaCksYy5waXBlKGUpfX0pfSl9LFNvPUsoRW8sd28scz0+bmV3IHhlKHMp LHM9Pm5ldyBYdChzKSwocyx0KT0+e3Q/Lmxlbmd0aCYmUWkocyx0KX0pO2ltcG9ydCB2IGZyb20i bm9kZTpmcyI7aW1wb3J0IFByIGZyb20ibm9kZTpwYXRoIjt2YXIgeW89KHMsdCk9PntsZXQgZT1u ZXcga3QocyksaT0hMCxyLG47dHJ5e3RyeXtyPXYub3BlblN5bmMocy5maWxlLCJyKyIpfWNhdGNo KGEpe2lmKGE/LmNvZGU9PT0iRU5PRU5UIilyPXYub3BlblN5bmMocy5maWxlLCJ3KyIpO2Vsc2Ug dGhyb3cgYX1sZXQgbz12LmZzdGF0U3luYyhyKSxoPUJ1ZmZlci5hbGxvYyg1MTIpO3Q6Zm9yKG49 MDtuPG8uc2l6ZTtuKz01MTIpe2ZvcihsZXQgYz0wLGQ9MDtjPDUxMjtjKz1kKXtpZihkPXYucmVh ZFN5bmMocixoLGMsaC5sZW5ndGgtYyxuK2MpLG49PT0wJiZoWzBdPT09MzEmJmhbMV09PT0xMzkp dGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgYXBwZW5kIHRvIGNvbXByZXNzZWQgYXJjaGl2ZXMiKTtp ZighZClicmVhayB0fWxldCBhPW5ldyBGKGgpO2lmKCFhLmNrc3VtVmFsaWQpYnJlYWs7bGV0IGw9 NTEyKk1hdGguY2VpbCgoYS5zaXplfHwwKS81MTIpO2lmKG4rbCs1MTI+by5zaXplKWJyZWFrO24r PWwscy5tdGltZUNhY2hlJiZhLm10aW1lJiZzLm10aW1lQ2FjaGUuc2V0KFN0cmluZyhhLnBhdGgp LGEubXRpbWUpfWk9ITEsUm8ocyxlLG4scix0KX1maW5hbGx5e2lmKGkpdHJ5e3YuY2xvc2VTeW5j KHIpfWNhdGNoe319fSxSbz0ocyx0LGUsaSxyKT0+e2xldCBuPW5ldyBXdChzLmZpbGUse2ZkOmks c3RhcnQ6ZX0pO3QucGlwZShuKSxibyh0LHIpfSxnbz0ocyx0KT0+e3Q9QXJyYXkuZnJvbSh0KTts ZXQgZT1uZXcgd3QocyksaT0obixvLGgpPT57bGV0IGE9KFQsRCk9PntUP3YuY2xvc2UobixFPT5o KFQpKTpoKG51bGwsRCl9LGw9MDtpZihvPT09MClyZXR1cm4gYShudWxsLDApO2xldCBjPTAsZD1C dWZmZXIuYWxsb2MoNTEyKSxTPShULEQpPT57aWYoVHx8RD09PXZvaWQgMClyZXR1cm4gYShUKTtp ZihjKz1ELGM8NTEyJiZEKXJldHVybiB2LnJlYWQobixkLGMsZC5sZW5ndGgtYyxsK2MsUyk7aWYo bD09PTAmJmRbMF09PT0zMSYmZFsxXT09PTEzOSlyZXR1cm4gYShuZXcgRXJyb3IoImNhbm5vdCBh cHBlbmQgdG8gY29tcHJlc3NlZCBhcmNoaXZlcyIpKTtpZihjPDUxMilyZXR1cm4gYShudWxsLGwp O2xldCBFPW5ldyBGKGQpO2lmKCFFLmNrc3VtVmFsaWQpcmV0dXJuIGEobnVsbCxsKTtsZXQgeD01 MTIqTWF0aC5jZWlsKChFLnNpemU/PzApLzUxMik7aWYobCt4KzUxMj5vfHwobCs9eCs1MTIsbD49 bykpcmV0dXJuIGEobnVsbCxsKTtzLm10aW1lQ2FjaGUmJkUubXRpbWUmJnMubXRpbWVDYWNoZS5z ZXQoU3RyaW5nKEUucGF0aCksRS5tdGltZSksYz0wLHYucmVhZChuLGQsMCw1MTIsbCxTKX07di5y ZWFkKG4sZCwwLDUxMixsLFMpfTtyZXR1cm4gbmV3IFByb21pc2UoKG4sbyk9PntlLm9uKCJlcnJv ciIsbyk7bGV0IGg9InIrIixhPShsLGMpPT57aWYobCYmbC5jb2RlPT09IkVOT0VOVCImJmg9PT0i cisiKXJldHVybiBoPSJ3KyIsdi5vcGVuKHMuZmlsZSxoLGEpO2lmKGx8fCFjKXJldHVybiBvKGwp O3YuZnN0YXQoYywoZCxTKT0+e2lmKGQpcmV0dXJuIHYuY2xvc2UoYywoKT0+byhkKSk7aShjLFMu c2l6ZSwoVCxEKT0+e2lmKFQpcmV0dXJuIG8oVCk7bGV0IEU9bmV3IGV0KHMuZmlsZSx7ZmQ6Yyxz dGFydDpEfSk7ZS5waXBlKEUpLEUub24oImVycm9yIixvKSxFLm9uKCJjbG9zZSIsbiksX28oZSx0 KX0pfSl9O3Yub3BlbihzLmZpbGUsaCxhKX0pfSxibz0ocyx0KT0+e3QuZm9yRWFjaChlPT57ZS5j aGFyQXQoMCk9PT0iQCI/Q3Qoe2ZpbGU6UHIucmVzb2x2ZShzLmN3ZCxlLnNsaWNlKDEpKSxzeW5j OiEwLG5vUmVzdW1lOiEwLG9uUmVhZEVudHJ5Omk9PnMuYWRkKGkpfSk6cy5hZGQoZSl9KSxzLmVu ZCgpfSxfbz1hc3luYyhzLHQpPT57Zm9yKGxldCBlIG9mIHQpZS5jaGFyQXQoMCk9PT0iQCI/YXdh aXQgQ3Qoe2ZpbGU6UHIucmVzb2x2ZShTdHJpbmcocy5jd2QpLGUuc2xpY2UoMSkpLG5vUmVzdW1l OiEwLG9uUmVhZEVudHJ5Omk9PnMuYWRkKGkpfSk6cy5hZGQoZSk7cy5lbmQoKX0sdnQ9Syh5byxn bywoKT0+e3Rocm93IG5ldyBUeXBlRXJyb3IoImZpbGUgaXMgcmVxdWlyZWQiKX0sKCk9Pnt0aHJv dyBuZXcgVHlwZUVycm9yKCJmaWxlIGlzIHJlcXVpcmVkIil9LChzLHQpPT57aWYoIUJzKHMpKXRo cm93IG5ldyBUeXBlRXJyb3IoImZpbGUgaXMgcmVxdWlyZWQiKTtpZihzLmd6aXB8fHMuYnJvdGxp fHxzLnpzdGR8fHMuZmlsZS5lbmRzV2l0aCgiLmJyIil8fHMuZmlsZS5lbmRzV2l0aCgiLnRiciIp KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbm5vdCBhcHBlbmQgdG8gY29tcHJlc3NlZCBhcmNoaXZl cyIpO2lmKCF0Py5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigibm8gcGF0aHMgc3BlY2lmaWVk IHRvIGFkZC9yZXBsYWNlIil9KTt2YXIgT289Syh2dC5zeW5jRmlsZSx2dC5hc3luY0ZpbGUsdnQu c3luY05vRmlsZSx2dC5hc3luY05vRmlsZSwocyx0PVtdKT0+e3Z0LnZhbGlkYXRlPy4ocyx0KSxU byhzKX0pLFRvPXM9PntsZXQgdD1zLmZpbHRlcjtzLm10aW1lQ2FjaGV8fChzLm10aW1lQ2FjaGU9 bmV3IE1hcCkscy5maWx0ZXI9dD8oZSxpKT0+dChlLGkpJiYhKChzLm10aW1lQ2FjaGU/LmdldChl KT8/aS5tdGltZT8/MCk+KGkubXRpbWU/PzApKTooZSxpKT0+ISgocy5tdGltZUNhY2hlPy5nZXQo ZSk/P2kubXRpbWU/PzApPihpLm10aW1lPz8wKSl9O2V4cG9ydHtGIGFzIEhlYWRlcix3dCBhcyBQ YWNrLHBpIGFzIFBhY2tKb2Isa3QgYXMgUGFja1N5bmMscnQgYXMgUGFyc2VyLGZ0IGFzIFBheCwk ZSBhcyBSZWFkRW50cnksWHQgYXMgVW5wYWNrLHhlIGFzIFVucGFja1N5bmMsZGUgYXMgV3JpdGVF bnRyeSxuaSBhcyBXcml0ZUVudHJ5U3luYyxvaSBhcyBXcml0ZUVudHJ5VGFyLFFuIGFzIGMsUW4g YXMgY3JlYXRlLFNvIGFzIGV4dHJhY3QsUWkgYXMgZmlsZXNGaWx0ZXIsQ3QgYXMgbGlzdCx2dCBh cyByLHZ0IGFzIHJlcGxhY2UsQ3QgYXMgdCxIaSBhcyB0eXBlcyxPbyBhcyB1LE9vIGFzIHVwZGF0 ZSxTbyBhcyB4fTsKKyAvLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5taW4uanMubWFwCitkaWZm IC0tZ2l0IGEvZGVwcy9ucG0vbm9kZV9tb2R1bGVzL3Rhci9kaXN0L2VzbS9wYXJzZS5qcyBiL2Rl cHMvbnBtL25vZGVfbW9kdWxlcy90YXIvZGlzdC9lc20vcGFyc2UuanMKK2luZGV4IGRhNTJjZDg1 Li4yNjlhYzk1MiAxMDA2NDQKKy0tLSBhL2RlcHMvbnBtL25vZGVfbW9kdWxlcy90YXIvZGlzdC9l c20vcGFyc2UuanMKKysrKyBiL2RlcHMvbnBtL25vZGVfbW9kdWxlcy90YXIvZGlzdC9lc20vcGFy c2UuanMKK0BAIC0yMiw3ICsyMiw3IEBAIGltcG9ydCB7IEJyb3RsaURlY29tcHJlc3MsIFVuemlw LCBac3RkRGVjb21wcmVzcyB9IGZyb20gJ21pbml6bGliJzsKKyBpbXBvcnQgeyBIZWFkZXIgfSBm cm9tICcuL2hlYWRlci5qcyc7CisgaW1wb3J0IHsgUGF4IH0gZnJvbSAnLi9wYXguanMnOworIGlt cG9ydCB7IFJlYWRFbnRyeSB9IGZyb20gJy4vcmVhZC1lbnRyeS5qcyc7CistaW1wb3J0IHsgd2Fy bk1ldGhvZCwgfSBmcm9tICcuL3dhcm4tbWV0aG9kLmpzJzsKKytpbXBvcnQgeyB3YXJuTWV0aG9k IH0gZnJvbSAnLi93YXJuLW1ldGhvZC5qcyc7CisgY29uc3QgbWF4TWV0YUVudHJ5U2l6ZSA9IDEw MjQgKiAxMDI0OworIGNvbnN0IGd6aXBIZWFkZXIgPSBCdWZmZXIuZnJvbShbMHgxZiwgMHg4Yl0p OworIGNvbnN0IHpzdGRIZWFkZXIgPSBCdWZmZXIuZnJvbShbMHgyOCwgMHhiNSwgMHgyZiwgMHhm ZF0pOworQEAgLTU3LDYgKzU3LDEwIEBAIGNvbnN0IFNBV19WQUxJRF9FTlRSWSA9IFN5bWJvbCgn c2F3VmFsaWRFbnRyeScpOworIGNvbnN0IFNBV19OVUxMX0JMT0NLID0gU3ltYm9sKCdzYXdOdWxs QmxvY2snKTsKKyBjb25zdCBTQVdfRU9GID0gU3ltYm9sKCdzYXdFT0YnKTsKKyBjb25zdCBDTE9T RVNUUkVBTSA9IFN5bWJvbCgnY2xvc2VTdHJlYW0nKTsKKytjb25zdCBNQVhfREVDT01QUkVTU0lP Tl9SQVRJTyA9IDEwMDA7CisrY29uc3QgQ09NUFJFU1NFREJZVEVTUkVBRCA9IFN5bWJvbCgnY29t cHJlc3NlZEJ5dGVzUmVhZCcpOworK2NvbnN0IERFQ09NUFJFU1NFREJZVEVTUkVBRCA9IFN5bWJv bCgnZGVjb21wcmVzc2VkQnl0ZXNSZWFkJyk7CisrY29uc3QgQ0hFQ0tERUNPTVBSRVNTSU9OUkFU SU8gPSBTeW1ib2woJ2NoZWNrRGVjb21wcmVzc2lvblJhdGlvJyk7CisgY29uc3Qgbm9vcCA9ICgp ID0+IHRydWU7CisgZXhwb3J0IGNsYXNzIFBhcnNlciBleHRlbmRzIEVFIHsKKyAgICAgZmlsZTsK K0BAIC02NSw2ICs2OSw3IEBAIGV4cG9ydCBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBFRSB7CisgICAg IGZpbHRlcjsKKyAgICAgYnJvdGxpOworICAgICB6c3RkOworKyAgICBtYXhEZWNvbXByZXNzaW9u UmF0aW87CisgICAgIHdyaXRhYmxlID0gdHJ1ZTsKKyAgICAgcmVhZGFibGUgPSBmYWxzZTsKKyAg ICAgW1FVRVVFXSA9IFtdOworQEAgLTg0LDEzICs4OSwxNCBAQCBleHBvcnQgY2xhc3MgUGFyc2Vy IGV4dGVuZHMgRUUgeworICAgICBbV1JJVElOR10gPSBmYWxzZTsKKyAgICAgW0NPTlNVTUlOR10g PSBmYWxzZTsKKyAgICAgW0VNSVRURURFTkRdID0gZmFsc2U7CisrICAgIFtDT01QUkVTU0VEQllU RVNSRUFEXSA9IDA7CisrICAgIFtERUNPTVBSRVNTRURCWVRFU1JFQURdID0gMDsKKyAgICAgY29u c3RydWN0b3Iob3B0ID0ge30pIHsKKyAgICAgICAgIHN1cGVyKCk7CisgICAgICAgICB0aGlzLmZp bGUgPSBvcHQuZmlsZSB8fCAnJzsKKyAgICAgICAgIC8vIHRoZXNlIEJBREFSQ0hJVkUgZXJyb3Jz IGNhbid0IGJlIGRldGVjdGVkIGVhcmx5LiBsaXN0ZW4gb24gRE9ORS4KKyAgICAgICAgIHRoaXMu b24oRE9ORSwgKCkgPT4geworLSAgICAgICAgICAgIGlmICh0aGlzW1NUQVRFXSA9PT0gJ2JlZ2lu JyB8fAorLSAgICAgICAgICAgICAgICB0aGlzW1NBV19WQUxJRF9FTlRSWV0gPT09IGZhbHNlKSB7 CisrICAgICAgICAgICAgaWYgKHRoaXNbU1RBVEVdID09PSAnYmVnaW4nIHx8IHRoaXNbU0FXX1ZB TElEX0VOVFJZXSA9PT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgLy8gZWl0aGVyIGxlc3Mg dGhhbiAxIGJsb2NrIG9mIGRhdGEsIG9yIGFsbCBlbnRyaWVzIHdlcmUgaW52YWxpZC4KKyAgICAg ICAgICAgICAgICAgLy8gRWl0aGVyIHdheSwgcHJvYmFibHkgbm90IGV2ZW4gYSB0YXJiYWxsLgor ICAgICAgICAgICAgICAgICB0aGlzLndhcm4oJ1RBUl9CQURfQVJDSElWRScsICdVbnJlY29nbml6 ZWQgYXJjaGl2ZSBmb3JtYXQnKTsKK0BAIC0xMDcsNiArMTEzLDEwIEBAIGV4cG9ydCBjbGFzcyBQ YXJzZXIgZXh0ZW5kcyBFRSB7CisgICAgICAgICAgICAgfSk7CisgICAgICAgICB9CisgICAgICAg ICB0aGlzLnN0cmljdCA9ICEhb3B0LnN0cmljdDsKKysgICAgICAgIHRoaXMubWF4RGVjb21wcmVz c2lvblJhdGlvID0KKysgICAgICAgICAgICB0eXBlb2Ygb3B0Lm1heERlY29tcHJlc3Npb25SYXRp byA9PT0gJ251bWJlcicgPworKyAgICAgICAgICAgICAgICBvcHQubWF4RGVjb21wcmVzc2lvblJh dGlvCisrICAgICAgICAgICAgICAgIDogTUFYX0RFQ09NUFJFU1NJT05fUkFUSU87CisgICAgICAg ICB0aGlzLm1heE1ldGFFbnRyeVNpemUgPSBvcHQubWF4TWV0YUVudHJ5U2l6ZSB8fCBtYXhNZXRh RW50cnlTaXplOworICAgICAgICAgdGhpcy5maWx0ZXIgPSB0eXBlb2Ygb3B0LmZpbHRlciA9PT0g J2Z1bmN0aW9uJyA/IG9wdC5maWx0ZXIgOiBub29wOworICAgICAgICAgLy8gVW5saWtlIGd6aXAs IGJyb3RsaSBkb2Vzbid0IGhhdmUgYW55IG1hZ2ljIGJ5dGVzIHRvIGlkZW50aWZ5IGl0CitAQCAt MjIwLDggKzIzMCw3IEBAIGV4cG9ydCBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBFRSB7CisgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzW0VYXSA9IHVuZGVmaW5lZDsKKy0gICAgICAgICAgICAgICAgICAg ICAgICBlbnRyeS5pZ25vcmUgPQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5p Z25vcmUgfHwgIXRoaXMuZmlsdGVyKGVudHJ5LnBhdGgsIGVudHJ5KTsKKysgICAgICAgICAgICAg ICAgICAgICAgICBlbnRyeS5pZ25vcmUgPSBlbnRyeS5pZ25vcmUgfHwgIXRoaXMuZmlsdGVyKGVu dHJ5LnBhdGgsIGVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuaWdu b3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2JhYmx5IHZhbGlkLCBq dXN0IG5vdCBzb21ldGhpbmcgd2UgY2FyZSBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGlzW0VNSVRdKCdpZ25vcmVkRW50cnknLCBlbnRyeSk7CitAQCAtMjc0LDcgKzI4Myw3 IEBAIGV4cG9ydCBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBFRSB7CisgICAgIH0KKyAgICAgW05FWFRF TlRSWV0oKSB7CisgICAgICAgICBkbyB7IH0gd2hpbGUgKHRoaXNbUFJPQ0VTU0VOVFJZXSh0aGlz W1FVRVVFXS5zaGlmdCgpKSk7CistICAgICAgICBpZiAoIXRoaXNbUVVFVUVdLmxlbmd0aCkgewor KyAgICAgICAgaWYgKHRoaXNbUVVFVUVdLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgIC8v IEF0IHRoaXMgcG9pbnQsIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgcXVldWUsIGJ1dCB3ZSBtYXkg aGF2ZSBhbgorICAgICAgICAgICAgIC8vIGVudHJ5IHdoaWNoIGlzIGJlaW5nIGNvbnN1bWVkIChy ZWFkRW50cnkpLgorICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0LCB0aGVuIHdlIGRlZmluaXRl bHkgY2FuIGhhbmRsZSBtb3JlIGRhdGEuCitAQCAtMzI0LDcgKzMzMyw3IEBAIGV4cG9ydCBjbGFz cyBQYXJzZXIgZXh0ZW5kcyBFRSB7CisgICAgICAgICByZXR1cm4gcmV0OworICAgICB9CisgICAg IFtFTUlUXShldiwgZGF0YSwgZXh0cmEpIHsKKy0gICAgICAgIGlmICghdGhpc1tRVUVVRV0ubGVu Z3RoICYmICF0aGlzW1JFQURFTlRSWV0pIHsKKysgICAgICAgIGlmICh0aGlzW1FVRVVFXS5sZW5n dGggPT09IDAgJiYgIXRoaXNbUkVBREVOVFJZXSkgeworICAgICAgICAgICAgIHRoaXMuZW1pdChl diwgZGF0YSwgZXh0cmEpOworICAgICAgICAgfQorICAgICAgICAgZWxzZSB7CitAQCAtMzYxLDE4 ICszNzAsMzAgQEAgZXhwb3J0IGNsYXNzIFBhcnNlciBleHRlbmRzIEVFIHsKKyAgICAgICAgIH0K KyAgICAgfQorICAgICBhYm9ydChlcnJvcikgeworKyAgICAgICAgaWYgKHRoaXNbQUJPUlRFRF0p IHsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisgICAgICAgICB0aGlzW0FCT1JU RURdID0gdHJ1ZTsKKyAgICAgICAgIHRoaXMuZW1pdCgnYWJvcnQnLCBlcnJvcik7CisgICAgICAg ICAvLyBhbHdheXMgdGhyb3dzLCBldmVuIGluIG5vbi1zdHJpY3QgbW9kZQorICAgICAgICAgdGhp cy53YXJuKCdUQVJfQUJPUlQnLCBlcnJvciwgeyByZWNvdmVyYWJsZTogZmFsc2UgfSk7CisgICAg IH0KKysgICAgW0NIRUNLREVDT01QUkVTU0lPTlJBVElPXShjaHVuaykgeworKyAgICAgICAgdGhp c1tERUNPTVBSRVNTRURCWVRFU1JFQURdICs9IGNodW5rLmxlbmd0aDsKKysgICAgICAgIGNvbnN0 IHJhdGlvID0gdGhpc1tERUNPTVBSRVNTRURCWVRFU1JFQURdIC8gdGhpc1tDT01QUkVTU0VEQllU RVNSRUFEXTsKKysgICAgICAgIGlmIChyYXRpbyA+IHRoaXMubWF4RGVjb21wcmVzc2lvblJhdGlv KSB7CisrICAgICAgICAgICAgdGhpcy5hYm9ydChuZXcgRXJyb3IoYG1heCBkZWNvbXByZXNzaW9u IHJhdGlvIGV4Y2VlZGVkOiAke3JhdGlvLnRvRml4ZWQoMil9ID4gJHt0aGlzLm1heERlY29tcHJl c3Npb25SYXRpb31gKSk7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQor KyAgICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKyAgICAgd3JpdGUoY2h1bmssIGVuY29kaW5n LCBjYikgeworICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykgewor ICAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7CisgICAgICAgICAgICAgZW5jb2RpbmcgPSB1bmRl ZmluZWQ7CisgICAgICAgICB9CisgICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5n JykgeworLSAgICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssCisrICAgICAgICAg ICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgCisgICAgICAgICAgICAgLyogYzggaWdub3Jl IG5leHQgKi8KKyAgICAgICAgICAgICB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnID8gZW5j b2RpbmcgOiAndXRmOCcpOworICAgICAgICAgfQorQEAgLTQ0OSwxMyArNDcwLDIyIEBAIGV4cG9y dCBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBFRSB7CisgICAgICAgICAgICAgICAgICAgICB0aGlzW1VO WklQXSA9PT0gdW5kZWZpbmVkID8gbmV3IFVuemlwKHt9KQorICAgICAgICAgICAgICAgICAgICAg ICAgIDogaXNac3RkID8gbmV3IFpzdGREZWNvbXByZXNzKHt9KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IG5ldyBCcm90bGlEZWNvbXByZXNzKHt9KTsKKy0gICAgICAgICAgICAgICAg dGhpc1tVTlpJUF0ub24oJ2RhdGEnLCBjaHVuayA9PiB0aGlzW0NPTlNVTUVDSFVOS10oY2h1bmsp KTsKKy0gICAgICAgICAgICAgICAgdGhpc1tVTlpJUF0ub24oJ2Vycm9yJywgZXIgPT4gdGhpcy5h Ym9ydChlcikpOworKyAgICAgICAgICAgICAgICB0aGlzW1VOWklQXS5vbignZGF0YScsIGNodW5r ID0+IHsKKysgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzW0NIRUNLREVDT01QUkVTU0lPTlJB VElPXShjaHVuaykpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW0NPTlNVTUVDSFVO S10oY2h1bmspOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9KTsK KysgICAgICAgICAgICAgICAgdGhpc1tVTlpJUF0ub24oJ2Vycm9yJywgZXIgPT4geworKyAgICAg ICAgICAgICAgICAgICAgaWYgKCF0aGlzW0FCT1JURURdKSB7CisrICAgICAgICAgICAgICAgICAg ICAgICAgdGhpcy5hYm9ydChlcik7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg ICAgICAgIH0pOworICAgICAgICAgICAgICAgICB0aGlzW1VOWklQXS5vbignZW5kJywgKCkgPT4g eworICAgICAgICAgICAgICAgICAgICAgdGhpc1tFTkRFRF0gPSB0cnVlOworICAgICAgICAgICAg ICAgICAgICAgdGhpc1tDT05TVU1FQ0hVTktdKCk7CisgICAgICAgICAgICAgICAgIH0pOworICAg ICAgICAgICAgICAgICB0aGlzW1dSSVRJTkddID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgdGhp c1tDT01QUkVTU0VEQllURVNSRUFEXSArPSBjaHVuay5sZW5ndGg7CisgICAgICAgICAgICAgICAg IGNvbnN0IHJldCA9ICEhdGhpc1tVTlpJUF1bZW5kZWQgPyAnZW5kJyA6ICd3cml0ZSddKGNodW5r KTsKKyAgICAgICAgICAgICAgICAgdGhpc1tXUklUSU5HXSA9IGZhbHNlOworICAgICAgICAgICAg ICAgICBjYj8uKCk7CitAQCAtNDY0LDYgKzQ5NCw3IEBAIGV4cG9ydCBjbGFzcyBQYXJzZXIgZXh0 ZW5kcyBFRSB7CisgICAgICAgICB9CisgICAgICAgICB0aGlzW1dSSVRJTkddID0gdHJ1ZTsKKyAg ICAgICAgIGlmICh0aGlzW1VOWklQXSkgeworKyAgICAgICAgICAgIHRoaXNbQ09NUFJFU1NFREJZ VEVTUkVBRF0gKz0gY2h1bmsubGVuZ3RoOworICAgICAgICAgICAgIHRoaXNbVU5aSVBdLndyaXRl KGNodW5rKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UgeworQEAgLTQ3MSwxMSArNTAyLDEx IEBAIGV4cG9ydCBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBFRSB7CisgICAgICAgICB9CisgICAgICAg ICB0aGlzW1dSSVRJTkddID0gZmFsc2U7CisgICAgICAgICAvLyByZXR1cm4gZmFsc2UgaWYgdGhl cmUncyBhIHF1ZXVlLCBvciBpZiB0aGUgY3VycmVudCBlbnRyeSBpc24ndCBmbG93aW5nCistICAg ICAgICBjb25zdCByZXQgPSB0aGlzW1FVRVVFXS5sZW5ndGggPyBmYWxzZQorKyAgICAgICAgY29u c3QgcmV0ID0gdGhpc1tRVUVVRV0ubGVuZ3RoID4gMCA/IGZhbHNlCisgICAgICAgICAgICAgOiB0 aGlzW1JFQURFTlRSWV0gPyB0aGlzW1JFQURFTlRSWV0uZmxvd2luZworICAgICAgICAgICAgICAg ICA6IHRydWU7CisgICAgICAgICAvLyBpZiB3ZSBoYXZlIG5vIHF1ZXVlLCB0aGVuIHRoYXQgbWVh bnMgYSBjbG9nZ2VkIFJFQURFTlRSWQorLSAgICAgICAgaWYgKCFyZXQgJiYgIXRoaXNbUVVFVUVd Lmxlbmd0aCkgeworKyAgICAgICAgaWYgKCFyZXQgJiYgdGhpc1tRVUVVRV0ubGVuZ3RoID09PSAw KSB7CisgICAgICAgICAgICAgdGhpc1tSRUFERU5UUlldPy5vbmNlKCdkcmFpbicsICgpID0+IHRo aXMuZW1pdCgnZHJhaW4nKSk7CisgICAgICAgICB9CisgICAgICAgICAvKiBjOCBpZ25vcmUgbmV4 dCAqLworQEAgLTQ4NCw4ICs1MTUsNyBAQCBleHBvcnQgY2xhc3MgUGFyc2VyIGV4dGVuZHMgRUUg eworICAgICB9CisgICAgIFtCVUZGRVJDT05DQVRdKGMpIHsKKyAgICAgICAgIGlmIChjICYmICF0 aGlzW0FCT1JURURdKSB7CistICAgICAgICAgICAgdGhpc1tCVUZGRVJdID0KKy0gICAgICAgICAg ICAgICAgdGhpc1tCVUZGRVJdID8gQnVmZmVyLmNvbmNhdChbdGhpc1tCVUZGRVJdLCBjXSkgOiBj OworKyAgICAgICAgICAgIHRoaXNbQlVGRkVSXSA9IHRoaXNbQlVGRkVSXSA/IEJ1ZmZlci5jb25j YXQoW3RoaXNbQlVGRkVSXSwgY10pIDogYzsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBbTUFZ QkVFTkRdKCkgeworQEAgLTQ5NSw3ICs1MjUsNyBAQCBleHBvcnQgY2xhc3MgUGFyc2VyIGV4dGVu ZHMgRUUgeworICAgICAgICAgICAgICF0aGlzW0NPTlNVTUlOR10pIHsKKyAgICAgICAgICAgICB0 aGlzW0VNSVRURURFTkRdID0gdHJ1ZTsKKyAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXNb V1JJVEVFTlRSWV07CistICAgICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmJsb2NrUmVtYWlu KSB7CisrICAgICAgICAgICAgaWYgKGVudHJ5Py5ibG9ja1JlbWFpbikgeworICAgICAgICAgICAg ICAgICAvLyB0cnVuY2F0ZWQsIGxpa2VseSBhIGRhbWFnZWQgZmlsZQorICAgICAgICAgICAgICAg ICBjb25zdCBoYXZlID0gdGhpc1tCVUZGRVJdID8gdGhpc1tCVUZGRVJdLmxlbmd0aCA6IDA7Cisg ICAgICAgICAgICAgICAgIHRoaXMud2FybignVEFSX0JBRF9BUkNISVZFJywgYFRydW5jYXRlZCBp bnB1dCAobmVlZGVkICR7ZW50cnkuYmxvY2tSZW1haW59IG1vcmUgYnl0ZXMsIG9ubHkgJHtoYXZl fSBhdmFpbGFibGUpYCwgeyBlbnRyeSB9KTsKK0BAIC01NDQsOSArNTc0LDcgQEAgZXhwb3J0IGNs YXNzIFBhcnNlciBleHRlbmRzIEVFIHsKKyAgICAgICAgIC8vIHRoZSBidWZmZXIuICBBZHZhbmNl IHRoZSBwb3NpdGlvbiBhbmQgcHV0IGFueSByZW1haW5kZXIgaW4gdGhlIGJ1ZmZlci4KKyAgICAg ICAgIGxldCBwb3NpdGlvbiA9IDA7CisgICAgICAgICBjb25zdCBsZW5ndGggPSBjaHVuay5sZW5n dGg7CistICAgICAgICB3aGlsZSAocG9zaXRpb24gKyA1MTIgPD0gbGVuZ3RoICYmCistICAgICAg ICAgICAgIXRoaXNbQUJPUlRFRF0gJiYKKy0gICAgICAgICAgICAhdGhpc1tTQVdfRU9GXSkgewor KyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICsgNTEyIDw9IGxlbmd0aCAmJiAhdGhpc1tBQk9SVEVE XSAmJiAhdGhpc1tTQVdfRU9GXSkgeworICAgICAgICAgICAgIHN3aXRjaCAodGhpc1tTVEFURV0p IHsKKyAgICAgICAgICAgICAgICAgY2FzZSAnYmVnaW4nOgorICAgICAgICAgICAgICAgICBjYXNl ICdoZWFkZXInOgorQEAgLTU2NywxNSArNTk1LDEwIEBAIGV4cG9ydCBjbGFzcyBQYXJzZXIgZXh0 ZW5kcyBFRSB7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgaWYgKHBvc2l0 aW9uIDwgbGVuZ3RoKSB7CistICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSXSkgeworLSAgICAg ICAgICAgICAgICB0aGlzW0JVRkZFUl0gPSBCdWZmZXIuY29uY2F0KFsKKy0gICAgICAgICAgICAg ICAgICAgIGNodW5rLnN1YmFycmF5KHBvc2l0aW9uKSwKKy0gICAgICAgICAgICAgICAgICAgIHRo aXNbQlVGRkVSXSwKKy0gICAgICAgICAgICAgICAgXSk7CistICAgICAgICAgICAgfQorLSAgICAg ICAgICAgIGVsc2UgeworLSAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl0gPSBjaHVuay5zdWJh cnJheShwb3NpdGlvbik7CistICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHRoaXNbQlVGRkVS XSA9CisrICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSXSA/CisrICAgICAgICAgICAgICAgICAg ICBCdWZmZXIuY29uY2F0KFtjaHVuay5zdWJhcnJheShwb3NpdGlvbiksIHRoaXNbQlVGRkVSXV0p CisrICAgICAgICAgICAgICAgICAgICA6IGNodW5rLnN1YmFycmF5KHBvc2l0aW9uKTsKKyAgICAg ICAgIH0KKyAgICAgfQorICAgICBlbmQoY2h1bmssIGVuY29kaW5nLCBjYikgeworQEAgLTU5Niw4 ICs2MTksMTAgQEAgZXhwb3J0IGNsYXNzIFBhcnNlciBleHRlbmRzIEVFIHsKKyAgICAgICAgIGlm ICghdGhpc1tBQk9SVEVEXSkgeworICAgICAgICAgICAgIGlmICh0aGlzW1VOWklQXSkgeworICAg ICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi8KKy0gICAgICAgICAgICAgICAgaWYg KGNodW5rKQorKyAgICAgICAgICAgICAgICBpZiAoY2h1bmspIHsKKysgICAgICAgICAgICAgICAg ICAgIHRoaXNbQ09NUFJFU1NFREJZVEVTUkVBRF0gKz0gY2h1bmsubGVuZ3RoOworICAgICAgICAg ICAgICAgICAgICAgdGhpc1tVTlpJUF0ud3JpdGUoY2h1bmspOworKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovCisgICAgICAgICAgICAgICAg IHRoaXNbVU5aSVBdLmVuZCgpOworICAgICAgICAgICAgIH0KKwoKZGlmZiAtLWdpdCBhL25vZGVq czIyLnNwZWMgYi9ub2RlanMyMi5zcGVjCmluZGV4IDRiNDJjYTAuLjNjOGEyMjEgMTAwNjQ0Ci0t LSBhL25vZGVqczIyLnNwZWMKKysrIGIvbm9kZWpzMjIuc3BlYwpAQCAtMTY4LDYgKzE2OCw3IEBA IFNvdXJjZTEwMTogICAgICBub2RlanMuc3JwbS5tYWNyb3MKIDAwMDEtUmVtb3ZlLXVudXNlZC1P cGVuU1NMLWNvbmZpZy5wYXRjaAogMDAwMS1maXBzLWRpc2FibGUtb3B0aW9ucy5wYXRjaAogMDAw Mi1DVkUtMjAyNi00MjMzOC1pcC1hZGRyZXNzLXNlY3VyaXR5LWZpeC5wYXRjaAorMDAwMy1DVkUt MjAyNi01OTg3My1DVkUtMjAyNi01OTg3NC11cGdyYWRlLWJ1bmRsZWQtdGFyLXRvLTcuNS4xOS5w YXRjaAogCiAlZGVzY3JpcHRpb24KIE5vZGUuanMgaXMgYSBwbGF0Zm9ybSBidWlsdCBvbiBDaHJv bWUncyBKYXZhU2NyaXB0IHJ1bnRpbWUK