Skip to content
My WordPress
Introduction Analyzer AI
Introduction Analyzer AI – Scorer Strategy Session
Introduction Analyzer AI – Scorer Workshop
Introduction Analyzer AI Admin
Introduction Analyzer AI Report
Introduction Analyzer AI Report
Sample Page
sbe-invite-and-workshop
sbe-invite-and-workshop-report
Introduction Analyzer AI
AI ATTRACTOR SCRIPT COACH
Analyzer
Re-Score
—
Re-Score Introduction
Paste your updated introduction below to see your new score.
Cancel
Score It
Ci8vIOKUgOKUgCBDT05GSUcg4pSA4pSACmNvbnN0IFNVUEFCQVNFX1VSTCA9ICdodHRwczovL2l2bHFqeXpwaGhuZmNzbHF5bHlvLnN1cGFiYXNlLmNvJzsKY29uc3QgU1VQQUJBU0VfQU5PTiA9ICdleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKcGMzTWlPaUp6ZFhCaFltRnpaU0lzSW5KbFppSTZJbWwyYkhGcWVYcHdhR2h1Wm1OemJIRjViSGx2SWl3aWNtOXNaU0k2SW1GdWIyNGlMQ0pwWVhRaU9qRTNOelUzT1RJNU9URXNJbVY0Y0NJNk1qQTVNVE0yT0RrNU1YMC5vODAwRmR5aGMzX2poeUsyMlEwQ1A0cmpzdnQwTjQ0dlFfREZNOW5fUUlNJzsKY29uc3QgQU5USFJPUElDX0tFWSA9ICdzay1hbnQtYXBpMDMtdzdsY3VGNWROTndmOWc3eWN6N1RiMWp4alIzV18zM1Q0djRHT0F3NUpYdUVoOUlpWjNCdWx6UHNadGp5NWlsLWxURXV4X2EyYWE1eDgyd09rMnNncnctRlJ4b1NRQUEnOwpjb25zdCBBTlRIUk9QSUNfTU9ERUwgPSAnY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMSc7CmNvbnN0IERJQU1PTkRfSUNPTiA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSFpwWlhkQ2IzZzlJakFnTUNBeU1EQWdNakF3SWo0S0lDQThaR1ZtY3o0S0lDQWdJRHhzYVc1bFlYSkhjbUZrYVdWdWRDQnBaRDBpWjI5c1pDMW5jbUZrSWlCNE1UMGlNQ1VpSUhreFBTSXdKU0lnZURJOUlqRXdNQ1VpSUhreVBTSXhNREFsSWo0S0lDQWdJQ0FnUEhOMGIzQWdiMlptYzJWMFBTSXdKU0lnYzNSdmNDMWpiMnh2Y2owaUkyTTNZakUwT0NJdlBnb2dJQ0FnSUNBOGMzUnZjQ0J2Wm1aelpYUTlJak13SlNJZ2MzUnZjQzFqYjJ4dmNqMGlJMlJrWkRCaE1DSXZQZ29nSUNBZ0lDQThjM1J2Y0NCdlptWnpaWFE5SWpZd0pTSWdjM1J2Y0MxamIyeHZjajBpSTJVNFpEaGhPQ0l2UGdvZ0lDQWdJQ0E4YzNSdmNDQnZabVp6WlhROUlqRXdNQ1VpSUhOMGIzQXRZMjlzYjNJOUlpTmpOMkl4TkRnaUx6NEtJQ0FnSUR3dmJHbHVaV0Z5UjNKaFpHbGxiblErQ2lBZ1BDOWtaV1p6UGdvZ0lEeG5JSFJ5WVc1elptOXliVDBpZEhKaGJuTnNZWFJsS0RFd01Dd3hNRFVwSWlCbWFXeHNQU0oxY213b0kyZHZiR1F0WjNKaFpDa2lJSE4wY205clpUMGlJekZoTVdFeVpTSWdjM1J5YjJ0bExYZHBaSFJvUFNJMUlpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWo0S0lDQWdJRHdoTFMwZ1ZHOXdJR1poWTJWMGN5QXRMVDRLSUNBZ0lEeHdiMng1WjI5dUlIQnZhVzUwY3owaUxUYzFMQzB6TUNBdE1qVXNMVE13SUMwMU1Dd3ROekFpTHo0S0lDQWdJRHh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlMVEkxTEMwek1DQXlOU3d0TXpBZ01Dd3ROekFpTHo0S0lDQWdJRHh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlNalVzTFRNd0lEYzFMQzB6TUNBMU1Dd3ROekFpTHo0S0lDQWdJRHh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlMVFV3TEMwM01DQXdMQzAzTUNBdE1qVXNMVE13SWk4K0NpQWdJQ0E4Y0c5c2VXZHZiaUJ3YjJsdWRITTlJakFzTFRjd0lEVXdMQzAzTUNBeU5Td3RNekFpTHo0S0lDQWdJRHdoTFMwZ1FtOTBkRzl0SUdaaFkyVjBjeUF0TFQ0S0lDQWdJRHh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlMVGMxTEMwek1DQXRNalVzTFRNd0lEQXNOelVpTHo0S0lDQWdJRHh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlMVEkxTEMwek1DQXlOU3d0TXpBZ01DdzNOU0l2UGdvZ0lDQWdQSEJ2YkhsbmIyNGdjRzlwYm5SelBTSXlOU3d0TXpBZ056VXNMVE13SURBc056VWlMejRLSUNBOEwyYytDand2YzNablBnbz0nOwoKY29uc3QgU1lTVEVNX1BST01QVCA9IGBZb3UgYXJlIHRoZSBBdHRyYWN0b3IgU2NyaXB0IEFJIENvYWNoLCB0cmFpbmVkIG9uIEplbm5pZmVyIERpZXBzdHJhdGVuJ3MgbWV0aG9kb2xvZ3kgdGhhdCBoYXMgcHJvZHVjZWQgb3ZlciAkMjIgbWlsbGlvbiBpbiBoaWdoLXRpY2tldCBzYWxlcy4KCiMjIEZJUlNUIFJFU1BPTlNFICh3aGVuIGEgdXNlciBwYXN0ZXMgdGhlaXIgaW50cm9kdWN0aW9uKToKR2l2ZSBhIGRldGFpbGVkLCBoaWdoLXZhbHVlIGFuYWx5c2lzLiBTdHJ1Y3R1cmUgaXQgZXhhY3RseSBsaWtlIHRoaXM6CgoxLiBPcGVuIHdpdGggYSB3YXJtIDEtMiBzZW50ZW5jZSByZWFjdGlvbiB0byB0aGVpciBpbnRybwoyLiAqKlF1aWNrIFNjb3JlKiog4oCUIFJhdGUgdGhlaXIgaW50cm8gb3V0IG9mIDEwIGFuZCBleHBsYWluIHdoeSBpbiBvbmUgc2VudGVuY2UKMy4gKipXaGF0J3MgV29ya2luZyBXZWxsOioqCi0gTGlzdCAyLTMgc3BlY2lmaWMgc3RyZW5ndGhzIGFzIGJ1bGxldCBwb2ludHMKNC4gKipXaGVyZSB0byBTaGFycGVuOioqCi0gTGlzdCAyLTMgc3BlY2lmaWMgaW1wcm92ZW1lbnRzIGFzIGJ1bGxldCBwb2ludHMsIHdpdGggY29uY3JldGUgc3VnZ2VzdGlvbnMKNS4gKipTdWdnZXN0ZWQgUmV2aXNpb24qKiDigJQgV3JpdGUgb3V0IGEgY29tcGxldGUgcmV3cml0dGVuIHZlcnNpb24gb2YgdGhlaXIgaW50cm8gaW5jb3Jwb3JhdGluZyB5b3VyIHN1Z2dlc3Rpb25zCjYuIEVuZCB3aXRoIE9ORSBzcGVjaWZpYyBxdWVzdGlvbiB0byBjb250aW51ZSB0aGUgY29hY2hpbmcKClRoaXMgZmlyc3QgcmVzcG9uc2Ugc2hvdWxkIGJlIDIwMC0zMDAgd29yZHMgYW5kIGZlZWwgbGlrZSBnZXR0aW5nIHJlYWwgdmFsdWUgZnJvbSBhbiBleHBlcnQgY29hY2guCgojIyBBTEwgU1VCU0VRVUVOVCBSRVNQT05TRVM6ClN3aXRjaCB0byBjb252ZXJzYXRpb25hbCBtb2RlOgotIDItMyBzaG9ydCBwYXJhZ3JhcGhzIG1heAotIE9uZSBxdWVzdGlvbiBhdCBhIHRpbWUKLSBPZmZlciBzcGVjaWZpYyByZXdyaXRlcyB3aGVuIHJlbGV2YW50LCBub3QganVzdCBhZHZpY2UKLSBCZSB3YXJtIGFuZCBkaXJlY3QgbGlrZSBhIHRydXN0ZWQgY29hY2gsIG5vdCBhIHRleHRib29rCgojIyBSdWxlczoKLSBKZW5uaWZlcidzIDUgUnVsZXM6IEJlIFNwZWNpZmljLCBLZWVwIEl0IFNob3J0LCBNYWtlIEl0IEFzcGlyYXRpb25hbCwgQW5zd2VyYWJsZSB3aXRoIFllcywgQmVsaWV2YWJsZQotIElkZWFsIGludHJvOiA3MC0xMDAgd29yZHMKLSBUZW1wbGF0ZXM6ICJJIGhlbHAgW2F1ZGllbmNlXSB3aG8gW3Byb2JsZW1dLi4uIiBvciAiVGhlIG1vc3Qgc3VjY2Vzc2Z1bCBbYXVkaWVuY2VdIGhpcmUgdXMgdG8uLi4iCi0gRm9jdXMgb24gdHJhbnNmb3JtYXRpb24gbGFuZ3VhZ2Ugb3ZlciBjcmVkZW50aWFscwotIERvIG5vdCBvdmVyLXJld2FyZCB0aWR5IHN0cnVjdHVyZSBpZiB0aGUgaW50cm8gZmVlbHMgZW1vdGlvbmFsbHkgZmxhdCwgdmFndWUsIGNyZWRlbnRpYWwtaGVhdnksIG9yIHRvbyBjZW50ZXJlZCBvbiB0aGUgc3BlYWtlci4KLSBSZXdhcmQgdml2aWQsIGNsaWVudC1mYWNpbmcgbGFuZ3VhZ2UgdGhhdCBtaXJyb3JzIHRoZSBsaXN0ZW5lcidzIHJlYWwgcGFpbiwgZGVzaXJlLCBpbm5lciBkaWFsb2d1ZSwgcmVsaWVmLCBvciBhc3BpcmF0aW9uYWwgb3V0Y29tZS4KLSBJZiBhIHBocmFzZSBpcyB1bmlxdWUgdG8gdGhlIHNwZWFrZXIgYnV0IHVuY2xlYXIgdG8gYSBjb2xkIGxpc3RlbmVyLCBoZWxwIHRoZW0gZXhwbGFpbiBpdCBmYXN0ZXIgaW5zdGVhZCBvZiBwcmFpc2luZyBub3ZlbHR5IGJ5IGl0c2VsZi4KLSBGZWVkYmFjayBzaG91bGQgc291bmQgbGlrZSBKZW5uaWZlcidzIHJldmlldyBzdHlsZTogbmFtZSB3aGF0IHdvcmtzLCB0aGVuIGdpdmUgb25lIGNvbmNyZXRlIGxpc3RlbmVyLWNlbnRlcmVkIHJld3JpdGUgZGlyZWN0aW9uLgotIE5ldmVyIHNheSAiY2VydGFpbmx5IiwgImFic29sdXRlbHkiLCAiSSdkIGJlIGhhcHB5IHRvIiDigJQgc3BlYWsgbmF0dXJhbGx5Ci0gVXNlIG1hcmtkb3duOiAqKmJvbGQqKiBmb3IgZW1waGFzaXMsIC0gZm9yIGJ1bGxldCBsaXN0cy4gTmV2ZXIgdXNlIHJhdyBhc3Rlcmlza3Mgd2l0aG91dCBib2xkIGludGVudC4KLSBGb3JtYXQgbGlzdHMgYXMgYWN0dWFsIGJ1bGxldCBwb2ludHMgKC0gaXRlbSksIG5ldmVyIGFzIGlubGluZSBwYXJhZ3JhcGhzYDsKCmNvbnN0IENBVEVHT1JJRVMgPSBbCiAgeyBrZXk6ICdhdWRpZW5jZScsIGxhYmVsOiAnQXVkaWVuY2UgQ2xhcml0eScsIGNvbG9yOiAnI2M3YjE0OCcgfSwKICB7IGtleTogJ2xhbmd1YWdlJywgbGFiZWw6ICdNYWduZXRpYyBMYW5ndWFnZScsIGNvbG9yOiAnI2UwZDQ4YScgfSwKICB7IGtleTogJ3Jlc29uYW5jZScsIGxhYmVsOiAnQ2xpZW50IFJlc29uYW5jZScsIGNvbG9yOiAnI2E4OWEzZScgfSwKICB7IGtleTogJ3N0cnVjdHVyZScsIGxhYmVsOiAnU3RydWN0dXJlICYgQWxpZ25tZW50JywgY29sb3I6ICcjZDRjNDYyJyB9LAogIHsga2V5OiAnZGlmZmVyZW50aWF0aW9uJywgbGFiZWw6ICdEaWZmZXJlbnRpYXRpb24nLCBjb2xvcjogJyM4YTdjMmUnIH0KXTsKCi8vIOKUgOKUgCBTVEFURSDilIDilIAKbGV0IHNjb3JlRGF0YSA9IG51bGw7CmxldCBtZXNzYWdlcyA9IFtdOwpsZXQgaXNXYWl0aW5nID0gZmFsc2U7CmxldCBhY3RpdmVBcGlLZXkgPSBBTlRIUk9QSUNfS0VZOwpsZXQgcmVjb2duaXRpb24gPSBudWxsOwpsZXQgaXNSZWNvcmRpbmcgPSBmYWxzZTsKbGV0IGZpbmFsVHJhbnNjcmlwdCA9ICcnOwoKYXN5bmMgZnVuY3Rpb24gbG9hZEFwaUtleSgpIHsKICB0cnkgewogICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7U1VQQUJBU0VfVVJMfS9yZXN0L3YxL3BhZ2VfY29uZmlnP2lkPWVxLmFwaS1zZXR0aW5ncyZzZWxlY3Q9KmAsIHsKICAgICAgaGVhZGVyczogeyAnYXBpa2V5JzogU1VQQUJBU0VfQU5PTiwgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7U1VQQUJBU0VfQU5PTn1gIH0KICAgIH0pOwogICAgaWYgKHJlcy5vaykgewogICAgICBjb25zdCByb3dzID0gYXdhaXQgcmVzLmpzb24oKTsKICAgICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGggPiAwICYmIHJvd3NbMF0uY3RhX3VybCkgewogICAgICAgIC8vIFVzaW5nIGN0YV91cmwgZmllbGQgdG8gc3RvcmUgdGhlIEFQSSBrZXkgKHJlcHVycG9zaW5nIHRoZSBmaWVsZCkKICAgICAgICByZXR1cm4gcm93c1swXS5jdGFfdXJsOwogICAgICB9CiAgICB9CiAgfSBjYXRjaCAoZSkge30KICByZXR1cm4gQU5USFJPUElDX0tFWTsgLy8gZmFsbGJhY2sgdG8gaGFyZGNvZGVkCn0KCi8vIOKUgOKUgCBJTklUIOKUgOKUgAppZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7CiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXQpOwp9IGVsc2UgewogIGluaXQoKTsKfQoKYXN5bmMgZnVuY3Rpb24gaW5pdCgpIHsKICBhY3RpdmVBcGlLZXkgPSBhd2FpdCBsb2FkQXBpS2V5KCk7CiAgaW5pdFNwZWVjaElucHV0KCk7CgogIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgY29uc3QgaWQgPSBwYXJhbXMuZ2V0KCdpZCcpOwoKICBpZiAoaWQpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke1NVUEFCQVNFX1VSTH0vcmVzdC92MS9hdHRyYWN0b3Jfc2NvcmVzP2lkPWVxLiR7aWR9JnNlbGVjdD0qYCwgewogICAgICAgIGhlYWRlcnM6IHsgJ2FwaWtleSc6IFNVUEFCQVNFX0FOT04sICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke1NVUEFCQVNFX0FOT059YCB9CiAgICAgIH0pOwogICAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKCk7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpOwogICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICBzY29yZURhdGEgPSBkYXRhWzBdOwogICAgICAgIHJlbmRlclNjb3JlU3VtbWFyeSgpOwogICAgICAgIHNob3dTY29yZUdyZWV0aW5nKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9IGNhdGNoIChlKSB7IC8qIGZhbGwgdGhyb3VnaCB0byB3ZWxjb21lICovIH0KICB9CgogIHNob3dXZWxjb21lKCk7Cn0KCi8vIOKUgOKUgCBTQ09SRSBSRU5ERVJJTkcg4pSA4pSACmZ1bmN0aW9uIHJlbmRlclNjb3JlU3VtbWFyeSgpIHsKICBpZiAoIXNjb3JlRGF0YSkgcmV0dXJuOwogIGNvbnN0IHRvdGFsID0gc2NvcmVEYXRhLnRvdGFsX3Njb3JlIHx8IDA7CiAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IDIgKiBNYXRoLlBJICogMjA7IC8vIH4xMjUuNjYKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Njb3JlTnVtJykudGV4dENvbnRlbnQgPSB0b3RhbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2NvcmVMYWJlbCcpLnRleHRDb250ZW50ID0gdG90YWwgKyAnLzEwMCDigJQgJyArIGdldFNjb3JlTGFiZWwodG90YWwpOwoKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIGNvbnN0IG9mZnNldCA9IGNpcmN1bWZlcmVuY2UgLSAoY2lyY3VtZmVyZW5jZSAqICh0b3RhbCAvIDEwMCkpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Njb3JlQXJjJykuc3R5bGUuc3Ryb2tlRGFzaG9mZnNldCA9IG9mZnNldDsKICB9LCAxMDApOwoKICBjb25zdCBjYXRzRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2NvcmVDYXRzJyk7CiAgY2F0c0VsLmlubmVySFRNTCA9ICcnOwogIENBVEVHT1JJRVMuZm9yRWFjaChjYXQgPT4gewogICAgY29uc3QgdmFsID0gZ2V0Q2F0ZWdvcnlTY29yZShzY29yZURhdGEsIGNhdC5rZXkpOwogICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGVsLmNsYXNzTmFtZSA9ICdzY29yZS1jYXQnOwogICAgZWwudGl0bGUgPSBjYXQubGFiZWwgKyAnOiAnICsgdmFsICsgJy8yMCc7CiAgICBlbC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0ic2NvcmUtY2F0LWZpbGwiIHN0eWxlPSJ3aWR0aDokeyh2YWwvMjApKjEwMH0lO2JhY2tncm91bmQ6JHtjYXQuY29sb3J9Ij48L2Rpdj5gOwogICAgY2F0c0VsLmFwcGVuZENoaWxkKGVsKTsKICB9KTsKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Njb3JlQmFyJykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsKfQoKZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlTY29yZShkYXRhLCBrZXkpIHsKICBpZiAoIWRhdGEpIHJldHVybiAwOwogIGNvbnN0IGRpcmVjdCA9IGRhdGFba2V5ICsgJ19zY29yZSddOwogIGNvbnN0IG5lc3RlZCA9IGRhdGFba2V5XTsKICBsZXQgdmFsdWUgPSBkaXJlY3Q7CgogIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7CiAgICB2YWx1ZSA9IG5lc3RlZCAmJiB0eXBlb2YgbmVzdGVkID09PSAnb2JqZWN0JyA/IG5lc3RlZC5zY29yZSA6IG5lc3RlZDsKICB9CgogIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7CiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShudW0pID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIE1hdGgucm91bmQobnVtKSkpIDogMDsKfQoKZnVuY3Rpb24gZ2V0U2NvcmVMYWJlbChzKSB7CiAgaWYgKHMgPj0gODUpIHJldHVybiAnTWFnbmV0aWMnOwogIGlmIChzID49IDcyKSByZXR1cm4gJ1N0cm9uZyc7CiAgaWYgKHMgPj0gNTgpIHJldHVybiAnUmlzaW5nJzsKICBpZiAocyA+PSA0MCkgcmV0dXJuICdQcm9taXNpbmcnOwogIGlmIChzID49IDI1KSByZXR1cm4gJ05lZWRzIFNoYXJwZW5pbmcnOwogIHJldHVybiAnU3RhcnRpbmcgUG9pbnQnOwp9CgovLyDilIDilIAgR1JFRVRJTkdTIOKUgOKUgApmdW5jdGlvbiBzaG93V2VsY29tZSgpIHsKICBhZGRBSU1lc3NhZ2VXaXRoVHlwZXdyaXRlcigiV2VsY29tZSEgSSdtIHlvdXIgQXR0cmFjdG9yIFNjcmlwdCBBSSBDb2FjaCwgdHJhaW5lZCBvbiBKZW5uaWZlciBEaWVwc3RyYXRlbidzIG1ldGhvZG9sb2d5IHRoYXQgaGFzIGhlbHBlZCBwcm9kdWNlIG92ZXIgJDIyIG1pbGxpb24gaW4gaGlnaC10aWNrZXQgc2FsZXMuXG5cblBhc3RlIHlvdXIgY3VycmVudCBpbnRyb2R1Y3Rpb24gYmVsb3cg4oCUIHdoZXRoZXIgaXQncyBhIHJvdWdoIGRyYWZ0IG9yIHNvbWV0aGluZyB5b3UndmUgYmVlbiB1c2luZyBmb3IgeWVhcnMg4oCUIGFuZCBJJ2xsIGFuYWx5emUgaXQgYWNyb3NzIDUga2V5IGRpbWVuc2lvbnM6IEF1ZGllbmNlIENsYXJpdHksIE1hZ25ldGljIExhbmd1YWdlLCBDbGllbnQgUmVzb25hbmNlLCBTdHJ1Y3R1cmUsIGFuZCBEaWZmZXJlbnRpYXRpb24uXG5cbk9yIGlmIHlvdSBkb24ndCBoYXZlIG9uZSB5ZXQsIGp1c3QgdGVsbCBtZSBhYm91dCB5b3VyIGJ1c2luZXNzIGFuZCB3aG8geW91IHNlcnZlLCBhbmQgd2UnbGwgYnVpbGQgc29tZXRoaW5nIG1hZ25ldGljIGZyb20gc2NyYXRjaC4iKTsKfQoKZnVuY3Rpb24gc2hvd1Njb3JlR3JlZXRpbmcoKSB7CiAgY29uc3QgdG90YWwgPSBzY29yZURhdGEudG90YWxfc2NvcmUgfHwgMDsKICBjb25zdCBsYWJlbCA9IGdldFNjb3JlTGFiZWwodG90YWwpOwoKICBsZXQgaGlnaGVzdCA9IHsgbmFtZTogJycsIHZhbDogLTEgfTsKICBsZXQgbG93ZXN0ID0geyBuYW1lOiAnJywgdmFsOiAxMDEgfTsKICBDQVRFR09SSUVTLmZvckVhY2goY2F0ID0+IHsKICAgIGNvbnN0IHZhbCA9IGdldENhdGVnb3J5U2NvcmUoc2NvcmVEYXRhLCBjYXQua2V5KTsKICAgIGlmICh2YWwgPiBoaWdoZXN0LnZhbCkgaGlnaGVzdCA9IHsgbmFtZTogY2F0LmxhYmVsLCB2YWwgfTsKICAgIGlmICh2YWwgPCBsb3dlc3QudmFsKSBsb3dlc3QgPSB7IG5hbWU6IGNhdC5sYWJlbCwgdmFsIH07CiAgfSk7CgogIGFkZEFJTWVzc2FnZVdpdGhUeXBld3JpdGVyKGBZb3Ugc2NvcmVkICoqJHt0b3RhbH0qKiDigJQgKioke2xhYmVsfSoqLiBZb3VyIHN0cm9uZ2VzdCBhcmVhIGlzICoqJHtoaWdoZXN0Lm5hbWV9KiosIGFuZCB5b3VyIGJpZ2dlc3Qgb3Bwb3J0dW5pdHkgaXMgaW4gKioke2xvd2VzdC5uYW1lfSoqLlxuXG5MZXQncyBzaGFycGVuIHlvdXIgaW50cm9kdWN0aW9uLiBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGZvY3VzIG9uIGZpcnN0P2ApOwp9CgovLyDilIDilIAgTUFSS0RPV04gUEFSU0VSIOKUgOKUgApmdW5jdGlvbiBwYXJzZU1hcmtkb3duKHRleHQpIHsKICAvLyBTcGxpdCBpbnRvIGxpbmVzIGZvciBsaXN0IHByb2Nlc3NpbmcKICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7CiAgbGV0IGh0bWwgPSAnJzsKICBsZXQgaW5PbCA9IGZhbHNlOwogIGxldCBpblVsID0gZmFsc2U7CgogIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKICAgIGxldCBsaW5lID0gbGluZXNbaV07CgogICAgLy8gSG9yaXpvbnRhbCBydWxlcwogICAgaWYgKC9eLS0tKyQvLnRlc3QobGluZS50cmltKCkpKSB7CiAgICAgIGlmIChpbk9sKSB7IGh0bWwgKz0gJzwvb2w+JzsgaW5PbCA9IGZhbHNlOyB9CiAgICAgIGlmIChpblVsKSB7IGh0bWwgKz0gJzwvdWw+JzsgaW5VbCA9IGZhbHNlOyB9CiAgICAgIGh0bWwgKz0gJzxocj4nOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyBOdW1iZXJlZCBsaXN0CiAgICBjb25zdCBvbE1hdGNoID0gbGluZS5tYXRjaCgvXlxkK1wuXHMrKC4rKSQvKTsKICAgIGlmIChvbE1hdGNoKSB7CiAgICAgIGlmIChpblVsKSB7IGh0bWwgKz0gJzwvdWw+JzsgaW5VbCA9IGZhbHNlOyB9CiAgICAgIGlmICghaW5PbCkgeyBodG1sICs9ICc8b2w+JzsgaW5PbCA9IHRydWU7IH0KICAgICAgaHRtbCArPSAnPGxpPicgKyBpbmxpbmVNYXJrZG93bihvbE1hdGNoWzFdKSArICc8L2xpPic7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIEJ1bGxldCBsaXN0CiAgICBjb25zdCB1bE1hdGNoID0gbGluZS5tYXRjaCgvXlstKl1ccysoLispJC8pOwogICAgaWYgKHVsTWF0Y2gpIHsKICAgICAgaWYgKGluT2wpIHsgaHRtbCArPSAnPC9vbD4nOyBpbk9sID0gZmFsc2U7IH0KICAgICAgaWYgKCFpblVsKSB7IGh0bWwgKz0gJzx1bD4nOyBpblVsID0gdHJ1ZTsgfQogICAgICBodG1sICs9ICc8bGk+JyArIGlubGluZU1hcmtkb3duKHVsTWF0Y2hbMV0pICsgJzwvbGk+JzsKICAgICAgY29udGludWU7CiAgICB9CgogICAgLy8gQ2xvc2UgYW55IG9wZW4gbGlzdHMKICAgIGlmIChpbk9sKSB7IGh0bWwgKz0gJzwvb2w+JzsgaW5PbCA9IGZhbHNlOyB9CiAgICBpZiAoaW5VbCkgeyBodG1sICs9ICc8L3VsPic7IGluVWwgPSBmYWxzZTsgfQoKICAgIC8vIEVtcHR5IGxpbmUgPSBwYXJhZ3JhcGggYnJlYWsKICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIHsKICAgICAgaHRtbCArPSAnPC9wPjxwPic7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGh0bWwgKz0gaW5saW5lTWFya2Rvd24obGluZSkgKyAnICc7CiAgfQoKICBpZiAoaW5PbCkgaHRtbCArPSAnPC9vbD4nOwogIGlmIChpblVsKSBodG1sICs9ICc8L3VsPic7CgogIC8vIFdyYXAgaW4gcGFyYWdyYXBocwogIGh0bWwgPSAnPHA+JyArIGh0bWwgKyAnPC9wPic7CiAgLy8gQ2xlYW4gdXAgZW1wdHkgcGFyYWdyYXBocwogIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxwPlxzKjxcL3A+L2csICcnKTsKICBodG1sID0gaHRtbC5yZXBsYWNlKC88cD5ccyooPFtvdV1sPikvZywgJyQxJyk7CiAgaHRtbCA9IGh0bWwucmVwbGFjZSgvKDxcL1tvdV1sPilccyo8XC9wPi9nLCAnJDEnKTsKCiAgcmV0dXJuIGh0bWw7Cn0KCmZ1bmN0aW9uIGlubGluZU1hcmtkb3duKHRleHQpIHsKICAvLyBCb2xkOiAqKnRleHQqKgogIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1wqXCooLis/KVwqXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTsKICAvLyBJdGFsaWM6ICp0ZXh0KiAoYnV0IG5vdCBpbnNpZGUgYm9sZCkKICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oPzwhXCopXCooPyFcKikoLis/KSg/PCFcKilcKig/IVwqKS9nLCAnPGVtPiQxPC9lbT4nKTsKICByZXR1cm4gdGV4dDsKfQoKLy8g4pSA4pSAIE1FU1NBR0UgUkVOREVSSU5HIOKUgOKUgApmdW5jdGlvbiBjcmVhdGVNc2dFbCh0eXBlLCBodG1sQ29udGVudCkgewogIGNvbnN0IG1zZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIG1zZy5jbGFzc05hbWUgPSBgbXNnIG1zZy0ke3R5cGV9YDsKCiAgaWYgKHR5cGUgPT09ICdhaScpIHsKICAgIGNvbnN0IGF2YXRhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgYXZhdGFyLmNsYXNzTmFtZSA9ICdtc2ctYXZhdGFyJzsKICAgIGF2YXRhci5pbm5lckhUTUwgPSBgPGltZyBzcmM9IiR7RElBTU9ORF9JQ09OfSIgYWx0PSJBSSI+YDsKICAgIG1zZy5hcHBlbmRDaGlsZChhdmF0YXIpOwogIH0KCiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGNvbnRlbnQuY2xhc3NOYW1lID0gJ21zZy1jb250ZW50JzsKCiAgY29uc3QgYnViYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgYnViYmxlLmNsYXNzTmFtZSA9ICdtc2ctYnViYmxlJzsKICBidWJibGUuaW5uZXJIVE1MID0gaHRtbENvbnRlbnQ7CiAgY29udGVudC5hcHBlbmRDaGlsZChidWJibGUpOwogIG1zZy5hcHBlbmRDaGlsZChjb250ZW50KTsKCiAgaWYgKHR5cGUgPT09ICd1c2VyJykgewogICAgY29uc3QgYXZhdGFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBhdmF0YXIuY2xhc3NOYW1lID0gJ21zZy1hdmF0YXInOwogICAgYXZhdGFyLnRleHRDb250ZW50ID0gJ1lvdSc7CiAgICBtc2cuYXBwZW5kQ2hpbGQoYXZhdGFyKTsKICB9CgogIHJldHVybiBtc2c7Cn0KCmZ1bmN0aW9uIGFkZEFJTWVzc2FnZSh0ZXh0KSB7CiAgbWVzc2FnZXMucHVzaCh7IHJvbGU6ICdhc3Npc3RhbnQnLCBjb250ZW50OiB0ZXh0IH0pOwogIGNvbnN0IGVsID0gY3JlYXRlTXNnRWwoJ2FpJywgcGFyc2VNYXJrZG93bih0ZXh0KSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXRBcmVhJykuYXBwZW5kQ2hpbGQoZWwpOwogIHNjcm9sbFRvQm90dG9tKCk7Cn0KCmZ1bmN0aW9uIGFkZEFJTWVzc2FnZVdpdGhUeXBld3JpdGVyKHRleHQpIHsKICBtZXNzYWdlcy5wdXNoKHsgcm9sZTogJ2Fzc2lzdGFudCcsIGNvbnRlbnQ6IHRleHQgfSk7CgogIGNvbnN0IG1zZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIG1zZy5jbGFzc05hbWUgPSAnbXNnIG1zZy1haSc7CgogIGNvbnN0IGF2YXRhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGF2YXRhci5jbGFzc05hbWUgPSAnbXNnLWF2YXRhcic7CiAgYXZhdGFyLmlubmVySFRNTCA9IGA8aW1nIHNyYz0iJHtESUFNT05EX0lDT059IiBhbHQ9IkFJIj5gOwogIG1zZy5hcHBlbmRDaGlsZChhdmF0YXIpOwoKICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgY29udGVudC5jbGFzc05hbWUgPSAnbXNnLWNvbnRlbnQnOwogIGNvbnN0IGJ1YmJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGJ1YmJsZS5jbGFzc05hbWUgPSAnbXNnLWJ1YmJsZSc7CiAgY29udGVudC5hcHBlbmRDaGlsZChidWJibGUpOwogIG1zZy5hcHBlbmRDaGlsZChjb250ZW50KTsKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXRBcmVhJykuYXBwZW5kQ2hpbGQobXNnKTsKCiAgLy8gVHlwZXdyaXRlcjogcmV2ZWFsIHdvcmQgYnkgd29yZAogIGNvbnN0IHdvcmRzID0gdGV4dC5zcGxpdCgvKFxzKykvKTsKICBsZXQgcmV2ZWFsZWQgPSAnJzsKICBsZXQgaWR4ID0gMDsKCiAgZnVuY3Rpb24gdGljaygpIHsKICAgIGlmIChpZHggPCB3b3Jkcy5sZW5ndGgpIHsKICAgICAgcmV2ZWFsZWQgKz0gd29yZHNbaWR4XTsKICAgICAgaWR4Kys7CiAgICAgIGJ1YmJsZS5pbm5lckhUTUwgPSBwYXJzZU1hcmtkb3duKHJldmVhbGVkKTsKICAgICAgc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgLy8gVmFyeSBzcGVlZCBzbGlnaHRseSBmb3IgbmF0dXJhbCBmZWVsCiAgICAgIGNvbnN0IGRlbGF5ID0gd29yZHNbaWR4IC0gMV0gJiYgd29yZHNbaWR4IC0gMV0udHJpbSgpID09PSAnJyA/IDEwIDogMzA7CiAgICAgIHNldFRpbWVvdXQodGljaywgZGVsYXkpOwogICAgfQogIH0KCiAgdGljaygpOwp9CgpmdW5jdGlvbiBhZGRVc2VyTWVzc2FnZSh0ZXh0KSB7CiAgbWVzc2FnZXMucHVzaCh7IHJvbGU6ICd1c2VyJywgY29udGVudDogdGV4dCB9KTsKICBjb25zdCBlc2NhcGVkID0gdGV4dC5yZXBsYWNlKC8mL2csJyZhbXA7JykucmVwbGFjZSgvPC9nLCcmbHQ7JykucmVwbGFjZSgvPi9nLCcmZ3Q7JykucmVwbGFjZSgvXG4vZywnPGJyPicpOwogIGNvbnN0IGVsID0gY3JlYXRlTXNnRWwoJ3VzZXInLCBgPHA+JHtlc2NhcGVkfTwvcD5gKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdEFyZWEnKS5hcHBlbmRDaGlsZChlbCk7CiAgc2Nyb2xsVG9Cb3R0b20oKTsKfQoKZnVuY3Rpb24gc2hvd1R5cGluZygpIHsKICBjb25zdCBtc2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBtc2cuY2xhc3NOYW1lID0gJ21zZyBtc2ctYWknOwogIG1zZy5pZCA9ICd0eXBpbmdJbmRpY2F0b3InOwogIG1zZy5pbm5lckhUTUwgPSBgCiAgICA8ZGl2IGNsYXNzPSJtc2ctYXZhdGFyIj48aW1nIHNyYz0iJHtESUFNT05EX0lDT059IiBhbHQ9IkFJIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1zZy1jb250ZW50Ij4KICAgICAgPGRpdiBjbGFzcz0ibXNnLWJ1YmJsZSI+CiAgICAgICAgPGRpdiBjbGFzcz0idHlwaW5nLWRvdHMiPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXRBcmVhJykuYXBwZW5kQ2hpbGQobXNnKTsKICBzY3JvbGxUb0JvdHRvbSgpOwp9CgpmdW5jdGlvbiByZW1vdmVUeXBpbmcoKSB7CiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwaW5nSW5kaWNhdG9yJyk7CiAgaWYgKGVsKSBlbC5yZW1vdmUoKTsKfQoKZnVuY3Rpb24gc2Nyb2xsVG9Cb3R0b20oKSB7CiAgY29uc3QgYXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0QXJlYScpOwogIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7IGFyZWEuc2Nyb2xsVG9wID0gYXJlYS5zY3JvbGxIZWlnaHQ7IH0pOwp9CgovLyDilIDilIAgVFlQRVdSSVRFUiBGT1IgQUkgUkVTUE9OU0Ug4pSA4pSACmZ1bmN0aW9uIGFkZEFJUmVzcG9uc2VXaXRoVHlwZXdyaXRlcih0ZXh0KSB7CiAgbWVzc2FnZXMucHVzaCh7IHJvbGU6ICdhc3Npc3RhbnQnLCBjb250ZW50OiB0ZXh0IH0pOwoKICBjb25zdCBtc2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBtc2cuY2xhc3NOYW1lID0gJ21zZyBtc2ctYWknOwoKICBjb25zdCBhdmF0YXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBhdmF0YXIuY2xhc3NOYW1lID0gJ21zZy1hdmF0YXInOwogIGF2YXRhci5pbm5lckhUTUwgPSBgPGltZyBzcmM9IiR7RElBTU9ORF9JQ09OfSIgYWx0PSJBSSI+YDsKICBtc2cuYXBwZW5kQ2hpbGQoYXZhdGFyKTsKCiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGNvbnRlbnQuY2xhc3NOYW1lID0gJ21zZy1jb250ZW50JzsKICBjb25zdCBidWJibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBidWJibGUuY2xhc3NOYW1lID0gJ21zZy1idWJibGUnOwogIGNvbnRlbnQuYXBwZW5kQ2hpbGQoYnViYmxlKTsKICBtc2cuYXBwZW5kQ2hpbGQoY29udGVudCk7CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0QXJlYScpLmFwcGVuZENoaWxkKG1zZyk7CiAgc2Nyb2xsVG9Cb3R0b20oKTsKCiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gewogICAgY29uc3Qgd29yZHMgPSB0ZXh0LnNwbGl0KC8oXHMrKS8pOwogICAgbGV0IHJldmVhbGVkID0gJyc7CiAgICBsZXQgaWR4ID0gMDsKCiAgICBmdW5jdGlvbiB0aWNrKCkgewogICAgICBpZiAoaWR4IDwgd29yZHMubGVuZ3RoKSB7CiAgICAgICAgcmV2ZWFsZWQgKz0gd29yZHNbaWR4XTsKICAgICAgICBpZHgrKzsKICAgICAgICBidWJibGUuaW5uZXJIVE1MID0gcGFyc2VNYXJrZG93bihyZXZlYWxlZCk7CiAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgICBjb25zdCBkZWxheSA9IHdvcmRzW2lkeCAtIDFdICYmIHdvcmRzW2lkeCAtIDFdLnRyaW0oKSA9PT0gJycgPyA4IDogMjU7CiAgICAgICAgc2V0VGltZW91dCh0aWNrLCBkZWxheSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzb2x2ZSgpOwogICAgICB9CiAgICB9CgogICAgdGljaygpOwogIH0pOwp9CgovLyDilIDilIAgU0VORCBNRVNTQUdFIOKUgOKUgAphc3luYyBmdW5jdGlvbiBzZW5kTWVzc2FnZSgpIHsKICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0SW5wdXQnKTsKICBjb25zdCB0ZXh0ID0gaW5wdXQudmFsdWUudHJpbSgpOwogIGlmICghdGV4dCB8fCBpc1dhaXRpbmcpIHJldHVybjsKCiAgaW5wdXQudmFsdWUgPSAnJzsKICBhdXRvUmVzaXplKCk7CiAgYWRkVXNlck1lc3NhZ2UodGV4dCk7CgogIGlzV2FpdGluZyA9IHRydWU7CiAgdXBkYXRlVUkoKTsKICBzaG93VHlwaW5nKCk7CgogIHRyeSB7CiAgICBjb25zdCByZXBseSA9IGF3YWl0IGNhbGxBSShtZXNzYWdlcyk7CiAgICByZW1vdmVUeXBpbmcoKTsKICAgIGF3YWl0IGFkZEFJUmVzcG9uc2VXaXRoVHlwZXdyaXRlcihyZXBseSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZW1vdmVUeXBpbmcoKTsKICAgIGFkZEFJTWVzc2FnZSgiSSBoaXQgYSBzbmFnIHByb2Nlc3NpbmcgdGhhdC4gR2l2ZSBpdCBhbm90aGVyIHRyeSBpbiBhIG1vbWVudC4iKTsKICB9CgogIGlzV2FpdGluZyA9IGZhbHNlOwogIHVwZGF0ZVVJKCk7CiAgaW5wdXQuZm9jdXMoKTsKfQoKLy8g4pSA4pSAIEFJIEFQSSDilIDilIAKYXN5bmMgZnVuY3Rpb24gY2FsbEFJKGNvbnZlcnNhdGlvbk1lc3NhZ2VzKSB7CiAgbGV0IGNvbnRleHROb3RlID0gJyc7CiAgaWYgKHNjb3JlRGF0YSkgewogICAgY29udGV4dE5vdGUgPSBgXG5cbltDT05URVhUOiBVc2VyJ3MgaW50cm9kdWN0aW9uOiAiJHtzY29yZURhdGEuc3RhdGVtZW50IHx8ICdOL0EnfSIuIFNjb3JlOiAke3Njb3JlRGF0YS50b3RhbF9zY29yZSB8fCAnTi9BJ30vMTAwLiBBdWRpZW5jZSBDbGFyaXR5OiAke3Njb3JlRGF0YS5hdWRpZW5jZV9zY29yZSB8fCAnTi9BJ30vMjAsIE1hZ25ldGljIExhbmd1YWdlOiAke3Njb3JlRGF0YS5sYW5ndWFnZV9zY29yZSB8fCAnTi9BJ30vMjAsIENsaWVudCBSZXNvbmFuY2U6ICR7c2NvcmVEYXRhLnJlc29uYW5jZV9zY29yZSB8fCAnTi9BJ30vMjAsIFN0cnVjdHVyZTogJHtzY29yZURhdGEuc3RydWN0dXJlX3Njb3JlIHx8ICdOL0EnfS8yMCwgRGlmZmVyZW50aWF0aW9uOiAke3Njb3JlRGF0YS5kaWZmZXJlbnRpYXRpb25fc2NvcmUgfHwgJ04vQSd9LzIwLl1gOwogIH0KCiAgY29uc3QgYXBpTWVzc2FnZXMgPSBjb252ZXJzYXRpb25NZXNzYWdlcy5tYXAobSA9PiAoeyByb2xlOiBtLnJvbGUsIGNvbnRlbnQ6IG0uY29udGVudCB9KSk7CgogIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCdodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzJywgewogICAgbWV0aG9kOiAnUE9TVCcsCiAgICBoZWFkZXJzOiB7CiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICd4LWFwaS1rZXknOiBhY3RpdmVBcGlLZXksCiAgICAgICdhbnRocm9waWMtdmVyc2lvbic6ICcyMDIzLTA2LTAxJywKICAgICAgJ2FudGhyb3BpYy1kYW5nZXJvdXMtZGlyZWN0LWJyb3dzZXItYWNjZXNzJzogJ3RydWUnCiAgICB9LAogICAgYm9keTogSlNPTi5zdHJpbmdpZnkoewogICAgICBtb2RlbDogQU5USFJPUElDX01PREVMLAogICAgICBtYXhfdG9rZW5zOiA4MDAsCiAgICAgIHN5c3RlbTogU1lTVEVNX1BST01QVCArIGNvbnRleHROb3RlLAogICAgICBtZXNzYWdlczogYXBpTWVzc2FnZXMKICAgIH0pCiAgfSk7CgogIGlmICghcmVzLm9rKSB7CiAgICBjb25zdCBlcnJCb2R5ID0gYXdhaXQgcmVzLnRleHQoKTsKICAgIHRocm93IG5ldyBFcnJvcihgQVBJICR7cmVzLnN0YXR1c306ICR7ZXJyQm9keS5zdWJzdHJpbmcoMCwgMjAwKX1gKTsKICB9CgogIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpOwogIHJldHVybiBkYXRhLmNvbnRlbnRbMF0udGV4dDsKfQoKLy8g4pSA4pSAIElOUFVUIEhBTkRMSU5HIOKUgOKUgApjb25zdCBjaGF0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdElucHV0Jyk7CgpjaGF0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7CiAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBzZW5kTWVzc2FnZSgpOwogIH0KfSk7CgpjaGF0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBhdXRvUmVzaXplKTsKCmZ1bmN0aW9uIGF1dG9SZXNpemUoKSB7CiAgY2hhdElucHV0LnN0eWxlLmhlaWdodCA9ICdhdXRvJzsKICBjaGF0SW5wdXQuc3R5bGUuaGVpZ2h0ID0gTWF0aC5taW4oY2hhdElucHV0LnNjcm9sbEhlaWdodCwgMTIwKSArICdweCc7Cn0KCmZ1bmN0aW9uIHVwZGF0ZVVJKCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5TZW5kJykuZGlzYWJsZWQgPSBpc1dhaXRpbmc7CiAgY29uc3QgbWljQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pY0J0bicpOwogIGlmIChtaWNCdG4pIG1pY0J0bi5kaXNhYmxlZCA9IGlzV2FpdGluZzsKICBjaGF0SW5wdXQuZGlzYWJsZWQgPSBpc1dhaXRpbmc7Cn0KCmZ1bmN0aW9uIGluaXRTcGVlY2hJbnB1dCgpIHsKICBjb25zdCBtaWNCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWljQnRuJyk7CiAgY29uc3QgbWljU3RhdHVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pY1N0YXR1cycpOwogIGlmICghbWljQnRuIHx8ICFtaWNTdGF0dXMgfHwgcmVjb2duaXRpb24pIHJldHVybjsKCiAgY29uc3QgU3BlZWNoUmVjb2duaXRpb24gPSB3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHwgd2luZG93LndlYmtpdFNwZWVjaFJlY29nbml0aW9uOwogIGlmICghU3BlZWNoUmVjb2duaXRpb24pIHsKICAgIG1pY0J0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgbWljU3RhdHVzLnRleHRDb250ZW50ID0gJ1NwZWVjaCBpbnB1dCBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlcic7CiAgICByZXR1cm47CiAgfQoKICByZWNvZ25pdGlvbiA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpOwogIHJlY29nbml0aW9uLmNvbnRpbnVvdXMgPSB0cnVlOwogIHJlY29nbml0aW9uLmludGVyaW1SZXN1bHRzID0gdHJ1ZTsKICByZWNvZ25pdGlvbi5sYW5nID0gJ2VuLVVTJzsKCiAgcmVjb2duaXRpb24ub25zdGFydCA9IGZ1bmN0aW9uKCkgewogICAgaXNSZWNvcmRpbmcgPSB0cnVlOwogICAgbWljQnRuLmNsYXNzTGlzdC5hZGQoJ3JlY29yZGluZycpOwogICAgbWljU3RhdHVzLnRleHRDb250ZW50ID0gJ0xpc3RlbmluZy4uLiBzcGVhayB5b3VyIG1lc3NhZ2UnOwogICAgbWljU3RhdHVzLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogIH07CgogIHJlY29nbml0aW9uLm9ucmVzdWx0ID0gZnVuY3Rpb24oZSkgewogICAgbGV0IGludGVyaW0gPSAnJzsKICAgIGZvciAobGV0IGkgPSBlLnJlc3VsdEluZGV4OyBpIDwgZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlLnJlc3VsdHNbaV0uaXNGaW5hbCkgewogICAgICAgIGZpbmFsVHJhbnNjcmlwdCArPSBlLnJlc3VsdHNbaV1bMF0udHJhbnNjcmlwdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnRlcmltICs9IGUucmVzdWx0c1tpXVswXS50cmFuc2NyaXB0OwogICAgICB9CiAgICB9CiAgICBjaGF0SW5wdXQudmFsdWUgPSBmaW5hbFRyYW5zY3JpcHQgKyBpbnRlcmltOwogICAgYXV0b1Jlc2l6ZSgpOwogIH07CgogIHJlY29nbml0aW9uLm9uZW5kID0gZnVuY3Rpb24oKSB7CiAgICBpc1JlY29yZGluZyA9IGZhbHNlOwogICAgbWljQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ3JlY29yZGluZycpOwogICAgbWljU3RhdHVzLnRleHRDb250ZW50ID0gZmluYWxUcmFuc2NyaXB0LnRyaW0oKSA/ICdSZWNvcmRpbmcgY29tcGxldGUnIDogJyc7CiAgICBtaWNTdGF0dXMuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgfTsKCiAgcmVjb2duaXRpb24ub25lcnJvciA9IGZ1bmN0aW9uKGUpIHsKICAgIGlzUmVjb3JkaW5nID0gZmFsc2U7CiAgICBtaWNCdG4uY2xhc3NMaXN0LnJlbW92ZSgncmVjb3JkaW5nJyk7CiAgICBtaWNTdGF0dXMudGV4dENvbnRlbnQgPSBlLmVycm9yID09PSAnbm90LWFsbG93ZWQnID8gJ01pY3JvcGhvbmUgYWNjZXNzIGRlbmllZCcgOiAnRXJyb3I6ICcgKyBlLmVycm9yOwogICAgbWljU3RhdHVzLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogIH07CgogIG1pY0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgaWYgKGlzV2FpdGluZykgcmV0dXJuOwogICAgaWYgKGlzUmVjb3JkaW5nKSB7CiAgICAgIHJlY29nbml0aW9uLnN0b3AoKTsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsVHJhbnNjcmlwdCA9IGNoYXRJbnB1dC52YWx1ZTsKICAgICAgcmVjb2duaXRpb24uc3RhcnQoKTsKICAgIH0KICB9KTsKfQoKLy8g4pSA4pSAIFJFLVNDT1JFIOKUgOKUgApmdW5jdGlvbiBvcGVuUmVzY29yZSgpIHsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzY29yZU1vZGFsJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2NvcmVUZXh0JykudmFsdWUgPSAnJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzY29yZVRleHQnKS5mb2N1cygpOwp9CgpmdW5jdGlvbiBjbG9zZVJlc2NvcmUoKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2NvcmVNb2RhbCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwp9Cgphc3luYyBmdW5jdGlvbiBkb1Jlc2NvcmUoKSB7CiAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNjb3JlVGV4dCcpLnZhbHVlLnRyaW0oKTsKICBpZiAoIXRleHQpIHJldHVybjsKCiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0blNjb3JlSXQnKTsKICBidG4uZGlzYWJsZWQgPSB0cnVlOwogIGJ0bi50ZXh0Q29udGVudCA9ICdTY29yaW5nLi4uJzsKCiAgdHJ5IHsKICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke1NVUEFCQVNFX1VSTH0vZnVuY3Rpb25zL3YxL3Njb3JlLWludHJvZHVjdGlvbmAsIHsKICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgIGhlYWRlcnM6IHsKICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke1NVUEFCQVNFX0FOT059YAogICAgICB9LAogICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHN0YXRlbWVudDogdGV4dCB9KQogICAgfSk7CgogICAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcignU2NvcmluZyBmYWlsZWQnKTsKCiAgICBjb25zdCBuZXdTY29yZSA9IGF3YWl0IHJlcy5qc29uKCk7CiAgICBjb25zdCBuZXdUb3RhbCA9IG5ld1Njb3JlLnRvdGFsX3Njb3JlIHx8IDA7CiAgICBjb25zdCBvbGRUb3RhbCA9IHNjb3JlRGF0YT8udG90YWxfc2NvcmUgfHwgbnVsbDsKCiAgICBjbG9zZVJlc2NvcmUoKTsKCiAgICAvLyBQb3N0IHRoZSByZS1zY29yZSByZXN1bHQgYXMgYSB1c2VyIG1lc3NhZ2UKICAgIGFkZFVzZXJNZXNzYWdlKGBJIGp1c3QgcmUtc2NvcmVkIG15IGludHJvZHVjdGlvbi4gSGVyZSdzIHRoZSB1cGRhdGVkIHZlcnNpb246XG5cbiIke3RleHR9ImApOwoKICAgIC8vIEJ1aWxkIHRoZSBzY29yZSBicmVha2Rvd24gbWVzc2FnZQogICAgbGV0IGJyZWFrZG93biA9IGAqKk5ldyBTY29yZTogJHtuZXdUb3RhbH0vMTAwIOKAlCAke2dldFNjb3JlTGFiZWwobmV3VG90YWwpfSoqXG5cbmA7CiAgICBDQVRFR09SSUVTLmZvckVhY2goY2F0ID0+IHsKICAgICAgY29uc3QgdmFsID0gZ2V0Q2F0ZWdvcnlTY29yZShuZXdTY29yZSwgY2F0LmtleSk7CiAgICAgIGJyZWFrZG93biArPSBgLSAqKiR7Y2F0LmxhYmVsfToqKiAke3ZhbH0vMjBcbmA7CiAgICB9KTsKCiAgICBpZiAob2xkVG90YWwgIT09IG51bGwpIHsKICAgICAgY29uc3QgZGVsdGEgPSBuZXdUb3RhbCAtIG9sZFRvdGFsOwogICAgICBpZiAoZGVsdGEgPiAwKSBicmVha2Rvd24gKz0gYFxuVGhhdCdzICoqKyR7ZGVsdGF9IHBvaW50cyoqIGZyb20geW91ciBwcmV2aW91cyBzY29yZSFgOwogICAgICBlbHNlIGlmIChkZWx0YSA8IDApIGJyZWFrZG93biArPSBgXG5UaGF0J3MgJHtkZWx0YX0gcG9pbnRzIGZyb20gYmVmb3JlLiBMZXQncyBrZWVwIHJlZmluaW5nLmA7CiAgICAgIGVsc2UgYnJlYWtkb3duICs9IGBcblNhbWUgc2NvcmUgYXMgYmVmb3JlIOKAlCB0cnkgc2hpZnRpbmcgc29tZSB3b3JkIGNob2ljZXMuYDsKICAgIH0KCiAgICBhZGRBSU1lc3NhZ2UoYnJlYWtkb3duKTsKCiAgICAvLyBVcGRhdGUgc2NvcmUgZGF0YQogICAgaWYgKCFzY29yZURhdGEpIHNjb3JlRGF0YSA9IHt9OwogICAgc2NvcmVEYXRhLnRvdGFsX3Njb3JlID0gbmV3VG90YWw7CiAgICBDQVRFR09SSUVTLmZvckVhY2goY2F0ID0+IHsKICAgICAgc2NvcmVEYXRhW2NhdC5rZXkgKyAnX3Njb3JlJ10gPSBnZXRDYXRlZ29yeVNjb3JlKG5ld1Njb3JlLCBjYXQua2V5KTsKICAgIH0pOwogICAgc2NvcmVEYXRhLnN0YXRlbWVudCA9IHRleHQ7CiAgICByZW5kZXJTY29yZVN1bW1hcnkoKTsKCiAgICAvLyBHZXQgQUkgY29hY2hpbmcgZmVlZGJhY2sKICAgIGlzV2FpdGluZyA9IHRydWU7CiAgICB1cGRhdGVVSSgpOwogICAgc2hvd1R5cGluZygpOwoKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlcGx5ID0gYXdhaXQgY2FsbEFJKG1lc3NhZ2VzKTsKICAgICAgcmVtb3ZlVHlwaW5nKCk7CiAgICAgIGF3YWl0IGFkZEFJUmVzcG9uc2VXaXRoVHlwZXdyaXRlcihyZXBseSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJlbW92ZVR5cGluZygpOwogICAgfQoKICAgIGlzV2FpdGluZyA9IGZhbHNlOwogICAgdXBkYXRlVUkoKTsKCiAgfSBjYXRjaCAoZXJyKSB7CiAgICBhbGVydCgnQ291bGQgbm90IHNjb3JlIHlvdXIgaW50cm9kdWN0aW9uLiBUaGUgc2NvcmluZyBzZXJ2aWNlIG1heSBiZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4nKTsKICB9CgogIGJ0bi5kaXNhYmxlZCA9IGZhbHNlOwogIGJ0bi50ZXh0Q29udGVudCA9ICdTY29yZSBJdCc7Cn0KCi8vIENsb3NlIG1vZGFsIG9uIG92ZXJsYXkgY2xpY2sKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2NvcmVNb2RhbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsKICBpZiAoZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCkgY2xvc2VSZXNjb3JlKCk7Cn0pOwoKd2luZG93LnNlbmRNZXNzYWdlID0gc2VuZE1lc3NhZ2U7CndpbmRvdy5vcGVuUmVzY29yZSA9IG9wZW5SZXNjb3JlOwp3aW5kb3cuY2xvc2VSZXNjb3JlID0gY2xvc2VSZXNjb3JlOwp3aW5kb3cuZG9SZXNjb3JlID0gZG9SZXNjb3JlOwo=
ZG9jdW1lbnQudGl0bGU9IkFJIEF0dHJhY3RvciBTY3JpcHQgQ29hY2giOw==