MSBuZXcgY29tbWl0IGluIGdhbGF4eS1jZW50cmFsOgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dh bGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2Q3MDIxZWU5NmE4MC8KQ2hhbmdlc2V0OiAgIGQ3 MDIxZWU5NmE4MApVc2VyOiAgICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0w MS0yMSAyMToyOTozNSswMDowMApTdW1tYXJ5OiAgICAgVUk6IHVwZGF0ZSB0cmFjZWtpdCB0byBs YXRlc3QgKGdpdGh1Yi5jb20vb2NjL1RyYWNlS2l0KQpBZmZlY3RlZCAjOiAgNCBmaWxlcwoKZGlm ZiAtciA1MGRiZWQ5ZjhmNTgzNDgwYzM5NGQ5YzhhMWNhODE1ODU0ODJjMDYzIC1yIGQ3MDIxZWU5 NmE4MDA4NWQ3NjA1YjE2PQo4YzczZGZkOTI5YWQ4NTFkMyBjbGllbnQvR3J1bnRGaWxlLmpzCi0t LSBhL2NsaWVudC9HcnVudEZpbGUuanMKKysrIGIvY2xpZW50L0dydW50RmlsZS5qcwpAQCAtNzAs MTIgKzcwLDEzIEBACiAgICAgICAianF1ZXJ5IjogWyAiZGlzdC9qcXVlcnkuanMiLCAianF1ZXJ5 L2pxdWVyeS5qcyIgXSwKICAgICAgICJqcXVlcnktbWlncmF0ZS1vZmZpY2lhbCI6IFsgImluZGV4 LmpzIiwgImpxdWVyeS9qcXVlcnkubWlncmF0ZS5qcyIgPQpdLAo9MjAKLSAgICAgIC8vIHRoZXNl IG5lZWQgdG8gYmUgdXBkYXRlZCBhbmQgdGVzdGVkCi0gICAgICAvLyJ0cmFjZUtpdCI6IFsgInRy YWNla2l0LmpzIiwgInRyYWNla2l0LmpzIiBdLAorICAgICAgInRyYWNlS2l0IjogWyAidHJhY2Vr aXQuanMiLCAidHJhY2VraXQuanMiIF0sCiAgICAgICAvLyJyYXZlbmpzIjogWyAiZGlzdC9yYXZl bi5qcyIsICJyYXZlbi5qcyIgXSwKLSAgICAgIC8vInJlcXVpcmUiOiBbICJidWlsZC9yZXF1aXJl LmpzIiwgInJlcXVpcmUuanMiIF0sCiAgICAgICAvLyJ1bmRlcnNjb3JlIjogWyAidW5kZXJzY29y ZS5qcyIsICJ1bmRlcnNjb3JlLmpzIiBdLAogICAgICAgLy8iYmFja2JvbmUiOiBbICJiYWNrYm9u ZS5qcyIsICJiYWNrYm9uZS9iYWNrYm9uZS5qcyIgXSwKKworICAgICAgLy8gdGhlc2UgbmVlZCB0 byBiZSB1cGRhdGVkIGFuZCB0ZXN0ZWQKKyAgICAgIC8vInJlcXVpcmUiOiBbICJidWlsZC9yZXF1 aXJlLmpzIiwgInJlcXVpcmUuanMiIF0sCiAgICAgICAvLyJkMyI6IFsgImQzLmpzIiwgImQzLmpz IiBdLAogICAgICAgLy8iZmFyYnRhc3RpYyI6IFsgInNyYy9mYXJidGFzdGljLmpzIiwgImZhcmJ0 YXN0aWMuanMiIF0sCiAgICAgICAvLyJqUVRvdWNoIjogWyAic3JjL3JlZmVyZW5jZS9qcXRvdWNo LmpzIiwgImpxdWVyeS9qcXRvdWNoLmpzIiBdLAoKZGlmZiAtciA1MGRiZWQ5ZjhmNTgzNDgwYzM5 NGQ5YzhhMWNhODE1ODU0ODJjMDYzIC1yIGQ3MDIxZWU5NmE4MDA4NWQ3NjA1YjE2PQo4YzczZGZk OTI5YWQ4NTFkMyBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvbGlicy90cmFjZWtpdC5qcwotLS0gYS9j bGllbnQvZ2FsYXh5L3NjcmlwdHMvbGlicy90cmFjZWtpdC5qcworKysgYi9jbGllbnQvZ2FsYXh5 L3NjcmlwdHMvbGlicy90cmFjZWtpdC5qcwpAQCAtMywxMiArMywzMiBAQAogIE1JVCBsaWNlbnNl CiAqLwo9MjAKLTsoZnVuY3Rpb24od2luZG93LCB1bmRlZmluZWQpIHsKKyhmdW5jdGlvbih3aW5k b3csIHVuZGVmaW5lZCkgewo9MjAKPTIwCiB2YXIgVHJhY2VLaXQgPTNEIHt9OwogdmFyIF9vbGRU cmFjZUtpdCA9M0Qgd2luZG93LlRyYWNlS2l0Owo9MjAKKy8vIGdsb2JhbCByZWZlcmVuY2UgdG8g c2xpY2UKK3ZhciBfc2xpY2UgPTNEIFtdLnNsaWNlOwordmFyIFVOS05PV05fRlVOQ1RJT04gPTNE ICc/JzsKKworCisvKioKKyAqIF9oYXMsIGEgYmV0dGVyIGZvcm0gb2YgaGFzT3duUHJvcGVydHkK KyAqIEV4YW1wbGU6IF9oYXMoTWFpbkhvc3RPYmplY3QsIHByb3BlcnR5KSA9M0Q9M0Q9M0QgdHJ1 ZS9mYWxzZQorICoKKyAqIEBwYXJhbSB7T2JqZWN0fSBob3N0IG9iamVjdCB0byBjaGVjayBwcm9w ZXJ0eQorICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBjaGVjaworICovCitmdW5jdGlvbiBfaGFz KG9iamVjdCwga2V5KSB7CisgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy dHkuY2FsbChvYmplY3QsIGtleSk7Cit9CisKK2Z1bmN0aW9uIF9pc1VuZGVmaW5lZCh3aGF0KSB7 CisgICAgcmV0dXJuIHR5cGVvZiB3aGF0ID0zRD0zRD0zRCAndW5kZWZpbmVkJzsKK30KKwogLyoq CiAgKiBUcmFjZUtpdC5ub0NvbmZsaWN0OiBFeHBvcnQgVHJhY2VLaXQgb3V0IHRvIGFub3RoZXIg dmFyaWFibGUKICAqIEV4YW1wbGU6IHZhciBUSyA9M0QgVHJhY2VLaXQubm9Db25mbGljdCgpCkBA IC0xOSwxNCArMzksMjIgQEAKIH07Cj0yMAogLyoqCi0gKiBUcmFjZUtpdC5faGFzLCBhIGJldHRl ciBmb3JtIG9mIGhhc093blByb3BlcnR5Ci0gKiBFeGFtcGxlOiBUcmFjZUtpdC5faGFzKE1haW5I b3N0T2JqZWN0LCBwcm9wZXJ0eSkgPTNEPTNEPTNEIHRydWUvZmFsc2UKKyAqIFRyYWNlS2l0Lndy YXA6IFdyYXAgYW55IGZ1bmN0aW9uIGluIGEgVHJhY2VLaXQgcmVwb3J0ZXIKKyAqIEV4YW1wbGU6 IGZ1bmMgPTNEIFRyYWNlS2l0LndyYXAoZnVuYyk7CiAgKgotICogQHBhcmFtIHtPYmplY3R9IGhv c3Qgb2JqZWN0IHRvIGNoZWNrIHByb3BlcnR5Ci0gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIGNo ZWNrCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEZ1bmN0aW9uIHRvIGJlIHdyYXBwZWQKKyAq IEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgd3JhcHBlZCBmdW5jCiAgKi8KLVRyYWNlS2l0Ll9oYXMg PTNEIGZ1bmN0aW9uIF9oYXMob2JqZWN0LCBrZXkpIHsKLSAgICByZXR1cm4gT2JqZWN0LnByb3Rv dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTsKK1RyYWNlS2l0LndyYXAgPTNE IGZ1bmN0aW9uIHRyYWNlS2l0V3JhcHBlcihmdW5jKSB7CisgICAgZnVuY3Rpb24gd3JhcHBlZCgp IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFy Z3VtZW50cyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIFRyYWNlS2l0LnJl cG9ydChlKTsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0 dXJuIHdyYXBwZWQ7CiB9Owo9MjAKIC8qKgpAQCAtNzgsNiArMTA2LDcgQEAKICAgICAgKiBAcGFy YW0ge0Z1bmN0aW9ufSBoYW5kbGVyCiAgICAgICovCiAgICAgZnVuY3Rpb24gc3Vic2NyaWJlKGhh bmRsZXIpIHsKKyAgICAgICAgaW5zdGFsbEdsb2JhbEhhbmRsZXIoKTsKICAgICAgICAgaGFuZGxl cnMucHVzaChoYW5kbGVyKTsKICAgICB9Cj0yMApAQCAtMTAzLDkgKzEzMiw5IEBACiAgICAgICAg ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZvciAodmFyIGkgaW4gaGFuZGxlcnMpIHsK LSAgICAgICAgICAgIGlmIChUcmFjZUtpdC5faGFzKGhhbmRsZXJzLCBpKSkgeworICAgICAgICAg ICAgaWYgKF9oYXMoaGFuZGxlcnMsIGkpKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAg ICAgICAgICAgICAgICAgaGFuZGxlcnNbaV0uYXBwbHkobnVsbCwgW3N0YWNrXS5jb25jYXQoQXJy YXkucHJvdG90eXBlPQouc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKSk7CisgICAgICAgICAgICAg ICAgICAgIGhhbmRsZXJzW2ldLmFwcGx5KG51bGwsIFtzdGFja10uY29uY2F0KF9zbGljZS5jYWxs KGFyZz0KdW1lbnRzLCAyKSkpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGlubmVyKSB7CiAg ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiA9M0QgaW5uZXI7CiAgICAgICAgICAgICAgICAg fQpAQCAtMTE3LDcgKzE0Niw3IEBACiAgICAgICAgIH0KICAgICB9Cj0yMAotICAgIHZhciBfb2xk T25lcnJvckhhbmRsZXIgPTNEIHdpbmRvdy5vbmVycm9yOworICAgIHZhciBfb2xkT25lcnJvckhh bmRsZXIsIF9vbkVycm9ySGFuZGxlckluc3RhbGxlZDsKPTIwCiAgICAgLyoqCiAgICAgICogRW5z dXJlcyBhbGwgZ2xvYmFsIHVuaGFuZGxlZCBleGNlcHRpb25zIGFyZSByZWNvcmRlZC4KQEAgLTEy Nyw3ICsxNTYsNyBAQAogICAgICAqIEBwYXJhbSB7KG51bWJlcnxzdHJpbmcpfSBsaW5lTm8gVGhl IGxpbmUgbnVtYmVyIGF0IHdoaWNoIHRoZSBlcnJvcgogICAgICAqIG9jY3VycmVkLgogICAgICAq LwotICAgIHdpbmRvdy5vbmVycm9yID0zRCBmdW5jdGlvbiB0cmFjZUtpdFdpbmRvd09uRXJyb3Io bWVzc2FnZSwgdXJsLCBsaW5lTm89CikgeworICAgIGZ1bmN0aW9uIHRyYWNlS2l0V2luZG93T25F cnJvcihtZXNzYWdlLCB1cmwsIGxpbmVObykgewogICAgICAgICB2YXIgc3RhY2sgPTNEIG51bGw7 Cj0yMAogICAgICAgICBpZiAobGFzdEV4Y2VwdGlvblN0YWNrKSB7CkBAIC0xNTgsMTQgKzE4Nywy NCBAQAogICAgICAgICB9Cj0yMAogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKKyAgICB9 CisKKyAgICBmdW5jdGlvbiBpbnN0YWxsR2xvYmFsSGFuZGxlciAoKQorICAgIHsKKyAgICAgICAg aWYgKF9vbkVycm9ySGFuZGxlckluc3RhbGxlZCA9M0Q9M0Q9M0QgdHJ1ZSkgeworICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIF9vbGRPbmVycm9ySGFuZGxlciA9M0Qgd2lu ZG93Lm9uZXJyb3I7CisgICAgICAgIHdpbmRvdy5vbmVycm9yID0zRCB0cmFjZUtpdFdpbmRvd09u RXJyb3I7CisgICAgICAgIF9vbkVycm9ySGFuZGxlckluc3RhbGxlZCA9M0QgdHJ1ZTsKKyAgICB9 Cj0yMAogICAgIC8qKgogICAgICAqIFJlcG9ydHMgYW4gdW5oYW5kbGVkIEVycm9yIHRvIFRyYWNl S2l0LgogICAgICAqIEBwYXJhbSB7RXJyb3J9IGV4CiAgICAgICovCiAgICAgZnVuY3Rpb24gcmVw b3J0KGV4KSB7Ci0gICAgICAgIHZhciBhcmdzID0zRCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs bChhcmd1bWVudHMsIDEpOworICAgICAgICB2YXIgYXJncyA9M0QgX3NsaWNlLmNhbGwoYXJndW1l bnRzLCAxKTsKICAgICAgICAgaWYgKGxhc3RFeGNlcHRpb25TdGFjaykgewogICAgICAgICAgICAg aWYgKGxhc3RFeGNlcHRpb24gPTNEPTNEPTNEIGV4KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJu OyAvLyBhbHJlYWR5IGNhdWdodCBieSBhbiBpbm5lciBjYXRjaCBibG9jaywgaWdub3JlCkBAIC0y ODMsMjkgKzMyMiwxNiBAQAogICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICB9CiAgICAg ICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgWE1MSHR0cFJlcXVlc3RXcmFwcGVyOworICAgICAg ICAgICAgdmFyIGdldFhIUiA9M0QgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTsK KyAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGV4 cGxpY2l0bHkgYnViYmxlIHVwIHRoZSBleGNlcHRpb24gaWYgbm90IGZvdW5kCisgICAgICAgICAg ICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxI VFRQJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKPTIwCi0gICAgICAgICAg ICBpZiAodHlwZW9mIChYTUxIdHRwUmVxdWVzdCkgPTNEPTNEPTNEICd1bmRlZmluZWQnKSB7IC8v IElFIDUueD0KLTYueDoKLSAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdFdyYXBwZXIgPTNE IGZ1bmN0aW9uIElFWE1MSHR0cFJlcXVlc3RTdWIoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRy eSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01z eG1sMi5YTUxIVFRQLjYuMCcpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQot ICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IG5ldyBBY3RpdmVYT2JqZWN0KCdNc3htbDIuWE1MSFRUUC4zLjAnKTsKLSAgICAgICAgICAgICAg ICAgICAgfSBjYXRjaCAoZSkge30KLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTXN4bWwyLlhNTEhUVFAn KTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KLSAgICAgICAgICAgICAgICAg ICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQWN0aXZlWE9iamVj dCgnTWljcm9zb2Z0LlhNTEhUVFAnKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkg e30KLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBYSFIuJyk7Ci0gICAg ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgWE1M SHR0cFJlcXVlc3RXcmFwcGVyID0zRCBYTUxIdHRwUmVxdWVzdDsKLSAgICAgICAgICAgIH0KLSAg ID0yMAotICAgICAgICAgICAgdmFyIHJlcXVlc3QgPTNEIG5ldyBYTUxIdHRwUmVxdWVzdFdyYXBw ZXIoKTsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0ID0zRCBnZXRYSFIoKTsKICAgICAgICAgICAg IHJlcXVlc3Qub3BlbignR0VUJywgdXJsLCBmYWxzZSk7CiAgICAgICAgICAgICByZXF1ZXN0LnNl bmQoJycpOwogICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QucmVzcG9uc2VUZXh0OwpAQCAtMzIw LDE2ICszNDYsMTQgQEAKICAgICAgKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0gU291cmNlIGNv bnRlbnRzLgogICAgICAqLwogICAgIGZ1bmN0aW9uIGdldFNvdXJjZSh1cmwpIHsKLSAgICAgICAg aWYgKCFUcmFjZUtpdC5faGFzKHNvdXJjZUNhY2hlLCB1cmwpKSB7CisgICAgICAgIGlmICghX2hh cyhzb3VyY2VDYWNoZSwgdXJsKSkgewogICAgICAgICAgICAgLy8gVVJMIG5lZWRzIHRvIGJlIGFi bGUgdG8gZmV0Y2hlZCB3aXRoaW4gdGhlIGFjY2VwdGFibGUgZG9tYWk9Cm4uICBPdGhlcndpc2Us CiAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gZXJyb3JzIHdpbGwgYmUgdHJpZ2dlcmVkLgot ICAgICAgICAgICAgdmFyIHNvdXJjZTsKKyAgICAgICAgICAgIHZhciBzb3VyY2UgPTNEICcnOwog ICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKGRvY3VtZW50LmRvbWFpbikgIT0zRD0zRCAtMSkg ewogICAgICAgICAgICAgICAgIHNvdXJjZSA9M0QgbG9hZFNvdXJjZSh1cmwpOwotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzb3VyY2UgPTNEIFtdOwogICAgICAgICAgICAg fQotICAgICAgICAgICAgc291cmNlQ2FjaGVbdXJsXSA9M0Qgc291cmNlLmxlbmd0aCA/IHNvdXJj ZS5zcGxpdCgnXG4nKSA6IFtdOworICAgICAgICAgICAgc291cmNlQ2FjaGVbdXJsXSA9M0Qgc291 cmNlID8gc291cmNlLnNwbGl0KCdcbicpIDogW107CiAgICAgICAgIH0KPTIwCiAgICAgICAgIHJl dHVybiBzb3VyY2VDYWNoZVt1cmxdOwpAQCAtMzUyLDcgKzM3Niw3IEBACiAgICAgICAgICAgICBt Owo9MjAKICAgICAgICAgaWYgKCFzb3VyY2UubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4g Jz8nOworICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRlVOQ1RJT047CiAgICAgICAgIH0KPTIw CiAgICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGZyb20gdGhlIGZpcnN0IGxpbmUgaW4gdGhlIGZ1 bmN0aW9uIHVudGlsIHdlIGZpbj0KZCB0aGUgbGluZSB3aGljaApAQCAtMzYwLDcgKzM4NCw3IEBA CiAgICAgICAgIGZvciAodmFyIGkgPTNEIDA7IGkgPCBtYXhMaW5lczsgKytpKSB7CiAgICAgICAg ICAgICBsaW5lID0zRCBzb3VyY2VbbGluZU5vIC0gaV0gKyBsaW5lOwo9MjAKLSAgICAgICAgICAg IGlmIChsaW5lICE9M0Q9M0QgdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpZiAoIV9pc1VuZGVm aW5lZChsaW5lKSkgewogICAgICAgICAgICAgICAgIGlmICgobSA9M0QgcmVHdWVzc0Z1bmN0aW9u LmV4ZWMobGluZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdOwogICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoKG0gPTNEIHJlRnVuY3Rpb25BcmdOYW1lcy5leGVjKGxpbmUp KSkgewpAQCAtMzY5LDcgKzM5Myw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KPTIwCi0g ICAgICAgIHJldHVybiAnPyc7CisgICAgICAgIHJldHVybiBVTktOT1dOX0ZVTkNUSU9OOwogICAg IH0KPTIwCiAgICAgLyoqCkBAIC0zOTksNyArNDIzLDcgQEAKICAgICAgICAgbGluZSAtPTNEIDE7 IC8vIGNvbnZlcnQgdG8gMC1iYXNlZCBpbmRleAo9MjAKICAgICAgICAgZm9yICh2YXIgaSA9M0Qg c3RhcnQ7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICAgICAgaWYgKHR5cGVvZiAoc291cmNlW2ld KSAhPTNEPTNEICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICBpZiAoIV9pc1VuZGVmaW5lZChz b3VyY2VbaV0pKSB7CiAgICAgICAgICAgICAgICAgY29udGV4dC5wdXNoKHNvdXJjZVtpXSk7CiAg ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU5NCw3ICs2MTgsNyBAQAogICAgICAgICAgICAg cmV0dXJuIG51bGw7CiAgICAgICAgIH0KPTIwCi0gICAgICAgIHZhciBjaHJvbWUgPTNEIC9eXHMq YXQgKD86KCg/Olxbb2JqZWN0IG9iamVjdFxdKT9cUyspICk/XCg/KCg/OmZpbD0KZXxodHRwfGh0 dHBzKTouKj8pOihcZCspKD86OihcZCspKT9cKT9ccyokL2ksCisgICAgICAgIHZhciBjaHJvbWUg PTNEIC9eXHMqYXQgKD86KCg/Olxbb2JqZWN0IG9iamVjdFxdKT9cUysoPzogXFthcyBcUytcXT0K KT8pICk/XCg/KCg/OmZpbGV8aHR0cHxodHRwcyk6Lio/KTooXGQrKSg/OjooXGQrKSk/XCk/XHMq JC9pLAogICAgICAgICAgICAgZ2Vja28gPTNEIC9eXHMqKFxTKikoPzpcKCguKj8pXCkpP0AoKD86 ZmlsZXxodHRwfGh0dHBzKS4qPyk6KFw9CmQrKSg/OjooXGQrKSk/XHMqJC9pLAogICAgICAgICAg ICAgbGluZXMgPTNEIGV4LnN0YWNrLnNwbGl0KCdcbicpLAogICAgICAgICAgICAgc3RhY2sgPTNE IFtdLApAQCAtNjA2LDcgKzYzMCw3IEBACiAgICAgICAgICAgICBpZiAoKHBhcnRzID0zRCBnZWNr by5leGVjKGxpbmVzW2ldKSkpIHsKICAgICAgICAgICAgICAgICBlbGVtZW50ID0zRCB7CiAgICAg ICAgICAgICAgICAgICAgICd1cmwnOiBwYXJ0c1szXSwKLSAgICAgICAgICAgICAgICAgICAgJ2Z1 bmMnOiBwYXJ0c1sxXSB8fCAnPycsCisgICAgICAgICAgICAgICAgICAgICdmdW5jJzogcGFydHNb MV0gfHwgVU5LTk9XTl9GVU5DVElPTiwKICAgICAgICAgICAgICAgICAgICAgJ2FyZ3MnOiBwYXJ0 c1syXSA/IHBhcnRzWzJdLnNwbGl0KCcsJykgOiAnJywKICAgICAgICAgICAgICAgICAgICAgJ2xp bmUnOiArcGFydHNbNF0sCiAgICAgICAgICAgICAgICAgICAgICdjb2x1bW4nOiBwYXJ0c1s1XSA/ ICtwYXJ0c1s1XSA6IG51bGwKQEAgLTYxNCw3ICs2MzgsNyBAQAogICAgICAgICAgICAgfSBlbHNl IGlmICgocGFydHMgPTNEIGNocm9tZS5leGVjKGxpbmVzW2ldKSkpIHsKICAgICAgICAgICAgICAg ICBlbGVtZW50ID0zRCB7CiAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBwYXJ0c1syXSwKLSAg ICAgICAgICAgICAgICAgICAgJ2Z1bmMnOiBwYXJ0c1sxXSB8fCAnPycsCisgICAgICAgICAgICAg ICAgICAgICdmdW5jJzogcGFydHNbMV0gfHwgVU5LTk9XTl9GVU5DVElPTiwKICAgICAgICAgICAg ICAgICAgICAgJ2xpbmUnOiArcGFydHNbM10sCiAgICAgICAgICAgICAgICAgICAgICdjb2x1bW4n OiBwYXJ0c1s0XSA/ICtwYXJ0c1s0XSA6IG51bGwKICAgICAgICAgICAgICAgICB9OwpAQCAtNzUw LDcgKzc3NCw3IEBACiAgICAgICAgICAgICBzb3VyY2U7Cj0yMAogICAgICAgICBmb3IgKGkgaW4g c2NyaXB0cykgewotICAgICAgICAgICAgaWYgKFRyYWNlS2l0Ll9oYXMoc2NyaXB0cywgaSkgJiYg IXNjcmlwdHNbaV0uc3JjKSB7CisgICAgICAgICAgICBpZiAoX2hhcyhzY3JpcHRzLCBpKSAmJiAh c2NyaXB0c1tpXS5zcmMpIHsKICAgICAgICAgICAgICAgICBpbmxpbmVTY3JpcHRCbG9ja3MucHVz aChzY3JpcHRzW2ldKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtOTA0LDcgKzkyOCw3 IEBACj0yMAogICAgICAgICAgICAgaXRlbSA9M0QgewogICAgICAgICAgICAgICAgICd1cmwnOiBu dWxsLAotICAgICAgICAgICAgICAgICdmdW5jJzogJz8nLAorICAgICAgICAgICAgICAgICdmdW5j JzogVU5LTk9XTl9GVU5DVElPTiwKICAgICAgICAgICAgICAgICAnbGluZSc6IG51bGwsCiAgICAg ICAgICAgICAgICAgJ2NvbHVtbic6IG51bGwKICAgICAgICAgICAgIH07CkBAIC05MTksNyArOTQz LDcgQEAKICAgICAgICAgICAgICAgICBpdGVtLnVybCA9M0Qgc291cmNlLnVybDsKICAgICAgICAg ICAgICAgICBpdGVtLmxpbmUgPTNEIHNvdXJjZS5saW5lOwo9MjAKLSAgICAgICAgICAgICAgICBp ZiAoaXRlbS5mdW5jID0zRD0zRD0zRCAnPycpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS5m dW5jID0zRD0zRD0zRCBVTktOT1dOX0ZVTkNUSU9OKSB7CiAgICAgICAgICAgICAgICAgICAgIGl0 ZW0uZnVuYyA9M0QgZ3Vlc3NGdW5jdGlvbk5hbWUoaXRlbS51cmwsIGl0ZW0ubGluZSk7CiAgICAg ICAgICAgICAgICAgfQo9MjAKQEAgLTEwMjksOCArMTA1Myw2IEBACiAgICAgICAgIH0gY2F0Y2gg KGV4KSB7CiAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZVN0YWNrVHJhY2UoZXgsIGRlcHRoICsg MSk7CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Cj0yMAogICAgIGNv bXB1dGVTdGFja1RyYWNlLmF1Z21lbnRTdGFja1RyYWNlV2l0aEluaXRpYWxFbGVtZW50ID0zRCBh dWdtZW50U3RhY2s9ClRyYWNlV2l0aEluaXRpYWxFbGVtZW50OwpAQCAtMTA0NSwyMiArMTA2Nywx NSBAQAogICogRXh0ZW5kcyBzdXBwb3J0IGZvciBnbG9iYWwgZXJyb3IgaGFuZGxpbmcgZm9yIGFz eW5jaHJvbm91cyBicm93c2VyCiAgKiBmdW5jdGlvbnMuIEFkb3B0ZWQgZnJvbSBDbG9zdXJlIExp YnJhcnkncyBlcnJvcmhhbmRsZXIuanMKICAqLwotKGZ1bmN0aW9uIGV4dGVuZFRvQXN5bmNocm9u b3VzQ2FsbGJhY2tzKHcpIHsKKyhmdW5jdGlvbiBleHRlbmRUb0FzeW5jaHJvbm91c0NhbGxiYWNr cygpIHsKICAgICB2YXIgX2hlbHBlciA9M0QgZnVuY3Rpb24gX2hlbHBlcihmbk5hbWUpIHsKLSAg ICAgICAgdmFyIG9yaWdpbmFsRm4gPTNEIHdbZm5OYW1lXTsKLSAgICAgICAgd1tmbk5hbWVdID0z RCBmdW5jdGlvbiB0cmFjZUtpdEFzeW5jRXh0ZW5zaW9uKCkgeworICAgICAgICB2YXIgb3JpZ2lu YWxGbiA9M0Qgd2luZG93W2ZuTmFtZV07CisgICAgICAgIHdpbmRvd1tmbk5hbWVdID0zRCBmdW5j dGlvbiB0cmFjZUtpdEFzeW5jRXh0ZW5zaW9uKCkgewogICAgICAgICAgICAgLy8gTWFrZSBhIGNv cHkgb2YgdGhlIGFyZ3VtZW50cwotICAgICAgICAgICAgdmFyIGFyZ3MgPTNEIEFycmF5LnByb3Rv dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7CisgICAgICAgICAgICB2YXIgYXJncyA9M0Qg X3NsaWNlLmNhbGwoYXJndW1lbnRzKTsKICAgICAgICAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNr ID0zRCBhcmdzWzBdOwogICAgICAgICAgICAgaWYgKHR5cGVvZiAob3JpZ2luYWxDYWxsYmFjaykg PTNEPTNEPTNEICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICBhcmdzWzBdID0zRCBmdW5j dGlvbiB0cmFjZUtpdEFyZ3NaZXJvKCkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAg ICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVu dHMpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBUcmFjZUtpdC5yZXBvcnQoZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJv dyBlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAg ICAgICAgICBhcmdzWzBdID0zRCBUcmFjZUtpdC53cmFwKG9yaWdpbmFsQ2FsbGJhY2spOwogICAg ICAgICAgICAgfQogICAgICAgICAgICAgLy8gSUUgPCA5IGRvZXNuJ3Qgc3VwcG9ydCAuY2FsbC8u YXBwbHkgb24gc2V0SW50ZXJ2YWwvc2V0VGltZW89CnV0LCBidXQgaXQKICAgICAgICAgICAgIC8v IGFsc28gb25seSBzdXBwb3J0cyAyIGFyZ3VtZW50IGFuZCBkb2Vzbid0IGNhcmUgd2hhdCAidGhp cyIgPQppcywgc28gd2UKQEAgLTEwNzUsMTIwICsxMDkwLDcgQEAKPTIwCiAgICAgX2hlbHBlcign c2V0VGltZW91dCcpOwogICAgIF9oZWxwZXIoJ3NldEludGVydmFsJyk7Ci19KHdpbmRvdykpOwot Ci0vKioKLSAqIEV4dGVuZGVkIHN1cHBvcnQgZm9yIGJhY2t0cmFjZXMgYW5kIGdsb2JhbCBlcnJv ciBoYW5kbGluZyBmb3IgbW9zdAotICogYXN5bmNocm9ub3VzIGpRdWVyeSBmdW5jdGlvbnMuCi0g Ki8KLShmdW5jdGlvbiB0cmFjZUtpdEFzeW5jRm9yalF1ZXJ5KCQpIHsKLQotICAgIC8vIHF1aXQg aWYgalF1ZXJ5IGlzbid0IG9uIHRoZSBwYWdlCi0gICAgaWYgKCEkKSB7Ci0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0KLSAgICB2YXIgX29sZEV2ZW50QWRkID0zRCAkLmV2ZW50LmFkZDsKLSAgICAk LmV2ZW50LmFkZCA9M0QgZnVuY3Rpb24gdHJhY2VLaXRFdmVudEFkZChlbGVtLCB0eXBlcywgaGFu ZGxlciwgZGF0YSwgPQpzZWxlY3RvcikgewotICAgICAgICB2YXIgX2hhbmRsZXI7Ci0KLSAgICAg ICAgaWYgKGhhbmRsZXIuaGFuZGxlcikgewotICAgICAgICAgICAgX2hhbmRsZXIgPTNEIGhhbmRs ZXIuaGFuZGxlcjsKLSAgICAgICAgICAgIGhhbmRsZXIuaGFuZGxlciA9M0QgZnVuY3Rpb24gdHJh Y2VLaXRIYW5kbGVyKCkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAg ICAgIHJldHVybiBfaGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAg ICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VLaXQucmVwb3J0KGUp OwotICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBfaGFuZGxlciA9M0QgaGFu ZGxlcjsKLSAgICAgICAgICAgIGhhbmRsZXIgPTNEIGZ1bmN0aW9uIGFwcGx5X2hhbmRsZXIoKSB7 Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9oYW5k bGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkg ewotICAgICAgICAgICAgICAgICAgICBUcmFjZUtpdC5yZXBvcnQoZSk7Ci0gICAgICAgICAgICAg ICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAg ICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBoYW5kbGVyIHdlIGFyZSBhdHRhY2hpbmcgZG9lc249 RTI9ODA9OTl0IGhhdmUgdGhlIHNhbWUgZz0KdWlkIGFzCi0gICAgICAgIC8vIHRoZSBvcmlnaW5h bCwgaXQgd2lsbCBuZXZlciBiZSByZW1vdmVkIHdoZW4gc29tZW9uZSB0cmllcyB0bwotICAgICAg ICAvLyB1bmJpbmQgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGxhdGVyLiBUZWNobmljYWxseSBhcyBh IHJlc3VsdCBvZgotICAgICAgICAvLyB0aGlzIG91ciBndWlkcyBhcmUgbm8gbG9uZ2VyIGdsb2Jh bGx5IHVuaXF1ZSwgYnV0IHdoYXRldmVyLCB0aGF0Ci0gICAgICAgIC8vIG5ldmVyIGh1cnQgYW55 Ym9keSBSSUdIVD8hCi0gICAgICAgIGlmIChfaGFuZGxlci5ndWlkKSB7Ci0gICAgICAgICAgICBo YW5kbGVyLmd1aWQgPTNEIF9oYW5kbGVyLmd1aWQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICBoYW5kbGVyLmd1aWQgPTNEIF9oYW5kbGVyLmd1aWQgPTNEICQuZ3VpZCsrOwotICAgICAg ICB9Ci0KLSAgICAgICAgcmV0dXJuIF9vbGRFdmVudEFkZC5jYWxsKHRoaXMsIGVsZW0sIHR5cGVz LCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvPQpyKTsKLSAgICB9OwotCi0gICAgdmFyIF9vbGRSZWFk eSA9M0QgJC5mbi5yZWFkeTsKLSAgICAkLmZuLnJlYWR5ID0zRCBmdW5jdGlvbiB0cmFjZUtpdGpR dWVyeVJlYWR5V3JhcHBlcihmbikgewotICAgICAgICB2YXIgX2ZuID0zRCBmdW5jdGlvbiAoKSB7 Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlz LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAg IFRyYWNlS2l0LnJlcG9ydChlKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAg ICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHJldHVybiBfb2xkUmVhZHkuY2FsbCh0aGlzLCBf Zm4pOwotICAgIH07Ci0KLSAgICB2YXIgX29sZEFqYXggPTNEICQuYWpheDsKLSAgICAkLmFqYXgg PTNEIGZ1bmN0aW9uIHRyYWNlS2l0QWpheFdyYXBwZXIocykgewotICAgICAgICBpZiAoJC5pc0Z1 bmN0aW9uKHMuY29tcGxldGUpKSB7Ci0gICAgICAgICAgICB2YXIgX29sZENvbXBsZXRlID0zRCBz LmNvbXBsZXRlOwotICAgICAgICAgICAgcy5jb21wbGV0ZSA9M0QgZnVuY3Rpb24gdHJhY2VLaXRq UXVlcnlDb21wbGV0ZSgpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAg ICAgICByZXR1cm4gX29sZENvbXBsZXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAg ICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgICAgICBUcmFjZUtpdC5yZXBv cnQoZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkLmlzRnVuY3Rpb24ocy5l cnJvcikpIHsKLSAgICAgICAgICAgIHZhciBfb2xkRXJyb3IgPTNEIHMuZXJyb3I7Ci0gICAgICAg ICAgICBzLmVycm9yID0zRCBmdW5jdGlvbiB0cmFjZUtpdGpRdWVyeUVycm9yKCkgewotICAgICAg ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2xkRXJyb3IuYXBw bHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAg ICAgICAgICAgICAgICAgIFRyYWNlS2l0LnJlcG9ydChlKTsKLSAgICAgICAgICAgICAgICAgICAg dGhyb3cgZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0K LSAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihzLnN1Y2Nlc3MpKSB7Ci0gICAgICAgICAgICB2YXIg X29sZFN1Y2Nlc3MgPTNEIHMuc3VjY2VzczsKLSAgICAgICAgICAgIHMuc3VjY2VzcyA9M0QgZnVu Y3Rpb24gdHJhY2VLaXRqUXVlcnlTdWNjZXNzKCkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0g ICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2xkU3VjY2Vzcy5hcHBseSh0aGlzLCBhcmd1bWVu dHMpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAg VHJhY2VLaXQucmVwb3J0KGUpOwotICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewot ICAgICAgICAgICAgcmV0dXJuIF9vbGRBamF4LmNhbGwodGhpcywgcyk7Ci0gICAgICAgIH0gY2F0 Y2ggKGUpIHsKLSAgICAgICAgICAgIFRyYWNlS2l0LnJlcG9ydChlKTsKLSAgICAgICAgICAgIHRo cm93IGU7Ci0gICAgICAgIH0KLSAgICB9OwotCi19KHdpbmRvdy5qUXVlcnkpKTsKK30oKSk7Cj0y MAogLy9EZWZhdWx0IG9wdGlvbnM6CiBpZiAoIVRyYWNlS2l0LnJlbW90ZUZldGNoaW5nKSB7Cgpk aWZmIC1yIDUwZGJlZDlmOGY1ODM0ODBjMzk0ZDljOGExY2E4MTU4NTQ4MmMwNjMgLXIgZDcwMjFl ZTk2YTgwMDg1ZDc2MDViMTY9CjhjNzNkZmQ5MjlhZDg1MWQzIHN0YXRpYy9zY3JpcHRzL2xpYnMv dHJhY2VraXQuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvbGlicy90cmFjZWtpdC5qcworKysgYi9z dGF0aWMvc2NyaXB0cy9saWJzL3RyYWNla2l0LmpzCkBAIC0zLDEyICszLDMyIEBACiAgTUlUIGxp Y2Vuc2UKICovCj0yMAotOyhmdW5jdGlvbih3aW5kb3csIHVuZGVmaW5lZCkgeworKGZ1bmN0aW9u KHdpbmRvdywgdW5kZWZpbmVkKSB7Cj0yMAo9MjAKIHZhciBUcmFjZUtpdCA9M0Qge307CiB2YXIg X29sZFRyYWNlS2l0ID0zRCB3aW5kb3cuVHJhY2VLaXQ7Cj0yMAorLy8gZ2xvYmFsIHJlZmVyZW5j ZSB0byBzbGljZQordmFyIF9zbGljZSA9M0QgW10uc2xpY2U7Cit2YXIgVU5LTk9XTl9GVU5DVElP TiA9M0QgJz8nOworCisKKy8qKgorICogX2hhcywgYSBiZXR0ZXIgZm9ybSBvZiBoYXNPd25Qcm9w ZXJ0eQorICogRXhhbXBsZTogX2hhcyhNYWluSG9zdE9iamVjdCwgcHJvcGVydHkpID0zRD0zRD0z RCB0cnVlL2ZhbHNlCisgKgorICogQHBhcmFtIHtPYmplY3R9IGhvc3Qgb2JqZWN0IHRvIGNoZWNr IHByb3BlcnR5CisgKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIGNoZWNrCisgKi8KK2Z1bmN0aW9u IF9oYXMob2JqZWN0LCBrZXkpIHsKKyAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q cm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTsKK30KKworZnVuY3Rpb24gX2lzVW5kZWZpbmVkKHdo YXQpIHsKKyAgICByZXR1cm4gdHlwZW9mIHdoYXQgPTNEPTNEPTNEICd1bmRlZmluZWQnOworfQor CiAvKioKICAqIFRyYWNlS2l0Lm5vQ29uZmxpY3Q6IEV4cG9ydCBUcmFjZUtpdCBvdXQgdG8gYW5v dGhlciB2YXJpYWJsZQogICogRXhhbXBsZTogdmFyIFRLID0zRCBUcmFjZUtpdC5ub0NvbmZsaWN0 KCkKQEAgLTE5LDE0ICszOSwyMiBAQAogfTsKPTIwCiAvKioKLSAqIFRyYWNlS2l0Ll9oYXMsIGEg YmV0dGVyIGZvcm0gb2YgaGFzT3duUHJvcGVydHkKLSAqIEV4YW1wbGU6IFRyYWNlS2l0Ll9oYXMo TWFpbkhvc3RPYmplY3QsIHByb3BlcnR5KSA9M0Q9M0Q9M0QgdHJ1ZS9mYWxzZQorICogVHJhY2VL aXQud3JhcDogV3JhcCBhbnkgZnVuY3Rpb24gaW4gYSBUcmFjZUtpdCByZXBvcnRlcgorICogRXhh bXBsZTogZnVuYyA9M0QgVHJhY2VLaXQud3JhcChmdW5jKTsKICAqCi0gKiBAcGFyYW0ge09iamVj dH0gaG9zdCBvYmplY3QgdG8gY2hlY2sgcHJvcGVydHkKLSAqIEBwYXJhbSB7c3RyaW5nfSBrZXkg dG8gY2hlY2sKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgRnVuY3Rpb24gdG8gYmUgd3JhcHBl ZAorICogQHJldHVybiB7RnVuY3Rpb259IFRoZSB3cmFwcGVkIGZ1bmMKICAqLwotVHJhY2VLaXQu X2hhcyA9M0QgZnVuY3Rpb24gX2hhcyhvYmplY3QsIGtleSkgewotICAgIHJldHVybiBPYmplY3Qu cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpOworVHJhY2VLaXQud3Jh cCA9M0QgZnVuY3Rpb24gdHJhY2VLaXRXcmFwcGVyKGZ1bmMpIHsKKyAgICBmdW5jdGlvbiB3cmFw cGVkKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhp cywgYXJndW1lbnRzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgVHJhY2VL aXQucmVwb3J0KGUpOworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfQorICAgIH0KKyAg ICByZXR1cm4gd3JhcHBlZDsKIH07Cj0yMAogLyoqCkBAIC03OCw2ICsxMDYsNyBAQAogICAgICAq IEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIKICAgICAgKi8KICAgICBmdW5jdGlvbiBzdWJzY3Jp YmUoaGFuZGxlcikgeworICAgICAgICBpbnN0YWxsR2xvYmFsSGFuZGxlcigpOwogICAgICAgICBo YW5kbGVycy5wdXNoKGhhbmRsZXIpOwogICAgIH0KPTIwCkBAIC0xMDMsOSArMTMyLDkgQEAKICAg ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZm9yICh2YXIgaSBpbiBoYW5kbGVy cykgewotICAgICAgICAgICAgaWYgKFRyYWNlS2l0Ll9oYXMoaGFuZGxlcnMsIGkpKSB7CisgICAg ICAgICAgICBpZiAoX2hhcyhoYW5kbGVycywgaSkpIHsKICAgICAgICAgICAgICAgICB0cnkgewot ICAgICAgICAgICAgICAgICAgICBoYW5kbGVyc1tpXS5hcHBseShudWxsLCBbc3RhY2tdLmNvbmNh dChBcnJheS5wcm90b3R5cGU9Ci5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikpKTsKKyAgICAgICAg ICAgICAgICAgICAgaGFuZGxlcnNbaV0uYXBwbHkobnVsbCwgW3N0YWNrXS5jb25jYXQoX3NsaWNl LmNhbGwoYXJnPQp1bWVudHMsIDIpKSk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoaW5uZXIp IHsKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uID0zRCBpbm5lcjsKICAgICAgICAgICAg ICAgICB9CkBAIC0xMTcsNyArMTQ2LDcgQEAKICAgICAgICAgfQogICAgIH0KPTIwCi0gICAgdmFy IF9vbGRPbmVycm9ySGFuZGxlciA9M0Qgd2luZG93Lm9uZXJyb3I7CisgICAgdmFyIF9vbGRPbmVy cm9ySGFuZGxlciwgX29uRXJyb3JIYW5kbGVySW5zdGFsbGVkOwo9MjAKICAgICAvKioKICAgICAg KiBFbnN1cmVzIGFsbCBnbG9iYWwgdW5oYW5kbGVkIGV4Y2VwdGlvbnMgYXJlIHJlY29yZGVkLgpA QCAtMTI3LDcgKzE1Niw3IEBACiAgICAgICogQHBhcmFtIHsobnVtYmVyfHN0cmluZyl9IGxpbmVO byBUaGUgbGluZSBudW1iZXIgYXQgd2hpY2ggdGhlIGVycm9yCiAgICAgICogb2NjdXJyZWQuCiAg ICAgICovCi0gICAgd2luZG93Lm9uZXJyb3IgPTNEIGZ1bmN0aW9uIHRyYWNlS2l0V2luZG93T25F cnJvcihtZXNzYWdlLCB1cmwsIGxpbmVObz0KKSB7CisgICAgZnVuY3Rpb24gdHJhY2VLaXRXaW5k b3dPbkVycm9yKG1lc3NhZ2UsIHVybCwgbGluZU5vKSB7CiAgICAgICAgIHZhciBzdGFjayA9M0Qg bnVsbDsKPTIwCiAgICAgICAgIGlmIChsYXN0RXhjZXB0aW9uU3RhY2spIHsKQEAgLTE1OCwxNCAr MTg3LDI0IEBACiAgICAgICAgIH0KPTIwCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Owor ICAgIH0KKworICAgIGZ1bmN0aW9uIGluc3RhbGxHbG9iYWxIYW5kbGVyICgpCisgICAgeworICAg ICAgICBpZiAoX29uRXJyb3JIYW5kbGVySW5zdGFsbGVkID0zRD0zRD0zRCB0cnVlKSB7CisgICAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgX29sZE9uZXJyb3JIYW5kbGVyID0z RCB3aW5kb3cub25lcnJvcjsKKyAgICAgICAgd2luZG93Lm9uZXJyb3IgPTNEIHRyYWNlS2l0V2lu ZG93T25FcnJvcjsKKyAgICAgICAgX29uRXJyb3JIYW5kbGVySW5zdGFsbGVkID0zRCB0cnVlOwor ICAgIH0KPTIwCiAgICAgLyoqCiAgICAgICogUmVwb3J0cyBhbiB1bmhhbmRsZWQgRXJyb3IgdG8g VHJhY2VLaXQuCiAgICAgICogQHBhcmFtIHtFcnJvcn0gZXgKICAgICAgKi8KICAgICBmdW5jdGlv biByZXBvcnQoZXgpIHsKLSAgICAgICAgdmFyIGFyZ3MgPTNEIEFycmF5LnByb3RvdHlwZS5zbGlj ZS5jYWxsKGFyZ3VtZW50cywgMSk7CisgICAgICAgIHZhciBhcmdzID0zRCBfc2xpY2UuY2FsbChh cmd1bWVudHMsIDEpOwogICAgICAgICBpZiAobGFzdEV4Y2VwdGlvblN0YWNrKSB7CiAgICAgICAg ICAgICBpZiAobGFzdEV4Y2VwdGlvbiA9M0Q9M0Q9M0QgZXgpIHsKICAgICAgICAgICAgICAgICBy ZXR1cm47IC8vIGFscmVhZHkgY2F1Z2h0IGJ5IGFuIGlubmVyIGNhdGNoIGJsb2NrLCBpZ25vcmUK QEAgLTI4MywyOSArMzIyLDE2IEBACiAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgIH0K ICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBYTUxIdHRwUmVxdWVzdFdyYXBwZXI7Cisg ICAgICAgICAgICB2YXIgZ2V0WEhSID0zRCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0 cnkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVz dCgpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAg Ly8gZXhwbGljaXRseSBidWJibGUgdXAgdGhlIGV4Y2VwdGlvbiBpZiBub3QgZm91bmQKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0 LlhNTEhUVFAnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Owo9MjAKLSAgICAg ICAgICAgIGlmICh0eXBlb2YgKFhNTEh0dHBSZXF1ZXN0KSA9M0Q9M0Q9M0QgJ3VuZGVmaW5lZCcp IHsgLy8gSUUgNS54PQotNi54OgotICAgICAgICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0V3JhcHBl ciA9M0QgZnVuY3Rpb24gSUVYTUxIdHRwUmVxdWVzdFN1YigpIHsKLSAgICAgICAgICAgICAgICAg ICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQWN0aXZlWE9iamVj dCgnTXN4bWwyLlhNTEhUVFAuNi4wJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUp IHt9Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQLjMuMCcpOwotICAgICAgICAg ICAgICAgICAgICB9IGNhdGNoIChlKSB7fQotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNc3htbDIuWE1M SFRUUCcpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQotICAgICAgICAgICAg ICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBY3RpdmVY T2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNo IChlKSB7fQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFhIUi4nKTsK LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBYTUxIdHRwUmVxdWVzdFdyYXBwZXIgPTNEIFhNTEh0dHBSZXF1ZXN0OwotICAgICAgICAgICAg fQotICAgPTIwCi0gICAgICAgICAgICB2YXIgcmVxdWVzdCA9M0QgbmV3IFhNTEh0dHBSZXF1ZXN0 V3JhcHBlcigpOworICAgICAgICAgICAgdmFyIHJlcXVlc3QgPTNEIGdldFhIUigpOwogICAgICAg ICAgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCB1cmwsIGZhbHNlKTsKICAgICAgICAgICAgIHJlcXVl c3Quc2VuZCgnJyk7CiAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5yZXNwb25zZVRleHQ7CkBA IC0zMjAsMTYgKzM0NiwxNCBAQAogICAgICAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSBTb3Vy Y2UgY29udGVudHMuCiAgICAgICovCiAgICAgZnVuY3Rpb24gZ2V0U291cmNlKHVybCkgewotICAg ICAgICBpZiAoIVRyYWNlS2l0Ll9oYXMoc291cmNlQ2FjaGUsIHVybCkpIHsKKyAgICAgICAgaWYg KCFfaGFzKHNvdXJjZUNhY2hlLCB1cmwpKSB7CiAgICAgICAgICAgICAvLyBVUkwgbmVlZHMgdG8g YmUgYWJsZSB0byBmZXRjaGVkIHdpdGhpbiB0aGUgYWNjZXB0YWJsZSBkb21haT0Kbi4gIE90aGVy d2lzZSwKICAgICAgICAgICAgIC8vIGNyb3NzLWRvbWFpbiBlcnJvcnMgd2lsbCBiZSB0cmlnZ2Vy ZWQuCi0gICAgICAgICAgICB2YXIgc291cmNlOworICAgICAgICAgICAgdmFyIHNvdXJjZSA9M0Qg Jyc7CiAgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoZG9jdW1lbnQuZG9tYWluKSAhPTNEPTNE IC0xKSB7CiAgICAgICAgICAgICAgICAgc291cmNlID0zRCBsb2FkU291cmNlKHVybCk7Ci0gICAg ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNvdXJjZSA9M0QgW107CiAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICBzb3VyY2VDYWNoZVt1cmxdID0zRCBzb3VyY2UubGVuZ3RoID8g c291cmNlLnNwbGl0KCdcbicpIDogW107CisgICAgICAgICAgICBzb3VyY2VDYWNoZVt1cmxdID0z RCBzb3VyY2UgPyBzb3VyY2Uuc3BsaXQoJ1xuJykgOiBbXTsKICAgICAgICAgfQo9MjAKICAgICAg ICAgcmV0dXJuIHNvdXJjZUNhY2hlW3VybF07CkBAIC0zNTIsNyArMzc2LDcgQEAKICAgICAgICAg ICAgIG07Cj0yMAogICAgICAgICBpZiAoIXNvdXJjZS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJl dHVybiAnPyc7CisgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9GVU5DVElPTjsKICAgICAgICAg fQo9MjAKICAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgZnJvbSB0aGUgZmlyc3QgbGluZSBpbiB0 aGUgZnVuY3Rpb24gdW50aWwgd2UgZmluPQpkIHRoZSBsaW5lIHdoaWNoCkBAIC0zNjAsNyArMzg0 LDcgQEAKICAgICAgICAgZm9yICh2YXIgaSA9M0QgMDsgaSA8IG1heExpbmVzOyArK2kpIHsKICAg ICAgICAgICAgIGxpbmUgPTNEIHNvdXJjZVtsaW5lTm8gLSBpXSArIGxpbmU7Cj0yMAotICAgICAg ICAgICAgaWYgKGxpbmUgIT0zRD0zRCB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGlmICghX2lz VW5kZWZpbmVkKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKChtID0zRCByZUd1ZXNzRnVu Y3Rpb24uZXhlYyhsaW5lKSkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1bMV07CiAg ICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobSA9M0QgcmVGdW5jdGlvbkFyZ05hbWVzLmV4ZWMo bGluZSkpKSB7CkBAIC0zNjksNyArMzkzLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQo9 MjAKLSAgICAgICAgcmV0dXJuICc/JzsKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRlVOQ1RJT047 CiAgICAgfQo9MjAKICAgICAvKioKQEAgLTM5OSw3ICs0MjMsNyBAQAogICAgICAgICBsaW5lIC09 M0QgMTsgLy8gY29udmVydCB0byAwLWJhc2VkIGluZGV4Cj0yMAogICAgICAgICBmb3IgKHZhciBp ID0zRCBzdGFydDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIChzb3Vy Y2VbaV0pICE9M0Q9M0QgJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIGlmICghX2lzVW5kZWZp bmVkKHNvdXJjZVtpXSkpIHsKICAgICAgICAgICAgICAgICBjb250ZXh0LnB1c2goc291cmNlW2ld KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTk0LDcgKzYxOCw3IEBACiAgICAgICAg ICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQo9MjAKLSAgICAgICAgdmFyIGNocm9tZSA9M0Qg L15ccyphdCAoPzooKD86XFtvYmplY3Qgb2JqZWN0XF0pP1xTKykgKT9cKD8oKD86ZmlsPQplfGh0 dHB8aHR0cHMpOi4qPyk6KFxkKykoPzo6KFxkKykpP1wpP1xzKiQvaSwKKyAgICAgICAgdmFyIGNo cm9tZSA9M0QgL15ccyphdCAoPzooKD86XFtvYmplY3Qgb2JqZWN0XF0pP1xTKyg/OiBcW2FzIFxT K1xdPQopPykgKT9cKD8oKD86ZmlsZXxodHRwfGh0dHBzKTouKj8pOihcZCspKD86OihcZCspKT9c KT9ccyokL2ksCiAgICAgICAgICAgICBnZWNrbyA9M0QgL15ccyooXFMqKSg/OlwoKC4qPylcKSk/ QCgoPzpmaWxlfGh0dHB8aHR0cHMpLio/KTooXD0KZCspKD86OihcZCspKT9ccyokL2ksCiAgICAg ICAgICAgICBsaW5lcyA9M0QgZXguc3RhY2suc3BsaXQoJ1xuJyksCiAgICAgICAgICAgICBzdGFj ayA9M0QgW10sCkBAIC02MDYsNyArNjMwLDcgQEAKICAgICAgICAgICAgIGlmICgocGFydHMgPTNE IGdlY2tvLmV4ZWMobGluZXNbaV0pKSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnQgPTNEIHsK ICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IHBhcnRzWzNdLAotICAgICAgICAgICAgICAgICAg ICAnZnVuYyc6IHBhcnRzWzFdIHx8ICc/JywKKyAgICAgICAgICAgICAgICAgICAgJ2Z1bmMnOiBw YXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OLAogICAgICAgICAgICAgICAgICAgICAnYXJncyc6 IHBhcnRzWzJdID8gcGFydHNbMl0uc3BsaXQoJywnKSA6ICcnLAogICAgICAgICAgICAgICAgICAg ICAnbGluZSc6ICtwYXJ0c1s0XSwKICAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbic6IHBhcnRz WzVdID8gK3BhcnRzWzVdIDogbnVsbApAQCAtNjE0LDcgKzYzOCw3IEBACiAgICAgICAgICAgICB9 IGVsc2UgaWYgKChwYXJ0cyA9M0QgY2hyb21lLmV4ZWMobGluZXNbaV0pKSkgewogICAgICAgICAg ICAgICAgIGVsZW1lbnQgPTNEIHsKICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IHBhcnRzWzJd LAotICAgICAgICAgICAgICAgICAgICAnZnVuYyc6IHBhcnRzWzFdIHx8ICc/JywKKyAgICAgICAg ICAgICAgICAgICAgJ2Z1bmMnOiBwYXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OLAogICAgICAg ICAgICAgICAgICAgICAnbGluZSc6ICtwYXJ0c1szXSwKICAgICAgICAgICAgICAgICAgICAgJ2Nv bHVtbic6IHBhcnRzWzRdID8gK3BhcnRzWzRdIDogbnVsbAogICAgICAgICAgICAgICAgIH07CkBA IC03NTAsNyArNzc0LDcgQEAKICAgICAgICAgICAgIHNvdXJjZTsKPTIwCiAgICAgICAgIGZvciAo aSBpbiBzY3JpcHRzKSB7Ci0gICAgICAgICAgICBpZiAoVHJhY2VLaXQuX2hhcyhzY3JpcHRzLCBp KSAmJiAhc2NyaXB0c1tpXS5zcmMpIHsKKyAgICAgICAgICAgIGlmIChfaGFzKHNjcmlwdHMsIGkp ICYmICFzY3JpcHRzW2ldLnNyYykgewogICAgICAgICAgICAgICAgIGlubGluZVNjcmlwdEJsb2Nr cy5wdXNoKHNjcmlwdHNbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05MDQsNyAr OTI4LDcgQEAKPTIwCiAgICAgICAgICAgICBpdGVtID0zRCB7CiAgICAgICAgICAgICAgICAgJ3Vy bCc6IG51bGwsCi0gICAgICAgICAgICAgICAgJ2Z1bmMnOiAnPycsCisgICAgICAgICAgICAgICAg J2Z1bmMnOiBVTktOT1dOX0ZVTkNUSU9OLAogICAgICAgICAgICAgICAgICdsaW5lJzogbnVsbCwK ICAgICAgICAgICAgICAgICAnY29sdW1uJzogbnVsbAogICAgICAgICAgICAgfTsKQEAgLTkxOSw3 ICs5NDMsNyBAQAogICAgICAgICAgICAgICAgIGl0ZW0udXJsID0zRCBzb3VyY2UudXJsOwogICAg ICAgICAgICAgICAgIGl0ZW0ubGluZSA9M0Qgc291cmNlLmxpbmU7Cj0yMAotICAgICAgICAgICAg ICAgIGlmIChpdGVtLmZ1bmMgPTNEPTNEPTNEICc/JykgeworICAgICAgICAgICAgICAgIGlmIChp dGVtLmZ1bmMgPTNEPTNEPTNEIFVOS05PV05fRlVOQ1RJT04pIHsKICAgICAgICAgICAgICAgICAg ICAgaXRlbS5mdW5jID0zRCBndWVzc0Z1bmN0aW9uTmFtZShpdGVtLnVybCwgaXRlbS5saW5lKTsK ICAgICAgICAgICAgICAgICB9Cj0yMApAQCAtMTAyOSw4ICsxMDUzLDYgQEAKICAgICAgICAgfSBj YXRjaCAoZXgpIHsKICAgICAgICAgICAgIHJldHVybiBjb21wdXRlU3RhY2tUcmFjZShleCwgZGVw dGggKyAxKTsKICAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwogICAgIH0KPTIwCiAg ICAgY29tcHV0ZVN0YWNrVHJhY2UuYXVnbWVudFN0YWNrVHJhY2VXaXRoSW5pdGlhbEVsZW1lbnQg PTNEIGF1Z21lbnRTdGFjaz0KVHJhY2VXaXRoSW5pdGlhbEVsZW1lbnQ7CkBAIC0xMDQ1LDIyICsx MDY3LDE1IEBACiAgKiBFeHRlbmRzIHN1cHBvcnQgZm9yIGdsb2JhbCBlcnJvciBoYW5kbGluZyBm b3IgYXN5bmNocm9ub3VzIGJyb3dzZXIKICAqIGZ1bmN0aW9ucy4gQWRvcHRlZCBmcm9tIENsb3N1 cmUgTGlicmFyeSdzIGVycm9yaGFuZGxlci5qcwogICovCi0oZnVuY3Rpb24gZXh0ZW5kVG9Bc3lu Y2hyb25vdXNDYWxsYmFja3ModykgeworKGZ1bmN0aW9uIGV4dGVuZFRvQXN5bmNocm9ub3VzQ2Fs bGJhY2tzKCkgewogICAgIHZhciBfaGVscGVyID0zRCBmdW5jdGlvbiBfaGVscGVyKGZuTmFtZSkg ewotICAgICAgICB2YXIgb3JpZ2luYWxGbiA9M0Qgd1tmbk5hbWVdOwotICAgICAgICB3W2ZuTmFt ZV0gPTNEIGZ1bmN0aW9uIHRyYWNlS2l0QXN5bmNFeHRlbnNpb24oKSB7CisgICAgICAgIHZhciBv cmlnaW5hbEZuID0zRCB3aW5kb3dbZm5OYW1lXTsKKyAgICAgICAgd2luZG93W2ZuTmFtZV0gPTNE IGZ1bmN0aW9uIHRyYWNlS2l0QXN5bmNFeHRlbnNpb24oKSB7CiAgICAgICAgICAgICAvLyBNYWtl IGEgY29weSBvZiB0aGUgYXJndW1lbnRzCi0gICAgICAgICAgICB2YXIgYXJncyA9M0QgQXJyYXku cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTsKKyAgICAgICAgICAgIHZhciBhcmdz ID0zRCBfc2xpY2UuY2FsbChhcmd1bWVudHMpOwogICAgICAgICAgICAgdmFyIG9yaWdpbmFsQ2Fs bGJhY2sgPTNEIGFyZ3NbMF07CiAgICAgICAgICAgICBpZiAodHlwZW9mIChvcmlnaW5hbENhbGxi YWNrKSA9M0Q9M0Q9M0QgJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgICAgIGFyZ3NbMF0gPTNE IGZ1bmN0aW9uIHRyYWNlS2l0QXJnc1plcm8oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmFwcGx5KHRoaXMsIGFy Z3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIFRyYWNlS2l0LnJlcG9ydChlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IHRocm93IGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OworICAg ICAgICAgICAgICAgIGFyZ3NbMF0gPTNEIFRyYWNlS2l0LndyYXAob3JpZ2luYWxDYWxsYmFjayk7 CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBJRSA8IDkgZG9lc24ndCBzdXBwb3J0IC5j YWxsLy5hcHBseSBvbiBzZXRJbnRlcnZhbC9zZXRUaW1lbz0KdXQsIGJ1dCBpdAogICAgICAgICAg ICAgLy8gYWxzbyBvbmx5IHN1cHBvcnRzIDIgYXJndW1lbnQgYW5kIGRvZXNuJ3QgY2FyZSB3aGF0 ICJ0aGlzIiA9CmlzLCBzbyB3ZQpAQCAtMTA3NSwxMjAgKzEwOTAsNyBAQAo9MjAKICAgICBfaGVs cGVyKCdzZXRUaW1lb3V0Jyk7CiAgICAgX2hlbHBlcignc2V0SW50ZXJ2YWwnKTsKLX0od2luZG93 KSk7Ci0KLS8qKgotICogRXh0ZW5kZWQgc3VwcG9ydCBmb3IgYmFja3RyYWNlcyBhbmQgZ2xvYmFs IGVycm9yIGhhbmRsaW5nIGZvciBtb3N0Ci0gKiBhc3luY2hyb25vdXMgalF1ZXJ5IGZ1bmN0aW9u cy4KLSAqLwotKGZ1bmN0aW9uIHRyYWNlS2l0QXN5bmNGb3JqUXVlcnkoJCkgewotCi0gICAgLy8g cXVpdCBpZiBqUXVlcnkgaXNuJ3Qgb24gdGhlIHBhZ2UKLSAgICBpZiAoISQpIHsKLSAgICAgICAg cmV0dXJuOwotICAgIH0KLQotICAgIHZhciBfb2xkRXZlbnRBZGQgPTNEICQuZXZlbnQuYWRkOwot ICAgICQuZXZlbnQuYWRkID0zRCBmdW5jdGlvbiB0cmFjZUtpdEV2ZW50QWRkKGVsZW0sIHR5cGVz LCBoYW5kbGVyLCBkYXRhLCA9CnNlbGVjdG9yKSB7Ci0gICAgICAgIHZhciBfaGFuZGxlcjsKLQot ICAgICAgICBpZiAoaGFuZGxlci5oYW5kbGVyKSB7Ci0gICAgICAgICAgICBfaGFuZGxlciA9M0Qg aGFuZGxlci5oYW5kbGVyOwotICAgICAgICAgICAgaGFuZGxlci5oYW5kbGVyID0zRCBmdW5jdGlv biB0cmFjZUtpdEhhbmRsZXIoKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIF9oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAg ICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgICAgICBUcmFjZUtpdC5yZXBv cnQoZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIF9oYW5kbGVyID0z RCBoYW5kbGVyOwotICAgICAgICAgICAgaGFuZGxlciA9M0QgZnVuY3Rpb24gYXBwbHlfaGFuZGxl cigpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g X2hhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNo IChlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRyYWNlS2l0LnJlcG9ydChlKTsKLSAgICAgICAg ICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Owot ICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIGhhbmRsZXIgd2UgYXJlIGF0dGFjaGluZyBk b2Vzbj1FMj04MD05OXQgaGF2ZSB0aGUgc2FtZSBnPQp1aWQgYXMKLSAgICAgICAgLy8gdGhlIG9y aWdpbmFsLCBpdCB3aWxsIG5ldmVyIGJlIHJlbW92ZWQgd2hlbiBzb21lb25lIHRyaWVzIHRvCi0g ICAgICAgIC8vIHVuYmluZCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbGF0ZXIuIFRlY2huaWNhbGx5 IGFzIGEgcmVzdWx0IG9mCi0gICAgICAgIC8vIHRoaXMgb3VyIGd1aWRzIGFyZSBubyBsb25nZXIg Z2xvYmFsbHkgdW5pcXVlLCBidXQgd2hhdGV2ZXIsIHRoYXQKLSAgICAgICAgLy8gbmV2ZXIgaHVy dCBhbnlib2R5IFJJR0hUPyEKLSAgICAgICAgaWYgKF9oYW5kbGVyLmd1aWQpIHsKLSAgICAgICAg ICAgIGhhbmRsZXIuZ3VpZCA9M0QgX2hhbmRsZXIuZ3VpZDsKLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIGhhbmRsZXIuZ3VpZCA9M0QgX2hhbmRsZXIuZ3VpZCA9M0QgJC5ndWlkKys7Ci0g ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gX29sZEV2ZW50QWRkLmNhbGwodGhpcywgZWxlbSwg dHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG89CnIpOwotICAgIH07Ci0KLSAgICB2YXIgX29s ZFJlYWR5ID0zRCAkLmZuLnJlYWR5OwotICAgICQuZm4ucmVhZHkgPTNEIGZ1bmN0aW9uIHRyYWNl S2l0alF1ZXJ5UmVhZHlXcmFwcGVyKGZuKSB7Ci0gICAgICAgIHZhciBfZm4gPTNEIGZ1bmN0aW9u ICgpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5 KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAg ICAgICAgVHJhY2VLaXQucmVwb3J0KGUpOwotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgcmV0dXJuIF9vbGRSZWFkeS5jYWxsKHRo aXMsIF9mbik7Ci0gICAgfTsKLQotICAgIHZhciBfb2xkQWpheCA9M0QgJC5hamF4OwotICAgICQu YWpheCA9M0QgZnVuY3Rpb24gdHJhY2VLaXRBamF4V3JhcHBlcihzKSB7Ci0gICAgICAgIGlmICgk LmlzRnVuY3Rpb24ocy5jb21wbGV0ZSkpIHsKLSAgICAgICAgICAgIHZhciBfb2xkQ29tcGxldGUg PTNEIHMuY29tcGxldGU7Ci0gICAgICAgICAgICBzLmNvbXBsZXRlID0zRCBmdW5jdGlvbiB0cmFj ZUtpdGpRdWVyeUNvbXBsZXRlKCkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg ICAgICAgICAgIHJldHVybiBfb2xkQ29tcGxldGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAg ICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRyYWNlS2l0 LnJlcG9ydChlKTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCQuaXNGdW5jdGlv bihzLmVycm9yKSkgewotICAgICAgICAgICAgdmFyIF9vbGRFcnJvciA9M0Qgcy5lcnJvcjsKLSAg ICAgICAgICAgIHMuZXJyb3IgPTNEIGZ1bmN0aW9uIHRyYWNlS2l0alF1ZXJ5RXJyb3IoKSB7Ci0g ICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vbGRFcnJv ci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsK LSAgICAgICAgICAgICAgICAgICAgVHJhY2VLaXQucmVwb3J0KGUpOwotICAgICAgICAgICAgICAg ICAgICB0aHJvdyBlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAg IH0KLQotICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHMuc3VjY2VzcykpIHsKLSAgICAgICAgICAg IHZhciBfb2xkU3VjY2VzcyA9M0Qgcy5zdWNjZXNzOwotICAgICAgICAgICAgcy5zdWNjZXNzID0z RCBmdW5jdGlvbiB0cmFjZUtpdGpRdWVyeVN1Y2Nlc3MoKSB7Ci0gICAgICAgICAgICAgICAgdHJ5 IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vbGRTdWNjZXNzLmFwcGx5KHRoaXMsIGFy Z3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAg ICAgICBUcmFjZUtpdC5yZXBvcnQoZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IGU7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIHRy eSB7Ci0gICAgICAgICAgICByZXR1cm4gX29sZEFqYXguY2FsbCh0aGlzLCBzKTsKLSAgICAgICAg fSBjYXRjaCAoZSkgewotICAgICAgICAgICAgVHJhY2VLaXQucmVwb3J0KGUpOwotICAgICAgICAg ICAgdGhyb3cgZTsKLSAgICAgICAgfQotICAgIH07Ci0KLX0od2luZG93LmpRdWVyeSkpOworfSgp KTsKPTIwCiAvL0RlZmF1bHQgb3B0aW9uczoKIGlmICghVHJhY2VLaXQucmVtb3RlRmV0Y2hpbmcp IHsKCmRpZmYgLXIgNTBkYmVkOWY4ZjU4MzQ4MGMzOTRkOWM4YTFjYTgxNTg1NDgyYzA2MyAtciBk NzAyMWVlOTZhODAwODVkNzYwNWIxNj0KOGM3M2RmZDkyOWFkODUxZDMgc3RhdGljL3NjcmlwdHMv cGFja2VkL2xpYnMvdHJhY2VraXQuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvcGFja2VkL2xpYnMv dHJhY2VraXQuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvcGFja2VkL2xpYnMvdHJhY2VraXQuanMK QEAgLTEsMSArMSwxIEBACi0oZnVuY3Rpb24oaCxkKXt2YXIgZT0zRHt9O3ZhciBqPTNEaC5UcmFj ZUtpdDtlLm5vQ29uZmxpY3Q9M0RmdW5jdGlvbiBnKCl7aD0KLlRyYWNlS2l0PTNEajtyZXR1cm4g ZX07ZS5faGFzPTNEZnVuY3Rpb24gYShrLGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhPQpz T3duUHJvcGVydHkuY2FsbChrLGwpfTtlLnJlcG9ydD0zRChmdW5jdGlvbiBpKCl7dmFyIGs9M0Rb XSxvPTNEbnVsbCxxPTNEbnU9CmxsO2Z1bmN0aW9uIGwodCl7ay5wdXNoKHQpfWZ1bmN0aW9uIHIo dSl7Zm9yKHZhciB0PTNEay5sZW5ndGgtMTt0Pj0zRDA7LS10KT0Ke2lmKGtbdF09M0Q9M0Q9M0R1 KXtrLnNwbGljZSh0LDEpfX19ZnVuY3Rpb24gcCh0LHYpe3ZhciB4PTNEbnVsbDtpZih2JiYhZS5j PQpvbGxlY3RXaW5kb3dFcnJvcnMpe3JldHVybn1mb3IodmFyIHcgaW4gayl7aWYoZS5faGFzKGss dykpe3RyeXtrW3ddLmFwcGx5KG49CnVsbCxbdF0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGlj ZS5jYWxsKGFyZ3VtZW50cywyKSkpfWNhdGNoKHUpe3g9M0R1fX19aT0KZih4KXt0aHJvdyB4fX12 YXIgcz0zRGgub25lcnJvcjtoLm9uZXJyb3I9M0RmdW5jdGlvbiBuKHcsdix4KXt2YXIgdD0zRG51 bGw7PQppZihxKXtlLmNvbXB1dGVTdGFja1RyYWNlLmF1Z21lbnRTdGFja1RyYWNlV2l0aEluaXRp YWxFbGVtZW50KHEsdix4LHcpO3Q9M0Q9CnE7cT0zRG51bGw7bz0zRG51bGx9ZWxzZXt2YXIgdT0z RHt1cmw6dixsaW5lOnh9O3UuZnVuYz0zRGUuY29tcHV0ZVN0YWNrVHJhYz0KZS5ndWVzc0Z1bmN0 aW9uTmFtZSh1LnVybCx1LmxpbmUpO3UuY29udGV4dD0zRGUuY29tcHV0ZVN0YWNrVHJhY2UuZ2F0 aGVyQ29uPQp0ZXh0KHUudXJsLHUubGluZSk7dD0zRHttb2RlOiJvbmVycm9yIixtZXNzYWdlOncs dXJsOmRvY3VtZW50LmxvY2F0aW9uLmhyZWY9CixzdGFjazpbdV0sdXNlcmFnZW50Om5hdmlnYXRv ci51c2VyQWdlbnR9fXAodCwiZnJvbSB3aW5kb3cub25lcnJvciIpO2lmKHMpez0KcmV0dXJuIHMu YXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBmYWxzZX07ZnVuY3Rpb24gbSh2KXt2YXIgdT0z REFycmF5LnByPQpvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKHEpe2lmKG89M0Q9 M0Q9M0R2KXtyZXR1cm59ZWxzZXt2YXIgdz0zRHE9CjtxPTNEbnVsbDtvPTNEbnVsbDtwLmFwcGx5 KG51bGwsW3csbnVsbF0uY29uY2F0KHUpKX19dmFyIHQ9M0RlLmNvbXB1dGVTdGFjaz0KVHJhY2Uo dik7cT0zRHQ7bz0zRHY7aC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobz0zRD0zRD0zRHYpe3E9 M0RudWxsO289M0RuPQp1bGw7cC5hcHBseShudWxsLFt0LG51bGxdLmNvbmNhdCh1KSl9fSwodC5p bmNvbXBsZXRlPzIwMDA6MCkpO3Rocm93IHZ9bS5zdWI9CnNjcmliZT0zRGw7bS51bnN1YnNjcmli ZT0zRHI7cmV0dXJuIG19KCkpO2UuY29tcHV0ZVN0YWNrVHJhY2U9M0QoZnVuY3Rpb24gYj0KKCl7 dmFyIHU9M0RmYWxzZSxxPTNEe307ZnVuY3Rpb24gbChEKXtpZighZS5yZW1vdGVGZXRjaGluZyl7 cmV0dXJuIiJ9dHJ5e3ZhPQpyIEM7aWYodHlwZW9mKFhNTEh0dHBSZXF1ZXN0KT0zRD0zRD0zRCJ1 bmRlZmluZWQiKXtDPTNEZnVuY3Rpb24gRSgpe3RyeXtyZXQ9CnVybiBuZXcgQWN0aXZlWE9iamVj dCgiTXN4bWwyLlhNTEhUVFAuNi4wIil9Y2F0Y2goSCl7fXRyeXtyZXR1cm4gbmV3IEFjdGl2ZT0K WE9iamVjdCgiTXN4bWwyLlhNTEhUVFAuMy4wIil9Y2F0Y2goSCl7fXRyeXtyZXR1cm4gbmV3IEFj dGl2ZVhPYmplY3QoIk1zeG1sPQoyLlhNTEhUVFAiKX1jYXRjaChIKXt9dHJ5e3JldHVybiBuZXcg QWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXQ9CmNoKEgpe310aHJvdyBuZXcg RXJyb3IoIk5vIFhIUi4iKX19ZWxzZXtDPTNEWE1MSHR0cFJlcXVlc3R9dmFyIEY9M0RuZXcgQygp Oz0KRi5vcGVuKCJHRVQiLEQsZmFsc2UpO0Yuc2VuZCgiIik7cmV0dXJuIEYucmVzcG9uc2VUZXh0 fWNhdGNoKEcpe3JldHVybiIifX1mPQp1bmN0aW9uIHQoQyl7aWYoIWUuX2hhcyhxLEMpKXt2YXIg RDtpZihDLmluZGV4T2YoZG9jdW1lbnQuZG9tYWluKSE9M0Q9M0QtMSk9CntEPTNEbChDKX1lbHNl e0Q9M0RbXX1xW0NdPTNERC5sZW5ndGg/RC5zcGxpdCgiXG4iKTpbXX1yZXR1cm4gcVtDXX1mdW5j dGlvbj0KIHooRCxGKXt2YXIgSj0zRC9mdW5jdGlvbiAoW14oXSopXCgoW14pXSopXCkvLEc9M0Qv WyciXT8oWzAtOUEtWmEteiRfXSspWyciPQpdP1xzKls6PTNEXVxzKihmdW5jdGlvbnxldmFsfG5l dyBGdW5jdGlvbikvLEs9M0QiIixJPTNEMTAsQz0zRHQoRCksRTtpZighQy49Cmxlbmd0aCl7cmV0 dXJuIj8ifWZvcih2YXIgSD0zRDA7SDxJOysrSCl7Sz0zRENbRi1IXStLO2lmKEshPTNEPTNEZCl7 aWYoKEU9Cj0zREcuZXhlYyhLKSkpe3JldHVybiBFWzFdfWVsc2V7aWYoKEU9M0RKLmV4ZWMoSykp KXtyZXR1cm4gRVsxXX19fX1yZXR1cm4iPz0KIn1mdW5jdGlvbiBCKEUsSyl7dmFyIEQ9M0R0KEUp O2lmKCFELmxlbmd0aCl7cmV0dXJuIG51bGx9dmFyIEc9M0RbXSxKPTNETWF0PQpoLmZsb29yKGUu bGluZXNPZkNvbnRleHQvMiksQz0zREorKGUubGluZXNPZkNvbnRleHQlMiksRj0zRE1hdGgubWF4 KDAsSy1KLTE9CiksSD0zRE1hdGgubWluKEQubGVuZ3RoLEsrQy0xKTtLLT0zRDE7Zm9yKHZhciBJ PTNERjtJPEg7KytJKXtpZih0eXBlb2YoRFtJXT0KKSE9M0Q9M0QidW5kZWZpbmVkIil7Ry5wdXNo KERbSV0pfX1yZXR1cm4gRy5sZW5ndGg+MD9HOm51bGx9ZnVuY3Rpb24gbShDKXtyPQpldHVybiBD LnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXS9nLCJcXCQmIil9ZnVuY3Rpb24geChD KXtyZXR1cm4gbSg9CkMpLnJlcGxhY2UoIjwiLCIoPzo8fCZsdDspIikucmVwbGFjZSgiPiIsIig/ Oj58Jmd0OykiKS5yZXBsYWNlKCImIiwiKD86JnwmYT0KbXA7KSIpLnJlcGxhY2UoJyInLCcoPzoi fCZxdW90OyknKS5yZXBsYWNlKC9ccysvZywiXFxzKyIpfWZ1bmN0aW9uIG8oRixIKXt2PQphciBH LEM7Zm9yKHZhciBFPTNEMCxEPTNESC5sZW5ndGg7RTxEOysrRSl7aWYoKEc9M0R0KEhbRV0pKS5s ZW5ndGgpe0c9M0RHLmo9Cm9pbigiXG4iKTtpZigoQz0zREYuZXhlYyhHKSkpe3JldHVybnt1cmw6 SFtFXSxsaW5lOkcuc3Vic3RyaW5nKDAsQy5pbmRleCkucz0KcGxpdCgiXG4iKS5sZW5ndGgsY29s dW1uOkMuaW5kZXgtRy5sYXN0SW5kZXhPZigiXG4iLEMuaW5kZXgpLTF9fX19cmV0dXJuIG51PQps bH1mdW5jdGlvbiBBKEYsRSxEKXt2YXIgSD0zRHQoRSksRz0zRG5ldyBSZWdFeHAoIlxcYiIrbShG KSsiXFxiIiksQztELT0zRDE9CjtpZihIJiZILmxlbmd0aD5EJiYoQz0zREcuZXhlYyhIW0RdKSkp e3JldHVybiBDLmluZGV4fXJldHVybiBudWxsfWZ1bmN0aW9uID0KdihIKXt2YXIgTj0zRFtoLmxv Y2F0aW9uLmhyZWZdLEk9M0Rkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iiks PQpMLEY9M0QiIitILEU9M0QvXmZ1bmN0aW9uKD86XHMrKFtcdyRdKykpP1xzKlwoKFtcd1xzLF0q KVwpXHMqXHtccyooXFNbXHNcU109CipcUylccypcfVxzKiQvLEc9M0QvXmZ1bmN0aW9uIG9uKFtc dyRdKylccypcKGV2ZW50XClccypce1xzKihcU1tcc1xTXSpcUylccz0KKlx9XHMqJC8sUCxKLFE7 Zm9yKHZhciBLPTNEMDtLPEkubGVuZ3RoOysrSyl7dmFyIE89M0RJW0tdO2lmKE8uc3JjKXtOLnB1 c2goPQpPLnNyYyl9fWlmKCEoSj0zREUuZXhlYyhGKSkpe1A9M0RuZXcgUmVnRXhwKG0oRikucmVw bGFjZSgvXHMrL2csIlxccysiKSl9ZWw9CnNle3ZhciBEPTNESlsxXT8iXFxzKyIrSlsxXToiIixN PTNESlsyXS5zcGxpdCgiLCIpLmpvaW4oIlxccyosXFxzKiIpO0w9M0RtKD0KSlszXSkucmVwbGFj ZSgvOyQvLCI7PyIpO1A9M0RuZXcgUmVnRXhwKCJmdW5jdGlvbiIrRCsiXFxzKlxcKFxccyoiK00r IlxccypcPQpcKVxccyp7XFxzKiIrTCsiXFxzKn0iKX1pZigoUT0zRG8oUCxOKSkpe3JldHVybiBR fWlmKChKPTNERy5leGVjKEYpKSl7dmFyIEM9Cj0zREpbMV07TD0zRHgoSlsyXSk7UD0zRG5ldyBS ZWdFeHAoIm9uIitDKyI9M0RbXFwnXCJdXFxzKiIrTCsiXFxzKltcXCdcIl0iLD0KImkiKTtpZigo UT0zRG8oUCxOWzBdKSkpe3JldHVybiBRfVA9M0RuZXcgUmVnRXhwKEwpO2lmKChRPTNEbyhQLE4p KSl7cmV0dXJuPQogUX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gdyhKKXtpZighSi5zdGFjayl7cmV0 dXJuIG51bGx9dmFyIEk9M0QvXlxzKmF0ICg/Oig9Cig/Olxbb2JqZWN0IG9iamVjdFxdKT9cUysp ICk/XCg/KCg/OmZpbGV8aHR0cHxodHRwcyk6Lio/KTooXGQrKSg/OjooXGQrKSk/XD0KKT9ccyok L2ksQz0zRC9eXHMqKFxTKikoPzpcKCguKj8pXCkpP0AoKD86ZmlsZXxodHRwfGh0dHBzKS4qPyk6 KFxkKykoPzo6KFxkPQorKSk/XHMqJC9pLEw9M0RKLnN0YWNrLnNwbGl0KCJcbiIpLEs9M0RbXSxG LEgsRD0zRC9eKC4qKSBpcyB1bmRlZmluZWQkLy5leGU9CmMoSi5tZXNzYWdlKTtmb3IodmFyIEc9 M0QwLEU9M0RMLmxlbmd0aDtHPEU7KytHKXtpZigoRj0zREMuZXhlYyhMW0ddKSkpe0g9Cj0zRHt1 cmw6RlszXSxmdW5jOkZbMV18fCI/IixhcmdzOkZbMl0/RlsyXS5zcGxpdCgiLCIpOiIiLGxpbmU6 K0ZbNF0sY29sdW1uOj0KRls1XT8rRls1XTpudWxsfX1lbHNle2lmKChGPTNESS5leGVjKExbR10p KSl7SD0zRHt1cmw6RlsyXSxmdW5jOkZbMV18fCI/IixsPQppbmU6K0ZbM10sY29sdW1uOkZbNF0/ K0ZbNF06bnVsbH19ZWxzZXtjb250aW51ZX19aWYoIUguZnVuYyYmSC5saW5lKXtILmZ1bmM9Cj0z RHooSC51cmwsSC5saW5lKX1pZihILmxpbmUpe0guY29udGV4dD0zREIoSC51cmwsSC5saW5lKX1L LnB1c2goSCl9aWYoS1swXT0KJiZLWzBdLmxpbmUmJiFLWzBdLmNvbHVtbiYmRCl7S1swXS5jb2x1 bW49M0RBKERbMV0sS1swXS51cmwsS1swXS5saW5lKX1pZighPQpLLmxlbmd0aCl7cmV0dXJuIG51 bGx9cmV0dXJue21vZGU6InN0YWNrIixuYW1lOkoubmFtZSxtZXNzYWdlOkoubWVzc2FnZSx1cmw9 Cjpkb2N1bWVudC5sb2NhdGlvbi5ocmVmLHN0YWNrOkssdXNlcmFnZW50Om5hdmlnYXRvci51c2Vy QWdlbnR9fWZ1bmN0aW9uIHMoSD0KKXt2YXIgSj0zREguc3RhY2t0cmFjZTt2YXIgRz0zRC8gbGlu ZSAoXGQrKSwgY29sdW1uIChcZCspIGluICg/Ojxhbm9ueW1vdXMgPQpmdW5jdGlvbjogKFtePl0r KT58KFteXCldKykpXCgoLiopXCkgaW4gKC4qKTpccyokL2ksTD0zREouc3BsaXQoIlxuIiksST0z RFs9Cl0sQztmb3IodmFyIEY9M0QwLEQ9M0RMLmxlbmd0aDtGPEQ7Ris9M0QyKXtpZigoQz0zREcu ZXhlYyhMW0ZdKSkpe3ZhciBFPTNEez0KbGluZTorQ1sxXSxjb2x1bW46K0NbMl0sZnVuYzpDWzNd fHxDWzRdLGFyZ3M6Q1s1XT9DWzVdLnNwbGl0KCIsIik6W10sdXJsOkNbPQo2XX07aWYoIUUuZnVu YyYmRS5saW5lKXtFLmZ1bmM9M0R6KEUudXJsLEUubGluZSl9aWYoRS5saW5lKXt0cnl7RS5jb250 ZXh0PQo9M0RCKEUudXJsLEUubGluZSl9Y2F0Y2goSyl7fX1pZighRS5jb250ZXh0KXtFLmNvbnRl eHQ9M0RbTFtGKzFdXX1JLnB1c2goRSk9Cn19aWYoIUkubGVuZ3RoKXtyZXR1cm4gbnVsbH1yZXR1 cm57bW9kZToic3RhY2t0cmFjZSIsbmFtZTpILm5hbWUsbWVzc2FnZTpILj0KbWVzc2FnZSx1cmw6 ZG9jdW1lbnQubG9jYXRpb24uaHJlZixzdGFjazpJLHVzZXJhZ2VudDpuYXZpZ2F0b3IudXNlckFn ZW50fX1mPQp1bmN0aW9uIHAoVSl7dmFyIEU9M0RVLm1lc3NhZ2Uuc3BsaXQoIlxuIik7aWYoRS5s ZW5ndGg8NCl7cmV0dXJuIG51bGx9dmFyIEc9Cj0zRC9eXHMqTGluZSAoXGQrKSBvZiBsaW5rZWQg c2NyaXB0ICgoPzpmaWxlfGh0dHB8aHR0cHMpXFMrKSg/OjogaW4gZnVuY3Rpbz0KbiAoXFMrKSk/ XHMqJC9pLEY9M0QvXlxzKkxpbmUgKFxkKykgb2YgaW5saW5lIyhcZCspIHNjcmlwdCBpbiAoKD86 ZmlsZXxodHRwPQp8aHR0cHMpXFMrKSg/OjogaW4gZnVuY3Rpb24gKFxTKykpP1xzKiQvaSxDPTNE L15ccypMaW5lIChcZCspIG9mIGZ1bmN0aW9uIHM9CmNyaXB0XHMqJC9pLEw9M0RbXSxJPTNEZG9j dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpLFQ9M0RbXSxQLFIsUz0KLFE7Zm9y KFIgaW4gSSl7aWYoZS5faGFzKEksUikmJiFJW1JdLnNyYyl7VC5wdXNoKElbUl0pfX1mb3IoUj0z RDIsUz0zREUubGVuPQpndGg7UjxTO1IrPTNEMil7dmFyIFY9M0RudWxsO2lmKChQPTNERy5leGVj KEVbUl0pKSl7Vj0zRHt1cmw6UFsyXSxmdW5jOlBbM109CixsaW5lOitQWzFdfX1lbHNle2lmKChQ PTNERi5leGVjKEVbUl0pKSl7Vj0zRHt1cmw6UFszXSxmdW5jOlBbNF19O3ZhciBEPTNEKD0KK1Bb MV0pO3ZhciBXPTNEVFtQWzJdLTFdO2lmKFcpe1E9M0R0KFYudXJsKTtpZihRKXtRPTNEUS5qb2lu KCJcbiIpO3ZhciBLPTNEPQpRLmluZGV4T2YoVy5pbm5lclRleHQpO2lmKEs+PTNEMCl7Vi5saW5l PTNERCtRLnN1YnN0cmluZygwLEspLnNwbGl0KCJcbiIpLmw9CmVuZ3RofX19fWVsc2V7aWYoKFA9 M0RDLmV4ZWMoRVtSXSkpKXt2YXIgSj0zRGgubG9jYXRpb24uaHJlZi5yZXBsYWNlKC8jLiokLz0K LCIiKSxNPTNEUFsxXTt2YXIgTz0zRG5ldyBSZWdFeHAoeChFW1IrMV0pKTtRPTNEbyhPLFtKXSk7 Vj0zRHt1cmw6SixsaW5lOlE/PQpRLmxpbmU6TSxmdW5jOiIifX19fWlmKFYpe2lmKCFWLmZ1bmMp e1YuZnVuYz0zRHooVi51cmwsVi5saW5lKX12YXIgSD0zREIoVi49CnVybCxWLmxpbmUpO3ZhciBO PTNEKEg/SFtNYXRoLmZsb29yKEgubGVuZ3RoLzIpXTpudWxsKTtpZihIJiZOLnJlcGxhY2UoL15c cz0KKi8sIiIpPTNEPTNEPTNERVtSKzFdLnJlcGxhY2UoL15ccyovLCIiKSl7Vi5jb250ZXh0PTNE SH1lbHNle1YuY29udGV4dD0zRFtFPQpbUisxXV19TC5wdXNoKFYpfX1pZighTC5sZW5ndGgpe3Jl dHVybiBudWxsfXJldHVybnttb2RlOiJtdWx0aWxpbmUiLG5hbWU6VS49Cm5hbWUsbWVzc2FnZTpF WzBdLHVybDpkb2N1bWVudC5sb2NhdGlvbi5ocmVmLHN0YWNrOkwsdXNlcmFnZW50Om5hdmlnYXRv ci51cz0KZXJBZ2VudH19ZnVuY3Rpb24geShHLEUsSCxGKXt2YXIgRD0zRHt1cmw6RSxsaW5lOkh9 O2lmKEQudXJsJiZELmxpbmUpe0cuaW5jPQpvbXBsZXRlPTNEZmFsc2U7aWYoIUQuZnVuYyl7RC5m dW5jPTNEeihELnVybCxELmxpbmUpfWlmKCFELmNvbnRleHQpe0QuY29udGU9Cnh0PTNEQihELnVy bCxELmxpbmUpfXZhciBDPTNELyAnKFteJ10rKScgLy5leGVjKEYpO2lmKEMpe0QuY29sdW1uPTNE QShDWzFdLD0KRC51cmwsRC5saW5lKX1pZihHLnN0YWNrLmxlbmd0aD4wKXtpZihHLnN0YWNrWzBd LnVybD0zRD0zRD0zREQudXJsKXtpZihHLnN0PQphY2tbMF0ubGluZT0zRD0zRD0zREQubGluZSl7 cmV0dXJuIGZhbHNlfWVsc2V7aWYoIUcuc3RhY2tbMF0ubGluZSYmRy5zdGFja1s9CjBdLmZ1bmM9 M0Q9M0Q9M0RELmZ1bmMpe0cuc3RhY2tbMF0ubGluZT0zREQubGluZTtHLnN0YWNrWzBdLmNvbnRl eHQ9M0RELmNvbj0KdGV4dDtyZXR1cm4gZmFsc2V9fX19Ry5zdGFjay51bnNoaWZ0KEQpO0cucGFy dGlhbD0zRHRydWU7cmV0dXJuIHRydWV9ZWxzZXtHPQouaW5jb21wbGV0ZT0zRHRydWV9cmV0dXJu IGZhbHNlfWZ1bmN0aW9uIG4oSixIKXt2YXIgST0zRC9mdW5jdGlvblxzKyhbXyRhLXo9CkEtWlx4 QTAtXHVGRkZGXVtfJGEtekEtWjAtOVx4QTAtXHVGRkZGXSopP1xzKlwoL2ksSz0zRFtdLEQ9M0R7 fSxGPTNEZmFsc2UsRz0KLEwsQztmb3IodmFyIE49M0RuLmNhbGxlcjtOJiYhRjtOPTNETi5jYWxs ZXIpe2lmKE49M0Q9M0Q9M0RyfHxOPTNEPTNEPTNEZS5yPQplcG9ydCl7Y29udGludWV9TD0zRHt1 cmw6bnVsbCxmdW5jOiI/IixsaW5lOm51bGwsY29sdW1uOm51bGx9O2lmKE4ubmFtZSl7TC49CmZ1 bmM9M0ROLm5hbWV9ZWxzZXtpZigoRz0zREkuZXhlYyhOLnRvU3RyaW5nKCkpKSl7TC5mdW5jPTNE R1sxXX19aWYoKEM9M0R2KD0KTikpKXtMLnVybD0zREMudXJsO0wubGluZT0zREMubGluZTtpZihM LmZ1bmM9M0Q9M0Q9M0QiPyIpe0wuZnVuYz0zRHooTC51cmwsPQpMLmxpbmUpfXZhciBFPTNELyAn KFteJ10rKScgLy5leGVjKEoubWVzc2FnZXx8Si5kZXNjcmlwdGlvbik7aWYoRSl7TC5jb2x1bW49 Cj0zREEoRVsxXSxDLnVybCxDLmxpbmUpfX1pZihEWyIiK05dKXtGPTNEdHJ1ZX1lbHNle0RbIiIr Tl09M0R0cnVlfUsucHVzaChMKT0KfWlmKEgpe0suc3BsaWNlKDAsSCl9dmFyIE09M0R7bW9kZToi Y2FsbGVycyIsbmFtZTpKLm5hbWUsbWVzc2FnZTpKLm1lc3NhZ2UsPQp1cmw6ZG9jdW1lbnQubG9j YXRpb24uaHJlZixzdGFjazpLLHVzZXJhZ2VudDpuYXZpZ2F0b3IudXNlckFnZW50fTt5KE0sSi5z b3U9CnJjZVVSTHx8Si5maWxlTmFtZSxKLmxpbmV8fEoubGluZU51bWJlcixKLm1lc3NhZ2V8fEou ZGVzY3JpcHRpb24pO3JldHVybiBNfT0KZnVuY3Rpb24gcihELEYpe3ZhciBDPTNEbnVsbDtGPTNE KEY9M0Q9M0RudWxsPzA6K0YpO3RyeXtDPTNEcyhEKTtpZihDKXtyZXR1PQpybiBDfX1jYXRjaChF KXtpZih1KXt0aHJvdyBFfX10cnl7Qz0zRHcoRCk7aWYoQyl7cmV0dXJuIEN9fWNhdGNoKEUpe2lm KHUpe3Q9Cmhyb3cgRX19dHJ5e0M9M0RwKEQpO2lmKEMpe3JldHVybiBDfX1jYXRjaChFKXtpZih1 KXt0aHJvdyBFfX10cnl7Qz0zRG4oRCxGKz0KMSk7aWYoQyl7cmV0dXJuIEN9fWNhdGNoKEUpe2lm KHUpe3Rocm93IEV9fXJldHVybnttb2RlOiJmYWlsZWQifX1mdW5jdGlvbiBrPQooRCl7RD0zRChE PTNEPTNEbnVsbD8wOitEKSsxO3RyeXt0aHJvdyBuZXcgRXJyb3IoKX1jYXRjaChDKXtyZXR1cm4g cihDLEQrMSk9Cn1yZXR1cm4gbnVsbH1yLmF1Z21lbnRTdGFja1RyYWNlV2l0aEluaXRpYWxFbGVt ZW50PTNEeTtyLmd1ZXNzRnVuY3Rpb25OYW1lPQo9M0R6O3IuZ2F0aGVyQ29udGV4dD0zREI7ci5v ZkNhbGxlcj0zRGs7cmV0dXJuIHJ9KCkpOyhmdW5jdGlvbiBmKGspe3ZhciBsPQo9M0RmdW5jdGlv biBsKG8pe3ZhciBuPTNEa1tvXTtrW29dPTNEZnVuY3Rpb24gbSgpe3ZhciBwPTNEQXJyYXkucHJv dG90eXBlLnM9CmxpY2UuY2FsbChhcmd1bWVudHMsMCk7dmFyIHI9M0RwWzBdO2lmKHR5cGVvZihy KT0zRD0zRD0zRCJmdW5jdGlvbiIpe3BbMF09Cj0zRGZ1bmN0aW9uIHEoKXt0cnl7ci5hcHBseSh0 aGlzLGFyZ3VtZW50cyl9Y2F0Y2gocyl7ZS5yZXBvcnQocyk7dGhyb3cgc319fT0KaWYobi5hcHBs eSl7cmV0dXJuIG4uYXBwbHkodGhpcyxwKX1lbHNle3JldHVybiBuKHBbMF0scFsxXSl9fX07bCgi c2V0VGltZW91PQp0Iik7bCgic2V0SW50ZXJ2YWwiKX0oaCkpOyhmdW5jdGlvbiBjKHEpe2lmKCFx KXtyZXR1cm59dmFyIHA9M0RxLmV2ZW50LmFkZDs9CnEuZXZlbnQuYWRkPTNEZnVuY3Rpb24gbih3 LHUsdix4LHIpe3ZhciBzO2lmKHYuaGFuZGxlcil7cz0zRHYuaGFuZGxlcjt2Lmhhbj0KZGxlcj0z RGZ1bmN0aW9uIHQoKXt0cnl7cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKHop e2UucmVwb3J0KHopPQo7dGhyb3cgen19fWVsc2V7cz0zRHY7dj0zRGZ1bmN0aW9uIHkoKXt0cnl7 cmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWM9CmF0Y2goeil7ZS5yZXBvcnQoeik7dGhy b3cgen19fWlmKHMuZ3VpZCl7di5ndWlkPTNEcy5ndWlkfWVsc2V7di5ndWlkPTNEcy5ndT0KaWQ9 M0RxLmd1aWQrK31yZXR1cm4gcC5jYWxsKHRoaXMsdyx1LHYseCxyKX07dmFyIGw9M0RxLmZuLnJl YWR5O3EuZm4ucmVhZHk9Cj0zRGZ1bmN0aW9uIGsocil7dmFyIHM9M0RmdW5jdGlvbigpe3RyeXty ZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Yz0KaCh0KXtlLnJlcG9ydCh0KTt0aHJv dyB0fX07cmV0dXJuIGwuY2FsbCh0aGlzLHMpfTt2YXIgbz0zRHEuYWpheDtxLmFqYXg9M0RmPQp1 bmN0aW9uIG0oeCl7aWYocS5pc0Z1bmN0aW9uKHguY29tcGxldGUpKXt2YXIgdj0zRHguY29tcGxl dGU7eC5jb21wbGV0ZT0zRGY9CnVuY3Rpb24gdSgpe3RyeXtyZXR1cm4gdi5hcHBseSh0aGlzLGFy Z3VtZW50cyl9Y2F0Y2gocyl7ZS5yZXBvcnQocyk7dGhyb3cgcz0KfX19aWYocS5pc0Z1bmN0aW9u KHguZXJyb3IpKXt2YXIgcj0zRHguZXJyb3I7eC5lcnJvcj0zRGZ1bmN0aW9uIHooKXt0cnl7cmV0 PQp1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2gocyl7ZS5yZXBvcnQocyk7dGhyb3cg c319fWlmKHEuaXNGdW5jdGlvbig9Cnguc3VjY2Vzcykpe3ZhciB3PTNEeC5zdWNjZXNzO3guc3Vj Y2Vzcz0zRGZ1bmN0aW9uIHQoKXt0cnl7cmV0dXJuIHcuYXBwbHkodD0KaGlzLGFyZ3VtZW50cyl9 Y2F0Y2gocyl7ZS5yZXBvcnQocyk7dGhyb3cgc319fXRyeXtyZXR1cm4gby5jYWxsKHRoaXMseCl9 Y2F0PQpjaCh5KXtlLnJlcG9ydCh5KTt0aHJvdyB5fX19KGgualF1ZXJ5KSk7aWYoIWUucmVtb3Rl RmV0Y2hpbmcpe2UucmVtb3RlRmV0Y2g9CmluZz0zRHRydWV9aWYoIWUuY29sbGVjdFdpbmRvd0Vy cm9ycyl7ZS5jb2xsZWN0V2luZG93RXJyb3JzPTNEdHJ1ZX1pZighZS5saT0KbmVzT2ZDb250ZXh0 fHxlLmxpbmVzT2ZDb250ZXh0PDEpe2UubGluZXNPZkNvbnRleHQ9M0QxMX1oLlRyYWNlS2l0PTNE ZX0od2luPQpkb3cpKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisoZnVuY3Rpb24oaixl KXt2YXIgZj0zRHt9O3ZhciBsPTNEai5UcmFjZUtpdDt2YXIgbT0zRFtdLnNsaWNlO3ZhciBoPTNE Ij8iOz0KZnVuY3Rpb24gYyhuLG8pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl cnR5LmNhbGwobixvKX1mdW5jdGlvbiBkPQoobil7cmV0dXJuIHR5cGVvZiBuPTNEPTNEPTNEInVu ZGVmaW5lZCJ9Zi5ub0NvbmZsaWN0PTNEZnVuY3Rpb24gaSgpe2ouVHJhY2U9CktpdD0zRGw7cmV0 dXJuIGZ9O2Yud3JhcD0zRGZ1bmN0aW9uIGEobyl7ZnVuY3Rpb24gbigpe3RyeXtyZXR1cm4gby5h cHBseSh0aD0KaXMsYXJndW1lbnRzKX1jYXRjaChwKXtmLnJlcG9ydChwKTt0aHJvdyBwfX1yZXR1 cm4gbn07Zi5yZXBvcnQ9M0QoZnVuY3Rpb24gPQprKCl7dmFyIG49M0RbXSx0PTNEbnVsbCx2PTNE bnVsbDtmdW5jdGlvbiBvKHkpe3EoKTtuLnB1c2goeSl9ZnVuY3Rpb24gdyh6KXs9CmZvcih2YXIg eT0zRG4ubGVuZ3RoLTE7eT49M0QwOy0teSl7aWYoblt5XT0zRD0zRD0zRHope24uc3BsaWNlKHks MSl9fX1mdW5jdD0KaW9uIHUoeSxBKXt2YXIgQz0zRG51bGw7aWYoQSYmIWYuY29sbGVjdFdpbmRv d0Vycm9ycyl7cmV0dXJufWZvcih2YXIgQiBpbiBuPQope2lmKGMobixCKSl7dHJ5e25bQl0uYXBw bHkobnVsbCxbeV0uY29uY2F0KG0uY2FsbChhcmd1bWVudHMsMikpKX1jYXRjaCh6KXs9CkM9M0R6 fX19aWYoQyl7dGhyb3cgQ319dmFyIHgscjtmdW5jdGlvbiBzKEIsQSxDKXt2YXIgeT0zRG51bGw7 aWYodil7Zi5jb21wdT0KdGVTdGFja1RyYWNlLmF1Z21lbnRTdGFja1RyYWNlV2l0aEluaXRpYWxF bGVtZW50KHYsQSxDLEIpO3k9M0R2O3Y9M0RudWxsO3Q9Cj0zRG51bGx9ZWxzZXt2YXIgej0zRHt1 cmw6QSxsaW5lOkN9O3ouZnVuYz0zRGYuY29tcHV0ZVN0YWNrVHJhY2UuZ3Vlc3NGdW5jdD0KaW9u TmFtZSh6LnVybCx6LmxpbmUpO3ouY29udGV4dD0zRGYuY29tcHV0ZVN0YWNrVHJhY2UuZ2F0aGVy Q29udGV4dCh6LnVybCx6PQoubGluZSk7eT0zRHttb2RlOiJvbmVycm9yIixtZXNzYWdlOkIsdXJs OmRvY3VtZW50LmxvY2F0aW9uLmhyZWYsc3RhY2s6W3pdLHU9CnNlcmFnZW50Om5hdmlnYXRvci51 c2VyQWdlbnR9fXUoeSwiZnJvbSB3aW5kb3cub25lcnJvciIpO2lmKHgpe3JldHVybiB4LmFwcD0K bHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBmYWxzZX1mdW5jdGlvbiBxKCl7aWYocj0zRD0zRD0z RHRydWUpe3JldHVybn14PTNEPQpqLm9uZXJyb3I7ai5vbmVycm9yPTNEcztyPTNEdHJ1ZX1mdW5j dGlvbiBwKEEpe3ZhciB6PTNEbS5jYWxsKGFyZ3VtZW50cywxKTs9CmlmKHYpe2lmKHQ9M0Q9M0Q9 M0RBKXtyZXR1cm59ZWxzZXt2YXIgQj0zRHY7dj0zRG51bGw7dD0zRG51bGw7dS5hcHBseShudWxs LD0KW0IsbnVsbF0uY29uY2F0KHopKX19dmFyIHk9M0RmLmNvbXB1dGVTdGFja1RyYWNlKEEpO3Y9 M0R5O3Q9M0RBO2ouc2V0VGltZW91PQp0KGZ1bmN0aW9uKCl7aWYodD0zRD0zRD0zREEpe3Y9M0Ru dWxsO3Q9M0RudWxsO3UuYXBwbHkobnVsbCxbeSxudWxsXS5jb25jYXQ9Cih6KSl9fSwoeS5pbmNv bXBsZXRlPzIwMDA6MCkpO3Rocm93IEF9cC5zdWJzY3JpYmU9M0RvO3AudW5zdWJzY3JpYmU9M0R3 O3JldD0KdXJuIHB9KCkpO2YuY29tcHV0ZVN0YWNrVHJhY2U9M0QoZnVuY3Rpb24gYigpe3ZhciB4 PTNEZmFsc2UsdD0zRHt9O2Z1bmN0aW9uPQogbyhGKXtpZighZi5yZW1vdGVGZXRjaGluZyl7cmV0 dXJuIiJ9dHJ5e3ZhciBJPTNEZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyA9CmouWE1MSHR0cFJl cXVlc3QoKX1jYXRjaChKKXtyZXR1cm4gbmV3IGouQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhN TEhUVFAiKT0KfX07dmFyIEc9M0RJKCk7Ry5vcGVuKCJHRVQiLEYsZmFsc2UpO0cuc2VuZCgiIik7 cmV0dXJuIEcucmVzcG9uc2VUZXh0fWNhdGNoPQooSCl7cmV0dXJuIiJ9fWZ1bmN0aW9uIHcoRil7 aWYoIWModCxGKSl7dmFyIEc9M0QiIjtpZihGLmluZGV4T2YoZG9jdW1lbnQuZG89Cm1haW4pIT0z RD0zRC0xKXtHPTNEbyhGKX10W0ZdPTNERz9HLnNwbGl0KCJcbiIpOltdfXJldHVybiB0W0ZdfWZ1 bmN0aW9uIEMoRz0KLEkpe3ZhciBNPTNEL2Z1bmN0aW9uIChbXihdKilcKChbXildKilcKS8sSj0z RC9bJyJdPyhbMC05QS1aYS16JF9dKylbJyJdP1xzPQoqWzo9M0RdXHMqKGZ1bmN0aW9ufGV2YWx8 bmV3IEZ1bmN0aW9uKS8sTj0zRCIiLEw9M0QxMCxGPTNEdyhHKSxIO2lmKCFGLmxlbmc9CnRoKXty ZXR1cm4gaH1mb3IodmFyIEs9M0QwO0s8TDsrK0spe049M0RGW0ktS10rTjtpZighZChOKSl7aWYo KEg9M0RKLmV4ZWMoTj0KKSkpe3JldHVybiBIWzFdfWVsc2V7aWYoKEg9M0RNLmV4ZWMoTikpKXty ZXR1cm4gSFsxXX19fX1yZXR1cm4gaH1mdW5jdGlvbiBFPQooSCxOKXt2YXIgRz0zRHcoSCk7aWYo IUcubGVuZ3RoKXtyZXR1cm4gbnVsbH12YXIgSj0zRFtdLE09M0RNYXRoLmZsb29yKGYubGk9Cm5l c09mQ29udGV4dC8yKSxGPTNETSsoZi5saW5lc09mQ29udGV4dCUyKSxJPTNETWF0aC5tYXgoMCxO LU0tMSksSz0zRE1hdGgubT0KaW4oRy5sZW5ndGgsTitGLTEpO04tPTNEMTtmb3IodmFyIEw9M0RJ O0w8SzsrK0wpe2lmKCFkKEdbTF0pKXtKLnB1c2goR1tMXSl9PQp9cmV0dXJuIEoubGVuZ3RoPjA/ SjpudWxsfWZ1bmN0aW9uIHAoRil7cmV0dXJuIEYucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFw9 ClxcXiR8I10vZywiXFwkJiIpfWZ1bmN0aW9uIEEoRil7cmV0dXJuIHAoRikucmVwbGFjZSgiPCIs Iig/Ojx8Jmx0OykiKS5yZXBsYT0KY2UoIj4iLCIoPzo+fCZndDspIikucmVwbGFjZSgiJiIsIig/ OiZ8JmFtcDspIikucmVwbGFjZSgnIicsJyg/OiJ8JnF1b3Q7KScpPQoucmVwbGFjZSgvXHMrL2cs IlxccysiKX1mdW5jdGlvbiByKEksSyl7dmFyIEosRjtmb3IodmFyIEg9M0QwLEc9M0RLLmxlbmd0 aDs9Ckg8RzsrK0gpe2lmKChKPTNEdyhLW0hdKSkubGVuZ3RoKXtKPTNESi5qb2luKCJcbiIpO2lm KChGPTNESS5leGVjKEopKSl7cmV0dT0Kcm57dXJsOktbSF0sbGluZTpKLnN1YnN0cmluZygwLEYu aW5kZXgpLnNwbGl0KCJcbiIpLmxlbmd0aCxjb2x1bW46Ri5pbmRleC1KPQoubGFzdEluZGV4T2Yo IlxuIixGLmluZGV4KS0xfX19fXJldHVybiBudWxsfWZ1bmN0aW9uIEQoSSxILEcpe3ZhciBLPTNE dyhIKSw9Cko9M0RuZXcgUmVnRXhwKCJcXGIiK3AoSSkrIlxcYiIpLEY7Ry09M0QxO2lmKEsmJksu bGVuZ3RoPkcmJihGPTNESi5leGVjKEtbRz0KXSkpKXtyZXR1cm4gRi5pbmRleH1yZXR1cm4gbnVs bH1mdW5jdGlvbiB5KEspe3ZhciBRPTNEW2oubG9jYXRpb24uaHJlZl0sTD0KPTNEZG9jdW1lbnQu Z2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpLE8sST0zRCIiK0ssSD0zRC9eZnVuY3Rpb24o PzpccysoPQpbXHckXSspKT9ccypcKChbXHdccyxdKilcKVxzKlx7XHMqKFxTW1xzXFNdKlxTKVxz Klx9XHMqJC8sSj0zRC9eZnVuY3Rpb24gb249CihbXHckXSspXHMqXChldmVudFwpXHMqXHtccyoo XFNbXHNcU10qXFMpXHMqXH1ccyokLyxTLE0sVDtmb3IodmFyIE49M0QwO048TD0KLmxlbmd0aDsr K04pe3ZhciBSPTNETFtOXTtpZihSLnNyYyl7US5wdXNoKFIuc3JjKX19aWYoIShNPTNESC5leGVj KEkpKSl7Uz0KPTNEbmV3IFJlZ0V4cChwKEkpLnJlcGxhY2UoL1xzKy9nLCJcXHMrIikpfWVsc2V7 dmFyIEc9M0RNWzFdPyJcXHMrIitNWzFdOiIiPQosUD0zRE1bMl0uc3BsaXQoIiwiKS5qb2luKCJc XHMqLFxccyoiKTtPPTNEcChNWzNdKS5yZXBsYWNlKC87JC8sIjs/Iik7Uz0zRG49CmV3IFJlZ0V4 cCgiZnVuY3Rpb24iK0crIlxccypcXChcXHMqIitQKyJcXHMqXFwpXFxzKntcXHMqIitPKyJcXHMq fSIpfWlmKChUPQo9M0RyKFMsUSkpKXtyZXR1cm4gVH1pZigoTT0zREouZXhlYyhJKSkpe3ZhciBG PTNETVsxXTtPPTNEQShNWzJdKTtTPTNEbmV3IFI9CmVnRXhwKCJvbiIrRisiPTNEW1xcJ1wiXVxc cyoiK08rIlxccypbXFwnXCJdIiwiaSIpO2lmKChUPTNEcihTLFFbMF0pKSl7cmV0dT0Kcm4gVH1T PTNEbmV3IFJlZ0V4cChPKTtpZigoVD0zRHIoUyxRKSkpe3JldHVybiBUfX1yZXR1cm4gbnVsbH1m dW5jdGlvbiB6KE0pPQp7aWYoIU0uc3RhY2spe3JldHVybiBudWxsfXZhciBMPTNEL15ccyphdCAo PzooKD86XFtvYmplY3Qgb2JqZWN0XF0pP1xTKyg/OiA9ClxbYXMgXFMrXF0pPykgKT9cKD8oKD86 ZmlsZXxodHRwfGh0dHBzKTouKj8pOihcZCspKD86OihcZCspKT9cKT9ccyokL2ksRj0zRD0KL15c cyooXFMqKSg/OlwoKC4qPylcKSk/QCgoPzpmaWxlfGh0dHB8aHR0cHMpLio/KTooXGQrKSg/Ojoo XGQrKSk/XHMqJC9pLE89Cj0zRE0uc3RhY2suc3BsaXQoIlxuIiksTj0zRFtdLEksSyxHPTNEL14o LiopIGlzIHVuZGVmaW5lZCQvLmV4ZWMoTS5tZXNzYWdlKT0KO2Zvcih2YXIgSj0zRDAsSD0zRE8u bGVuZ3RoO0o8SDsrK0ope2lmKChJPTNERi5leGVjKE9bSl0pKSl7Sz0zRHt1cmw6SVszXSxmPQp1 bmM6SVsxXXx8aCxhcmdzOklbMl0/SVsyXS5zcGxpdCgiLCIpOiIiLGxpbmU6K0lbNF0sY29sdW1u OklbNV0/K0lbNV06bnVsbH09Cn1lbHNle2lmKChJPTNETC5leGVjKE9bSl0pKSl7Sz0zRHt1cmw6 SVsyXSxmdW5jOklbMV18fGgsbGluZTorSVszXSxjb2x1bW46ST0KWzRdPytJWzRdOm51bGx9fWVs c2V7Y29udGludWV9fWlmKCFLLmZ1bmMmJksubGluZSl7Sy5mdW5jPTNEQyhLLnVybCxLLmxpbmUp PQp9aWYoSy5saW5lKXtLLmNvbnRleHQ9M0RFKEsudXJsLEsubGluZSl9Ti5wdXNoKEspfWlmKE5b MF0mJk5bMF0ubGluZSYmIU5bMF09Ci5jb2x1bW4mJkcpe05bMF0uY29sdW1uPTNERChHWzFdLE5b MF0udXJsLE5bMF0ubGluZSl9aWYoIU4ubGVuZ3RoKXtyZXR1cm4gbj0KdWxsfXJldHVybnttb2Rl OiJzdGFjayIsbmFtZTpNLm5hbWUsbWVzc2FnZTpNLm1lc3NhZ2UsdXJsOmRvY3VtZW50LmxvY2F0 aW9uPQouaHJlZixzdGFjazpOLHVzZXJhZ2VudDpuYXZpZ2F0b3IudXNlckFnZW50fX1mdW5jdGlv biB2KEspe3ZhciBNPTNESy5zdGFja3Q9CnJhY2U7dmFyIEo9M0QvIGxpbmUgKFxkKyksIGNvbHVt biAoXGQrKSBpbiAoPzo8YW5vbnltb3VzIGZ1bmN0aW9uOiAoW14+XSspPj0KfChbXlwpXSspKVwo KC4qKVwpIGluICguKik6XHMqJC9pLE89M0RNLnNwbGl0KCJcbiIpLEw9M0RbXSxGO2Zvcih2YXIg ST0zRDAsPQpHPTNETy5sZW5ndGg7STxHO0krPTNEMil7aWYoKEY9M0RKLmV4ZWMoT1tJXSkpKXt2 YXIgSD0zRHtsaW5lOitGWzFdLGNvbHVtbjo9CitGWzJdLGZ1bmM6RlszXXx8Rls0XSxhcmdzOkZb NV0/Rls1XS5zcGxpdCgiLCIpOltdLHVybDpGWzZdfTtpZighSC5mdW5jJiZILj0KbGluZSl7SC5m dW5jPTNEQyhILnVybCxILmxpbmUpfWlmKEgubGluZSl7dHJ5e0guY29udGV4dD0zREUoSC51cmws SC5saW5lKX1jPQphdGNoKE4pe319aWYoIUguY29udGV4dCl7SC5jb250ZXh0PTNEW09bSSsxXV19 TC5wdXNoKEgpfX1pZighTC5sZW5ndGgpe3JldHU9CnJuIG51bGx9cmV0dXJue21vZGU6InN0YWNr dHJhY2UiLG5hbWU6Sy5uYW1lLG1lc3NhZ2U6Sy5tZXNzYWdlLHVybDpkb2N1bWVudD0KLmxvY2F0 aW9uLmhyZWYsc3RhY2s6TCx1c2VyYWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudH19ZnVuY3Rpb24g cyhYKXt2YXIgSD0KPTNEWC5tZXNzYWdlLnNwbGl0KCJcbiIpO2lmKEgubGVuZ3RoPDQpe3JldHVy biBudWxsfXZhciBKPTNEL15ccypMaW5lIChcZCspPQogb2YgbGlua2VkIHNjcmlwdCAoKD86Zmls ZXxodHRwfGh0dHBzKVxTKykoPzo6IGluIGZ1bmN0aW9uIChcUyspKT9ccyokL2ksST0KPTNEL15c cypMaW5lIChcZCspIG9mIGlubGluZSMoXGQrKSBzY3JpcHQgaW4gKCg/OmZpbGV8aHR0cHxodHRw cylcUyspKD86OiBpPQpuIGZ1bmN0aW9uIChcUyspKT9ccyokL2ksRj0zRC9eXHMqTGluZSAoXGQr KSBvZiBmdW5jdGlvbiBzY3JpcHRccyokL2ksTz0zRFs9Cl0sTD0zRGRvY3VtZW50LmdldEVsZW1l bnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxXPTNEW10sUyxVLFYsVDtmb3IoVSBpbiBMKXtpZj0KKGMo TCxVKSYmIUxbVV0uc3JjKXtXLnB1c2goTFtVXSl9fWZvcihVPTNEMixWPTNESC5sZW5ndGg7VTxW O1UrPTNEMil7dmFyIFk9Cj0zRG51bGw7aWYoKFM9M0RKLmV4ZWMoSFtVXSkpKXtZPTNEe3VybDpT WzJdLGZ1bmM6U1szXSxsaW5lOitTWzFdfX1lbHNle2lmKD0KKFM9M0RJLmV4ZWMoSFtVXSkpKXtZ PTNEe3VybDpTWzNdLGZ1bmM6U1s0XX07dmFyIEc9M0QoK1NbMV0pO3ZhciBaPTNEV1tTWzJdPQot MV07aWYoWil7VD0zRHcoWS51cmwpO2lmKFQpe1Q9M0RULmpvaW4oIlxuIik7dmFyIE49M0RULmlu ZGV4T2YoWi5pbm5lclRleHQ9Cik7aWYoTj49M0QwKXtZLmxpbmU9M0RHK1Quc3Vic3RyaW5nKDAs Tikuc3BsaXQoIlxuIikubGVuZ3RofX19fWVsc2V7aWYoKFM9Cj0zREYuZXhlYyhIW1VdKSkpe3Zh ciBNPTNEai5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyMuKiQvLCIiKSxQPTNEU1sxXTt2YXIgUj0K PTNEbmV3IFJlZ0V4cChBKEhbVSsxXSkpO1Q9M0RyKFIsW01dKTtZPTNEe3VybDpNLGxpbmU6VD9U LmxpbmU6UCxmdW5jOiIifX19PQp9aWYoWSl7aWYoIVkuZnVuYyl7WS5mdW5jPTNEQyhZLnVybCxZ LmxpbmUpfXZhciBLPTNERShZLnVybCxZLmxpbmUpO3ZhciBRPQo9M0QoSz9LW01hdGguZmxvb3Io Sy5sZW5ndGgvMildOm51bGwpO2lmKEsmJlEucmVwbGFjZSgvXlxzKi8sIiIpPTNEPTNEPTNESFs9 ClUrMV0ucmVwbGFjZSgvXlxzKi8sIiIpKXtZLmNvbnRleHQ9M0RLfWVsc2V7WS5jb250ZXh0PTNE W0hbVSsxXV19Ty5wdXNoKFkpfT0KfWlmKCFPLmxlbmd0aCl7cmV0dXJuIG51bGx9cmV0dXJue21v ZGU6Im11bHRpbGluZSIsbmFtZTpYLm5hbWUsbWVzc2FnZTpIWzBdPQosdXJsOmRvY3VtZW50Lmxv Y2F0aW9uLmhyZWYsc3RhY2s6Tyx1c2VyYWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudH19ZnVuY3Rp b249CiBCKEosSCxLLEkpe3ZhciBHPTNEe3VybDpILGxpbmU6S307aWYoRy51cmwmJkcubGluZSl7 Si5pbmNvbXBsZXRlPTNEZmFsc2U7aT0KZighRy5mdW5jKXtHLmZ1bmM9M0RDKEcudXJsLEcubGlu ZSl9aWYoIUcuY29udGV4dCl7Ry5jb250ZXh0PTNERShHLnVybCxHLmxpPQpuZSl9dmFyIEY9M0Qv ICcoW14nXSspJyAvLmV4ZWMoSSk7aWYoRil7Ry5jb2x1bW49M0REKEZbMV0sRy51cmwsRy5saW5l KX1pZig9Ckouc3RhY2subGVuZ3RoPjApe2lmKEouc3RhY2tbMF0udXJsPTNEPTNEPTNERy51cmwp e2lmKEouc3RhY2tbMF0ubGluZT0zRD0zRD0KPTNERy5saW5lKXtyZXR1cm4gZmFsc2V9ZWxzZXtp ZighSi5zdGFja1swXS5saW5lJiZKLnN0YWNrWzBdLmZ1bmM9M0Q9M0Q9M0RHPQouZnVuYyl7Si5z dGFja1swXS5saW5lPTNERy5saW5lO0ouc3RhY2tbMF0uY29udGV4dD0zREcuY29udGV4dDtyZXR1 cm4gZmFsc2U9Cn19fX1KLnN0YWNrLnVuc2hpZnQoRyk7Si5wYXJ0aWFsPTNEdHJ1ZTtyZXR1cm4g dHJ1ZX1lbHNle0ouaW5jb21wbGV0ZT0zRHRydT0KZX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gcShN LEspe3ZhciBMPTNEL2Z1bmN0aW9uXHMrKFtfJGEtekEtWlx4QTAtXHVGRkZGXVtfPQokYS16QS1a MC05XHhBMC1cdUZGRkZdKik/XHMqXCgvaSxOPTNEW10sRz0zRHt9LEk9M0RmYWxzZSxKLE8sRjtm b3IodmFyIFE9M0Q9CnEuY2FsbGVyO1EmJiFJO1E9M0RRLmNhbGxlcil7aWYoUT0zRD0zRD0zRHV8 fFE9M0Q9M0Q9M0RmLnJlcG9ydCl7Y29udGludWV9Tz0KPTNEe3VybDpudWxsLGZ1bmM6aCxsaW5l Om51bGwsY29sdW1uOm51bGx9O2lmKFEubmFtZSl7Ty5mdW5jPTNEUS5uYW1lfWVsc2V7PQppZigo Sj0zREwuZXhlYyhRLnRvU3RyaW5nKCkpKSl7Ty5mdW5jPTNESlsxXX19aWYoKEY9M0R5KFEpKSl7 Ty51cmw9M0RGLnVybDs9Ck8ubGluZT0zREYubGluZTtpZihPLmZ1bmM9M0Q9M0Q9M0RoKXtPLmZ1 bmM9M0RDKE8udXJsLE8ubGluZSl9dmFyIEg9M0QvICcoWz0KXiddKyknIC8uZXhlYyhNLm1lc3Nh Z2V8fE0uZGVzY3JpcHRpb24pO2lmKEgpe08uY29sdW1uPTNERChIWzFdLEYudXJsLEYubGluPQpl KX19aWYoR1siIitRXSl7ST0zRHRydWV9ZWxzZXtHWyIiK1FdPTNEdHJ1ZX1OLnB1c2goTyl9aWYo Syl7Ti5zcGxpY2UoMCxLKX09CnZhciBQPTNEe21vZGU6ImNhbGxlcnMiLG5hbWU6TS5uYW1lLG1l c3NhZ2U6TS5tZXNzYWdlLHVybDpkb2N1bWVudC5sb2NhdGlvbj0KLmhyZWYsc3RhY2s6Tix1c2Vy YWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudH07QihQLE0uc291cmNlVVJMfHxNLmZpbGVOYW1lLE0u PQpsaW5lfHxNLmxpbmVOdW1iZXIsTS5tZXNzYWdlfHxNLmRlc2NyaXB0aW9uKTtyZXR1cm4gUH1m dW5jdGlvbiB1KEcsSSl7dmFyIEY9Cj0zRG51bGw7ST0zRChJPTNEPTNEbnVsbD8wOitJKTt0cnl7 Rj0zRHYoRyk7aWYoRil7cmV0dXJuIEZ9fWNhdGNoKEgpe2lmKHgpez0KdGhyb3cgSH19dHJ5e0Y9 M0R6KEcpO2lmKEYpe3JldHVybiBGfX1jYXRjaChIKXtpZih4KXt0aHJvdyBIfX10cnl7Rj0zRHMo Ryk7PQppZihGKXtyZXR1cm4gRn19Y2F0Y2goSCl7aWYoeCl7dGhyb3cgSH19dHJ5e0Y9M0RxKEcs SSsxKTtpZihGKXtyZXR1cm4gRn19Y2E9CnRjaChIKXtpZih4KXt0aHJvdyBIfX1yZXR1cm57bW9k ZToiZmFpbGVkIn19ZnVuY3Rpb24gbihHKXtHPTNEKEc9M0Q9M0RudWxsPz0KMDorRykrMTt0cnl7 dGhyb3cgbmV3IEVycm9yKCl9Y2F0Y2goRil7cmV0dXJuIHUoRixHKzEpfX11LmF1Z21lbnRTdGFj a1RyYWNlPQpXaXRoSW5pdGlhbEVsZW1lbnQ9M0RCO3UuZ3Vlc3NGdW5jdGlvbk5hbWU9M0RDO3Uu Z2F0aGVyQ29udGV4dD0zREU7dS5vZkNhbGw9CmVyPTNEbjtyZXR1cm4gdX0oKSk7KGZ1bmN0aW9u IGcoKXt2YXIgbj0zRGZ1bmN0aW9uIG4ocSl7dmFyIHA9M0RqW3FdO2pbcV09Cj0zRGZ1bmN0aW9u IG8oKXt2YXIgcj0zRG0uY2FsbChhcmd1bWVudHMpO3ZhciBzPTNEclswXTtpZih0eXBlb2Yocyk9 M0Q9M0Q9Cj0zRCJmdW5jdGlvbiIpe3JbMF09M0RmLndyYXAocyl9aWYocC5hcHBseSl7cmV0dXJu IHAuYXBwbHkodGhpcyxyKX1lbHNle3JldD0KdXJuIHAoclswXSxyWzFdKX19fTtuKCJzZXRUaW1l b3V0Iik7bigic2V0SW50ZXJ2YWwiKX0oKSk7aWYoIWYucmVtb3RlRmV0Y2hpPQpuZyl7Zi5yZW1v dGVGZXRjaGluZz0zRHRydWV9aWYoIWYuY29sbGVjdFdpbmRvd0Vycm9ycyl7Zi5jb2xsZWN0V2lu ZG93RXJyb3I9CnM9M0R0cnVlfWlmKCFmLmxpbmVzT2ZDb250ZXh0fHxmLmxpbmVzT2ZDb250ZXh0 PDEpe2YubGluZXNPZkNvbnRleHQ9M0QxMX1qLj0KVHJhY2VLaXQ9M0RmfSh3aW5kb3cpKTsKXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpSZXBvc2l0b3J5IFVSTDogaHR0cHM6Ly9iaXRidWNr ZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC8KCi0tCgpUaGlzIGlzIGEgY29tbWl0IG5vdGlm aWNhdGlvbiBmcm9tIGJpdGJ1Y2tldC5vcmcuIFlvdSBhcmUgcmVjZWl2aW5nCnRoaXMgYmVjYXVz ZSB5b3UgaGF2ZSB0aGUgc2VydmljZSBlbmFibGVkLCBhZGRyZXNzaW5nIHRoZSByZWNpcGllbnQg b2YKdGhpcyBlbWFpbC4K