uni-jsframework-vue3.js 667.3 KB
Newer Older
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
1 2
//{"version":"3.99","encode":"base64"}
dmFyIF9fVW5pU2VydmljZVN0YXJ0VGltZV9fID0gRGF0ZS5ub3coKTt2YXIgZ2xvYmFsPXRoaXM7IHZhciBwcm9jZXNzPXtlbnY6e319OyB2YXIgc2V0VGltZW91dD1nbG9iYWwuc2V0VGltZW91dDsKKCgpPT57dmFyIFRwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgUHA9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczt2YXIgd0k9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxDST1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO3ZhciBJcD0oZixzLHApPT5zIGluIGY/VHAoZixzLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpwfSk6ZltzXT1wLE5wPShmLHMpPT57Zm9yKHZhciBwIGluIHN8fChzPXt9KSl3SS5jYWxsKHMscCkmJklwKGYscCxzW3BdKTtpZihQcClmb3IodmFyIHAgb2YgUHAocykpQ0kuY2FsbChzLHApJiZJcChmLHAsc1twXSk7cmV0dXJuIGZ9O3ZhciBBST0oZixzKT0+e2Zvcih2YXIgcCBpbiBzKVRwKGYscCx7Z2V0OnNbcF0sZW51bWVyYWJsZTohMH0pfTt2YXIgT2E9T2JqZWN0LmZyZWV6ZTtmdW5jdGlvbiBkYyh7Z2V0Q3VycmVudFBhZ2VzOmYsdW5pOnMsVW5pU2hhcmVkOnAsVnVlOncsVnVlU2hhcmVkOk59KXt2YXIgRT1mdW5jdGlvbihoLHksUixGZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEl0KCl7bGV0IHplPWYoKSxudD16ZS5sZW5ndGg7aWYobnQpcmV0dXJuIHplW250LTFdfWZ1bmN0aW9uIFZ0KCl7bGV0IHplPUl0KCk7aWYoemUpcmV0dXJuIHplLiR2bX1mdW5jdGlvbiBPdCh6ZSxudCxBdCl7aWYoUi5pc1N0cmluZyh6ZSkpQXQ9bnQsbnQ9emUsemU9VnQoKTtlbHNlIGlmKHR5cGVvZiB6ZT09Im51bWJlciIpe2xldCBUbj1mKCkuZmluZChzbj0+c24uJHBhZ2UuaWQ9PT16ZSk7VG4/emU9VG4uJHZtOnplPVZ0KCl9aWYoIXplKXJldHVybjtpZih6ZS5fX2NhbGxfaG9vaylyZXR1cm4gemUuX19jYWxsX2hvb2sobnQsQXQpO2xldCBRdD16ZS4kW250XTtyZXR1cm4gUXQmJnkuaW52b2tlQXJyYXlGbnMoUXQsQXQpfWZ1bmN0aW9uIFAoemUsbnQsQXQsUXQpe1IuaXNGdW5jdGlvbihudCkmJkZlLmluamVjdEhvb2soemUsbnQuYmluZChBdCksUXQpfWZ1bmN0aW9uIHd0KHplLG50LEF0KXt2YXIgUXQ7bGV0IFRuPXplLm1wVHlwZXx8QXQuJG1wVHlwZTtpZighKCFUbnx8VG49PT0iY29tcG9uZW50IikmJihPYmplY3Qua2V5cyh6ZSkuZm9yRWFjaChzbj0+e2lmKHkuaXNVbmlMaWZlY3ljbGVIb29rKHNuLHplW3NuXSwhMSkpe2xldCBvcj16ZVtzbl07Ui5pc0FycmF5KG9yKT9vci5mb3JFYWNoKFduPT5QKHNuLFduLEF0LG50KSk6UChzbixvcixBdCxudCl9fSksVG49PT0icGFnZSIpKXtudC5fX2lzVmlzaWJsZT0hMDt0cnl7T3QoQXQseS5PTl9MT0FELG50LmF0dHJzLl9fcGFnZVF1ZXJ5KSxkZWxldGUgbnQuYXR0cnMuX19wYWdlUXVlcnksKChRdD1BdC4kcGFnZSk9PT1udWxsfHxRdD09PXZvaWQgMD92b2lkIDA6UXQub3BlblR5cGUpIT09InByZWxvYWRQYWdlIiYmT3QoQXQseS5PTl9TSE9XKX1jYXRjaChzbil7Y29uc29sZS5lcnJvcihzbi5tZXNzYWdlK3kuTElORUZFRUQrc24uc3RhY2spfX19ZnVuY3Rpb24gSW4oemUsbnQpe290KG50LHplLiRyZW5kZXJqcyx6ZVsiJCIreS5SRU5ERVJKU19NT0RVTEVTXSl9ZnVuY3Rpb24gb3QoemUsbnQsQXQ9e30pe2lmKCFSLmlzQXJyYXkobnQpKXJldHVybjtsZXQgUXQ9emUudWlkLFRuPXplLiR3eHNNb2R1bGVzfHwoemUuJHd4c01vZHVsZXM9W10pLHNuPXplLmN0eDtudC5mb3JFYWNoKG9yPT57QXRbb3JdJiYoc25bb3JdPXooUXQsQXRbb3JdLG9yKSxUbi5wdXNoKG9yKSl9KX1mdW5jdGlvbiB6KHplLG50LEF0KXtsZXQgUXQ9e307cmV0dXJuIG5ldyBQcm94eShRdCx7Z2V0KFRuLHNuKXtyZXR1cm4gUXRbc25dfHwoUXRbc25dPUooemUsbnQsQXQsc24pKX19KX1mdW5jdGlvbiBKKHplLG50LEF0LFF0KXtsZXQgVG49KCk9Pnt9LHNuPSgpPT55LldYU19QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShbemUsbnQsQXQrIi4iK1F0XSk7cmV0dXJuIG5ldyBQcm94eShUbix7Z2V0KG9yLFduKXtyZXR1cm4gV249PT0idG9KU09OIj9zbjpUbltXbl18fChUbltXbl09Sih6ZSxudCxBdCsiLiIrUXQsV24pKX0sYXBwbHkob3IsV24sQW4pe3JldHVybiB5LldYU19QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShbemUsbnQsQXQrIi4iK1F0LFsuLi5Bbl1dKX19KX1mdW5jdGlvbiBobih6ZSxudCl7b3QobnQsemUuJHd4cyx6ZVsiJCIreS5XWFNfTU9EVUxFU10pfWZ1bmN0aW9uIHVuKHplLG50LEF0KXtobih6ZSxudCksSW4oemUsbnQpLHd0KHplLG50LEF0KX1mdW5jdGlvbiB5bih6ZSxudCxBdCl7cmV0dXJuIHplW250XT1BdH1mdW5jdGlvbiBKbih6ZSwuLi5udCl7bGV0IEF0PXRoaXNbemVdO3JldHVybiBBdD9BdCguLi5udCk6KGNvbnNvbGUuZXJyb3IoYG1ldGhvZCAke3plfSBub3QgZm91bmRgKSxudWxsKX1mdW5jdGlvbiBnaSh6ZSl7cmV0dXJuIGZ1bmN0aW9uKEF0LFF0LFRuKXtpZighUXQpdGhyb3cgQXQ7bGV0IHNuPXplLl9pbnN0YW5jZTtpZighc258fCFzbi5wcm94eSl0aHJvdyBBdDtPdChzbi5wcm94eSx5Lk9OX0VSUk9SLEF0KX19ZnVuY3Rpb24gcGkoemUsbnQpe3JldHVybiB6ZT9bLi4ubmV3IFNldChbXS5jb25jYXQoemUsbnQpKV06bnR9ZnVuY3Rpb24gcXIoemUpe3kuVW5pTGlmZWN5Y2xlSG9va3MuZm9yRWFjaChudD0+e3plW250XT1waX0pfWxldCBncixTbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLHByPS9eKD86W0EtWmEtelxkKy9dezR9KSo/KD86W0EtWmEtelxkKy9dezJ9KD86PT0pP3xbQS1aYS16XGQrL117M309Pyk/JC87dHlwZW9mIGF0b2IhPSJmdW5jdGlvbiI/Z3I9ZnVuY3Rpb24oemUpe2lmKHplPVN0cmluZyh6ZSkucmVwbGFjZSgvW1x0XG5cZlxyIF0rL2csIiIpLCFwci50ZXN0KHplKSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBleGVjdXRlICdhdG9iJyBvbiAnV2luZG93JzogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKTt6ZSs9Ij09Ii5zbGljZSgyLSh6ZS5sZW5ndGgmMykpO2Zvcih2YXIgbnQsQXQ9IiIsUXQsVG4sc249MDtzbjx6ZS5sZW5ndGg7KW50PVNuLmluZGV4T2YoemUuY2hhckF0KHNuKyspKTw8MTh8U24uaW5kZXhPZih6ZS5jaGFyQXQoc24rKykpPDwxMnwoUXQ9U24uaW5kZXhPZih6ZS5jaGFyQXQoc24rKykpKTw8NnwoVG49U24uaW5kZXhPZih6ZS5jaGFyQXQoc24rKykpKSxBdCs9UXQ9PT02ND9TdHJpbmcuZnJvbUNoYXJDb2RlKG50Pj4xNiYyNTUpOlRuPT09NjQ/U3RyaW5nLmZyb21DaGFyQ29kZShudD4+MTYmMjU1LG50Pj44JjI1NSk6U3RyaW5nLmZyb21DaGFyQ29kZShudD4+MTYmMjU1LG50Pj44JjI1NSxudCYyNTUpO3JldHVybiBBdH06Z3I9YXRvYjtmdW5jdGlvbiBMcih6ZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChncih6ZSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihudCl7cmV0dXJuIiUiKygiMDAiK250LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9KS5qb2luKCIiKSl9ZnVuY3Rpb24gSnIoKXtsZXQgemU9cy5nZXRTdG9yYWdlU3luYygidW5pX2lkX3Rva2VuIil8fCIiLG50PXplLnNwbGl0KCIuIik7aWYoIXplfHxudC5sZW5ndGghPT0zKXJldHVybnt1aWQ6bnVsbCxyb2xlOltdLHBlcm1pc3Npb246W10sdG9rZW5FeHBpcmVkOjB9O2xldCBBdDt0cnl7QXQ9SlNPTi5wYXJzZShMcihudFsxXSkpfWNhdGNoKFF0KXt0aHJvdyBuZXcgRXJyb3IoIlx1ODNCN1x1NTNENlx1NUY1M1x1NTI0RFx1NzUyOFx1NjIzN1x1NEZFMVx1NjA2Rlx1NTFGQVx1OTUxOVx1RkYwQ1x1OEJFNlx1N0VDNlx1OTUxOVx1OEJFRlx1NEZFMVx1NjA2Rlx1NEUzQVx1RkYxQSIrUXQubWVzc2FnZSl9cmV0dXJuIEF0LnRva2VuRXhwaXJlZD1BdC5leHAqMWUzLGRlbGV0ZSBBdC5leHAsZGVsZXRlIEF0LmlhdCxBdH1mdW5jdGlvbiB2aSh6ZSl7emUudW5pSURIYXNSb2xlPWZ1bmN0aW9uKG50KXtsZXR7cm9sZTpBdH09SnIoKTtyZXR1cm4gQXQuaW5kZXhPZihudCk+LTF9LHplLnVuaUlESGFzUGVybWlzc2lvbj1mdW5jdGlvbihudCl7bGV0e3Blcm1pc3Npb246QXR9PUpyKCk7cmV0dXJuIHRoaXMudW5pSURIYXNSb2xlKCJhZG1pbiIpfHxBdC5pbmRleE9mKG50KT4tMX0semUudW5pSURUb2tlblZhbGlkPWZ1bmN0aW9uKCl7bGV0e3Rva2VuRXhwaXJlZDpudH09SnIoKTtyZXR1cm4gbnQ+RGF0ZS5ub3coKX19ZnVuY3Rpb24gUG4oemUpe2xldCBudD16ZS5fY29udGV4dC5jb25maWc7bnQuZXJyb3JIYW5kbGVyPXkuaW52b2tlQ3JlYXRlRXJyb3JIYW5kbGVyKHplLGdpKSxxcihudC5vcHRpb25NZXJnZVN0cmF0ZWdpZXMpO2xldCBBdD1udC5nbG9iYWxQcm9wZXJ0aWVzO3ZpKEF0KSxBdC4kc2V0PXluLEF0LiRhcHBseU9wdGlvbnM9dW4sQXQuJGNhbGxNZXRob2Q9Sm4seS5pbnZva2VDcmVhdGVWdWVBcHBIb29rKHplKX1yZXR1cm4gaC5pbml0QXBwPVBuLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxofSh7fSxwLE4sdyk7cmV0dXJuIEV9ZnVuY3Rpb24gZXUoZix7bnZ1ZTpzLFVuaVNoYXJlZDpwLFZ1ZVNoYXJlZDp3LFZ1ZVJlYWN0aXZpdHk6Tn0pe2xldCBFPXtwbGF0Zm9ybTpzLmNvbmZpZy5lbnYucGxhdGZvcm0sVW5pU2hhcmVkOnAsVnVlU2hhcmVkOncsVnVlUmVhY3Rpdml0eTpOfTtyZXR1cm4gZihFLHMuZG9jdW1lbnQpfWZ1bmN0aW9uIE9JKHtzZXRUaW1lb3V0OmYsY2xlYXJUaW1lb3V0OnMsdW5pOnAsZ2V0Q3VycmVudFBhZ2VzOncsVnVlOk4sd2VleDpFLHBsdXM6aCxCcm9hZGNhc3RDaGFubmVsOnksVW5pVmlld0pTQnJpZGdlOlIsVnVlU2hhcmVkOkZlLFVuaVNoYXJlZDpJdCxfX3VuaUNvbmZpZzpWdH0pe3ZhciBPdD1mdW5jdGlvbihQLHd0LEluKXsidXNlIHN0cmljdCI7bGV0IG90PVsibmF2aWdhdGUiLCJyZWRpcmVjdCIsInN3aXRjaFRhYiIsInJlTGF1bmNoIiwibmF2aWdhdGVCYWNrIl0sej1bInNsaWRlLWluLXJpZ2h0Iiwic2xpZGUtaW4tbGVmdCIsInNsaWRlLWluLXRvcCIsInNsaWRlLWluLWJvdHRvbSIsImZhZGUtaW4iLCJ6b29tLW91dCIsInpvb20tZmFkZS1vdXQiLCJwb3AtaW4iLCJub25lIl0sSj1bInNsaWRlLW91dC1yaWdodCIsInNsaWRlLW91dC1sZWZ0Iiwic2xpZGUtb3V0LXRvcCIsInNsaWRlLW91dC1ib3R0b20iLCJmYWRlLW91dCIsInpvb20taW4iLCJ6b29tLWZhZGUtaW4iLCJwb3Atb3V0Iiwibm9uZSJdLGhuPXtob3ZlckNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJuYXZpZ2F0b3ItaG92ZXIifSx1cmw6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG9wZW5UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJuYXZpZ2F0ZSIsdmFsaWRhdG9yKHYpe3JldHVybiBCb29sZWFuKH5vdC5pbmRleE9mKHYpKX19LGRlbHRhOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LGhvdmVyU3RhcnRUaW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjUwfSxob3ZlclN0YXlUaW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjYwMH0sZXhpc3RzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxob3ZlclN0b3BQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGFuaW1hdGlvblR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiIsdmFsaWRhdG9yKHYpe3JldHVybiF2fHx6LmNvbmNhdChKKS5pbmNsdWRlcyh2KX19LGFuaW1hdGlvbkR1cmF0aW9uOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OjMwMH19O2Z1bmN0aW9uIHVuKHYpe3JldHVybigpPT57aWYodi5vcGVuVHlwZSE9PSJuYXZpZ2F0ZUJhY2siJiYhdi51cmwpe2NvbnNvbGUuZXJyb3IoIjxuYXZpZ2F0b3IvPiBzaG91bGQgaGF2ZSB1cmwgYXR0cmlidXRlIHdoZW4gdXNpbmcgbmF2aWdhdGVUbywgcmVkaXJlY3RUbywgcmVMYXVuY2ggb3Igc3dpdGNoVGFiIik7cmV0dXJufWxldCB4PXBhcnNlSW50KHYuYW5pbWF0aW9uRHVyYXRpb24pO3N3aXRjaCh2Lm9wZW5UeXBlKXtjYXNlIm5hdmlnYXRlIjpwLm5hdmlnYXRlVG8oe3VybDp2LnVybCxhbmltYXRpb25UeXBlOnYuYW5pbWF0aW9uVHlwZXx8InBvcC1pbiIsYW5pbWF0aW9uRHVyYXRpb246eH0pO2JyZWFrO2Nhc2UicmVkaXJlY3QiOnAucmVkaXJlY3RUbyh7dXJsOnYudXJsLGV4aXN0czp2LmV4aXN0c30pO2JyZWFrO2Nhc2Uic3dpdGNoVGFiIjpwLnN3aXRjaFRhYih7dXJsOnYudXJsfSk7YnJlYWs7Y2FzZSJyZUxhdW5jaCI6cC5yZUxhdW5jaCh7dXJsOnYudXJsfSk7YnJlYWs7Y2FzZSJuYXZpZ2F0ZUJhY2siOnAubmF2aWdhdGVCYWNrKHtkZWx0YTp2LmRlbHRhLGFuaW1hdGlvblR5cGU6di5hbmltYXRpb25UeXBlfHwicG9wLW91dCIsYW5pbWF0aW9uRHVyYXRpb246eH0pO2JyZWFrfX19ZnVuY3Rpb24geW4odil7aWYodi5ob3ZlckNsYXNzJiZ2LmhvdmVyQ2xhc3MhPT0ibm9uZSIpe2xldCB4PXtob3ZlckNsYXNzOnYuaG92ZXJDbGFzc307cmV0dXJuIHd0Lmhhc093bih2LCJob3ZlclN0YXJ0VGltZSIpJiYoeC5ob3ZlclN0YXJ0VGltZT12LmhvdmVyU3RhcnRUaW1lKSx3dC5oYXNPd24odiwiaG92ZXJTdGF5VGltZSIpJiYoeC5ob3ZlclN0YXlUaW1lPXYuaG92ZXJTdGF5VGltZSksd3QuaGFzT3duKHYsImhvdmVyU3RvcFByb3BhZ2F0aW9uIikmJih4LmhvdmVyU3RvcFByb3BhZ2F0aW9uPXYuaG92ZXJTdG9wUHJvcGFnYXRpb24pLHh9cmV0dXJue319ZnVuY3Rpb24gSm4odix4KXtyZXR1cm4gUC5jcmVhdGVFbGVtZW50Vk5vZGUoInUtdGV4dCIsd3QuZXh0ZW5kKHthcHBlbmRBc1RyZWU6ITB9LHgpLHYpfWxldCBnaT1beyJuYXZpZ2F0b3ItaG92ZXIiOnsiIjp7YmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDAuMSkiLG9wYWNpdHk6Ljd9fX1dLHBpPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJOYXZpZ2F0b3IiLHByb3BzOmhuLHN0eWxlczpnaSxzZXR1cCh2LHtzbG90czp4fSl7bGV0ICQ9dW4odik7cmV0dXJuKCk9PlAuY3JlYXRlVk5vZGUoInZpZXciLFAubWVyZ2VQcm9wcyh5bih2KSx7b25DbGljazokfSksW3guZGVmYXVsdCYmeC5kZWZhdWx0KCldKX19KTtmdW5jdGlvbiBxcih2KXtyZXR1cm4gU3ltYm9sKHYpfWZ1bmN0aW9uIGdyKCl7bGV0IHY7dHJ5e3Y9UC5nZXRDdXJyZW50SW5zdGFuY2UoKS5yb290LnByb3h5LiRwYWdlLmlkfWNhdGNoKHgpe2xldCAkPWgud2Vidmlldy5jdXJyZW50V2VidmlldygpLmlkO3Y9aXNOYU4oTnVtYmVyKCQpKT8kOk51bWJlcigkKX1yZXR1cm4gdn1sZXQgU24scHIsTHI7ZnVuY3Rpb24gSnIoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz09Im9iamVjdCImJnR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZ0eXBlb2YgZG9jdW1lbnQ9PSJvYmplY3QiPyJ3ZWJ2aWV3IjoidjgifWZ1bmN0aW9uIHZpKCl7cmV0dXJuIFNuLndlYnZpZXcuY3VycmVudFdlYnZpZXcoKS5pZH1sZXQgUG4semUsbnQ9e307ZnVuY3Rpb24gQXQodil7bGV0IHg9di5kYXRhJiZ2LmRhdGEuX19tZXNzYWdlO2lmKCF4fHwheC5fX3BhZ2UpcmV0dXJuO2xldCAkPXguX19wYWdlLFU9bnRbJF07VSYmVSh4KSx4LmtlZXB8fGRlbGV0ZSBudFskXX1mdW5jdGlvbiBRdCh2LHgpe0pyKCk9PT0idjgiP0xyPyhQbiYmUG4uY2xvc2UoKSxQbj1uZXcgTHIodmkoKSksUG4ub25tZXNzYWdlPUF0KTp6ZXx8KHplPXByLnJlcXVpcmVNb2R1bGUoImdsb2JhbEV2ZW50IiksemUuYWRkRXZlbnRMaXN0ZW5lcigicGx1c01lc3NhZ2UiLEF0KSk6d2luZG93Ll9fcGx1c01lc3NhZ2U9QXQsbnRbdl09eH1jbGFzcyBUbntjb25zdHJ1Y3Rvcih4KXt0aGlzLndlYnZpZXc9eH1zZW5kTWVzc2FnZSh4KXtsZXQgJD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHtfX21lc3NhZ2U6e2RhdGE6eH19KSksVT10aGlzLndlYnZpZXcuaWQ7THI/bmV3IExyKFUpLnBvc3RNZXNzYWdlKCQpOlNuLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3JiZTbi53ZWJ2aWV3LnBvc3RNZXNzYWdlVG9VbmlOVmlldygkLFUpfWNsb3NlKCl7dGhpcy53ZWJ2aWV3LmNsb3NlKCl9fWZ1bmN0aW9uIHNuKHtjb250ZXh0OnY9e30sdXJsOngsZGF0YTokPXt9LHN0eWxlOlU9e30sb25NZXNzYWdlOlosb25DbG9zZTpxfSl7bGV0IHRlPVZ0LmRhcmttb2RlO1NuPXYucGx1c3x8aCxwcj12LndlZXh8fCh0eXBlb2YgRT09Im9iamVjdCI/RTpudWxsKSxMcj12LkJyb2FkY2FzdENoYW5uZWx8fCh0eXBlb2YgeT09Im9iamVjdCI/eTpudWxsKTtsZXQgY2U9e2F1dG9CYWNrQnV0dG9uOiEwLHRpdGxlU2l6ZToiMTdweCJ9LHBlPWBwYWdlJHtEYXRlLm5vdygpfWA7VT13dC5leHRlbmQoe30sVSksVS50aXRsZU5WaWV3IT09ITEmJlUudGl0bGVOVmlldyE9PSJub25lIiYmKFUudGl0bGVOVmlldz13dC5leHRlbmQoY2UsVS50aXRsZU5WaWV3KSk7bGV0IEllPXt0b3A6MCxib3R0b206MCx1c2luZ0NvbXBvbmVudHM6e30scG9wR2VzdHVyZToiY2xvc2UiLHNjcm9sbEluZGljYXRvcjoibm9uZSIsYW5pbWF0aW9uVHlwZToicG9wLWluIixhbmltYXRpb25EdXJhdGlvbjoyMDAsdW5pTlZpZXc6e3BhdGg6YC8ke3h9LmpzYCxkZWZhdWx0Rm9udFNpemU6MTYsdmlld3BvcnQ6U24uc2NyZWVuLnJlc29sdXRpb25XaWR0aH19O1U9d3QuZXh0ZW5kKEllLFUpO2xldCBmZT1Tbi53ZWJ2aWV3LmNyZWF0ZSgiIixwZSxVLHtleHRyYXM6e2Zyb206dmkoKSxydW50aW1lOkpyKCksZGF0YTp3dC5leHRlbmQoe30sJCx7ZGFya21vZGU6dGV9KSx1c2VHbG9iYWxFdmVudDohTHJ9fSk7cmV0dXJuIGZlLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIixxKSxRdChwZSxDZT0+e3d0LmlzRnVuY3Rpb24oWikmJlooQ2UuZGF0YSksQ2Uua2VlcHx8ZmUuY2xvc2UoImF1dG8iKX0pLGZlLnNob3coVS5hbmltYXRpb25UeXBlLFUuYW5pbWF0aW9uRHVyYXRpb24pLG5ldyBUbihmZSl9bGV0IG9yPXtmb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxXbj1xcigidWwiKTtmdW5jdGlvbiBBbigpe2xldCB2PVtdO3JldHVybiBQLnByb3ZpZGUoV24se2FkZEhhbmRsZXIoeCl7di5wdXNoKHgpfSxyZW1vdmVIYW5kbGVyKHgpe3Yuc3BsaWNlKHYuaW5kZXhPZih4KSwxKX19KSx2fWxldCBnbj1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiTGFiZWwiLHByb3BzOm9yLHN0eWxlczpbXSxzZXR1cCh2LHtzbG90czp4fSl7bGV0ICQ9Z3IoKSxVPUFuKCksWj1xPT57di5mb3I/Ui5lbWl0KGB1bmktbGFiZWwtY2xpY2stJHskfS0ke3YuZm9yfWAscSwhMCk6VS5sZW5ndGgmJlVbMF0ocSwhMCl9O3JldHVybigpPT5QLmNyZWF0ZVZOb2RlKCJ2aWV3Iix7b25DbGljazpafSxbeC5kZWZhdWx0JiZ4LmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIHdyKHYseCl7S3Iodi5pZCx4KSxQLndhdGNoKCgpPT52LmlkLCgkLFUpPT57d28oVSx4LCEwKSxLcigkLHgsITApfSksUC5vblVubW91bnRlZCgoKT0+e3dvKHYuaWQseCl9KX1mdW5jdGlvbiBLcih2LHgsJCl7bGV0IFU9Z3IoKTskJiYhdnx8IXd0LmlzUGxhaW5PYmplY3QoeCl8fE9iamVjdC5rZXlzKHgpLmZvckVhY2goWj0+eyQ/Wi5pbmRleE9mKCJAIikhPT0wJiZaLmluZGV4T2YoInVuaS0iKSE9PTAmJlIub24oYHVuaS0ke1p9LSR7VX0tJHt2fWAseFtaXSk6Wi5pbmRleE9mKCJ1bmktIik9PT0wP1Iub24oWix4W1pdKTp2JiZSLm9uKGB1bmktJHtafS0ke1V9LSR7dn1gLHhbWl0pfSl9ZnVuY3Rpb24gd28odix4LCQpe2xldCBVPWdyKCk7JCYmIXZ8fCF3dC5pc1BsYWluT2JqZWN0KHgpfHxPYmplY3Qua2V5cyh4KS5mb3JFYWNoKFo9PnskP1ouaW5kZXhPZigiQCIpIT09MCYmWi5pbmRleE9mKCJ1bmktIikhPT0wJiZSLm9mZihgdW5pLSR7Wn0tJHtVfS0ke3Z9YCx4W1pdKTpaLmluZGV4T2YoInVuaS0iKT09PTA/Ui5vZmYoWix4W1pdKTp2JiZSLm9mZihgdW5pLSR7Wn0tJHtVfS0ke3Z9YCx4W1pdKX0pfWZ1bmN0aW9uIGRhKHYpe3JldHVybiBPYmplY3Qua2V5cyh2KS5tYXAoeD0+W3gsdlt4XV0pfWxldCBVaT1bImNsYXNzIiwic3R5bGUiXSxabz0vXm9uW0EtWl0rLyxYbz0odj17fSk9PntsZXR7ZXhjbHVkZUxpc3RlbmVyczp4PSExLGV4Y2x1ZGVLZXlzOiQ9W119PXYsVT1QLmdldEN1cnJlbnRJbnN0YW5jZSgpLFo9UC5zaGFsbG93UmVmKHt9KSxxPVAuc2hhbGxvd1JlZih7fSksdGU9UC5zaGFsbG93UmVmKHt9KSxjZT0kLmNvbmNhdChVaSk7cmV0dXJuIFUuYXR0cnM9UC5yZWFjdGl2ZShVLmF0dHJzKSxQLndhdGNoRWZmZWN0KCgpPT57bGV0IHBlPWRhKFUuYXR0cnMpLnJlZHVjZSgoSWUsW2ZlLENlXSk9PihjZS5pbmNsdWRlcyhmZSk/SWUuZXhjbHVkZVtmZV09Q2U6Wm8udGVzdChmZSk/KHh8fChJZS5hdHRyc1tmZV09Q2UpLEllLmxpc3RlbmVyc1tmZV09Q2UpOkllLmF0dHJzW2ZlXT1DZSxJZSkse2V4Y2x1ZGU6e30sYXR0cnM6e30sbGlzdGVuZXJzOnt9fSk7Wi52YWx1ZT1wZS5hdHRycyxxLnZhbHVlPXBlLmxpc3RlbmVycyx0ZS52YWx1ZT1wZS5leGNsdWRlfSkseyRhdHRyczpaLCRsaXN0ZW5lcnM6cSwkZXhjbHVkZUF0dHJzOnRlfX0sJGk9e2lkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxob3ZlckNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJidXR0b24taG92ZXIifSxob3ZlclN0YXJ0VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoyMH0saG92ZXJTdGF5VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo3MH0saG92ZXJTdG9wUHJvcGFnYXRpb246e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGZvcm1UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxvcGVuVHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sbG9hZGluZzp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHBsYWluOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX19LHJpPXFyKCJ1ZiIpLENvPVt7dWI6eyIiOntmbGV4RGlyZWN0aW9uOiJyb3ciLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscG9zaXRpb246InJlbGF0aXZlIixwYWRkaW5nTGVmdDoiNSIscGFkZGluZ1JpZ2h0OiI1IixvdmVyZmxvdzoiaGlkZGVuIixjb2xvcjoiIzAwMDAwMCIsYmFja2dyb3VuZENvbG9yOiIjZjhmOGY4Iixib3JkZXJSYWRpdXM6IjUiLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyV2lkdGg6IjEiLGJvcmRlckNvbG9yOiIjZGJkYmRiIn19LCJ1Yi10Ijp7IiI6e2NvbG9yOiIjMDAwMDAwIixmb250U2l6ZToiMTgiLHRleHREZWNvcmF0aW9uOiJub25lIixsaW5lSGVpZ2h0OiI0NiJ9fSwidWItZCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiNmOGY4ZjgifX0sInViLXAiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjMDA3YWZmIixib3JkZXJDb2xvcjoiIzAwNjJjYyJ9fSwidWItdyI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiNlNjQzNDAiLGJvcmRlckNvbG9yOiIjYjgzNjMzIn19LCJ1Yi1kLXQiOnsiIjp7Y29sb3I6IiMwMDAwMDAifX0sInViLXAtdCI6eyIiOntjb2xvcjoiI2ZmZmZmZiJ9fSwidWItdy10Ijp7IiI6e2NvbG9yOiIjZmZmZmZmIn19LCJ1Yi1kLWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjZjdmN2Y3In19LCJ1Yi1wLWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjNjNhY2ZjIixib3JkZXJDb2xvcjoiIzRmOGFjYSJ9fSwidWItdy1kIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2VjOGI4OSIsYm9yZGVyQ29sb3I6IiNiZDZmNmUifX0sInViLWQtdC1kIjp7IiI6e2NvbG9yOiIjY2NjY2NjIn19LCJ1Yi1wLXQtZCI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIn19LCJ1Yi13LXQtZCI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIn19LCJ1Yi1kLXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjMzUzNTM1IixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXAtcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiMwMDdhZmYiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItdy1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiI2U2NDM0MCIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1kLXQtcGxhaW4iOnsiIjp7Y29sb3I6IiMzNTM1MzUifX0sInViLXAtdC1wbGFpbiI6eyIiOntjb2xvcjoiIzAwN2FmZiJ9fSwidWItdy10LXBsYWluIjp7IiI6e2NvbG9yOiIjZTY0MzQwIn19LCJ1Yi1kLWQtcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiNjNmM2YzYiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItcC1kLXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjYzZjNmM2IixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXctZC1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiI2M2YzZjNiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1kLXQtZC1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSgwLDAsMCwwLjIpIn19LCJ1Yi1wLXQtZC1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSgwLDAsMCwwLjIpIn19LCJ1Yi13LXQtZC1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSgwLDAsMCwwLjIpIn19LCJ1Yi1taW5pIjp7IiI6e2xpbmVIZWlnaHQ6IjMwIixmb250U2l6ZToiMTMiLHBhZGRpbmdUb3A6MCxwYWRkaW5nUmlnaHQ6IjE3LjUiLHBhZGRpbmdCb3R0b206MCxwYWRkaW5nTGVmdDoiMTcuNSJ9fSwidWItbG9hZGluZyI6eyIiOnt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLG1hcmdpblJpZ2h0OiIxMCJ9fSwidWItZC1sb2FkaW5nIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItcC1sb2FkaW5nIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItdy1sb2FkaW5nIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItZC1sb2FkaW5nLXBsYWluIjp7IiI6e2NvbG9yOiIjMzUzNTM1In19LCJ1Yi1wLWxvYWRpbmctcGxhaW4iOnsiIjp7Y29sb3I6IiMwMDdhZmYiLGJhY2tncm91bmRDb2xvcjoiIzAwNjJjYyJ9fSwidWItdy1sb2FkaW5nLXBsYWluIjp7IiI6e2NvbG9yOiIjZTY0MzQwIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLWQtaG92ZXIiOnsiIjp7b3BhY2l0eTouOCxiYWNrZ3JvdW5kQ29sb3I6IiNkZWRlZGUifX0sInViLXAtaG92ZXIiOnsiIjp7b3BhY2l0eTouOCxiYWNrZ3JvdW5kQ29sb3I6IiMwMDYyY2MifX0sInViLXctaG92ZXIiOnsiIjp7b3BhY2l0eTouOCxiYWNrZ3JvdW5kQ29sb3I6IiNjZTNjMzkifX0sInViLWQtdC1ob3ZlciI6eyIiOntjb2xvcjoicmdiYSgwLDAsMCwwLjYpIn19LCJ1Yi1wLXQtaG92ZXIiOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSJ9fSwidWItdy10LWhvdmVyIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikifX0sInViLWQtaG92ZXItcGxhaW4iOnsiIjp7Y29sb3I6InJnYmEoNTMsNTMsNTMsMC42KSIsYm9yZGVyQ29sb3I6InJnYmEoNTMsNTMsNTMsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1wLWhvdmVyLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDI2LDE3MywyNSwwLjYpIixib3JkZXJDb2xvcjoicmdiYSgwLDEyMiwyNTUsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi13LWhvdmVyLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDIzMCw2Nyw2NCwwLjYpIixib3JkZXJDb2xvcjoicmdiYSgyMzAsNjcsNjQsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19fV0sQW89e2RlZmF1bHQ6ImQiLHByaW1hcnk6InAiLHdhcm46IncifSxPbz1QLmRlZmluZUNvbXBvbmVudCh7aW5oZXJpdEF0dHJzOiExLG5hbWU6IkJ1dHRvbiIscHJvcHM6d3QuZXh0ZW5kKCRpLHt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJkZWZhdWx0In0sc2l6ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZGVmYXVsdCJ9fSksc3R5bGVzOkNvLHNldHVwKHYse3Nsb3RzOngsYXR0cnM6JH0pe2xldHskYXR0cnM6VSwkZXhjbHVkZUF0dHJzOlosJGxpc3RlbmVyczpxfT1Ybyh7ZXhjbHVkZUxpc3RlbmVyczohMH0pLHRlPXYudHlwZSxjZT1QLnJlZihudWxsKSxwZT1QLmluamVjdChyaSwhMSksSWU9KHl0LGplKT0+e2xldCBNdD1xLnZhbHVlLm9uQ2xpY2t8fCgoKT0+e30pO2lmKHYuZGlzYWJsZWQpcmV0dXJuO010KHl0KTtsZXQgZG49di5mb3JtVHlwZTtpZihkbil7aWYoIXBlKXJldHVybjtkbj09PSJzdWJtaXQiP3BlLnN1Ym1pdCh5dCk6ZG49PT0icmVzZXQiJiZwZS5yZXNldCh5dCl9fSxmZT15dD0+e2xldCBqZT0idWItIitBb1t0ZV0reXQ7cmV0dXJuIHYuZGlzYWJsZWQmJihqZSs9Ii1kIiksdi5wbGFpbiYmKGplKz0iLXBsYWluIiksdi5zaXplPT09Im1pbmkiJiZ5dD09PSItdCImJihqZSs9IiB1Yi1taW5pIiksamV9LENlPXl0PT57aWYodi5kaXNhYmxlZClyZXR1cm4iIjtsZXQgamU9InViLSIrQW9bdGVdK3l0KyItaG92ZXIiO3JldHVybiB2LnBsYWluJiYoamUrPSItcGxhaW4iKSxqZX0sY3Q9UC5pbmplY3QoV24sITEpO2N0JiYoY3QuYWRkSGFuZGxlcihJZSksUC5vbkJlZm9yZVVubW91bnQoKCk9PntjdC5yZW1vdmVIYW5kbGVyKEllKX0pKSx3cih2LHsibGFiZWwtY2xpY2siOkllfSk7bGV0IGd0PVAuY29tcHV0ZWQoKCk9PntsZXQgeXQ9e307Zm9yKGxldCBqZSBpbiBxLnZhbHVlKXtsZXQgTXQ9cS52YWx1ZVtqZV07amUhPT0ib25DbGljayImJih5dFtqZV09TXQpfXJldHVybiB5dH0pLEh0PSgpPT57aWYoIXguZGVmYXVsdClyZXR1cm5bXTtsZXQgeXQ9eC5kZWZhdWx0KCk7cmV0dXJuIHl0Lmxlbmd0aD09PTEmJnl0WzBdLnR5cGU9PT1QLlRleHQ/W0puKHl0WzBdLmNoaWxkcmVuLHtjbGFzczoidWItdCAiK2ZlKCItdCIpfSldOnl0fTtyZXR1cm4oKT0+e2xldCB5dD13dC5leHRlbmQoe30seW4odikse2hvdmVyQ2xhc3M6Q2UoIiIpfSxVLnZhbHVlLFoudmFsdWUsZ3QudmFsdWUpO3JldHVybiBQLmNyZWF0ZVZOb2RlKCJ2aWV3IixQLm1lcmdlUHJvcHMoe3JlZjpjZSxjbGFzczpbInViIixmZSgiIildLG9uQ2xpY2s6SWV9LHl0KSxbdi5sb2FkaW5nP1AuY3JlYXRlVk5vZGUoImxvYWRpbmctaW5kaWNhdG9yIixQLm1lcmdlUHJvcHMoe2NsYXNzOlsidWItbG9hZGluZyIsYHViLSR7QW9bdGVdfS1sb2FkaW5nYF19LHthcnJvdzoiZmFsc2UiLGFuaW1hdGluZzoidHJ1ZSJ9KSxudWxsKTpudWxsLC4uLkh0KCldKX19fSksWGk9e3NjYWxlQXJlYTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fTtmdW5jdGlvbiBtaSh2KXtsZXQgeD1bXTtyZXR1cm4gd3QuaXNBcnJheSh2KSYmdi5mb3JFYWNoKCQ9PntQLmlzVk5vZGUoJCk/JC50eXBlPT09UC5GcmFnbWVudD94LnB1c2goLi4ubWkoJC5jaGlsZHJlbikpOngucHVzaCgkKTp3dC5pc0FycmF5KCQpJiZ4LnB1c2goLi4ubWkoJCkpfSkseH1mdW5jdGlvbiBUbyh2KXtsZXQgeD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmdW5jdGlvbihVKXtyZXR1cm4geFtVXXx8KHhbVV09dihVKSl9fWxldCB1bz1UbyhmdW5jdGlvbih2KXtsZXQgeD17fSwkPS87KD8hW14oXSpcKSkvZyxVPS86KC4rKS87cmV0dXJuIHYuc3BsaXQoJCkuZm9yRWFjaChmdW5jdGlvbihaKXtpZihaKXtsZXQgcT1aLnNwbGl0KFUpO3EubGVuZ3RoPjEmJih4W3FbMF0udHJpbSgpXT1xWzFdLnRyaW0oKSl9fSkseH0pLGtuPXY9Pm5ldyBQcm9taXNlKCh4LCQpPT57aWYoIXYpcmV0dXJuIHgoe3dpZHRoOjAsaGVpZ2h0OjAsdG9wOjAsbGVmdDowfSk7RS5yZXF1aXJlTW9kdWxlKCJkb20iKS5nZXRDb21wb25lbnRSZWN0KHYsKHtzaXplOlp9KT0+e3goWil9KX0pLENyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJNb3ZhYmxlQXJlYSIscHJvcHM6WGksc3R5bGVzOlt7InVuaS1tb3ZhYmxlLWFyZWEiOnsiIjp7b3ZlcmZsb3c6ImhpZGRlbiIsd2lkdGg6IjEwcHgiLGhlaWdodDoiMTBweCJ9fX1dLHNldHVwKHYse3Nsb3RzOnh9KXtsZXQgJD1QLnJlZigwKSxVPVAucmVmKDApLFo9UC5yZWYoMCkscT1QLnJlZigwKSx0ZT1QLnJlZighMSksY2U9UC5yZWYobnVsbCkscGU9W10sSWU9bnVsbCxmZT1qZT0+e0llPWplfSxDZT0oKT0+a24oY2UudmFsdWUpLnRoZW4oKHt3aWR0aDpqZSxoZWlnaHQ6TXQsdG9wOmRuLGxlZnQ6R3R9KT0+eyQudmFsdWU9amUsVS52YWx1ZT1NdCxaLnZhbHVlPWRuLHEudmFsdWU9R3R9KSxjdD0oKT0+e0NlKCkudGhlbigoKT0+e3BlLmZvckVhY2goZnVuY3Rpb24oamUpe2plLnNldFBhcmVudCgpfSl9KX07UC5vbk1vdW50ZWQoKCk9PntmKCgpPT57dGUudmFsdWU9ITAsY3QoKX0sMjAwKX0pO2xldCBndD17b25QYW5zdGFydChqZSl7SWUmJkllLnRvdWNoc3RhcnQoamUpfSxvblBhbm1vdmUoamUpe2plLnN0b3BQcm9wYWdhdGlvbigpLEllJiZJZS50b3VjaG1vdmUoamUpfSxvblBhbmVuZChqZSl7SWUmJkllLnRvdWNoZW5kKGplKSxJZT1udWxsfX0sSHQ9amU9PntwZS5wdXNoKGplKX0seXQ9amU9PntsZXQgTXQ9cGUuaW5kZXhPZihqZSk7TXQ+PTAmJnBlLnNwbGljZShNdCwxKX07cmV0dXJuIFAucHJvdmlkZSgiX2lzTW91bnRlZCIsdGUpLFAucHJvdmlkZSgicGFyZW50U2l6ZSIse3dpZHRoOiQsaGVpZ2h0OlUsdG9wOlosbGVmdDpxfSksUC5wcm92aWRlKCJhZGRNb3ZhYmxlVmlld0NvbnRleHQiLEh0KSxQLnByb3ZpZGUoInJlbW92ZU1vdmFibGVWaWV3Q29udGV4dCIseXQpLFAucHJvdmlkZSgic2V0VG91Y2hNb3ZhYmxlVmlld0NvbnRleHQiLGZlKSwoKT0+e2xldCBqZT14LmRlZmF1bHQmJnguZGVmYXVsdCgpLE10PW1pKGplKTtyZXR1cm4gUC5jcmVhdGVWTm9kZSgidmlldyIsUC5tZXJnZVByb3BzKHtyZWY6Y2UsY2xhc3M6InVuaS1tb3ZhYmxlLWFyZWEifSxndCksW010XSl9fX0pO2Z1bmN0aW9uIFFpKHYpe2xldCB4PXt9O2Z1bmN0aW9uICQoZmUsQ2Upe3hbZmVdJiZ4W2ZlXShDZSl9ZnVuY3Rpb24gVShmZSxDZSl7eFtmZV09ZnVuY3Rpb24oY3Qpe3d0LmlzRnVuY3Rpb24oQ2UpJiYoY3QudG91Y2hlcz1jdC5jaGFuZ2VkVG91Y2hlcyxDZShjdCk9PT0hMSYmY3Quc3RvcFByb3BhZ2F0aW9uKCkpfX1sZXQgWj0wLHE9MCx0ZT0wLGNlPTAscGU9ZnVuY3Rpb24oZmUsQ2UsY3QsZ3Qpe2lmKHYoe3RhcmdldDpmZS50YXJnZXQsY3VycmVudFRhcmdldDpmZS5jdXJyZW50VGFyZ2V0LHN0b3BQcm9wYWdhdGlvbjpmZS5zdG9wUHJvcGFnYXRpb24uYmluZChmZSksdG91Y2hlczpmZS50b3VjaGVzLGNoYW5nZWRUb3VjaGVzOmZlLmNoYW5nZWRUb3VjaGVzLGRldGFpbDp7c3RhdGU6Q2UseDpjdCx5Omd0LGR4OmN0LVosZHk6Z3QtcSxkZHg6Y3QtdGUsZGR5Omd0LWNlLHRpbWVTdGFtcDpmZS50aW1lU3RhbXB8fERhdGUubm93KCl9fSk9PT0hMSlyZXR1cm4hMX0sSWU9bnVsbDtyZXR1cm4gVSgidG91Y2hzdGFydCIsZnVuY3Rpb24oZmUpe2lmKCFJZSlyZXR1cm4gSWU9ZmUsWj10ZT1mZS50b3VjaGVzWzBdLnBhZ2VYLHE9Y2U9ZmUudG91Y2hlc1swXS5wYWdlWSxwZShmZSwic3RhcnQiLFoscSl9KSxVKCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKGZlKXtpZihJZSl7bGV0IENlPXBlKGZlLCJtb3ZlIixmZS50b3VjaGVzWzBdLnBhZ2VYLGZlLnRvdWNoZXNbMF0ucGFnZVkpO3JldHVybiB0ZT1mZS50b3VjaGVzWzBdLnBhZ2VYLGNlPWZlLnRvdWNoZXNbMF0ucGFnZVksQ2V9fSksVSgidG91Y2hlbmQiLGZ1bmN0aW9uKGZlKXtpZihJZSlyZXR1cm4gSWU9bnVsbCxwZShmZSwiZW5kIixmZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCxmZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSl9KSx7dG91Y2hzdGFydDpmdW5jdGlvbihmZSl7JCgidG91Y2hzdGFydCIsZmUpfSx0b3VjaG1vdmU6ZnVuY3Rpb24oZmUpeyQoInRvdWNobW92ZSIsZmUpfSx0b3VjaGVuZDpmdW5jdGlvbihmZSl7JCgidG91Y2hlbmQiLGZlKX19fWZ1bmN0aW9uIEtuKHYseCl7cmV0dXJuKCQsVSk9Pnt2LnZhbHVlJiZ4KCQsZW8oJCx2LnZhbHVlLFV8fHt9KSl9fWZ1bmN0aW9uIGVvKHYseCwkPXt9KXtyZXR1cm4geD1mbyh4KSx7dHlwZTp2LHRpbWVTdGFtcDpEYXRlLm5vdygpLHRhcmdldDp4LGN1cnJlbnRUYXJnZXQ6eCxkZXRhaWw6JH19bGV0IFBvPUluLmNhY2hlU3RyaW5nRnVuY3Rpb24odj0+di5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSt2LnNsaWNlKDEpKTtmdW5jdGlvbiBmbyh2KXtsZXR7b2Zmc2V0TGVmdDp4LG9mZnNldFRvcDokfT12LFU9di5hdHRyLFo9e307cmV0dXJuIE9iamVjdC5rZXlzKFV8fHt9KS5mb3JFYWNoKHE9PntxLmluZGV4T2YoImRhdGEiKT09PTAmJihaW1BvKHEucmVwbGFjZSgiZGF0YSIsIiIpKV09VVtxXSl9KSx7aWQ6VSYmVS5pZHx8IiIsZGF0YXNldDpaLG9mZnNldExlZnQ6eHx8MCxvZmZzZXRUb3A6JHx8MH19ZnVuY3Rpb24gaWkodix4LCQpe3JldHVybiB2PngtJCYmdjx4KyR9ZnVuY3Rpb24gYXIodix4KXtyZXR1cm4gaWkodiwwLHgpfWZ1bmN0aW9uIGtyKCl7fWtyLnByb3RvdHlwZS54PWZ1bmN0aW9uKHYpe3JldHVybiBNYXRoLnNxcnQodil9O2Z1bmN0aW9uIE5uKHYseCl7dGhpcy5fbT12LHRoaXMuX2Y9MWUzKngsdGhpcy5fc3RhcnRUaW1lPTAsdGhpcy5fdj0wfU5uLnByb3RvdHlwZS5zZXRWPWZ1bmN0aW9uKHYseCl7bGV0ICQ9TWF0aC5wb3coTWF0aC5wb3codiwyKStNYXRoLnBvdyh4LDIpLC41KTt0aGlzLl94X3Y9dix0aGlzLl95X3Y9eCx0aGlzLl94X2E9LXRoaXMuX2YqdGhpcy5feF92LyQsdGhpcy5feV9hPS10aGlzLl9mKnRoaXMuX3lfdi8kLHRoaXMuX3Q9TWF0aC5hYnModi90aGlzLl94X2EpfHxNYXRoLmFicyh4L3RoaXMuX3lfYSksdGhpcy5fbGFzdER0PW51bGwsdGhpcy5fc3RhcnRUaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpfSxObi5wcm90b3R5cGUuc2V0Uz1mdW5jdGlvbih2LHgpe3RoaXMuX3hfcz12LHRoaXMuX3lfcz14fSxObi5wcm90b3R5cGUucz1mdW5jdGlvbih2KXt2PT09dm9pZCAwJiYodj0obmV3IERhdGUoKS5nZXRUaW1lKCktdGhpcy5fc3RhcnRUaW1lKS8xZTMpLHY+dGhpcy5fdCYmKHY9dGhpcy5fdCx0aGlzLl9sYXN0RHQ9dik7bGV0IHg9dGhpcy5feF92KnYrLjUqdGhpcy5feF9hKk1hdGgucG93KHYsMikrdGhpcy5feF9zLCQ9dGhpcy5feV92KnYrLjUqdGhpcy5feV9hKk1hdGgucG93KHYsMikrdGhpcy5feV9zO3JldHVybih0aGlzLl94X2E+MCYmeDx0aGlzLl9lbmRQb3NpdGlvblh8fHRoaXMuX3hfYTwwJiZ4PnRoaXMuX2VuZFBvc2l0aW9uWCkmJih4PXRoaXMuX2VuZFBvc2l0aW9uWCksKHRoaXMuX3lfYT4wJiYkPHRoaXMuX2VuZFBvc2l0aW9uWXx8dGhpcy5feV9hPDAmJiQ+dGhpcy5fZW5kUG9zaXRpb25ZKSYmKCQ9dGhpcy5fZW5kUG9zaXRpb25ZKSx7eCx5OiR9fSxObi5wcm90b3R5cGUuZHM9ZnVuY3Rpb24odil7cmV0dXJuIHY9PT12b2lkIDAmJih2PShuZXcgRGF0ZSgpLmdldFRpbWUoKS10aGlzLl9zdGFydFRpbWUpLzFlMyksdj50aGlzLl90JiYodj10aGlzLl90KSx7ZHg6dGhpcy5feF92K3RoaXMuX3hfYSp2LGR5OnRoaXMuX3lfdit0aGlzLl95X2Eqdn19LE5uLnByb3RvdHlwZS5kZWx0YT1mdW5jdGlvbigpe3JldHVybnt4Oi0xLjUqTWF0aC5wb3codGhpcy5feF92LDIpL3RoaXMuX3hfYXx8MCx5Oi0xLjUqTWF0aC5wb3codGhpcy5feV92LDIpL3RoaXMuX3lfYXx8MH19LE5uLnByb3RvdHlwZS5kdD1mdW5jdGlvbigpe3JldHVybi10aGlzLl94X3YvdGhpcy5feF9hfSxObi5wcm90b3R5cGUuZG9uZT1mdW5jdGlvbigpe2xldCB2PWlpKHRoaXMucygpLngsdGhpcy5fZW5kUG9zaXRpb25YKXx8aWkodGhpcy5zKCkueSx0aGlzLl9lbmRQb3NpdGlvblkpfHx0aGlzLl9sYXN0RHQ9PT10aGlzLl90O3JldHVybiB0aGlzLl9sYXN0RHQ9bnVsbCx2fSxObi5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKHYseCl7dGhpcy5fZW5kUG9zaXRpb25YPXYsdGhpcy5fZW5kUG9zaXRpb25ZPXh9LE5uLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbih2LHgpe3RoaXMuX209dix0aGlzLl9mPTFlMyp4fTtmdW5jdGlvbiBabih2LHgsJCl7dGhpcy5fbT12LHRoaXMuX2s9eCx0aGlzLl9jPSQsdGhpcy5fc29sdXRpb249bnVsbCx0aGlzLl9lbmRQb3NpdGlvbj0wLHRoaXMuX3N0YXJ0VGltZT0wfVpuLnByb3RvdHlwZS5fc29sdmU9ZnVuY3Rpb24odix4KXtsZXQgJD10aGlzLl9jLFU9dGhpcy5fbSxaPXRoaXMuX2sscT0kKiQtNCpVKlo7aWYocT09PTApe2xldCBmZT0tJC8oMipVKSxDZT12LGN0PXgvKGZlKnYpO3JldHVybnt4OmZ1bmN0aW9uKGd0KXtyZXR1cm4oQ2UrY3QqZ3QpKk1hdGgucG93KE1hdGguRSxmZSpndCl9LGR4OmZ1bmN0aW9uKGd0KXtsZXQgSHQ9TWF0aC5wb3coTWF0aC5FLGZlKmd0KTtyZXR1cm4gZmUqKENlK2N0Kmd0KSpIdCtjdCpIdH19fWlmKHE+MCl7bGV0IGZlPSgtJC1NYXRoLnNxcnQocSkpLygyKlUpLENlPSgtJCtNYXRoLnNxcnQocSkpLygyKlUpLGN0PSh4LWZlKnYpLyhDZS1mZSksZ3Q9di1jdDtyZXR1cm57eDpmdW5jdGlvbihIdCl7bGV0IHl0LGplO3JldHVybiBIdD09PXRoaXMuX3QmJih5dD10aGlzLl9wb3dFUjFULGplPXRoaXMuX3Bvd0VSMlQpLHRoaXMuX3Q9SHQseXR8fCh5dD10aGlzLl9wb3dFUjFUPU1hdGgucG93KE1hdGguRSxmZSpIdCkpLGplfHwoamU9dGhpcy5fcG93RVIyVD1NYXRoLnBvdyhNYXRoLkUsQ2UqSHQpKSxndCp5dCtjdCpqZX0sZHg6ZnVuY3Rpb24oSHQpe2xldCB5dCxqZTtyZXR1cm4gSHQ9PT10aGlzLl90JiYoeXQ9dGhpcy5fcG93RVIxVCxqZT10aGlzLl9wb3dFUjJUKSx0aGlzLl90PUh0LHl0fHwoeXQ9dGhpcy5fcG93RVIxVD1NYXRoLnBvdyhNYXRoLkUsZmUqSHQpKSxqZXx8KGplPXRoaXMuX3Bvd0VSMlQ9TWF0aC5wb3coTWF0aC5FLENlKkh0KSksZ3QqZmUqeXQrY3QqQ2UqamV9fX1sZXQgdGU9TWF0aC5zcXJ0KDQqVSpaLSQqJCkvKDIqVSksY2U9LSQvMipVLHBlPXYsSWU9KHgtY2UqdikvdGU7cmV0dXJue3g6ZnVuY3Rpb24oZmUpe3JldHVybiBNYXRoLnBvdyhNYXRoLkUsY2UqZmUpKihwZSpNYXRoLmNvcyh0ZSpmZSkrSWUqTWF0aC5zaW4odGUqZmUpKX0sZHg6ZnVuY3Rpb24oZmUpe2xldCBDZT1NYXRoLnBvdyhNYXRoLkUsY2UqZmUpLGN0PU1hdGguY29zKHRlKmZlKSxndD1NYXRoLnNpbih0ZSpmZSk7cmV0dXJuIENlKihJZSp0ZSpjdC1wZSp0ZSpndCkrY2UqQ2UqKEllKmd0K3BlKmN0KX19fSxabi5wcm90b3R5cGUueD1mdW5jdGlvbih2KXtyZXR1cm4gdj09PXZvaWQgMCYmKHY9KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzKSx0aGlzLl9zb2x1dGlvbj90aGlzLl9lbmRQb3NpdGlvbit0aGlzLl9zb2x1dGlvbi54KHYpOjB9LFpuLnByb3RvdHlwZS5keD1mdW5jdGlvbih2KXtyZXR1cm4gdj09PXZvaWQgMCYmKHY9KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzKSx0aGlzLl9zb2x1dGlvbj90aGlzLl9zb2x1dGlvbi5keCh2KTowfSxabi5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKHYseCwkKXtpZigkfHwoJD1uZXcgRGF0ZSgpLmdldFRpbWUoKSksdiE9PXRoaXMuX2VuZFBvc2l0aW9ufHwhYXIoeCwuMSkpe3g9eHx8MDtsZXQgVT10aGlzLl9lbmRQb3NpdGlvbjt0aGlzLl9zb2x1dGlvbiYmKGFyKHgsLjEpJiYoeD10aGlzLl9zb2x1dGlvbi5keCgoJC10aGlzLl9zdGFydFRpbWUpLzFlMykpLFU9dGhpcy5fc29sdXRpb24ueCgoJC10aGlzLl9zdGFydFRpbWUpLzFlMyksYXIoeCwuMSkmJih4PTApLGFyKFUsLjEpJiYoVT0wKSxVKz10aGlzLl9lbmRQb3NpdGlvbiksdGhpcy5fc29sdXRpb24mJmFyKFUtdiwuMSkmJmFyKHgsLjEpfHwodGhpcy5fZW5kUG9zaXRpb249dix0aGlzLl9zb2x1dGlvbj10aGlzLl9zb2x2ZShVLXRoaXMuX2VuZFBvc2l0aW9uLHgpLHRoaXMuX3N0YXJ0VGltZT0kKX19LFpuLnByb3RvdHlwZS5zbmFwPWZ1bmN0aW9uKHYpe3RoaXMuX3N0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSx0aGlzLl9lbmRQb3NpdGlvbj12LHRoaXMuX3NvbHV0aW9uPXt4OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGR4OmZ1bmN0aW9uKCl7cmV0dXJuIDB9fX0sWm4ucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24odil7cmV0dXJuIHZ8fCh2PW5ldyBEYXRlKCkuZ2V0VGltZSgpKSxpaSh0aGlzLngoKSx0aGlzLl9lbmRQb3NpdGlvbiwuMSkmJmFyKHRoaXMuZHgoKSwuMSl9LFpuLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbih2LHgsJCl7dGhpcy5fbT12LHRoaXMuX2s9eCx0aGlzLl9jPSQsdGhpcy5kb25lKCl8fCh0aGlzLl9zb2x1dGlvbj10aGlzLl9zb2x2ZSh0aGlzLngoKS10aGlzLl9lbmRQb3NpdGlvbix0aGlzLmR4KCkpLHRoaXMuX3N0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSl9LFpuLnByb3RvdHlwZS5zcHJpbmdDb25zdGFudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSxabi5wcm90b3R5cGUuZGFtcGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jfSxabi5wcm90b3R5cGUuY29uZmlndXJhdGlvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHYoJCxVKXskLnJlY29uZmlndXJlKDEsVSwkLmRhbXBpbmcoKSl9ZnVuY3Rpb24geCgkLFUpeyQucmVjb25maWd1cmUoMSwkLnNwcmluZ0NvbnN0YW50KCksVSl9cmV0dXJuW3tsYWJlbDoiU3ByaW5nIENvbnN0YW50IixyZWFkOnRoaXMuc3ByaW5nQ29uc3RhbnQuYmluZCh0aGlzKSx3cml0ZTp2LmJpbmQodGhpcyx0aGlzKSxtaW46MTAwLG1heDoxZTN9LHtsYWJlbDoiRGFtcGluZyIscmVhZDp0aGlzLmRhbXBpbmcuYmluZCh0aGlzKSx3cml0ZTp4LmJpbmQodGhpcyx0aGlzKSxtaW46MSxtYXg6NTAwfV19O2Z1bmN0aW9uIE5pKHYseCwkKXt0aGlzLl9zcHJpbmdYPW5ldyBabih2LHgsJCksdGhpcy5fc3ByaW5nWT1uZXcgWm4odix4LCQpLHRoaXMuX3NwcmluZ1NjYWxlPW5ldyBabih2LHgsJCksdGhpcy5fc3RhcnRUaW1lPTB9TmkucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbih2LHgsJCxVKXtsZXQgWj1uZXcgRGF0ZSgpLmdldFRpbWUoKTt0aGlzLl9zcHJpbmdYLnNldEVuZCh2LFUsWiksdGhpcy5fc3ByaW5nWS5zZXRFbmQoeCxVLFopLHRoaXMuX3NwcmluZ1NjYWxlLnNldEVuZCgkLFUsWiksdGhpcy5fc3RhcnRUaW1lPVp9LE5pLnByb3RvdHlwZS54PWZ1bmN0aW9uKCl7bGV0IHY9KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzO3JldHVybnt4OnRoaXMuX3NwcmluZ1gueCh2KSx5OnRoaXMuX3NwcmluZ1kueCh2KSxzY2FsZTp0aGlzLl9zcHJpbmdTY2FsZS54KHYpfX0sTmkucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oKXtsZXQgdj1uZXcgRGF0ZSgpLmdldFRpbWUoKTtyZXR1cm4gdGhpcy5fc3ByaW5nWC5kb25lKHYpJiZ0aGlzLl9zcHJpbmdZLmRvbmUodikmJnRoaXMuX3NwcmluZ1NjYWxlLmRvbmUodil9LE5pLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbih2LHgsJCl7dGhpcy5fc3ByaW5nWC5yZWNvbmZpZ3VyZSh2LHgsJCksdGhpcy5fc3ByaW5nWS5yZWNvbmZpZ3VyZSh2LHgsJCksdGhpcy5fc3ByaW5nU2NhbGUucmVjb25maWd1cmUodix4LCQpfTtsZXQgSGk9e2RpcmVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibm9uZSJ9LGluZXJ0aWE6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxvdXRPZkJvdW5kczp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MH0seTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxkYW1waW5nOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjIwfSxmcmljdGlvbjp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoyfSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHNjYWxlOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sc2NhbGVNaW46e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6LjV9LHNjYWxlTWF4Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjEwfSxzY2FsZVZhbHVlOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGFuaW1hdGlvbjp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITB9fTtmdW5jdGlvbiBvaSh2LHgpe3JldHVybisoKDFlMyp2LTFlMyp4KS8xZTMpLnRvRml4ZWQoMSl9ZnVuY3Rpb24gRnIodix4LCQpe2xldCBVPXtpZDowLGNhbmNlbGxlZDohMX0sWj1mdW5jdGlvbih0ZSl7dGUmJnRlLmlkJiZWcih0ZS5pZCksdGUmJih0ZS5jYW5jZWxsZWQ9ITApfTtmdW5jdGlvbiBxKHRlLGNlLHBlLEllKXtpZighdGV8fCF0ZS5jYW5jZWxsZWQpe3BlKGNlKTtsZXQgZmU9Y2UuZG9uZSgpO2ZlfHx0ZS5jYW5jZWxsZWR8fCh0ZS5pZD1JbyhxLmJpbmQobnVsbCx0ZSxjZSxwZSxJZSkpKSxmZSYmSWUmJkllKGNlKX19cmV0dXJuIHEoVSx2LHgsJCkse2NhbmNlbDpaLmJpbmQobnVsbCxVKSxtb2RlbDp2fX1sZXQgdnI9ITE7ZnVuY3Rpb24ga2kodil7dnJ8fCh2cj0hMCxJbyhmdW5jdGlvbigpe3YoKSx2cj0hMX0pKX1mdW5jdGlvbiBJbyh2KXtyZXR1cm4gZih2LDE2KX1mdW5jdGlvbiBWcih2KXtzKHYpfWxldCBacj1FLnJlcXVpcmVNb2R1bGUoImFuaW1hdGlvbiIpLEFyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJNb3ZhYmxlVmlldyIscHJvcHM6SGksZW1pdHM6WyJjaGFuZ2UiLCJzY2FsZSJdLHN0eWxlczpbeyJ1bmktbW92YWJsZS12aWV3Ijp7IiI6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiIwcHgiLGxlZnQ6IjBweCIsd2lkdGg6IjEwcHgiLGhlaWdodDoiMTBweCJ9fX1dLHNldHVwKHYse2VtaXQ6eCxzbG90czokfSl7bGV0IFU9UC5yZWYobnVsbCksWj1LbihVLHgpLHE9UC5pbmplY3QoInNldFRvdWNoTW92YWJsZVZpZXdDb250ZXh0IiwoKT0+e30pLHRlPXBuKHYsWixVLHEpO3JldHVybigpPT57bGV0IGNlPXtwcmV2ZW50R2VzdHVyZTohMH07cmV0dXJuIFAuY3JlYXRlVk5vZGUoInZpZXciLFAubWVyZ2VQcm9wcyh7cmVmOlUsb25Ub3VjaHN0YXJ0OnRlLGNsYXNzOiJ1bmktbW92YWJsZS12aWV3IixzdHlsZToidHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOyJ9LGNlKSxbJC5kZWZhdWx0JiYkLmRlZmF1bHQoKV0pfX19KTtmdW5jdGlvbiBwbih2LHgsJCxVKXtsZXQgWj1QLmluamVjdCgiX2lzTW91bnRlZCIsUC5yZWYoITEpKSxxPVAuaW5qZWN0KCJwYXJlbnRTaXplIix7d2lkdGg6UC5yZWYoMCksaGVpZ2h0OlAucmVmKDApLHRvcDpQLnJlZigwKSxsZWZ0OlAucmVmKDApfSksdGU9UC5pbmplY3QoImFkZE1vdmFibGVWaWV3Q29udGV4dCIsKCk9Pnt9KSxjZT1QLmluamVjdCgicmVtb3ZlTW92YWJsZVZpZXdDb250ZXh0IiwoKT0+e30pLHBlPXt0b3VjaHN0YXJ0OigpPT57fSx0b3VjaG1vdmU6KCk9Pnt9LHRvdWNoZW5kOigpPT57fX07ZnVuY3Rpb24gSWUoeGUpe3JldHVybiBOdW1iZXIoeGUpfHwwfWZ1bmN0aW9uIGZlKHhlKXtyZXR1cm4geGU9TnVtYmVyKHhlKSxpc05hTih4ZSk/MTp4ZX1sZXQgQ2U9UC5yZWYoSWUodi54KSksY3Q9UC5yZWYoSWUodi55KSksZ3Q9UC5yZWYoZmUoTnVtYmVyKHYuc2NhbGVWYWx1ZSkpKSxIdD1QLnJlZigwKSx5dD1QLnJlZigwKSxqZT1QLnJlZigwKSxNdD1QLnJlZigwKSxkbj1QLnJlZigwKSxHdD1QLnJlZigwKSxkdD1udWxsLGVuPW51bGwsQm49e3g6MCx5OjB9LFl0PXt4OjAseTowfSxqdD0xLFV0PTAscXQ9MCx0YT0hMSxjaSxlaSxxaT1udWxsLGphPW51bGwsVW49e3RvcDowLGxlZnQ6MCx3aWR0aDowLGhlaWdodDowfSwkbj1uZXcga3IsSXI9bmV3IGtyLEhuPXtoaXN0b3J5WDpbMCwwXSxoaXN0b3J5WTpbMCwwXSxoaXN0b3J5VDpbMCwwXX0seXI9UC5jb21wdXRlZCgoKT0+e2xldCB4ZT1OdW1iZXIodi5kYW1waW5nKTtyZXR1cm4gaXNOYU4oeGUpPzIwOnhlfSksenI9UC5jb21wdXRlZCgoKT0+e2xldCB4ZT1OdW1iZXIodi5mcmljdGlvbik7cmV0dXJuIGlzTmFOKHhlKXx8eGU8PTA/Mjp4ZX0pLG5hPVAuY29tcHV0ZWQoKCk9PntsZXQgeGU9TnVtYmVyKHYuc2NhbGVNaW4pO3JldHVybiBpc05hTih4ZSk/LjU6eGV9KSxjcz1QLmNvbXB1dGVkKCgpPT57bGV0IHhlPU51bWJlcih2LnNjYWxlTWF4KTtyZXR1cm4gaXNOYU4oeGUpPzEwOnhlfSksb249UC5jb21wdXRlZCgoKT0+di5kaXJlY3Rpb249PT0iYWxsInx8di5kaXJlY3Rpb249PT0iaG9yaXpvbnRhbCIpLF9uPVAuY29tcHV0ZWQoKCk9PnYuZGlyZWN0aW9uPT09ImFsbCJ8fHYuZGlyZWN0aW9uPT09InZlcnRpY2FsIiksam49bmV3IE5pKDEsOSpNYXRoLnBvdyh5ci52YWx1ZSwyKS80MCx5ci52YWx1ZSkscW49bmV3IE5uKDEsenIudmFsdWUpO1Aud2F0Y2goKCk9PnYueCx4ZT0+e0NlLnZhbHVlPUllKHhlKX0pLFAud2F0Y2goKCk9PnYueSx4ZT0+e2N0LnZhbHVlPUllKHhlKX0pLFAud2F0Y2goKCk9PnYuc2NhbGVWYWx1ZSx4ZT0+e2d0LnZhbHVlPWZlKE51bWJlcih4ZSkpfSksUC53YXRjaChDZSx1cyksUC53YXRjaChjdCx6YSksUC53YXRjaChndCxyYSksUC53YXRjaChuYSxJYSksUC53YXRjaChjcyxJYSk7ZnVuY3Rpb24gQWkoKXtlbiYmZW4uY2FuY2VsKCksZHQmJmR0LmNhbmNlbCgpfWZ1bmN0aW9uIHVzKHhlKXtpZihvbi52YWx1ZSl7aWYoeGUrWXQueD09PVV0KXJldHVybiBVdDtkdCYmZHQuY2FuY2VsKCksYm8oeGUrWXQueCxjdC52YWx1ZStZdC55LGp0KX1yZXR1cm4geGV9ZnVuY3Rpb24gemEoeGUpe2lmKF9uLnZhbHVlKXtpZih4ZStZdC55PT09cXQpcmV0dXJuIHF0O2R0JiZkdC5jYW5jZWwoKSxibyhDZS52YWx1ZStZdC54LHhlK1l0LnksanQpfXJldHVybiB4ZX1mdW5jdGlvbiBJYSgpe2lmKCF2LnNjYWxlKXJldHVybiExO0RpKGp0LCEwKX1mdW5jdGlvbiByYSh4ZSl7cmV0dXJuIHYuc2NhbGU/KHhlPV9vKHhlKSxEaSh4ZSwhMCkseGUpOiExfWZ1bmN0aW9uIHNvKCl7di5kaXNhYmxlZHx8KEFpKCksSG4uaGlzdG9yeVg9WzAsMF0sSG4uaGlzdG9yeVk9WzAsMF0sSG4uaGlzdG9yeVQ9WzAsMF0sb24udmFsdWUmJihjaT1VdCksX24udmFsdWUmJihlaT1xdCkscWk9bnVsbCxqYT1udWxsLHRhPSEwKX1mdW5jdGlvbiBXYSh4ZSl7aWYoIXYuZGlzYWJsZWQmJnRhKXtsZXQgTnQ9VXQsUHQ9cXQ7aWYoamE9PT1udWxsJiYoamE9TWF0aC5hYnMoeGUuZGV0YWlsLmR4L3hlLmRldGFpbC5keSk+MT8iaHRvdWNobW92ZSI6InZ0b3VjaG1vdmUiKSxvbi52YWx1ZSYmKE50PXhlLmRldGFpbC5keCtjaSxIbi5oaXN0b3J5WC5zaGlmdCgpLEhuLmhpc3RvcnlYLnB1c2goTnQpLCFfbi52YWx1ZSYmcWk9PT1udWxsJiYocWk9TWF0aC5hYnMoeGUuZGV0YWlsLmR4L3hlLmRldGFpbC5keSk8MSkpLF9uLnZhbHVlJiYoUHQ9eGUuZGV0YWlsLmR5K2VpLEhuLmhpc3RvcnlZLnNoaWZ0KCksSG4uaGlzdG9yeVkucHVzaChQdCksIW9uLnZhbHVlJiZxaT09PW51bGwmJihxaT1NYXRoLmFicyh4ZS5kZXRhaWwuZHkveGUuZGV0YWlsLmR4KTwxKSksSG4uaGlzdG9yeVQuc2hpZnQoKSxIbi5oaXN0b3J5VC5wdXNoKHhlLmRldGFpbC50aW1lU3RhbXApLCFxaSl7bGV0IHduPSJ0b3VjaCI7TnQ8amUudmFsdWU/di5vdXRPZkJvdW5kcz8od249InRvdWNoLW91dC1vZi1ib3VuZHMiLE50PWplLnZhbHVlLSRuLngoamUudmFsdWUtTnQpKTpOdD1qZS52YWx1ZTpOdD5kbi52YWx1ZSYmKHYub3V0T2ZCb3VuZHM/KHduPSJ0b3VjaC1vdXQtb2YtYm91bmRzIixOdD1kbi52YWx1ZSskbi54KE50LWRuLnZhbHVlKSk6TnQ9ZG4udmFsdWUpLFB0PE10LnZhbHVlP3Yub3V0T2ZCb3VuZHM/KHduPSJ0b3VjaC1vdXQtb2YtYm91bmRzIixQdD1NdC52YWx1ZS1Jci54KE10LnZhbHVlLVB0KSk6UHQ9TXQudmFsdWU6UHQ+R3QudmFsdWUmJih2Lm91dE9mQm91bmRzPyh3bj0idG91Y2gtb3V0LW9mLWJvdW5kcyIsUHQ9R3QudmFsdWUrSXIueChQdC1HdC52YWx1ZSkpOlB0PUd0LnZhbHVlKSxraShmdW5jdGlvbigpe1ZvKE50LFB0LGp0LHduKX0pfX19ZnVuY3Rpb24gZnMoKXtpZighdi5kaXNhYmxlZCYmdGEmJih0YT0hMSwhcWkmJiFkcygib3V0LW9mLWJvdW5kcyIpJiZ2LmluZXJ0aWEpKXtsZXQgeGU9MWUzKihIbi5oaXN0b3J5WFsxXS1Ibi5oaXN0b3J5WFswXSkvKEhuLmhpc3RvcnlUWzFdLUhuLmhpc3RvcnlUWzBdKSxOdD0xZTMqKEhuLmhpc3RvcnlZWzFdLUhuLmhpc3RvcnlZWzBdKS8oSG4uaGlzdG9yeVRbMV0tSG4uaGlzdG9yeVRbMF0pO3FuLnNldFYoeGUsTnQpLHFuLnNldFMoVXQscXQpO2xldCBQdD1xbi5kZWx0YSgpLngsd249cW4uZGVsdGEoKS55LEVyPVB0K1V0LE9pPXduK3F0O0VyPGplLnZhbHVlPyhFcj1qZS52YWx1ZSxPaT1xdCsoamUudmFsdWUtVXQpKnduL1B0KTpFcj5kbi52YWx1ZSYmKEVyPWRuLnZhbHVlLE9pPXF0Kyhkbi52YWx1ZS1VdCkqd24vUHQpLE9pPE10LnZhbHVlPyhPaT1NdC52YWx1ZSxFcj1VdCsoTXQudmFsdWUtcXQpKlB0L3duKTpPaT5HdC52YWx1ZSYmKE9pPUd0LnZhbHVlLEVyPVV0KyhHdC52YWx1ZS1xdCkqUHQvd24pLHFuLnNldEVuZChFcixPaSksZW49RnIocW4sZnVuY3Rpb24oKXtsZXQgSmk9cW4ucygpLFVvPUppLngsTmE9SmkueTtWbyhVbyxOYSxqdCwiZnJpY3Rpb24iKX0sZnVuY3Rpb24oKXtlbi5jYW5jZWwoKX0pfX1mdW5jdGlvbiBXcih4ZSxOdCl7bGV0IFB0PSExO3JldHVybiB4ZT5kbi52YWx1ZT8oeGU9ZG4udmFsdWUsUHQ9ITApOnhlPGplLnZhbHVlJiYoeGU9amUudmFsdWUsUHQ9ITApLE50Pkd0LnZhbHVlPyhOdD1HdC52YWx1ZSxQdD0hMCk6TnQ8TXQudmFsdWUmJihOdD1NdC52YWx1ZSxQdD0hMCkse3g6eGUseTpOdCxvdXRPZkJvdW5kczpQdH19ZnVuY3Rpb24gR2EoKXtCbi54PVVuLmxlZnQtcS5sZWZ0LnZhbHVlLEJuLnk9VW4udG9wLXEudG9wLnZhbHVlfWZ1bmN0aW9uIFlhKHhlKXt4ZT14ZXx8anQseGU9X28oeGUpLHl0LnZhbHVlPVVuLmhlaWdodC9qdCxIdC52YWx1ZT1Vbi53aWR0aC9qdDtsZXQgTnQ9eXQudmFsdWUqeGUsUHQ9SHQudmFsdWUqeGU7WXQueD0oUHQtSHQudmFsdWUpLzIsWXQueT0oTnQteXQudmFsdWUpLzJ9ZnVuY3Rpb24gRm8oKXtsZXQgeGU9MC1Cbi54K1l0LngsTnQ9cS53aWR0aC52YWx1ZS1IdC52YWx1ZS1Cbi54LVl0Lng7amUudmFsdWU9TWF0aC5taW4oeGUsTnQpLGRuLnZhbHVlPU1hdGgubWF4KHhlLE50KTtsZXQgUHQ9MC1Cbi55K1l0Lnksd249cS5oZWlnaHQudmFsdWUteXQudmFsdWUtQm4ueS1ZdC55O010LnZhbHVlPU1hdGgubWluKFB0LHduKSxHdC52YWx1ZT1NYXRoLm1heChQdCx3bil9ZnVuY3Rpb24gRGkoeGUsTnQpe2lmKHYuc2NhbGUpe3hlPV9vKHhlKSxZYSh4ZSksRm8oKTtsZXQgUHQ9V3IoVXQscXQpLHduPVB0LngsRXI9UHQueTtOdD9ibyh3bixFcix4ZSwiIiwhMCwhMCk6a2koZnVuY3Rpb24oKXtWbyh3bixFcix4ZSwiIiwhMCwhMCl9KX19ZnVuY3Rpb24gX28oeGUpe3JldHVybiB4ZT1NYXRoLm1heCguNSxuYS52YWx1ZSx4ZSkseGU9TWF0aC5taW4oMTAsY3MudmFsdWUseGUpLHhlfWZ1bmN0aW9uIGJvKHhlLE50LFB0LHduLEVyLE9pKXtBaSgpLG9uLnZhbHVlfHwoeGU9VXQpLF9uLnZhbHVlfHwoTnQ9cXQpLHYuc2NhbGV8fChQdD1qdCk7bGV0IEppPVdyKHhlLE50KTtpZih4ZT1KaS54LE50PUppLnksIXYuYW5pbWF0aW9uKXtWbyh4ZSxOdCxQdCx3bixFcixPaSk7cmV0dXJufWpuLl9zcHJpbmdYLl9zb2x1dGlvbj1udWxsLGpuLl9zcHJpbmdZLl9zb2x1dGlvbj1udWxsLGpuLl9zcHJpbmdTY2FsZS5fc29sdXRpb249bnVsbCxqbi5fc3ByaW5nWC5fZW5kUG9zaXRpb249VXQsam4uX3NwcmluZ1kuX2VuZFBvc2l0aW9uPXF0LGpuLl9zcHJpbmdTY2FsZS5fZW5kUG9zaXRpb249anQsam4uc2V0RW5kKHhlLE50LFB0LDEpLGR0PUZyKGpuLGZ1bmN0aW9uKCl7bGV0IFVvPWpuLngoKSxOYT1Vby54LGlhPVVvLnksZ3M9VW8uc2NhbGU7Vm8oTmEsaWEsZ3Msd24sRXIsT2kpfSxmdW5jdGlvbigpe2R0LmNhbmNlbCgpfSl9ZnVuY3Rpb24gZHMoeGUpe2xldCBOdD1XcihVdCxxdCksUHQ9TnQueCx3bj1OdC55LEVyPU50Lm91dE9mQm91bmRzO3JldHVybiBFciYmYm8oUHQsd24sanQseGUpLEVyfWZ1bmN0aW9uIFZvKHhlLE50LFB0LHduPSIiLEVyLE9pKXt4ZSE9PW51bGwmJnhlLnRvU3RyaW5nKCkhPT0iTmFOIiYmdHlwZW9mIHhlPT0ibnVtYmVyInx8KHhlPVV0fHwwKSxOdCE9PW51bGwmJk50LnRvU3RyaW5nKCkhPT0iTmFOIiYmdHlwZW9mIE50PT0ibnVtYmVyInx8KE50PXF0fHwwKSx4ZT1OdW1iZXIoeGUudG9GaXhlZCgxKSksTnQ9TnVtYmVyKE50LnRvRml4ZWQoMSkpLFB0PU51bWJlcihQdC50b0ZpeGVkKDEpKSxVdD09PXhlJiZxdD09PU50fHxFcnx8eCgiY2hhbmdlIix7eDpvaSh4ZSxZdC54KSx5Om9pKE50LFl0LnkpLHNvdXJjZTp3bn0pLHYuc2NhbGV8fChQdD1qdCksUHQ9X28oUHQpLFB0PStQdC50b0ZpeGVkKDMpLE9pJiZQdCE9PWp0JiZ4KCJzY2FsZSIse3g6eGUseTpOdCxzY2FsZTpQdH0pO2xldCBKaT1gdHJhbnNsYXRlKCR7eGV9cHgsICR7TnR9cHgpIHNjYWxlKCR7UHR9KWA7WnIudHJhbnNpdGlvbigkLnZhbHVlLHtzdHlsZXM6e3RyYW5zZm9ybTpKaX0sZHVyYXRpb246MCxkZWxheTowfSksVXQ9eGUscXQ9TnQsanQ9UHR9ZnVuY3Rpb24geHMoKXtyZXR1cm4ga24oJC52YWx1ZSkudGhlbih4ZT0+e1VuPXhlfSl9ZnVuY3Rpb24gaHMoKXtpZighWi52YWx1ZSlyZXR1cm47QWkoKTtsZXQgeGU9di5zY2FsZT9ndC52YWx1ZToxO0dhKCksWWEoeGUpLEZvKCksVXQ9Q2UudmFsdWUrWXQueCxxdD1jdC52YWx1ZStZdC55O2xldCBOdD1XcihVdCxxdCksUHQ9TnQueCx3bj1OdC55O1ZvKFB0LHduLHhlLCIiLCEwKX1yZXR1cm4gUC5vbk1vdW50ZWQoKCk9PntwZT1RaShOdD0+e3N3aXRjaChOdC5kZXRhaWwuc3RhdGUpe2Nhc2Uic3RhcnQiOnNvKCk7YnJlYWs7Y2FzZSJtb3ZlIjpXYShOdCk7YnJlYWs7Y2FzZSJlbmQiOmZzKCl9fSksZigoKT0+e3hzKCkudGhlbigoKT0+e2hzKCl9KX0sMTAwKSxxbi5yZWNvbmZpZ3VyZSgxLHpyLnZhbHVlKSxqbi5yZWNvbmZpZ3VyZSgxLDkqTWF0aC5wb3coeXIudmFsdWUsMikvNDAseXIudmFsdWUpO2xldCB4ZT17c2V0UGFyZW50OmhzfTt0ZSh4ZSksUC5vblVubW91bnRlZCgoKT0+e2NlKHhlKX0pfSksUC5vblVubW91bnRlZCgoKT0+e0FpKCl9KSwoKT0+e1UocGUpfX1sZXQgWHI9MTYsVXI9e2FjdGl2ZUNvbG9yOkluLlBSSU1BUllfQ09MT1IsYmFja2dyb3VuZENvbG9yOiIjRUJFQkVCIixhY3RpdmVNb2RlOiJiYWNrd2FyZHMifSxEdD17cGVyY2VudDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowLHZhbGlkYXRvcih2KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh2KSl9fSxmb250U2l6ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDpYcn0sc2hvd0luZm86e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxzdHJva2VXaWR0aDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo2LHZhbGlkYXRvcih2KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh2KSl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpVci5hY3RpdmVDb2xvcn0sYWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6VXIuYWN0aXZlQ29sb3J9LGJhY2tncm91bmRDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpVci5iYWNrZ3JvdW5kQ29sb3J9LGFjdGl2ZTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGFjdGl2ZU1vZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6VXIuYWN0aXZlTW9kZX0sZHVyYXRpb246e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MzAsdmFsaWRhdG9yKHYpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KHYpKX19LGJvcmRlclJhZGl1czp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfX0sVGU9W3sidW5pLXByb2dyZXNzIjp7IiI6e2ZsZXg6MSxmbGV4RGlyZWN0aW9uOiJyb3ciLGFsaWduSXRlbXM6ImNlbnRlciJ9fSwidW5pLXByb2dyZXNzLWJhciI6eyIiOntmbGV4OjF9fSwidW5pLXByb2dyZXNzLWlubmVyLWJhciI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUifX0sInVuaS1wcm9ncmVzcy1pbmZvIjp7IiI6e21hcmdpbkxlZnQ6IjE1cHgifX19XSxfaT1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUHJvZ3Jlc3MiLHByb3BzOkR0LHN0eWxlczpUZSxlbWl0czpbImFjdGl2ZWVuZCJdLHNldHVwKHYse2VtaXQ6eH0pe2xldCAkPVAucmVmKG51bGwpLFU9UC5yZWYobnVsbCksWj1LbigkLHgpLHE9Ymkodik7cmV0dXJuIFAud2F0Y2goKCk9PnEucmVhbFBlcmNlbnQsKHRlLGNlKT0+e3EubGFzdFBlcmNlbnQ9Y2V8fDAseWkocSx2LFopfSksUC5vbk1vdW50ZWQoKCk9PntmKCgpPT57a24oVS52YWx1ZSkudGhlbigoe3dpZHRoOnRlfSk9PntxLnByb2dyZXNzV2lkdGg9dGV8fDAseWkocSx2LFopfSl9LDUwKX0pLCgpPT57bGV0e3Nob3dJbmZvOnRlLGZvbnRTaXplOmNlfT12LHtvdXRlckJhclN0eWxlOnBlLGlubmVyQmFyU3R5bGU6SWUsY3VycmVudFBlcmNlbnQ6ZmV9PXE7cmV0dXJuIFAuY3JlYXRlVk5vZGUoImRpdiIse3JlZjokLGNsYXNzOiJ1bmktcHJvZ3Jlc3MifSxbUC5jcmVhdGVWTm9kZSgiZGl2Iix7cmVmOlUsc3R5bGU6cGUsY2xhc3M6InVuaS1wcm9ncmVzcy1iYXIifSxbUC5jcmVhdGVWTm9kZSgiZGl2Iix7c3R5bGU6SWUsY2xhc3M6InVuaS1wcm9ncmVzcy1pbm5lci1iYXIifSxudWxsKV0pLHRlP0puKGZlKyIlIix7Y2xhc3M6InVuaS1wcm9ncmVzcy1pbmZvIixzdHlsZTp7Zm9udFNpemU6Y2V9fSk6bnVsbF0pfX19KTtmdW5jdGlvbiBiaSh2KXtsZXQgeD1QLnJlZigwKSwkPVAucmVmKDApLFU9UC5jb21wdXRlZCgoKT0+KHtiYWNrZ3JvdW5kQ29sb3I6di5iYWNrZ3JvdW5kQ29sb3IsYm9yZGVyUmFkaXVzOnYuYm9yZGVyUmFkaXVzLGhlaWdodDp2LnN0cm9rZVdpZHRofSkpLFo9UC5jb21wdXRlZCgoKT0+e2xldCBjZT12LmNvbG9yIT09VXIuYWN0aXZlQ29sb3ImJnYuYWN0aXZlQ29sb3I9PT1Vci5hY3RpdmVDb2xvcj92LmNvbG9yOnYuYWN0aXZlQ29sb3I7cmV0dXJue3dpZHRoOngudmFsdWUqJC52YWx1ZS8xMDAsaGVpZ2h0OnYuc3Ryb2tlV2lkdGgsYmFja2dyb3VuZENvbG9yOmNlLGJvcmRlclJhZGl1czp2LmJvcmRlclJhZGl1c319KSxxPVAuY29tcHV0ZWQoKCk9PntsZXQgY2U9cGFyc2VGbG9hdCh2LnBlcmNlbnQpO3JldHVybiBjZTwwJiYoY2U9MCksY2U+MTAwJiYoY2U9MTAwKSxjZX0pO3JldHVybiBQLnJlYWN0aXZlKHtvdXRlckJhclN0eWxlOlUsaW5uZXJCYXJTdHlsZTpaLHJlYWxQZXJjZW50OnEsY3VycmVudFBlcmNlbnQ6eCxzdHJva2VUaW1lcjowLGxhc3RQZXJjZW50OjAscHJvZ3Jlc3NXaWR0aDokfSl9ZnVuY3Rpb24geWkodix4LCQpe3Yuc3Ryb2tlVGltZXImJmNsZWFySW50ZXJ2YWwodi5zdHJva2VUaW1lcikseC5hY3RpdmU/KHYuY3VycmVudFBlcmNlbnQ9eC5hY3RpdmVNb2RlPT09VXIuYWN0aXZlTW9kZT8wOnYubGFzdFBlcmNlbnQsdi5zdHJva2VUaW1lcj1zZXRJbnRlcnZhbCgoKT0+e3YuY3VycmVudFBlcmNlbnQrMT52LnJlYWxQZXJjZW50Pyh2LmN1cnJlbnRQZXJjZW50PXYucmVhbFBlcmNlbnQsdi5zdHJva2VUaW1lciYmY2xlYXJJbnRlcnZhbCh2LnN0cm9rZVRpbWVyKSwkKCJhY3RpdmVlbmQiLHt9KSk6di5jdXJyZW50UGVyY2VudCs9MX0scGFyc2VGbG9hdCh4LmR1cmF0aW9uKSkpOnYuY3VycmVudFBlcmNlbnQ9di5yZWFsUGVyY2VudH1sZXQgT3I9e3ZhbHVlOnt0eXBlOkFycmF5LGRlZmF1bHQoKXtyZXR1cm5bXX0sdmFsaWRhdG9yOmZ1bmN0aW9uKHYpe3JldHVybiB3dC5pc0FycmF5KHYpJiZ2LmZpbHRlcih4PT50eXBlb2YgeD09Im51bWJlciIpLmxlbmd0aD09PXYubGVuZ3RofX0saW5kaWNhdG9yU3R5bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGluZGljYXRvckNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxtYXNrU3R5bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG1hc2tDbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LFJpPXd0LmV4dGVuZCh7fSxPcix7aGVpZ2h0Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9LG1hc2tUb3BTdHlsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sbWFza0JvdHRvbVN0eWxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0pLFRyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJQaWNrZXJWaWV3Iixwcm9wczpSaSxlbWl0czpbImNoYW5nZSIsInVwZGF0ZTp2YWx1ZSJdLHNldHVwKHYse3Nsb3RzOngsZW1pdDokfSl7bGV0IFU9UC5yZWYobnVsbCksWj1Scih2KSxxPUtuKFUsJCksdGU9W10sY2U9SWU9PkFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGUuZmlsdGVyKGZlPT5mZS50eXBlIT09UC5Db21tZW50KSxJZSkscGU9SWU9PlAuY29tcHV0ZWQoe2dldCgpe2xldCBmZT1jZShJZS52bm9kZSk7cmV0dXJuIFoudmFsdWVbZmVdfHwwfSxzZXQoZmUpe2lmKCFJZS5kYXRhLl9pc01vdW50ZWQpcmV0dXJuO2xldCBDZT1jZShJZS52bm9kZSk7aWYoQ2U8MClyZXR1cm47aWYoWi52YWx1ZVtDZV0hPT1mZSl7Wi52YWx1ZVtDZV09ZmU7bGV0IGd0PVoudmFsdWUubWFwKEh0PT5IdCk7JCgidXBkYXRlOnZhbHVlIixndCkscSgiY2hhbmdlIix7dmFsdWU6Z3R9KX19fSk7cmV0dXJuIFAucHJvdmlkZSgiZ2V0UGlja2VyVmlld0NvbHVtbiIscGUpLFAucHJvdmlkZSgicGlja2VyVmlld1Byb3BzIix2KSwoKT0+e2xldCBJZT14LmRlZmF1bHQmJnguZGVmYXVsdCgpO3RlPW1pKEllKTtsZXQgZmU9di5oZWlnaHQ/e2hlaWdodDpgJHtwYXJzZUZsb2F0KHYuaGVpZ2h0KX1weGB9Ont9O3JldHVybiBQLmNyZWF0ZVZOb2RlKCJ2aWV3IixQLm1lcmdlUHJvcHMoe3JlZjpVLGNsYXNzOiJ1bmktcGlja2VyLXZpZXciLHN0eWxlOmZlfSx7cHJldmVudEdlc3R1cmU6ITB9KSxbUC5jcmVhdGVWTm9kZSgidmlldyIse2NsYXNzOiJ1bmktcGlja2VyLXZpZXctd3JhcHBlciJ9LFt0ZV0pXSl9fSxzdHlsZXM6W3sidW5pLXBpY2tlci12aWV3Ijp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9fSwidW5pLXBpY2tlci12aWV3LXdyYXBwZXIiOnsiIjp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoicm93Iixwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowLG92ZXJmbG93OiJoaWRkZW4ifX19XX0pO2Z1bmN0aW9uIFJyKHYpe2xldCB4PVAucmVhY3RpdmUoWy4uLnYudmFsdWVdKSwkPVAucmVhY3RpdmUoe3ZhbHVlOnh9KTtyZXR1cm4gUC53YXRjaCgoKT0+di52YWx1ZSxVPT57JC52YWx1ZS5sZW5ndGg9VS5sZW5ndGgsUC5uZXh0VGljaygoKT0+e1UuZm9yRWFjaCgoWixxKT0+e1ohPT0kLnZhbHVlW3FdJiYkLnZhbHVlLnNwbGljZShxLDEsWil9KX0pfSksJH1sZXQgYWk9RS5yZXF1aXJlTW9kdWxlKCJkb20iKSxQcj1FLmNvbmZpZy5lbnYucGxhdGZvcm0udG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIjtmdW5jdGlvbiBFaSh2KXtyZXR1cm4gd3QuZXh0ZW5kKHt9LHd0LmlzU3RyaW5nKHYpP3VvKHYpOnYpfWxldCBmbj17bGVuZ3RoOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9fSxqaT1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUGlja2VyVmlld0NvbHVtbiIscHJvcHM6Zm4sZGF0YTooKT0+KHtfaXNNb3VudGVkOiExfSksc2V0dXAodix7c2xvdHM6eH0pe2xldCAkPVAuZ2V0Q3VycmVudEluc3RhbmNlKCksVT1QLnJlZihudWxsKSxaPVAucmVmKG51bGwpLHE9UC5yZWYobnVsbCksdGU9UC5yZWYobnVsbCksY2U9UC5pbmplY3QoInBpY2tlclZpZXdQcm9wcyIpLEllPVAuaW5qZWN0KCJnZXRQaWNrZXJWaWV3Q29sdW1uIikoJCksZmU9UC5jb21wdXRlZCgoKT0+RWkoY2UuaW5kaWNhdG9yU3R5bGUpKSxDZT1QLmNvbXB1dGVkKCgpPT5FaShjZS5tYXNrVG9wU3R5bGUpKSxjdD1QLmNvbXB1dGVkKCgpPT5FaShjZS5tYXNrQm90dG9tU3R5bGUpKSxndD1QLnJlZigwKTtndC52YWx1ZT0kcihmZS52YWx1ZSk7bGV0IEh0PVAucmVmKDApO0h0LnZhbHVlPXBhcnNlRmxvYXQoY2UuaGVpZ2h0KTtsZXR7c2V0Q3VycmVudDp5dCxvblNjcm9sbGVuZDpqZX09dG8odixJZSxaLGd0KSxNdD0oKT0+e2xldCBHdCxkdDtmKCgpPT57UHJvbWlzZS5hbGwoW2tuKFUudmFsdWUpLnRoZW4oKHtoZWlnaHQ6ZW59KT0+e0d0PUh0LnZhbHVlPWVufSksUHImJnYubGVuZ3RoP2tuKHEudmFsdWUpLnRoZW4oKHtoZWlnaHQ6ZW59KT0+e2R0PWd0LnZhbHVlPWVuL3BhcnNlRmxvYXQodi5sZW5ndGgpfSk6a24odGUudmFsdWUpLnRoZW4oKHtoZWlnaHQ6ZW59KT0+e2R0PWd0LnZhbHVlPWVufSldKS50aGVuKCgpPT57R3QmJmR0P2YoKCk9PnskLmRhdGEuX2lzTW91bnRlZD0hMCx5dChJZS52YWx1ZSwhMSwhMCl9LDUwKTpNdCgpfSl9LDUwKX07UC5vbk1vdW50ZWQoTXQpO2xldCBkbj1HdD0+R3Q/UHI/UC5jcmVhdGVWTm9kZSgiZGl2Iix7cmVmOnEsc3R5bGU6ImZsZXgtZGlyZWN0aW9uOmNvbHVtbjsifSxbR3RdKTpHdDpudWxsO3JldHVybigpPT57bGV0IEd0PXguZGVmYXVsdCYmeC5kZWZhdWx0KCksZHQ9KEh0LnZhbHVlLWd0LnZhbHVlKS8yLGVuPWAke0h0LnZhbHVlLWR0fXB4YCxCbj17c2hvd1Njcm9sbGJhcjohMSxzY3JvbGxUb0JlZ2luOiExLGRlY2VsZXJhdGlvblJhdGU6LjMsc2Nyb2xsWTohMH07cmV0dXJuIFByfHwoQm4uc2Nyb2xsVG9wPUllLnZhbHVlKmd0LnZhbHVlKSxQLmNyZWF0ZVZOb2RlKCJ2aWV3Iix7cmVmOlUsY2xhc3M6InVuaS1waWNrZXItdmlldy1jb2x1bW4ifSxbUC5jcmVhdGVWTm9kZSgic2Nyb2xsLXZpZXciLFAubWVyZ2VQcm9wcyh7Y2xhc3M6InVuaS1waWNrZXItdmlldy1ncm91cCIsc3R5bGU6ImZsZXgtZGlyZWN0aW9uOmNvbHVtbjsiLG9uU2Nyb2xsZW5kOmplfSxCbiksW1AuY3JlYXRlVk5vZGUoInZpZXciLHtyZWY6WixjbGFzczoidW5pLXBpY2tlci12aWV3LWNvbnRlbnQiLHN0eWxlOntwYWRkaW5nVG9wOmAke2R0fXB4YCxwYWRkaW5nQm90dG9tOmAke2R0fXB4YH19LFtkbihHdCldKV0pLFAuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtjbGFzczoidW5pLXBpY2tlci12aWV3LW1hc2sifSxbUC5jcmVhdGVWTm9kZSgidS1zY2FsYWJsZSIse2NsYXNzOiJ1bmktcGlja2VyLXZpZXctbWFzayB1bmktcGlja2VyLXZpZXctbWFzay10b3AiLHN0eWxlOnd0LmV4dGVuZCh7fSxDZS52YWx1ZSx7Ym90dG9tOmVufSl9LG51bGwpLFAuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtjbGFzczoidW5pLXBpY2tlci12aWV3LW1hc2sgdW5pLXBpY2tlci12aWV3LW1hc2stYm90dG9tIixzdHlsZTp3dC5leHRlbmQoe30sY3QudmFsdWUse3RvcDplbn0pfSxudWxsKV0pLFAuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtyZWY6dGUsY2xhc3M6InVuaS1waWNrZXItdmlldy1pbmRpY2F0b3IiLHN0eWxlOnd0LmV4dGVuZCh7fSxmZS52YWx1ZSx7dG9wOmAke2R0fXB4YH0pfSxudWxsKV0pfX0sc3R5bGVzOlt7InVuaS1waWNrZXItdmlldy1jb2x1bW4iOnsiIjp7ZmxleDoxLHBvc2l0aW9uOiJyZWxhdGl2ZSIsYWxpZ25JdGVtczoic3RyZXRjaCIsb3ZlcmZsb3c6ImhpZGRlbiJ9fSwidW5pLXBpY2tlci12aWV3LW1hc2siOnsiIjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MCxwb2ludGVyRXZlbnRzOiJub25lIn19LCJ1bmktcGlja2VyLXZpZXctbWFzay10b3AiOnsiIjp7Ym90dG9tOjAsYmFja2dyb3VuZEltYWdlOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkscmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpKSJ9fSwidW5pLXBpY2tlci12aWV3LW1hc2stYm90dG9tIjp7IiI6e3RvcDowLGJhY2tncm91bmRJbWFnZToibGluZWFyLWdyYWRpZW50KHRvIHRvcCxyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpLHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSkifX0sInVuaS1waWNrZXItdmlldy1ncm91cCI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowfX0sInVuaS1waWNrZXItdmlldy1jb250ZW50Ijp7IiI6e2ZsZXhEaXJlY3Rpb246ImNvbHVtbiIscGFkZGluZ1RvcDowLHBhZGRpbmdSaWdodDowLHBhZGRpbmdCb3R0b206MCxwYWRkaW5nTGVmdDowfX0sInVuaS1waWNrZXItdmlldy1pbmRpY2F0b3IiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAscmlnaHQ6MCx0b3A6MCxoZWlnaHQ6IjM0cHgiLHBvaW50ZXJFdmVudHM6Im5vbmUiLGJvcmRlckNvbG9yOiIjZTVlNWU1Iixib3JkZXJUb3BXaWR0aDoiMXB4Iixib3JkZXJCb3R0b21XaWR0aDoiMXB4In19fV19KTtmdW5jdGlvbiAkcih2KXtsZXQgJD0odi5oZWlnaHR8fHYubGluZUhlaWdodHx8IiIpLm1hdGNoKC8oLT9bXGRcLl0rKXB4LyksVT0wO3JldHVybiAkJiYoVT1wYXJzZUZsb2F0KCRbMV0pKSxVfWZ1bmN0aW9uIHRvKHYseCwkLFUpe2xldCBaO2Z1bmN0aW9uIHEocGUsSWU9ITApe2FpLnNjcm9sbFRvRWxlbWVudCgkLnZhbHVlLHtvZmZzZXQ6cGUqVS52YWx1ZSxhbmltYXRlZDpJZX0pLEllJiYoWj1EYXRlLm5vdygpKX1QLndhdGNoKCgpPT52Lmxlbmd0aCwoKT0+e2YoKCk9Pnt0ZSh4LnZhbHVlLCEwLCEwKX0sMTUwKX0pLFAud2F0Y2goeCxwZT0+cShwZSkpO2xldCB0ZT0ocGUsSWU9ITAsZmUpPT57eC52YWx1ZT09PXBlJiYhZmV8fCh4LnZhbHVlPXBlLFByJiZxKHBlLEllKSl9O3JldHVybntzZXRDdXJyZW50OnRlLG9uU2Nyb2xsZW5kOnBlPT57aWYoRGF0ZS5ub3coKS1aPDM0MClyZXR1cm47bGV0IEllPXBlLmRldGFpbC5jb250ZW50T2Zmc2V0LnksZmU9TWF0aC5yb3VuZChJZS9VLnZhbHVlKTtJZSVVLnZhbHVlP3RlKGZlLCEwLCEwKTp4LnZhbHVlPWZlfX19bGV0IEVuPXtTRUxFQ1RPUjoic2VsZWN0b3IiLE1VTFRJU0VMRUNUT1I6Im11bHRpU2VsZWN0b3IiLFRJTUU6InRpbWUiLERBVEU6ImRhdGUifSxIcj17WUVBUjoieWVhciIsTU9OVEg6Im1vbnRoIixEQVk6ImRheSJ9O2Z1bmN0aW9uIHNyKHYpe3JldHVybiB2Pjk/djpgMCR7dn1gfWZ1bmN0aW9uIFNpKHYseCl7dj1TdHJpbmcodnx8IiIpO2xldCAkPW5ldyBEYXRlO2lmKHg9PT1Fbi5USU1FKXtsZXQgVT12LnNwbGl0KCI6Iik7VS5sZW5ndGg9PT0yJiYkLnNldEhvdXJzKHBhcnNlSW50KFVbMF0pLHBhcnNlSW50KFVbMV0pKX1lbHNle2xldCBVPXYuc3BsaXQoIi0iKTtVLmxlbmd0aD09PTMmJiQuc2V0RnVsbFllYXIocGFyc2VJbnQoVVswXSkscGFyc2VJbnQoU3RyaW5nKHBhcnNlRmxvYXQoVVsxXSktMSkpLHBhcnNlSW50KFVbMl0pKX1yZXR1cm4gJH1mdW5jdGlvbiB4aSh2KXtpZih2Lm1vZGU9PT1Fbi5USU1FKXJldHVybiIwMDowMCI7aWYodi5tb2RlPT09RW4uREFURSl7bGV0IHg9bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLTEwMDtzd2l0Y2godi5maWVsZHMpe2Nhc2UgSHIuWUVBUjpyZXR1cm4geDtjYXNlIEhyLk1PTlRIOnJldHVybiB4KyItMDEiO2RlZmF1bHQ6cmV0dXJuIHgrIi0wMS0wMSJ9fXJldHVybiIifWZ1bmN0aW9uIG1yKHYpe2lmKHYubW9kZT09PUVuLlRJTUUpcmV0dXJuIjIzOjU5IjtpZih2Lm1vZGU9PT1Fbi5EQVRFKXtsZXQgeD1uZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkrMTAwO3N3aXRjaCh2LmZpZWxkcyl7Y2FzZSBIci5ZRUFSOnJldHVybiB4O2Nhc2UgSHIuTU9OVEg6cmV0dXJuIHgrIi0xMiI7ZGVmYXVsdDpyZXR1cm4geCsiLTEyLTMxIn19cmV0dXJuIiJ9bGV0IFFyPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxyYW5nZTp7dHlwZTpBcnJheSxkZWZhdWx0KCl7cmV0dXJuW119fSxyYW5nZUtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sdmFsdWU6e3R5cGU6W051bWJlcixTdHJpbmcsQXJyYXldLGRlZmF1bHQ6MH0sbW9kZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpFbi5TRUxFQ1RPUix2YWxpZGF0b3Iodil7cmV0dXJuIE9iamVjdC52YWx1ZXMoRW4pLmluZGV4T2Yodik+PTB9fSxmaWVsZHM6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHN0YXJ0Ont0eXBlOlN0cmluZyxkZWZhdWx0OnhpfSxlbmQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bXJ9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX19LGVyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJQaWNrZXIiLHByb3BzOlFyLGVtaXRzOlsiY2hhbmdlIiwiY2FuY2VsIiwiY29sdW1uY2hhbmdlIl0sc2V0dXAodix7c2xvdHM6eCxlbWl0OiR9KXtsZXQgVT1QLnJlZihudWxsKSxaPUtuKFUsJCkscT1QLnJlZihudWxsKSx0ZT1QLnJlZihudWxsKSxjZT0oKT0+e2xldCB5dD12LnZhbHVlO3N3aXRjaCh2Lm1vZGUpe2Nhc2UgRW4uTVVMVElTRUxFQ1RPUjp7d3QuaXNBcnJheSh5dCl8fCh5dD1bXSksd3QuaXNBcnJheShxLnZhbHVlKXx8KHEudmFsdWU9W10pO2xldCBqZT1xLnZhbHVlLmxlbmd0aD1NYXRoLm1heCh5dC5sZW5ndGgsdi5yYW5nZS5sZW5ndGgpO2ZvcihsZXQgTXQ9MDtNdDxqZTtNdCsrKXtsZXQgZG49TnVtYmVyKHl0W010XSksR3Q9TnVtYmVyKHEudmFsdWVbTXRdKSxkdD1pc05hTihkbik/aXNOYU4oR3QpPzA6R3Q6ZG47cS52YWx1ZS5zcGxpY2UoTXQsMSxkdDwwPzA6ZHQpfX1icmVhaztjYXNlIEVuLlRJTUU6Y2FzZSBFbi5EQVRFOnEudmFsdWU9U3RyaW5nKHl0KTticmVhaztkZWZhdWx0OntsZXQgamU9TnVtYmVyKHl0KTtxLnZhbHVlPWplPDA/MDpqZTticmVha319fSxwZT15dD0+e3RlLnZhbHVlJiZ0ZS52YWx1ZS5zZW5kTWVzc2FnZSh5dCl9LEllPXl0PT57bGV0IGplPXtldmVudDoiY2FuY2VsIn07dGUudmFsdWU9c24oe3VybDoiX191bmlhcHBwaWNrZXIiLGRhdGE6eXQsc3R5bGU6e3RpdGxlTlZpZXc6ITEsYW5pbWF0aW9uVHlwZToibm9uZSIsYW5pbWF0aW9uRHVyYXRpb246MCxiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDApIixwb3BHZXN0dXJlOiJub25lIn0sb25NZXNzYWdlOk10PT57bGV0IGRuPU10LmV2ZW50O2lmKGRuPT09ImNyZWF0ZWQiKXtwZSh5dCk7cmV0dXJufWlmKGRuPT09ImNvbHVtbmNoYW5nZSIpe2RlbGV0ZSBNdC5ldmVudCxaKGRuLE10KTtyZXR1cm59amU9TXR9LG9uQ2xvc2U6KCk9Pnt0ZS52YWx1ZT1udWxsO2xldCBNdD1qZS5ldmVudDtkZWxldGUgamUuZXZlbnQsTXQmJlooTXQsamUpfX0pfSxmZT15dD0+e2gubmF0aXZlVUlbdi5tb2RlPT09RW4uVElNRT8icGlja1RpbWUiOiJwaWNrRGF0ZSJdKGplPT57bGV0IE10PWplLmRhdGU7WigiY2hhbmdlIix7dmFsdWU6di5tb2RlPT09RW4uVElNRT9gJHtzcihNdC5nZXRIb3VycygpKX06JHtzcihNdC5nZXRNaW51dGVzKCkpfWA6YCR7TXQuZ2V0RnVsbFllYXIoKX0tJHtzcihNdC5nZXRNb250aCgpKzEpfS0ke3NyKE10LmdldERhdGUoKSl9YH0pfSwoKT0+e1ooImNhbmNlbCIse30pfSx2Lm1vZGU9PT1Fbi5USU1FP3t0aW1lOlNpKHYudmFsdWUsRW4uVElNRSl9OntkYXRlOlNpKHYudmFsdWUsRW4uREFURSksbWluRGF0ZTpTaSh2LnN0YXJ0LEVuLkRBVEUpLG1heERhdGU6U2kodi5lbmQsRW4uREFURSl9KX0sQ2U9eXQ9PnsoeXQubW9kZT09PUVuLlRJTUV8fHl0Lm1vZGU9PT1Fbi5EQVRFKSYmIXl0LmZpZWxkcz9mZSgpOih5dC5maWVsZHM9T2JqZWN0LnZhbHVlcyhIcikuaW5jbHVkZXMoeXQuZmllbGRzKT95dC5maWVsZHM6SHIuREFZLEllKHl0KSl9LGN0PXl0PT57di5kaXNhYmxlZHx8Q2Uod3QuZXh0ZW5kKHt9LHYse3ZhbHVlOnEudmFsdWUsbG9jYWxlOnAuZ2V0TG9jYWxlKCl9KSl9LGd0PVAuaW5qZWN0KHJpLCExKSxIdD17c3VibWl0OigpPT5bdi5uYW1lLHEudmFsdWVdLHJlc2V0OigpPT57c3dpdGNoKHYubW9kZSl7Y2FzZSBFbi5TRUxFQ1RPUjpxLnZhbHVlPTA7YnJlYWs7Y2FzZSBFbi5NVUxUSVNFTEVDVE9SOnd0LmlzQXJyYXkodi52YWx1ZSkmJihxLnZhbHVlPXYudmFsdWUubWFwKHl0PT4wKSk7YnJlYWs7Y2FzZSBFbi5EQVRFOmNhc2UgRW4uVElNRTpxLnZhbHVlPSIiO2JyZWFrfX19O3JldHVybiBndCYmKGd0LmFkZEZpZWxkKEh0KSxQLm9uQmVmb3JlVW5tb3VudCgoKT0+Z3QucmVtb3ZlRmllbGQoSHQpKSksT2JqZWN0LmtleXModikuZm9yRWFjaCh5dD0+e1Aud2F0Y2goKCk9PnZbeXRdLGplPT57bGV0IE10PXt9O010W3l0XT1qZSxwZShNdCl9LHtkZWVwOiEwfSl9KSxQLndhdGNoKCgpPT52LnZhbHVlLGNlLHtkZWVwOiEwfSksY2UoKSwoKT0+UC5jcmVhdGVWTm9kZSgidmlldyIse3JlZjpVLG9uQ2xpY2s6Y3R9LFt4LmRlZmF1bHQmJnguZGVmYXVsdCgpXSl9fSksdHI9e25hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG1pbjp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxtYXg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MTAwfSx2YWx1ZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxzdGVwOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNlOWU5ZTkifSxiYWNrZ3JvdW5kQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNlOWU5ZTkifSxhY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9LHNlbGVjdGVkQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifSxibG9ja0NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjZmZmZmZmIn0sYmxvY2tTaXplOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjI4fSxzaG93VmFsdWU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfX0sR249W3sidW5pLXNsaWRlciI6eyIiOntmbGV4OjEsZmxleERpcmVjdGlvbjoiY29sdW1uIn19LCJ1bmktc2xpZGVyLXdyYXBwZXIiOnsiIjp7ZmxleERpcmVjdGlvbjoicm93IixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixhbGlnbkl0ZW1zOiJjZW50ZXIifX0sInVuaS1zbGlkZXItdGFwLWFyZWEiOnsiIjp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsZmxleERpcmVjdGlvbjoicm93IixhbGlnbkl0ZW1zOiJjZW50ZXIiLHBhZGRpbmdUb3A6IjE0IixwYWRkaW5nQm90dG9tOiIxNCJ9fSwidW5pLXNsaWRlci1oYW5kbGUtd3JhcHBlciI6eyIiOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxiYWNrZ3JvdW5kQ29sb3I6IiNlOWU5ZTkiLGhlaWdodDoiMiIsYm9yZGVyUmFkaXVzOiI1IixtYXJnaW5SaWdodDoiMTQiLG1hcmdpbkxlZnQ6IjE0In19LCJ1bmktc2xpZGVyLXRyYWNrIjp7IiI6e2hlaWdodDoiMiIsYm9yZGVyUmFkaXVzOiI2IixiYWNrZ3JvdW5kQ29sb3I6IiMwMDdhZmYifX0sInVuaS1zbGlkZXItdGh1bWIiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6IjEiLHdpZHRoOiIyOCIsaGVpZ2h0OiIyOCIsYm9yZGVyUmFkaXVzOjUwLGJveFNoYWRvdzoiMCAwIDRweCAjZWJlYmViIn19LCJ1bmktc2xpZGVyLXZhbHVlIjp7IiI6e2NvbG9yOiIjODg4ODg4Iixmb250U2l6ZToiMTYiLHdpZHRoOiIzMCJ9fX1dLG5yPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJVU2xpZGVyIixwcm9wczp0cixzdHlsZXM6R24sc2V0dXAodix7ZW1pdDp4fSl7bGV0ICQ9UC5yZWYobnVsbCksVT1QLnJlZihudWxsKSxaPUtuKCQseCkscT1jcih2KSx0ZT1obyh2LHEsWik7cmV0dXJuIGdvKHYscSksUC53YXRjaCgoKT0+di52YWx1ZSxjZT0+e3Euc2xpZGVyVmFsdWU9TnVtYmVyKGNlKX0pLFAub25Nb3VudGVkKCgpPT57ZigoKT0+e2tuKFUudmFsdWUpLnRoZW4oKHt3aWR0aDpjZSxsZWZ0OnBlfSk9PntxLnNsaWRlckxlZnQ9cGUscS5zbGlkZXJXaWR0aD1jZXx8MCxxLnNsaWRlclZhbHVlPU51bWJlcih2LnZhbHVlKX0pfSwxMDApfSksKCk9PntsZXR7c2hvd1ZhbHVlOmNlfT12LHt0cmFja1RhcFN0eWxlOnBlLHRyYWNrU3R5bGU6SWUsdHJhY2tBY3RpdmVTdHlsZTpmZSx0aHVtYlN0eWxlOkNlLHNsaWRlclZhbHVlOmN0fT1xO3JldHVybiBQLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXNsaWRlciIscmVmOiR9LFtQLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXNsaWRlci13cmFwcGVyIn0sW1AuY3JlYXRlVk5vZGUoImRpdiIsUC5tZXJnZVByb3BzKHtjbGFzczoidW5pLXNsaWRlci10YXAtYXJlYSIsc3R5bGU6cGV9LHRlKSxbUC5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXItaGFuZGxlLXdyYXBwZXIiLHN0eWxlOkllLHJlZjpVfSxbUC5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXItdHJhY2siLHN0eWxlOmZlfSxudWxsKV0pLFAuY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOiJ1bmktc2xpZGVyLXRodW1iIixzdHlsZTpDZX0sbnVsbCldKSxjZT9KbihjdCsiIix7Y2xhc3M6InVuaS1zbGlkZXItdmFsdWUifSk6bnVsbF0pXSl9fX0pO2Z1bmN0aW9uIGNyKHYpe2xldCB4PVAucmVmKDApLCQ9UC5yZWYoMCksVT1QLnJlZigwKSxaPSgpPT52LmJhY2tncm91bmRDb2xvciE9PSIjZTllOWU5Ij92LmJhY2tncm91bmRDb2xvcjp2LmNvbG9yIT09IiMwMDdhZmYiP3YuY29sb3I6IiMwMDdhZmYiLHE9KCk9PnYuYWN0aXZlQ29sb3IhPT0iIzAwN2FmZiI/di5hY3RpdmVDb2xvcjp2LnNlbGVjdGVkQ29sb3IhPT0iI2U5ZTllOSI/di5zZWxlY3RlZENvbG9yOiIjZTllOWU5Iix0ZT0oKT0+e2xldCBJZT1OdW1iZXIodi5tYXgpLGZlPU51bWJlcih2Lm1pbik7cmV0dXJuKFUudmFsdWUtZmUpLyhJZS1mZSkqJC52YWx1ZX0sY2U9TnVtYmVyKHYuYmxvY2tTaXplKS8yO3JldHVybiBQLnJlYWN0aXZlKHtzbGlkZXJMZWZ0Ongsc2xpZGVyV2lkdGg6JCxzbGlkZXJWYWx1ZTpVLHNsaWRlclRodW1iT2Zmc2V0OmNlLHRyYWNrVGFwU3R5bGU6UC5jb21wdXRlZCgoKT0+KHtwYWRkaW5nVG9wOmNlLHBhZGRpbmdCb3R0b206Y2V9KSksdHJhY2tTdHlsZTpQLmNvbXB1dGVkKCgpPT4oe2JhY2tncm91bmRDb2xvcjpaKCksbWFyZ2luTGVmdDpjZSxtYXJnaW5SaWdodDpjZX0pKSx0cmFja0FjdGl2ZVN0eWxlOlAuY29tcHV0ZWQoKCk9Pih7YmFja2dyb3VuZENvbG9yOnEoKSx3aWR0aDp0ZSgpfSkpLHRodW1iU3R5bGU6UC5jb21wdXRlZCgoKT0+KHt3aWR0aDp2LmJsb2NrU2l6ZSxoZWlnaHQ6di5ibG9ja1NpemUsYmFja2dyb3VuZENvbG9yOnYuYmxvY2tDb2xvcixsZWZ0OnRlKCl9KSl9KX1mdW5jdGlvbiBobyh2LHgsJCl7bGV0IFU9bnVsbDtmdW5jdGlvbiBaKGNlLHBlKXt2LmRpc2FibGVkfHwoY2U9PT0ibW92ZSI/KHEocGUpLCQoImNoYW5naW5nIix7dmFsdWU6eC5zbGlkZXJWYWx1ZX0pKTpjZT09PSJlbmQiJiYocShwZSksJCgiY2hhbmdlIix7dmFsdWU6eC5zbGlkZXJWYWx1ZX0pKSl9ZnVuY3Rpb24gcShjZSl7Y2UtPXguc2xpZGVyVGh1bWJPZmZzZXQsY2U8MCYmKGNlPTApLGNlPnguc2xpZGVyV2lkdGgmJihjZT14LnNsaWRlcldpZHRoKTtsZXQgcGU9TnVtYmVyKHYubWF4KSxJZT1OdW1iZXIodi5taW4pLGZlPU51bWJlcih2LnN0ZXApLENlPWNlL3guc2xpZGVyV2lkdGgqKHBlLUllKTtmZT4wJiZDZT5mZSYmQ2UlZmUvZmUhPT0wP0NlLT1DZSVmZTpDZT1wYXJzZUludChDZSsiIikseC5zbGlkZXJWYWx1ZT1DZStJZX1yZXR1cm57b25Ub3VjaHN0YXJ0KGNlKXtjZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT0xJiYhVSYmKFU9Y2UsWigic3RhcnQiLGNlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYKSl9LG9uVG91Y2htb3ZlKGNlKXtjZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT0xJiZVJiZaKCJtb3ZlIixjZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCl9LG9uVG91Y2hlbmQoY2Upe2NlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PTEmJlUmJihVPW51bGwsWigiZW5kIixjZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCkpfX19ZnVuY3Rpb24gZ28odix4KXtsZXQgJD1QLmluamVjdChyaSwhMSksVT17c3VibWl0OigpPT57bGV0IFo9WyIiLG51bGxdO3JldHVybiB2Lm5hbWUmJihaWzBdPXYubmFtZSxaWzFdPXguc2xpZGVyVmFsdWUpLFp9LHJlc2V0OigpPT57eC5zbGlkZXJWYWx1ZT1OdW1iZXIodi52YWx1ZSl9fTskJiYoJC5hZGRGaWVsZChVKSxQLm9uVW5tb3VudGVkKCgpPT57JC5yZW1vdmVGaWVsZChVKX0pKX1sZXQgTm89e25hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGNoZWNrZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSx0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJzd2l0Y2gifSxpZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sZGlzYWJsZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9fSxubz17c3dpdGNoOiJzd2l0Y2giLGNoZWNrYm94OiJjaGVja2JveCJ9LGtvPXt3aWR0aDo1MixoZWlnaHQ6MzJ9LGpyPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJTd2l0Y2giLHByb3BzOk5vLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAodix7ZW1pdDp4fSl7bGV0ICQ9UC5yZWYobnVsbCksVT1QLnJlZih2LmNoZWNrZWQpLFo9eHIodixVKSxxPUtuKCQseCk7UC53YXRjaCgoKT0+di5jaGVja2VkLGNlPT57VS52YWx1ZT1jZX0pO2xldCB0ZT0oY2UscGUpPT57di5kaXNhYmxlZHx8KFUudmFsdWU9Y2UuZGV0YWlsP2NlLmRldGFpbC52YWx1ZTohVS52YWx1ZSxxKCJjaGFuZ2UiLHt2YWx1ZTpVLnZhbHVlfSkpfTtyZXR1cm4gWiYmKFouYWRkSGFuZGxlcih0ZSksUC5vbkJlZm9yZVVubW91bnQoKCk9PntaLnJlbW92ZUhhbmRsZXIodGUpfSkpLHdyKHYseyJsYWJlbC1jbGljayI6dGV9KSwoKT0+e2xldHtjb2xvcjpjZSx0eXBlOnBlLGRpc2FibGVkOkllfT12O3JldHVybiBQLmNyZWF0ZVZOb2RlKCJkaXYiLHtyZWY6JH0sW3BlPT09bm8uc3dpdGNoP1AuY3JlYXRlVk5vZGUoImRjLXN3aXRjaCIsUC5tZXJnZVByb3BzKHtkYXRhVW5jVHlwZToidW5pLXN3aXRjaCJ9LHtvbkNoYW5nZTp0ZX0se2NoZWNrZWQ6VS52YWx1ZSxjb2xvcjpjZSxkaXNhYmxlZDpJZX0se3N0eWxlOmtvfSksbnVsbCk6bnVsbCxwZT09PW5vLmNoZWNrYm94P1AuY3JlYXRlVk5vZGUoUC5yZXNvbHZlQ29tcG9uZW50KCJjaGVja2JveCIpLFAubWVyZ2VQcm9wcyh7c3R5bGU6e2NvbG9yOmNlfX0se2NoZWNrZWQ6VS52YWx1ZSxkaXNhYmxlZDpJZX0se29uQ2xpY2s6dGV9KSxudWxsKTpudWxsXSl9fX0pO2Z1bmN0aW9uIHhyKHYseCl7bGV0ICQ9UC5pbmplY3QocmksITEpLFU9UC5pbmplY3QoV24sITEpLFo9e3N1Ym1pdDooKT0+e2xldCBxPVsiIixudWxsXTtyZXR1cm4gdi5uYW1lJiYocVswXT12Lm5hbWUscVsxXT14LnZhbHVlKSxxfSxyZXNldDooKT0+e3gudmFsdWU9ITF9fTtyZXR1cm4gJCYmKCQuYWRkRmllbGQoWiksUC5vblVubW91bnRlZCgoKT0+eyQucmVtb3ZlRmllbGQoWil9KSksVX1sZXQgcG89e2NoZWNrZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxpZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sZGlzYWJsZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9LHZhbHVlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sUm89cXIoInVjZyIpLHJvPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sQmk9W3sidW5pLWNoZWNrYm94Ijp7IiI6e2ZsZXhEaXJlY3Rpb246InJvdyIsYWxpZ25JdGVtczoiY2VudGVyIn19LCJ1bmktY2hlY2tib3gtaW5wdXQiOnsiIjp7anVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYWxpZ25JdGVtczoiY2VudGVyIixwb3NpdGlvbjoicmVsYXRpdmUiLGJvcmRlcldpZHRoOiIxIixib3JkZXJDb2xvcjoiI2QxZDFkMSIsYm9yZGVyU3R5bGU6InNvbGlkIixiYWNrZ3JvdW5kQ29sb3I6IiNmZmZmZmYiLGJvcmRlclJhZGl1czoiMyIsd2lkdGg6IjIyIixoZWlnaHQ6IjIyIn19LCJ1bmktaWNvbiI6eyIiOntmb250RmFtaWx5OiJ1bmluY29tcG9uZW50cyIsZm9udFNpemU6IjE2IixtYXJnaW5MZWZ0OiIyIixtYXJnaW5Ub3A6IjIiLGNvbG9yOiIjMDA3YWZmIn19LCJ1bmktY2hlY2tib3gtaW5wdXQtZGlzYWJsZWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjZTFlMWUxIn19LCJ1bmktY2hlY2tib3gtaW5wdXQtZGlzYWJsZWQtYmVmb3JlIjp7IiI6e2NvbG9yOiIjYWRhZGFkIn19LCJ1bmktY2hlY2tib3gtc2xvdCI6eyIiOntmb250U2l6ZToiMTYiLG1hcmdpbkxlZnQ6IjUifX19XSx2bz1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiQ2hlY2tib3giLHByb3BzOnBvLHN0eWxlczpCaSxzZXR1cCh2LHtzbG90czp4fSl7bGV0ICQ9UC5yZWYobnVsbCksVT1QLnJlZih2LmNoZWNrZWQpLFo9UC5yZWYodi52YWx1ZSkscT1QLmNvbXB1dGVkKCgpPT52LmRpc2FibGVkPyIjYWRhZGFkIjp2LmNvbG9yKSx0ZT0oKT0+e1UudmFsdWU9ITF9LGNlPShDZSxjdCk9Pnt2LmRpc2FibGVkfHwoVS52YWx1ZT0hVS52YWx1ZSxwZSYmcGUuY2hlY2tib3hDaGFuZ2UoQ2UpKX0se3VuaUNoZWNrR3JvdXA6cGUsdW5pTGFiZWw6SWV9PU1pKFUsWix0ZSk7SWUmJihJZS5hZGRIYW5kbGVyKGNlKSxQLm9uQmVmb3JlVW5tb3VudCgoKT0+e0llLnJlbW92ZUhhbmRsZXIoY2UpfSkpLHdyKHYseyJsYWJlbC1jbGljayI6Y2V9KSxQLndhdGNoKFsoKT0+di5jaGVja2VkLCgpPT52LnZhbHVlXSwoW0NlLGN0XSk9PntVLnZhbHVlPUNlLFoudmFsdWU9Y3R9KTtsZXQgZmU9KCk9PntpZigheC5kZWZhdWx0KXJldHVybltdO2xldCBDZT14LmRlZmF1bHQoKTtyZXR1cm4gQ2UubGVuZ3RoPT09MSYmQ2VbMF0udHlwZT09PVRleHQ/W0puKENlWzBdLmNoaWxkcmVuLHtjbGFzczoidW5pLWNoZWNrYm94LXNsb3QifSldOkNlfTtyZXR1cm4oKT0+UC5jcmVhdGVWTm9kZSgiZGl2IixQLm1lcmdlUHJvcHMoe3JlZjokfSx7ZGF0YVVuY1R5cGU6InVuaS1jaGVja2JveCJ9LHtvbkNsaWNrOmNlLGNsYXNzOiJ1bmktY2hlY2tib3gifSksW1AuY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOlsidW5pLWNoZWNrYm94LWlucHV0Iix7InVuaS1jaGVja2JveC1pbnB1dC1kaXNhYmxlZCI6di5kaXNhYmxlZH1dfSxbVS52YWx1ZT9KbigiXHVFQTA4Iix7Y2xhc3M6InVuaS1pY29uIixzdHlsZTp7Y29sb3I6cS52YWx1ZX19KTpudWxsXSksLi4uZmUoKV0pfX0pO2Z1bmN0aW9uIE1pKHYseCwkKXtsZXQgVT1QLmNvbXB1dGVkKCgpPT4oe2NoZWNrYm94Q2hlY2tlZDpCb29sZWFuKHYudmFsdWUpLHZhbHVlOngudmFsdWV9KSksWj17cmVzZXQ6JH0scT1QLmluamVjdChSbywhMSk7cSYmcS5hZGRGaWVsZChVKTtsZXQgdGU9UC5pbmplY3QocmksITEpO3RlJiZ0ZS5hZGRGaWVsZChaKTtsZXQgY2U9UC5pbmplY3QoV24sITEpO3JldHVybiBQLm9uQmVmb3JlVW5tb3VudCgoKT0+e3EmJnEucmVtb3ZlRmllbGQoVSksdGUmJnRlLnJlbW92ZUZpZWxkKFopfSkse3VuaUNoZWNrR3JvdXA6cSx1bmlGb3JtOnRlLHVuaUxhYmVsOmNlfX1sZXQgemk9UC5kZWZpbmVDb21wb25lbnQoe25hbWU6IkNoZWNrYm94R3JvdXAiLHByb3BzOnJvLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAodix7c2xvdHM6eCxlbWl0OiR9KXtsZXQgVT1QLnJlZihudWxsKSxaPUtuKFUsJCk7cmV0dXJuIFFvKHYsWiksKCk9PlAuY3JlYXRlVk5vZGUoImRpdiIse3JlZjpVLGNsYXNzOiJ1bmktY2hlY2tib3gtZ3JvdXAifSxbeC5kZWZhdWx0JiZ4LmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIFFvKHYseCl7bGV0ICQ9W10sVT0oKT0+JC5yZWR1Y2UoKHEsdGUpPT4odGUudmFsdWUuY2hlY2tib3hDaGVja2VkJiZxLnB1c2godGUudmFsdWUudmFsdWUpLHEpLG5ldyBBcnJheSk7UC5wcm92aWRlKFJvLHthZGRGaWVsZChxKXskLnB1c2gocSl9LHJlbW92ZUZpZWxkKHEpeyQuc3BsaWNlKCQuaW5kZXhPZihxKSwxKX0sY2hlY2tib3hDaGFuZ2UocSl7eCgiY2hhbmdlIix7dmFsdWU6VSgpfSl9fSk7bGV0IFo9UC5pbmplY3QocmksITEpO3JldHVybiBaJiZaLmFkZEZpZWxkKHtzdWJtaXQ6KCk9PntsZXQgcT1bIiIsbnVsbF07cmV0dXJuIHYubmFtZSE9PSIiJiYocVswXT12Lm5hbWUscVsxXT1VKCkpLHF9fSksVX1sZXQgQj17Y2hlY2tlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGlkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjMDA3YWZmIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxRPXFyKCJ1Y2ciKSxoZT17bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LGFlPVt7InVuaS1yYWRpbyI6eyIiOnthbGlnbkl0ZW1zOiJjZW50ZXIiLGZsZXhEaXJlY3Rpb246InJvdyJ9fSwidW5pLXJhZGlvLWlucHV0Ijp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixtYXJnaW5SaWdodDoiNSIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJXaWR0aDoiMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGJvcmRlclJhZGl1czo1MCx3aWR0aDoiMjIiLGhlaWdodDoiMjIiLG91dGxpbmU6MH19LCJ1bmktcmFkaW8taW5wdXQtaWNvbiI6eyIiOntmb250RmFtaWx5OiJ1bmluY29tcG9uZW50cyIsZm9udFNpemU6IjE0Iixjb2xvcjoiI2ZmZmZmZiJ9fSwidW5pLXJhZGlvLWlucHV0LWRpc2FibGVkIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2UxZTFlMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGNvbG9yOiIjYWRhZGFkIn19LCJ1bmktcmFkaW8tc2xvdCI6eyIiOntmb250U2l6ZToiMTYiLG1hcmdpbkxlZnQ6IjUifX19XSxkZT1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUmFkaW8iLHByb3BzOkIsc3R5bGVzOmFlLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAodix7c2xvdHM6eH0pe2xldCAkPVAucmVmKG51bGwpLFU9UC5yZWYodi5jaGVja2VkKSxaPVAucmVmKHYudmFsdWUpLHE9UC5jb21wdXRlZCgoKT0+e2xldCBjdD12LmRpc2FibGVkPyIjYWRhZGFkIjp2LmNvbG9yO3JldHVybiBVLnZhbHVlP3tiYWNrZ3JvdW5kQ29sb3I6Y3QsYm9yZGVyQ29sb3I6Y3R9Ontib3JkZXJDb2xvcjoiI2QxZDFkMSJ9fSksdGU9KCk9PntVLnZhbHVlPSExfSx7dW5pQ2hlY2tHcm91cDpjZSx1bmlMYWJlbDpwZSxmaWVsZDpJZX09dnQoVSxaLHRlKSxmZT0oY3QsZ3QpPT57di5kaXNhYmxlZHx8VS52YWx1ZXx8KFUudmFsdWU9IVUudmFsdWUsY2UmJmNlLnJhZGlvQ2hhbmdlKGN0LEllKSl9O3BlJiYocGUuYWRkSGFuZGxlcihmZSksUC5vbkJlZm9yZVVubW91bnQoKCk9PntwZS5yZW1vdmVIYW5kbGVyKGZlKX0pKSx3cih2LHsibGFiZWwtY2xpY2siOmZlfSksUC53YXRjaChbKCk9PnYuY2hlY2tlZCwoKT0+di52YWx1ZV0sKFtjdCxndF0pPT57VS52YWx1ZT1jdCxaLnZhbHVlPWd0fSk7bGV0IENlPSgpPT57aWYoIXguZGVmYXVsdClyZXR1cm5bXTtsZXQgY3Q9eC5kZWZhdWx0KCk7cmV0dXJuIGN0Lmxlbmd0aD09PTEmJmN0WzBdLnR5cGU9PT1UZXh0P1tKbihjdFswXS5jaGlsZHJlbix7Y2xhc3M6InVuaS1yYWRpby1zbG90In0pXTpjdH07cmV0dXJuKCk9PntsZXR7ZGlzYWJsZWQ6Y3R9PXY7cmV0dXJuIFAuY3JlYXRlVk5vZGUoImRpdiIsUC5tZXJnZVByb3BzKHtyZWY6JH0se2RhdGFVbmNUeXBlOiJ1bmktcmFkaW8ifSx7b25DbGljazpmZSxjbGFzczoidW5pLXJhZGlvIn0pLFtQLmNyZWF0ZVZOb2RlKCJkaXYiLHtzdHlsZTpxLnZhbHVlLGNsYXNzOlsidW5pLXJhZGlvLWlucHV0Iix7InVuaS1yYWRpby1pbnB1dC1kaXNhYmxlZCI6Y3R9XX0sW1UudmFsdWU/Sm4oIlx1RUEwOCIse2NsYXNzOiJ1bmktcmFkaW8taW5wdXQtaWNvbiJ9KTpudWxsXSksLi4uQ2UoKV0pfX19KTtmdW5jdGlvbiB2dCh2LHgsJCl7bGV0IFU9UC5jb21wdXRlZCh7Z2V0OigpPT4oe3JhZGlvQ2hlY2tlZDpCb29sZWFuKHYudmFsdWUpLHZhbHVlOngudmFsdWV9KSxzZXQ6KHtyYWRpb0NoZWNrZWQ6cGV9KT0+e3YudmFsdWU9cGV9fSksWj17cmVzZXQ6JH0scT1QLmluamVjdChRLCExKTtxJiZxLmFkZEZpZWxkKFUpO2xldCB0ZT1QLmluamVjdChyaSwhMSk7dGUmJnRlLmFkZEZpZWxkKFopO2xldCBjZT1QLmluamVjdChXbiwhMSk7cmV0dXJuIFAub25CZWZvcmVVbm1vdW50KCgpPT57cSYmcS5yZW1vdmVGaWVsZChVKSx0ZSYmdGUucmVtb3ZlRmllbGQoWil9KSx7dW5pQ2hlY2tHcm91cDpxLHVuaUZvcm06dGUsdW5pTGFiZWw6Y2UsZmllbGQ6VX19bGV0IGt0PVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJSYWRpb0dyb3VwIixwcm9wczpoZSxlbWl0czpbImNoYW5nZSJdLHNldHVwKHYse3Nsb3RzOngsZW1pdDokfSl7bGV0IFU9UC5yZWYobnVsbCksWj1LbihVLCQpO3JldHVybiBYKHYsWiksKCk9PlAuY3JlYXRlVk5vZGUoImRpdiIse3JlZjpVfSxbeC5kZWZhdWx0JiZ4LmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIFgodix4KXtsZXQgJD1bXTtQLm9uTW91bnRlZCgoKT0+e2NlKCQubGVuZ3RoLTEpfSk7bGV0IFU9KCk9Pnt2YXIgcGU7cmV0dXJuKHBlPSQuZmluZChJZT0+SWUudmFsdWUucmFkaW9DaGVja2VkKSk9PW51bGw/dm9pZCAwOnBlLnZhbHVlLnZhbHVlfTtQLnByb3ZpZGUoUSx7YWRkRmllbGQocGUpeyQucHVzaChwZSl9LHJlbW92ZUZpZWxkKHBlKXskLnNwbGljZSgkLmluZGV4T2YocGUpLDEpfSxyYWRpb0NoYW5nZShwZSxJZSl7bGV0IGZlPSQuaW5kZXhPZihJZSk7Y2UoZmUsITApLHgoImNoYW5nZSIse3ZhbHVlOlUoKX0pfX0pO2xldCBaPVAuaW5qZWN0KHJpLCExKSxxPXtzdWJtaXQ6KCk9PntsZXQgcGU9WyIiLG51bGxdO3JldHVybiB2Lm5hbWUhPT0iIiYmKHBlWzBdPXYubmFtZSxwZVsxXT1VKCkpLHBlfX07WiYmKFouYWRkRmllbGQocSksUC5vbkJlZm9yZVVubW91bnQoKCk9PntaLnJlbW92ZUZpZWxkKHEpfSkpO2Z1bmN0aW9uIHRlKHBlLEllKXtwZS52YWx1ZT17cmFkaW9DaGVja2VkOkllLHZhbHVlOnBlLnZhbHVlLnZhbHVlfX1mdW5jdGlvbiBjZShwZSxJZSl7JC5mb3JFYWNoKChmZSxDZSk9PntDZSE9PXBlJiZJZSYmdGUoJFtDZV0sITEpfSl9cmV0dXJuICR9bGV0IEs9WyJ1LWlucHV0IiwidS10ZXh0YXJlYSJdLGllPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJGb3JtIixlbWl0czpbInN1Ym1pdCIsInJlc2V0Il0sc2V0dXAoe30se3Nsb3RzOnYsZW1pdDp4fSl7bGV0ICQ9UC5yZWYobnVsbCksVT1LbigkLHgpLFo9W10scTtyZXR1cm4gUC5wcm92aWRlKHJpLHthZGRGaWVsZCh0ZSl7Wi5wdXNoKHRlKX0scmVtb3ZlRmllbGQodGUpe1ouc3BsaWNlKFouaW5kZXhPZih0ZSksMSl9LHN1Ym1pdCh0ZSl7bGV0IGNlPXt9O3EmJnEoY2UpO2xldCBwZT1aLnJlZHVjZSgoSWUsZmUpPT57aWYoZmUuc3VibWl0KXtsZXRbQ2UsY3RdPWZlLnN1Ym1pdCgpO0NlJiYoSWVbQ2VdPWN0KX1yZXR1cm4gSWV9LE9iamVjdC5jcmVhdGUobnVsbCkpO09iamVjdC5hc3NpZ24oY2UscGUpLFUoInN1Ym1pdCIse3ZhbHVlOmNlfSl9LHJlc2V0KHRlKXtxJiZxKCksWi5mb3JFYWNoKGNlPT5jZS5yZXNldCYmY2UucmVzZXQoKSksVSgicmVzZXQiLHRlKX19KSwoKT0+e2xldCB0ZT12LmRlZmF1bHQmJnYuZGVmYXVsdCgpO3JldHVybiBxPU5lKHRlKSxQLmNyZWF0ZVZOb2RlKCJ2aWV3Iix7cmVmOiR9LFt0ZV0pfX19KTtmdW5jdGlvbiBOZSh2KXtsZXQgeD1FLnJlcXVpcmVNb2R1bGUoInBsdXMiKSwkPShVLFopPT57KFp8fHZ8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe0suaW5kZXhPZihTdHJpbmcocS50eXBlKSk+PTAmJnEuZWwmJnEuZWwuYXR0ciYmcS5lbC5hdHRyLm5hbWUmJihVP1VbcS5lbC5hdHRyLm5hbWVdPXguZ2V0VmFsdWUocS5lbC5ub2RlSWQpOnEuZWwuc2V0VmFsdWUoIiIpKSx3dC5pc0FycmF5KHEuY2hpbGRyZW4pJiZxLmNoaWxkcmVuJiZxLmNoaWxkcmVuLmxlbmd0aCYmJChVLHEuY2hpbGRyZW4pfSl9O3JldHVybiAkfWxldCBzdD17dHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sc2l6ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDoyM30sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxYdD17c3VjY2VzczoiIzA5YmIwNyIsaW5mbzoiIzEwYWVmZiIsd2FybjoiI2Y3NjI2MCIsd2FpdGluZzoiIzEwYWVmZiIsc2FmZV9zdWNjZXNzOiIjMDliYjA3IixzYWZlX3dhcm46IiNmZmJlMDAiLHN1Y2Nlc3NfY2lyY2xlOiIjMDliYjA3IixzdWNjZXNzX25vX2NpcmNsZToiIzA5YmIwNyIsd2FpdGluZ19jaXJjbGU6IiMxMGFlZmYiLGNpcmNsZToiI2M5YzljOSIsZG93bmxvYWQ6IiMwOWJiMDciLGluZm9fY2lyY2xlOiIjMDliYjA3IixjYW5jZWw6IiNmNDM1MzAiLHNlYXJjaDoiI2IyYjJiMiIsY2xlYXI6IiNiMmIyYjIifSx4bj17c3VjY2VzczoiXHVFQTA2IixpbmZvOiJcdUVBMDMiLHdhcm46Ilx1RUEwQiIsd2FpdGluZzoiXHVFQTA5IixzYWZlX3N1Y2Nlc3M6Ilx1RUEwNCIsc2FmZV93YXJuOiJcdUVBMDUiLHN1Y2Nlc3NfY2lyY2xlOiJcdUVBMDciLHN1Y2Nlc3Nfbm9fY2lyY2xlOiJcdUVBMDgiLHdhaXRpbmdfY2lyY2xlOiJcdUVBMEEiLGNpcmNsZToiXHVFQTAxIixkb3dubG9hZDoiXHVFQTAyIixpbmZvX2NpcmNsZToiXHVFQTBDIixjYW5jZWw6Ilx1RUEwRCIsc2VhcmNoOiJcdUVBMEUiLGNsZWFyOiJcdUVBMEYifSxEbj1beyJ1bmktaWNvbiI6eyIiOntmb250RmFtaWx5OiJ1bmluY29tcG9uZW50cyJ9fX1dLF9yPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJJY29uIixwcm9wczpzdCxzdHlsZXM6RG4sc2V0dXAodix7fSl7cmV0dXJuKCk9PkpuKHhuW3YudHlwZV0se2NsYXNzOiJ1bmktaWNvbiIsc3R5bGU6e2NvbG9yOnYuY29sb3J8fFh0W3YudHlwZV0sZm9udFNpemU6di5zaXplfX0pfX0pLEJyPXtpbmRpY2F0b3JEb3RzOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sdmVydGljYWw6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxhdXRvcGxheTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGNpcmN1bGFyOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0saW50ZXJ2YWw6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6NWUzfSxkdXJhdGlvbjp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1MDB9LGN1cnJlbnQ6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MH0saW5kaWNhdG9yQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InJnYmEoMCwwLDAsLjMpIn0saW5kaWNhdG9yQWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDAwMDAifSxwcmV2aW91c01hcmdpbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sbmV4dE1hcmdpbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sY3VycmVudEl0ZW1JZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sc2tpcEhpZGRlbkl0ZW1MYXlvdXQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxkaXNwbGF5TXVsdGlwbGVJdGVtczp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoxfSxkaXNhYmxlVG91Y2g6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfX0sbW89RS5jb25maWcuZW52LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk9PT0iYW5kcm9pZCIseG89W3sidW5pLXN3aXBlciI6eyIiOntwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDoiMTUwcHgifX0sInVuaS1zd2lwZXItc2xpZGVyIjp7IiI6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjB9fSwidW5pLXN3aXBlci1kb3RzIjp7IiI6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHJpZ2h0OjAsYm90dG9tOiIxMCIsaGVpZ2h0OiIxMCJ9fX1dLEJvPVAuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJTd2lwZXIiLHByb3BzOkJyLHN0eWxlczp4byxlbWl0czpbImNoYW5nZSIsInRyYW5zaXRpb24iLCJhbmltYXRpb25maW5pc2giXSxzZXR1cCh2LHtzbG90czp4LGVtaXQ6JH0pe2xldCBVPVAucmVmKG51bGwpLFo9W10scT1LbihVLCQpLHRlPUxuKHYpLGNlPVluKHRlLHYsWixxKTtyZXR1cm4gUC53YXRjaChbKCk9PnYuY3VycmVudCwoKT0+di5jdXJyZW50SXRlbUlkXSwoW3BlLEllXSk9PntGbih0ZSx2LFopfSksUC5vbk1vdW50ZWQoKCk9PntmKCgpPT57a24oVS52YWx1ZSkudGhlbigoe3dpZHRoOnBlLGhlaWdodDpJZX0pPT57dGUuc3dpcGVyV2lkdGg9cGUsdGUuc3dpcGVySGVpZ2h0PUllfSl9LDUwKX0pLCgpPT57bGV0IHBlPXguZGVmYXVsdCYmeC5kZWZhdWx0KCkse2luZGljYXRvclN0eWxlOkllLGN1cnJlbnRTeW5jOmZlfT10ZTtyZXR1cm4gWj1taShwZSksUC5jcmVhdGVWTm9kZSgiZGl2Iix7cmVmOlUsY2xhc3M6InVuaS1zd2lwZXIifSxbUC5jcmVhdGVWTm9kZSgic2xpZGVyIixQLm1lcmdlUHJvcHMoe2NsYXNzOiJ1bmktc3dpcGVyLXNsaWRlciJ9LHthdXRvUGxheTp2LmF1dG9wbGF5LGludGVydmFsOnYuaW50ZXJ2YWwsaW5kZXg6ZmUsa2VlcEluZGV4OiEwLHNob3dJbmRpY2F0b3JzOnYuaW5kaWNhdG9yRG90cyxpbmZpbml0ZTp2LmNpcmN1bGFyLHZlcnRpY2FsOnYudmVydGljYWwsc2Nyb2xsYWJsZTohdi5kaXNhYmxlVG91Y2h9LGNlKSxbWixQLmNyZWF0ZVZOb2RlKCJpbmRpY2F0b3IiLHtjbGFzczoidW5pLXN3aXBlci1kb3RzIixzdHlsZTpJZX0sbnVsbCldKV0pfX19KTtmdW5jdGlvbiBMbih2KXtsZXQgeD1QLnJlZigwKSwkPVAucmVmKDApLFU9UC5yZWYodi5jdXJyZW50KSxaPVAucmVmKCJhdXRvcGxheSIpLHE9UC5jb21wdXRlZCgoKT0+KHtpdGVtQ29sb3I6di5pbmRpY2F0b3JDb2xvcixpdGVtU2VsZWN0ZWRDb2xvcjp2LmluZGljYXRvckFjdGl2ZUNvbG9yLGl0ZW1TaXplOjgsb3BhY2l0eTp2LmluZGljYXRvckRvdHM/MTowfSkpO3JldHVybiBQLnJlYWN0aXZlKHtzd2lwZXJXaWR0aDp4LHN3aXBlckhlaWdodDokLGluZGljYXRvclN0eWxlOnEsY3VycmVudFN5bmM6VSxjdXJyZW50Q2hhbmdlU291cmNlOlp9KX1mdW5jdGlvbiBZbih2LHgsJCxVKXtsZXQgWj0wLHE9ZmU9PntsZXQgQ2U9ZmUuZGV0YWlsLGN0PXgudmVydGljYWwsZ3Q9KGN0P0NlLm9mZnNldFlSYXRpbzpDZS5vZmZzZXRYUmF0aW8pfHwwO2lmKChmZS5kcmFnfHxmZS5kcmFnKSYmKHYuY3VycmVudENoYW5nZVNvdXJjZT0idG91Y2giKSxndD09PTApe2xldCBIdD1NYXRoLmFicyhaKTtpZihIdD09PTEpcmV0dXJuO0h0Pi41JiYoZ3Q9MSl9Wj1ndCxVKCJ0cmFuc2l0aW9uIix7ZHg6Y3Q/MDotdi5zd2lwZXJXaWR0aCpndCxkeTpjdD8tdi5zd2lwZXJIZWlnaHQqZ3Q6MH0pfSx0ZT1mZT0+e2xldCBDZT0oKT0+e1UoImFuaW1hdGlvbmZpbmlzaCIscGUoKSksdi5jdXJyZW50Q2hhbmdlU291cmNlPSJhdXRvcGxheSJ9O21vP0NlKCk6ZihDZSw1MCl9LGNlPWZlPT57d3QuaXNTdHJpbmcoZmUuZGV0YWlsLnNvdXJjZSkmJih2LmN1cnJlbnRDaGFuZ2VTb3VyY2U9ZmUuZGV0YWlsLnNvdXJjZSksdi5jdXJyZW50U3luYz1mZS5kZXRhaWwuaW5kZXgsWj0wfTtmdW5jdGlvbiBwZSgpe2xldCBmZT1OdW1iZXIodi5jdXJyZW50U3luYyksQ2U9JFtmZV18fHt9LGN0PUNlLmNvbXBvbmVudEluc3RhbmNlJiZDZS5jb21wb25lbnRJbnN0YW5jZS5pdGVtSWR8fCIiO3JldHVybntjdXJyZW50OmZlLGN1cnJlbnRJdGVtSWQ6Y3Qsc291cmNlOnYuY3VycmVudENoYW5nZVNvdXJjZX19cmV0dXJuIFAud2F0Y2goKCk9PnYuY3VycmVudFN5bmMsZmU9PntVKCJjaGFuZ2UiLHBlKCkpfSkse29uU2Nyb2xsOnEsb25TY3JvbGxlbmQ6dGUsb25DaGFuZ2U6Y2V9fWZ1bmN0aW9uIEZuKHYseCwkKXtsZXQgVT0tMTtpZih4LmN1cnJlbnRJdGVtSWQpZm9yKGxldCBaPTAscT0kO1o8cS5sZW5ndGg7WisrKXtsZXQgdGU9cVtaXS5jb21wb25lbnRJbnN0YW5jZTtpZih0ZSYmdGUuaXRlbUlkPT09eC5jdXJyZW50SXRlbUlkKXtVPVo7YnJlYWt9fVU8MCYmKFU9TWF0aC5yb3VuZChOdW1iZXIoeC5jdXJyZW50KSl8fDApLFU9VTwwPzA6VSx2LmN1cnJlbnRTeW5jIT09VSYmKHYuY3VycmVudENoYW5nZVNvdXJjZT0iIix2LmN1cnJlbnRTeW5jPVUpfWxldCB3aT17aXRlbUlkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0saXM9UC5kZWZpbmVDb21wb25lbnQoe25hbWU6IlN3aXBlckl0ZW0iLHByb3BzOndpLHNldHVwKHYse3Nsb3RzOnh9KXtyZXR1cm4oKT0+UC5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zd2lwZXItaXRlbSIsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjAsb3ZlcmZsb3c6ImhpZGRlbiJ9fSxbeC5kZWZhdWx0JiZ4LmRlZmF1bHQoKV0pfX0pO3ZhciBoYT0vXjwoWy1BLVphLXowLTlfXSspKCg/OlxzK1thLXpBLVpfOl1bLWEtekEtWjAtOV86Ll0qKD86XHMqPVxzKig/Oig/OiJbXiJdKiIpfCg/OidbXiddKicpfFtePlxzXSspKT8pKilccyooXC8/KT4vLGJyPS9ePFwvKFstQS1aYS16MC05X10rKVtePl0qPi8sVGE9LyhbYS16QS1aXzpdWy1hLXpBLVowLTlfOi5dKikoPzpccyo9XHMqKD86KD86IigoPzpcXC58W14iXSkqKSIpfCg/OicoKD86XFwufFteJ10pKiknKXwoW14+XHNdKykpKT8vZyxMYT1NbygiYXJlYSxiYXNlLGJhc2Vmb250LGJyLGNvbCxmcmFtZSxocixpbWcsaW5wdXQsbGluayxtZXRhLHBhcmFtLGVtYmVkLGNvbW1hbmQsa2V5Z2VuLHNvdXJjZSx0cmFjayx3YnIiKSxGYT1NbygiYSxhZGRyZXNzLGFydGljbGUsYXBwbGV0LGFzaWRlLGF1ZGlvLGJsb2NrcXVvdGUsYnV0dG9uLGNhbnZhcyxjZW50ZXIsZGQsZGVsLGRpcixkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0sZnJhbWVzZXQsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixpZnJhbWUsaXNpbmRleCxsaSxtYXAsbWVudSxub2ZyYW1lcyxub3NjcmlwdCxvYmplY3Qsb2wsb3V0cHV0LHAscHJlLHNlY3Rpb24sc2NyaXB0LHRhYmxlLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyLHVsLHZpZGVvIiksVmE9TW8oImFiYnIsYWNyb255bSxhcHBsZXQsYixiYXNlZm9udCxiZG8sYmlnLGJyLGJ1dHRvbixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaWZyYW1lLGltZyxpbnB1dCxpbnMsa2JkLGxhYmVsLG1hcCxvYmplY3QscSxzLHNhbXAsc2NyaXB0LHNlbGVjdCxzbWFsbCxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0ZXh0YXJlYSx0dCx1LHZhciIpLFVhPU1vKCJjb2xncm91cCxkZCxkdCxsaSxvcHRpb25zLHAsdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxnYT1NbygiY2hlY2tlZCxjb21wYWN0LGRlY2xhcmUsZGVmZXIsZGlzYWJsZWQsaXNtYXAsbXVsdGlwbGUsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm93cmFwLHJlYWRvbmx5LHNlbGVjdGVkIiksUGE9TW8oInNjcmlwdCxzdHlsZSIpO2Z1bmN0aW9uIFZuKHYseCl7dmFyICQsVSxaLHE9W10sdGU9djtmb3IocS5sYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5sZW5ndGgtMV19O3Y7KXtpZihVPSEwLCFxLmxhc3QoKXx8IVBhW3EubGFzdCgpXSl7aWYodi5pbmRleE9mKCI8IS0tIik9PTA/KCQ9di5pbmRleE9mKCItLT4iKSwkPj0wJiYoeC5jb21tZW50JiZ4LmNvbW1lbnQodi5zdWJzdHJpbmcoNCwkKSksdj12LnN1YnN0cmluZygkKzMpLFU9ITEpKTp2LmluZGV4T2YoIjwvIik9PTA/KFo9di5tYXRjaChiciksWiYmKHY9di5zdWJzdHJpbmcoWlswXS5sZW5ndGgpLFpbMF0ucmVwbGFjZShicixJZSksVT0hMSkpOnYuaW5kZXhPZigiPCIpPT0wJiYoWj12Lm1hdGNoKGhhKSxaJiYodj12LnN1YnN0cmluZyhaWzBdLmxlbmd0aCksWlswXS5yZXBsYWNlKGhhLHBlKSxVPSExKSksVSl7JD12LmluZGV4T2YoIjwiKTt2YXIgY2U9JDwwP3Y6di5zdWJzdHJpbmcoMCwkKTt2PSQ8MD8iIjp2LnN1YnN0cmluZygkKSx4LmNoYXJzJiZ4LmNoYXJzKGNlKX19ZWxzZSB2PXYucmVwbGFjZShuZXcgUmVnRXhwKCIoW1xcc1xcU10qPyk8LyIrcS5sYXN0KCkrIltePl0qPiIpLGZ1bmN0aW9uKGZlLENlKXtyZXR1cm4gQ2U9Q2UucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT58PCFcW0NEQVRBXFsoW1xzXFNdKj8pXV0+L2csIiQxJDIiKSx4LmNoYXJzJiZ4LmNoYXJzKENlKSwiIn0pLEllKCIiLHEubGFzdCgpKTtpZih2PT10ZSl0aHJvdyJQYXJzZSBFcnJvcjogIit2O3RlPXZ9SWUoKTtmdW5jdGlvbiBwZShmZSxDZSxjdCxndCl7aWYoQ2U9Q2UudG9Mb3dlckNhc2UoKSxGYVtDZV0pZm9yKDtxLmxhc3QoKSYmVmFbcS5sYXN0KCldOylJZSgiIixxLmxhc3QoKSk7aWYoVWFbQ2VdJiZxLmxhc3QoKT09Q2UmJkllKCIiLENlKSxndD1MYVtDZV18fCEhZ3QsZ3R8fHEucHVzaChDZSkseC5zdGFydCl7dmFyIEh0PVtdO2N0LnJlcGxhY2UoVGEsZnVuY3Rpb24oeXQsamUpe3ZhciBNdD1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTpnYVtqZV0/amU6IiI7SHQucHVzaCh7bmFtZTpqZSx2YWx1ZTpNdCxlc2NhcGVkOk10LnJlcGxhY2UoLyhefFteXFxdKSIvZywnJDFcXCInKX0pfSkseC5zdGFydCYmeC5zdGFydChDZSxIdCxndCl9fWZ1bmN0aW9uIEllKGZlLENlKXtpZihDZSlmb3IodmFyIGN0PXEubGVuZ3RoLTE7Y3Q+PTAmJnFbY3RdIT1DZTtjdC0tKTtlbHNlIHZhciBjdD0wO2lmKGN0Pj0wKXtmb3IodmFyIGd0PXEubGVuZ3RoLTE7Z3Q+PWN0O2d0LS0peC5lbmQmJnguZW5kKHFbZ3RdKTtxLmxlbmd0aD1jdH19fWZ1bmN0aW9uIE1vKHYpe2Zvcih2YXIgeD17fSwkPXYuc3BsaXQoIiwiKSxVPTA7VTwkLmxlbmd0aDtVKyspeFskW1VdXT0hMDtyZXR1cm4geH1mdW5jdGlvbiBlYSh2KXtyZXR1cm4gdi5yZXBsYWNlKC88XD94bWwuKlw/PlxuLywiIikucmVwbGFjZSgvPCFkb2N0eXBlLio+XG4vLCIiKS5yZXBsYWNlKC88IURPQ1RZUEUuKj5cbi8sIiIpfWZ1bmN0aW9uIFdpKHYpe3JldHVybiB2LnJlZHVjZShmdW5jdGlvbih4LCQpe2xldCBVPSQudmFsdWUsWj0kLm5hbWU7cmV0dXJuIFUubWF0Y2goLyAvKSYmWyJzdHlsZSIsInNyYyJdLmluZGV4T2YoWik9PT0tMSYmKFU9VS5zcGxpdCgiICIpKSx4W1pdP0FycmF5LmlzQXJyYXkoeFtaXSk/eFtaXS5wdXNoKFUpOnhbWl09W3hbWl0sVV06eFtaXT1VLHh9LHt9KX1mdW5jdGlvbiBvcyh2KXt2PWVhKHYpO2xldCB4PVtdLCQ9e25vZGU6InJvb3QiLGNoaWxkcmVuOltdfTtyZXR1cm4gVm4odix7c3RhcnQ6ZnVuY3Rpb24oVSxaLHEpe2xldCB0ZT17bmFtZTpVfTtpZihaLmxlbmd0aCE9PTAmJih0ZS5hdHRycz1XaShaKSkscSl7bGV0IGNlPXhbMF18fCQ7Y2UuY2hpbGRyZW58fChjZS5jaGlsZHJlbj1bXSksY2UuY2hpbGRyZW4ucHVzaCh0ZSl9ZWxzZSB4LnVuc2hpZnQodGUpfSxlbmQ6ZnVuY3Rpb24oVSl7bGV0IFo9eC5zaGlmdCgpO2lmKFoubmFtZSE9PVUmJmNvbnNvbGUuZXJyb3IoImludmFsaWQgc3RhdGU6IG1pc21hdGNoIGVuZCB0YWciKSx4Lmxlbmd0aD09PTApJC5jaGlsZHJlbi5wdXNoKFopO2Vsc2V7bGV0IHE9eFswXTtxLmNoaWxkcmVufHwocS5jaGlsZHJlbj1bXSkscS5jaGlsZHJlbi5wdXNoKFopfX0sY2hhcnM6ZnVuY3Rpb24oVSl7bGV0IFo9e3R5cGU6InRleHQiLHRleHQ6VX07aWYoeC5sZW5ndGg9PT0wKSQuY2hpbGRyZW4ucHVzaChaKTtlbHNle2xldCBxPXhbMF07cS5jaGlsZHJlbnx8KHEuY2hpbGRyZW49W10pLHEuY2hpbGRyZW4ucHVzaChaKX19LGNvbW1lbnQ6ZnVuY3Rpb24oVSl7bGV0IFo9e25vZGU6ImNvbW1lbnQiLHRleHQ6VX0scT14WzBdO3EuY2hpbGRyZW58fChxLmNoaWxkcmVuPVtdKSxxLmNoaWxkcmVuLnB1c2goWil9fSksJC5jaGlsZHJlbn1sZXQgYXM9e25vZGVzOnt0eXBlOltBcnJheSxTdHJpbmddLGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxEbz0xNixzcz1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUmljaFRleHQiLHByb3BzOmFzLHNldHVwKHYpe2xldCB4PVAuZ2V0Q3VycmVudEluc3RhbmNlKCk7cmV0dXJuKCk9PntsZXQgJD12Lm5vZGVzO3JldHVybiB3dC5pc1N0cmluZygkKSYmKCQ9b3MoJCkpLFAuY3JlYXRlVk5vZGUoInUtcmljaC10ZXh0Iix7dmFsdWU6aW8oJHx8W10seC5yb290LHtkZWZhdWx0Rm9udFNpemU6RG99KX0sbnVsbCl9fX0pO2Z1bmN0aW9uIGlvKHYseCwkKXtsZXQgVT1bInNwYW4iLCJhIiwiaW1hZ2UiLCJpbWciXSxaPXtibG9ja3F1b3RlOkNlLGJyOnl0LGRpdjpDZSxkbDpDZSxoMTpndCgyKSxoMjpndCgxLjUpLGgzOmd0KDEuMTcpLGg0Omd0KDEpLGg1Omd0KC44MyksaDY6Z3QoLjY3KSxocjpDZSxvbDpDZSxwOkNlLHN0cm9uZzpIdCx0YWJsZTpDZSx0Ym9keTpDZSx0Zm9vdDpDZSx0aGVhZDpDZSx1bDpDZX0scT0vJihhbXB8Z3R8bHR8bmJzcHxxdW90fGFwb3MpOy9nLHRlPXthbXA6IiYiLGd0OiI+IixsdDoiPCIsbmJzcDoiICIscXVvdDonIicsYXBvczoiJyJ9LGNlPXt0eXBlOiJzcGFuIixfX3R5cGU6ImJyZWFrIixhdHRyOnt2YWx1ZTpgCmB9fSxwZT17X19ibG9jazohMCxfX2JyZWFrOiEwLGNoaWxkcmVuOltdfSxJZT1udWxsO2Z1bmN0aW9uIGZlKGR0KXtsZXQgZW49T2JqZWN0LmNyZWF0ZShudWxsKTtpZihkdC5hdHRycyl7bGV0IEJuPShkdC5hdHRycy5jbGFzc3x8IiIpLnNwbGl0KCIgIik7T2JqZWN0LmFzc2lnbihlbixQLnBhcnNlQ2xhc3NMaXN0KEJuLHgpLHVvKGR0LmF0dHJzLnN0eWxlfHwiIikpfWlmKGR0Lm5hbWU9PT0iaW1nInx8ZHQubmFtZT09PSJpbWFnZSIpe2xldCBCbj1kdC5hdHRycztlbi53aWR0aD1lbi53aWR0aHx8Qm4ud2lkdGgsZW4uaGVpZ2h0PWVuLmhlaWdodHx8Qm4uaGVpZ2h0fXJldHVybiBlbn1mdW5jdGlvbiBDZShkdCl7cmV0dXJuIGR0Ll9fYmxvY2s9ITAsZHR9ZnVuY3Rpb24gY3QoZHQsZW4pe3JldHVybiBkdC5zdHlsZSYmIWR0LnN0eWxlLmZvbnRTaXplJiYoZHQuc3R5bGUuZm9udFNpemU9JC5kZWZhdWx0Rm9udFNpemUqZW4pLENlKEh0KGR0KSl9ZnVuY3Rpb24gZ3QoZHQpe3JldHVybiBmdW5jdGlvbihlbil7cmV0dXJuIGN0KGVuLGR0KX19ZnVuY3Rpb24gSHQoZHQpe3JldHVybiBkdC5zdHlsZSYmIWR0LnN0eWxlLmZvbnRXZWlnaHQmJihkdC5zdHlsZS5mb250V2VpZ2h0PSJib2xkIiksZHR9ZnVuY3Rpb24geXQoZHQpe3JldHVybiBkdC5fX3ZhbHVlPSIgIixDZShkdCl9ZnVuY3Rpb24gamUoZHQpe3JldHVybiBkdC5yZXBsYWNlKHEsZnVuY3Rpb24oZW4sQm4pe3JldHVybiB0ZVtCbl19KX1mdW5jdGlvbiBNdChkdCl7bGV0IGVuPShkdC5uYW1lfHwiIikudG9Mb3dlckNhc2UoKSxCbj1lbixZdD1aW2VuXTtVLmluZGV4T2YoZW4pPT09LTEmJihlbj0ic3BhbiIpLGVuPT09ImltZyImJihlbj0iaW1hZ2UiKTtsZXQganQ9e3R5cGU6ZW4sX190eXBlOkJuLGF0dHI6T2JqZWN0LmNyZWF0ZShudWxsKX07cmV0dXJuKGR0LnR5cGU9PT0idGV4dCJ8fGR0LnRleHQpJiYoanQuX192YWx1ZT1qdC5hdHRyLnZhbHVlPWplKChkdC50ZXh0fHwiIikudHJpbSgpKSksZHQuYXR0cnMmJk9iamVjdC5rZXlzKGR0LmF0dHJzKS5mb3JFYWNoKFV0PT57VXQhPT0iY2xhc3MiJiZVdCE9PSJzdHlsZSImJihqdC5hdHRyW1V0XT1kdC5hdHRyc1tVdF0pfSksanQuc3R5bGU9ZmUoZHQpLFl0JiZZdChqdCksKHBlLl9fYmxvY2t8fGp0Ll9fYmxvY2spJiYoSWV8fChwZS5jaGlsZHJlbi5wdXNoKGNlKSxJZT1bcGUsY2VdKSkscGU9anQsKHBlLl9fdmFsdWV8fHBlLnR5cGU9PT0iaW1hZ2UiJiZwZS5hdHRyLnNyYykmJihJZT1udWxsKSxqdC5jaGlsZHJlbj1kbihkdC5jaGlsZHJlbikscGU9anQscGUuX19ibG9jayYmcGUuc3R5bGUuaGVpZ2h0JiYhL14wKHB4KT8kLy50ZXN0KHBlLnN0eWxlLmhlaWdodCkmJihJZT1udWxsKSxqdH1mdW5jdGlvbiBkbihkdCl7cmV0dXJuIHd0LmlzQXJyYXkoZHQpP2R0Lm1hcChlbj0+TXQoZW4pKTpbXX1sZXQgR3Q9ZG4odik7aWYoSWUpe2xldFtkdCxlbl09SWUsQm49ZHQuY2hpbGRyZW4sWXQ9Qm4uaW5kZXhPZihlbik7Qm4uc3BsaWNlKFl0LDEpfXJldHVybiBHdH1sZXQgc2k9e307ZnVuY3Rpb24gQ2kodix4LCQpe2xldHthZHBpZDpVLHdpZHRoOlp9PXYscT1VKyItIitaLHRlPXNpW3FdO2lmKHRlJiZ0ZS5sZW5ndGg+MCl7eCh0ZS5zcGxpY2UoMCwxKVswXSk7cmV0dXJufWguYWQuZ2V0QWRzKHYsY2U9PntsZXQgcGU9Y2UuYWRzO3gocGUuc3BsaWNlKDAsMSlbMF0pLHNpW3FdPXRlP3RlLmNvbmNhdChwZSk6cGV9LGNlPT57JCh7ZXJyQ29kZTpjZS5jb2RlLGVyck1zZzpjZS5tZXNzYWdlfSl9KX1sZXQgR2k9e2FkcGlkOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OiIifSxkYXRhOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSx3aWR0aDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sY2hhbm5lbDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LGxpPXtsb2FkOiJsb2FkIixjbG9zZToiY2xvc2UiLGVycm9yOiJlcnJvciIsZG93bmxvYWRjaGFuZ2U6ImRvd25sb2FkY2hhbmdlIn0sdXI9UC5kZWZpbmVDb21wb25lbnQoe25hbWU6IkFkIixwcm9wczpHaSxlbWl0czpbbGkubG9hZCxsaS5jbG9zZSxsaS5lcnJvcixsaS5kb3dubG9hZGNoYW5nZV0sc2V0dXAodix7ZW1pdDp4fSl7bGV0ICQ9UC5yZWYobnVsbCksVT1LbigkLHgpLFo9bHIoKTtQLndhdGNoKCgpPT52LmFkcGlkLHRlPT57JGEoWix2LFUpfSksUC53YXRjaCgoKT0+di5kYXRhLHRlPT57Wi5kYXRhPXRlfSksUC5vbk1vdW50ZWQoKCk9PntmKCgpPT57a24oJC52YWx1ZSkudGhlbigoe3dpZHRoOnRlfSk9PntaLndpZHRoPXRlPT09MD8tMTp0ZSwkYShaLHYsVSl9KX0sNTApfSk7bGV0IHE9e29uRG93bmxvYWRjaGFuZ2UodGUpe1UobGkuZG93bmxvYWRjaGFuZ2UsdGUpfSxvbkRpc2xpa2UodGUpe1UobGkuY2xvc2UsdGUpfX07cmV0dXJuKCk9PlAuY3JlYXRlVk5vZGUoInUtYWQiLFAubWVyZ2VQcm9wcyh7cmVmOiR9LHtkYXRhOlouZGF0YSxyZW5kZXJpbmc6ITB9LHEpLG51bGwpfX0pO2Z1bmN0aW9uIGxyKHYpe2xldCB4PVAucmVmKCIiKTtyZXR1cm4gUC5yZWFjdGl2ZSh7d2lkdGg6MCxkYXRhOnh9KX1mdW5jdGlvbiAkYSh2LHgsJCl7Q2koe2FkcGlkOnguYWRwaWQsd2lkdGg6di53aWR0aH0sVT0+e3YuZGF0YT1VLCQobGkubG9hZCx7fSl9LFU9PnskKGxpLmVycm9yLFUpfSl9bGV0IEhhPXt9O2Z1bmN0aW9uIFlpKHYseCwkLFUsWil7bGV0IHE9disiLSIreCx0ZT1IYVtxXTtpZih0ZSYmdGUubGVuZ3RoPjApe1UodGUuc3BsaWNlKDAsMSlbMF0pO3JldHVybn1oLmFkLmdldERyYXdBZHMoe2FkcGlkOlN0cmluZyh2KSxjb3VudDozLHdpZHRoOnh9LGNlPT57bGV0IHBlPWNlLmFkcztVKHBlLnNwbGljZSgwLDEpWzBdKSxIYVtxXT10ZT90ZS5jb25jYXQocGUpOnBlfSxjZT0+e1ooe2VyckNvZGU6Y2UuY29kZSxlcnJNc2c6Y2UubWVzc2FnZX0pfSl9bGV0IG9vPXthZHBpZDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoiIn0sZGF0YTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sd2lkdGg6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxhbz17bG9hZDoibG9hZCIsY2xvc2U6ImNsb3NlIixlcnJvcjoiZXJyb3IifSxscz1QLmRlZmluZUNvbXBvbmVudCh7bmFtZToiQWREcmF3Iixwcm9wczpvbyxlbWl0czpbYW8ubG9hZCxhby5jbG9zZSxhby5lcnJvcl0sc2V0dXAodix7ZW1pdDp4fSl7bGV0ICQ9UC5yZWYobnVsbCksVT1LbigkLHgpLFo9cGEoKTtQLndhdGNoKCgpPT52LmFkcGlkLHRlPT57TG8oWix2LFUpfSksUC53YXRjaCgoKT0+di5kYXRhLHRlPT57Wi5kYXRhPXRlfSk7bGV0IHE9e29uRGlzbGlrZSh0ZSl7VShhby5jbG9zZSx0ZSl9fTtyZXR1cm4gUC5vbk1vdW50ZWQoKCk9PntmKCgpPT57a24oJC52YWx1ZSkudGhlbigoe3dpZHRoOnRlLGhlaWdodDpjZX0pPT57Wi53aWR0aD10ZT09PTA/LTE6dGUsWi5oZWlnaHQ9Y2U9PT0wPy0xOmNlLExvKFosdixVKX0pfSw1MCl9KSwoKT0+e2xldHtkYXRhOnRlfT1aO3JldHVybiBQLmNyZWF0ZVZOb2RlKCJ1LWFkLWRyYXciLFAubWVyZ2VQcm9wcyh7cmVmOiR9LHtkYXRhOnRlLHJlbmRlcmluZzohMH0scSksbnVsbCl9fX0pO2Z1bmN0aW9uIHBhKHYpe2xldCB4PVAucmVmKCIiKTtyZXR1cm4gUC5yZWFjdGl2ZSh7d2lkdGg6MCxoZWlnaHQ6MCxkYXRhOnh9KX1mdW5jdGlvbiBMbyh2LHgsJCl7WWkoeC5hZHBpZCx2LndpZHRoLHYuaGVpZ2h0LFU9Pnt2LmRhdGE9VSwkKGFvLmxvYWQse30pfSxVPT57JChhby5lcnJvcixVKX0pfXJldHVybntOYXZpZ2F0b3I6cGksTGFiZWw6Z24sQnV0dG9uOk9vLE1vdmFibGVBcmVhOkNyLE1vdmFibGVWaWV3OkFyLFByb2dyZXNzOl9pLFBpY2tlclZpZXc6VHIsUGlja2VyVmlld0NvbHVtbjpqaSxQaWNrZXI6ZXIsVVNsaWRlcjpucixTd2l0Y2g6anIsQ2hlY2tib3g6dm8sQ2hlY2tib3hHcm91cDp6aSxSYWRpbzpkZSxSYWRpb0dyb3VwOmt0LEZvcm06aWUsSWNvbjpfcixTd2lwZXI6Qm8sU3dpcGVySXRlbTppcyxSaWNoVGV4dDpzcyxBZDp1cixBZERyYXc6bHN9fShOLEZlLEl0KTtyZXR1cm4gT3R9ZnVuY3Rpb24gVEkoZixzKXtsZXR7VW5pU2hhcmVkOnAsVnVlOnd9PXM7ZnVuY3Rpb24gTihoLHksUil7bGV0IEZlPWguJFt5XTtyZXR1cm4gRmUmJnAuaW52b2tlQXJyYXlGbnMoRmUsUil9bGV0IEU9Zi5zZXR1cDtyZXR1cm4gZi5pbmhlcml0QXR0cnM9ITEsZi5zZXR1cD0oaCx5KT0+e2xldHthdHRyczp7X19wYWdlSWQ6UixfX3BhZ2VQYXRoOkZlLF9fcGFnZVF1ZXJ5Okl0fX09eSxWdD1zLl9fdW5pUm91dGVzLmZpbmQod3Q9Pnd0Lm1ldGEucm91dGU9PT1GZSksT3Q9dy5nZXRDdXJyZW50SW5zdGFuY2UoKSxQPU90LnByb3h5O2lmKFZ0JiYoVnQubWV0YS5pc1N1Yk5WdWV8fFBJKFAscyx7X19wYWdlSWQ6UixfX3BhZ2VQYXRoOkZlfSkpLHcub25Nb3VudGVkKCgpPT57dy5uZXh0VGljaygoKT0+e04oUCxwLk9OX1JFQURZKX0pLE90Lm9uUGFnZVNjcm9sbCYmUC4kZWwuYWRkRXZlbnQoInNjcm9sbCIsd3Q9Pnt3dC5zY3JvbGxUb3A9d3QuZGV0YWlsLnNjcm9sbFRvcCxOKFAscC5PTl9QQUdFX1NDUk9MTCx3dCl9KSxPdC5vblJlYWNoQm90dG9tJiZQLiRlbC5hZGRFdmVudCgic2Nyb2xsdG9sb3dlciIsd3Q9PntOKFAscC5PTl9SRUFDSF9CT1RUT00sd3QpfSl9KSx3Lm9uQmVmb3JlVW5tb3VudCgoKT0+e04oUCxwLk9OX1VOTE9BRCl9KSxFKXJldHVybiBFKEl0LHkpfSxmfWZ1bmN0aW9uIFBJKGYscyx7X19wYWdlSWQ6cCxfX3BhZ2VQYXRoOnd9KXtsZXQgTj1zLmdldEN1cnJlbnRQYWdlcygpLEU9TltOLmxlbmd0aC0xXTtpZihFJiZFLl9fc2V0dXApRS5fX3NldHVwKGYsRSk7ZWxzZXtsZXQgaD0iLyIrdztyZXR1cm4gcy5fX3JlZ2lzdGVyUGFnZSh7dXJsOmgscGF0aDpoLHF1ZXJ5Ont9LG9wZW5UeXBlOiJsYXVuY2giLHdlYnZpZXc6e2lkOnArIiJ9LG52dWVQYWdlVm06Zn0pfX12YXIgTWw9e30sa3A7ZnVuY3Rpb24gUnAoZil7a3A9Zn12YXIgdHU7ZnVuY3Rpb24gSUkoZil7aWYodHUpcmV0dXJuIHR1O2xldCBzPW5ldyBmLkVtaXR0ZXI7cmV0dXJuIHR1PXtvbihwLHcpe3JldHVybiBzLm9uKHAsdyl9LG9uY2UocCx3KXtyZXR1cm4gcy5vbmNlKHAsdyl9LG9mZihwLHcpe3JldHVybiBzLm9mZihwLHcpfSxlbWl0KHAsLi4udyl7cmV0dXJuIHMuZW1pdChwLC4uLncpfX0sdHV9ZnVuY3Rpb24gTkkoZil7cmV0dXJuKHMscCx3KT0+e2xldHtudnVlOk59PXAsRT1ldShmLHApO3AuVnVlPUUsTWxbc109e2luc3RhbmNlSWQ6cyxjb25maWc6Ti5jb25maWcsZG9jdW1lbnQ6Ti5kb2N1bWVudCxkYXRhOnd9O2xldHtjcmVhdGVBcHA6aH09RTtFLmNyZWF0ZVZ1ZUFwcD1FLmNyZWF0ZUFwcD0oeSxSKT0+KHAuX191bmlDb25maWcuc3R5bGVzPXkuc3R5bGVzfHxbXSxoKHksUikudXNlKGtJLHMscCkpLEUuY3JlYXRlUGFnZUFwcD0oeSxSKT0+e1RJKHkscCk7bGV0IEZlPVIuJHN0b3JlO2RlbGV0ZSBSLiRzdG9yZTtsZXQgSXQ9aCh5LFIpO3JldHVybiBGZSYmSXQudXNlKEZlKSxJdC51c2UoeEksRSxzLHApfX19dmFyIGtJPXtpbnN0YWxsKGYscyxwKXtkYyhwKS5pbml0QXBwKGYpLFJJKGYscyxwKX19O2Z1bmN0aW9uIFJJKGYscyxwKXtsZXR7bW91bnQ6d309ZixOPU1sW3NdO3JldHVybiBmLm1vdW50PUU9PntsZXQgaD1FPT09IiNhcHAiLHk9Ti5hcHA9dyh4cChOLmRvY3VtZW50LHtpc1Jvb3Q6aH0pKTtyZXR1cm4gaCYmcC5fX3JlZ2lzdGVyQXBwKHkpLHl9LGZ9dmFyIHhJPXtpbnN0YWxsKGYscyxwLHcpe2xldHt3ZWV4Ok4scGx1czpFLEJyb2FkY2FzdENoYW5uZWw6aCxWdWVTaGFyZWQ6eSxVbmlTaGFyZWQ6UixnZXRDdXJyZW50UGFnZXM6RmUsc2V0VGltZW91dDpJdCxjbGVhclRpbWVvdXQ6VnQsX191bmlDb25maWc6T3R9PXc7Zi5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kcmVxdWlyZU5hdGl2ZVBsdWdpbj1OLnJlcXVpcmVNb2R1bGU7bGV0IFA9T0koe3VuaTprcCxWdWU6cyx3ZWV4Ok4scGx1czpFLEJyb2FkY2FzdENoYW5uZWw6aCxVbmlWaWV3SlNCcmlkZ2U6SUkoUiksVnVlU2hhcmVkOnksVW5pU2hhcmVkOlIsZ2V0Q3VycmVudFBhZ2VzOkZlLHNldFRpbWVvdXQ6SXQsY2xlYXJUaW1lb3V0OlZ0LF9fdW5pQ29uZmlnOk90fSk7T2JqZWN0LmtleXMoUCkuZm9yRWFjaCh3dD0+e2YuY29tcG9uZW50KHMuaHlwaGVuYXRlKHd0KSxQW3d0XSl9KSxkYyh3KS5pbml0QXBwKGYpLEJJKGYscCx3KX19O2Z1bmN0aW9uIEJJKGYscyx7bnZ1ZTpwfSl7bGV0e2NvbmZpZzp7Y29tcGlsZXJPcHRpb25zOnd9LG1vdW50Ok59PWY7dy5pc0N1c3RvbUVsZW1lbnQ9aD0+ISFwLnN1cHBvcnRzKGBAY29tcG9uZW50LyR7aH1gKTtsZXQgRT1NbFtzXTtyZXR1cm4gZi5tb3VudD1oPT57bGV0IHk9aD09PSIjcm9vdCIsUj1FLmFwcD1OKHhwKEUuZG9jdW1lbnQse2lzUm9vdDp5fSkpO2lmKHkpdHJ5e3AuZG9jdW1lbnQudGFza0NlbnRlci5zZW5kKCJkb20iLHthY3Rpb246ImNyZWF0ZUZpbmlzaCJ9LFtdKX1jYXRjaChGZSl7fXJldHVybiBSfSxmfWZ1bmN0aW9uIHhwKGYse2lzUm9vdDpzfSl7aWYocylyZXR1cm4gZi5kb2N1bWVudEVsZW1lbnQ7bGV0IHA9Zi5jcmVhdGVDb21tZW50KCJyb290Iik7cmV0dXJuIGYuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHApLHB9ZnVuY3Rpb24gQnAoZil7bGV0IHM9TWxbZl07aWYocyYmcy5hcHAmJnMuZG9jdW1lbnQpe3RyeXtzLmFwcC4kLmFwcENvbnRleHQuYXBwLnVubW91bnQoKSxzLmRvY3VtZW50LmRlc3Ryb3koKX1jYXRjaChwKXt9ZGVsZXRlIHMuZG9jdW1lbnQsZGVsZXRlIHMuYXBwfWRlbGV0ZSBNbFtmXX1mdW5jdGlvbiBNcChmKXtsZXQgcz1NbFtmXTtpZighc3x8IXMuYXBwKXJldHVybiBuZXcgRXJyb3IoYHJlZnJlc2hJbnN0YW5jZTogaW5zdGFuY2UgJHtmfSBub3QgZm91bmQhYCk7cy5kb2N1bWVudC50YXNrQ2VudGVyLnNlbmQoImRvbSIse2FjdGlvbjoicmVmcmVzaEZpbmlzaCJ9LFtdKX1mdW5jdGlvbiBNSShmLHMpe2xldHtVbmlTaGFyZWQ6cCxWdWVTaGFyZWQ6dyxWdWVSZWFjdGl2aXR5Ok59PWY7dmFyIEU9ZnVuY3Rpb24oaCx5LFIsRmUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJdChhKXt9ZnVuY3Rpb24gVnQoYSx1KXt9ZnVuY3Rpb24gT3QoYSx1LG0sUyl7dmFyIEk7dHJ5e0k9Uz9hKC4uLlMpOmEoKX1jYXRjaChPKXt3dChPLHUsbSl9cmV0dXJuIEl9ZnVuY3Rpb24gUChhLHUsbSxTKXtpZih5LmlzRnVuY3Rpb24oYSkpe3ZhciBJPU90KGEsdSxtLFMpO3JldHVybiBJJiZ5LmlzUHJvbWlzZShJKSYmSS5jYXRjaChXPT57d3QoVyx1LG0pfSksSX1mb3IodmFyIE89W10sRj0wO0Y8YS5sZW5ndGg7RisrKU8ucHVzaChQKGFbRl0sdSxtLFMpKTtyZXR1cm4gT31mdW5jdGlvbiB3dChhLHUsbSl7aWYodSYmdS52bm9kZSx1KXtmb3IodmFyIFM9dS5wYXJlbnQsST11LnByb3h5LE89bTtTOyl7dmFyIEY9Uy5lYztpZihGKXtmb3IodmFyIFc9MDtXPEYubGVuZ3RoO1crKylpZihGW1ddKGEsSSxPKT09PSExKXJldHVybn1TPVMucGFyZW50fXZhciBHPXUuYXBwQ29udGV4dC5jb25maWcuZXJyb3JIYW5kbGVyO2lmKEcpe090KEcsbnVsbCwxMCxbYSxJLE9dKTtyZXR1cm59fUluKGEpfWZ1bmN0aW9uIEluKGEsdSxtKXtjb25zb2xlLmVycm9yKGEpfXZhciBvdD0hMSx6PSExLEo9W10saG49MCx1bj1bXSx5bj1udWxsLEpuPTAsZ2k9UHJvbWlzZS5yZXNvbHZlKCkscGk9bnVsbDtmdW5jdGlvbiBxcihhKXt2YXIgdT1waXx8Z2k7cmV0dXJuIGE/dS50aGVuKHRoaXM/YS5iaW5kKHRoaXMpOmEpOnV9ZnVuY3Rpb24gZ3IoYSl7Zm9yKHZhciB1PWhuKzEsbT1KLmxlbmd0aDt1PG07KXt2YXIgUz11K20+Pj4xLEk9emUoSltTXSk7STxhP3U9UysxOm09U31yZXR1cm4gdX1mdW5jdGlvbiBTbihhKXsoIUoubGVuZ3RofHwhSi5pbmNsdWRlcyhhLG90JiZhLmFsbG93UmVjdXJzZT9obisxOmhuKSkmJihhLmlkPT1udWxsP0oucHVzaChhKTpKLnNwbGljZShncihhLmlkKSwwLGEpLHByKCkpfWZ1bmN0aW9uIHByKCl7IW90JiYheiYmKHo9ITAscGk9Z2kudGhlbihBdCkpfWZ1bmN0aW9uIExyKGEpe3ZhciB1PUouaW5kZXhPZihhKTt1PmhuJiZKLnNwbGljZSh1LDEpfWZ1bmN0aW9uIEpyKGEpe3kuaXNBcnJheShhKT91bi5wdXNoKC4uLmEpOigheW58fCF5bi5pbmNsdWRlcyhhLGEuYWxsb3dSZWN1cnNlP0puKzE6Sm4pKSYmdW4ucHVzaChhKSxwcigpfWZ1bmN0aW9uIHZpKGEpe2Zvcih2YXIgdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06b3Q/aG4rMTowO3U8Si5sZW5ndGg7dSsrKXt2YXIgbT1KW3VdO20mJm0ucHJlJiYoSi5zcGxpY2UodSwxKSx1LS0sbSgpKX19ZnVuY3Rpb24gUG4oYSl7aWYodW4ubGVuZ3RoKXt2YXIgdT1bLi4ubmV3IFNldCh1bildO2lmKHVuLmxlbmd0aD0wLHluKXt5bi5wdXNoKC4uLnUpO3JldHVybn1mb3IoeW49dSx5bi5zb3J0KChtLFMpPT56ZShtKS16ZShTKSksSm49MDtKbjx5bi5sZW5ndGg7Sm4rKyl5bltKbl0oKTt5bj1udWxsLEpuPTB9fXZhciB6ZT1hPT5hLmlkPT1udWxsPzEvMDphLmlkLG50PShhLHUpPT57dmFyIG09emUoYSktemUodSk7aWYobT09PTApe2lmKGEucHJlJiYhdS5wcmUpcmV0dXJuLTE7aWYodS5wcmUmJiFhLnByZSlyZXR1cm4gMX1yZXR1cm4gbX07ZnVuY3Rpb24gQXQoYSl7ej0hMSxvdD0hMCxKLnNvcnQobnQpO3ZhciB1PXkuTk9PUDt0cnl7Zm9yKGhuPTA7aG48Si5sZW5ndGg7aG4rKyl7dmFyIG09Sltobl07bSYmbS5hY3RpdmUhPT0hMSYmT3QobSxudWxsLDE0KX19ZmluYWxseXtobj0wLEoubGVuZ3RoPTAsUG4oKSxvdD0hMSxwaT1udWxsLChKLmxlbmd0aHx8dW4ubGVuZ3RoKSYmQXQoKX19aC5kZXZ0b29scz12b2lkIDA7dmFyIFF0PVtdO2Z1bmN0aW9uIFRuKGEsdSl7dmFyIG0sUztpZihoLmRldnRvb2xzPWEsaC5kZXZ0b29scyloLmRldnRvb2xzLmVuYWJsZWQ9ITAsUXQuZm9yRWFjaChPPT57dmFye2V2ZW50OkYsYXJnczpXfT1PO3JldHVybiBoLmRldnRvb2xzLmVtaXQoRiwuLi5XKX0pLFF0PVtdO2Vsc2UgaWYodHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5IVE1MRWxlbWVudCYmISgoUz0obT13aW5kb3cubmF2aWdhdG9yKT09PW51bGx8fG09PT12b2lkIDA/dm9pZCAwOm0udXNlckFnZW50KT09PW51bGx8fFM9PT12b2lkIDA/dm9pZCAwOlMuaW5jbHVkZXMoImpzZG9tIikpKXt2YXIgST11Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX189dS5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9ffHxbXTtJLnB1c2goTz0+e1RuKE8sdSl9KSxzZXRUaW1lb3V0KCgpPT57aC5kZXZ0b29sc3x8KHUuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1udWxsLFF0PVtdKX0sM2UzKX1lbHNlIFF0PVtdfWZ1bmN0aW9uIHNuKGEsdSl7aWYoIWEuaXNVbm1vdW50ZWQpe2Zvcih2YXIgbT1hLnZub2RlLnByb3BzfHx5LkVNUFRZX09CSixTPWFyZ3VtZW50cy5sZW5ndGgsST1uZXcgQXJyYXkoUz4yP1MtMjowKSxPPTI7TzxTO08rKylJW08tMl09YXJndW1lbnRzW09dO3ZhciBGPUksVz11LnN0YXJ0c1dpdGgoInVwZGF0ZToiKSxHPVcmJnUuc2xpY2UoNyk7aWYoRyYmRyBpbiBtKXt2YXIgbGU9IiIuY29uY2F0KEc9PT0ibW9kZWxWYWx1ZSI/Im1vZGVsIjpHLCJNb2RpZmllcnMiKSx7bnVtYmVyOldlLHRyaW06aXR9PW1bbGVdfHx5LkVNUFRZX09CSjtpdCYmKEY9SS5tYXAobXQ9PnkuaXNTdHJpbmcobXQpP210LnRyaW0oKTptdCkpLFdlJiYoRj1JLm1hcCh5Lmxvb3NlVG9OdW1iZXIpKX12YXIgZ2UsWWU9bVtnZT15LnRvSGFuZGxlcktleSh1KV18fG1bZ2U9eS50b0hhbmRsZXJLZXkoeS5jYW1lbGl6ZSh1KSldOyFZZSYmVyYmKFllPW1bZ2U9eS50b0hhbmRsZXJLZXkoeS5oeXBoZW5hdGUodSkpXSksWWUmJlAoWWUsYSw2LEYpO3ZhciBKZT1tW2dlKyJPbmNlIl07aWYoSmUpe2lmKCFhLmVtaXR0ZWQpYS5lbWl0dGVkPXt9O2Vsc2UgaWYoYS5lbWl0dGVkW2dlXSlyZXR1cm47YS5lbWl0dGVkW2dlXT0hMCxQKEplLGEsNixGKX19fWZ1bmN0aW9uIG9yKGEsdSl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLFM9dS5lbWl0c0NhY2hlLEk9Uy5nZXQoYSk7aWYoSSE9PXZvaWQgMClyZXR1cm4gSTt2YXIgTz1hLmVtaXRzLEY9e30sVz0hMTtpZigheS5pc0Z1bmN0aW9uKGEpKXt2YXIgRz1sZT0+e3ZhciBXZT1vcihsZSx1LCEwKTtXZSYmKFc9ITAseS5leHRlbmQoRixXZSkpfTshbSYmdS5taXhpbnMubGVuZ3RoJiZ1Lm1peGlucy5mb3JFYWNoKEcpLGEuZXh0ZW5kcyYmRyhhLmV4dGVuZHMpLGEubWl4aW5zJiZhLm1peGlucy5mb3JFYWNoKEcpfXJldHVybiFPJiYhVz8oeS5pc09iamVjdChhKSYmUy5zZXQoYSxudWxsKSxudWxsKTooeS5pc0FycmF5KE8pP08uZm9yRWFjaChsZT0+RltsZV09bnVsbCk6eS5leHRlbmQoRixPKSx5LmlzT2JqZWN0KGEpJiZTLnNldChhLEYpLEYpfWZ1bmN0aW9uIFduKGEsdSl7cmV0dXJuIWF8fCF5LmlzT24odSk/ITE6KHU9dS5zbGljZSgyKS5yZXBsYWNlKC9PbmNlJC8sIiIpLHkuaGFzT3duKGEsdVswXS50b0xvd2VyQ2FzZSgpK3Uuc2xpY2UoMSkpfHx5Lmhhc093bihhLHkuaHlwaGVuYXRlKHUpKXx8eS5oYXNPd24oYSx1KSl9dmFyIEFuPW51bGwsZ249bnVsbDtmdW5jdGlvbiB3cihhKXt2YXIgdT1BbjtyZXR1cm4gQW49YSxnbj1hJiZhLnR5cGUuX19zY29wZUlkfHxudWxsLHV9ZnVuY3Rpb24gS3IoYSl7Z249YX1mdW5jdGlvbiB3bygpe2duPW51bGx9dmFyIGRhPWE9PlVpO2Z1bmN0aW9uIFVpKGEpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpBbjtpZighdXx8YS5fbilyZXR1cm4gYTt2YXIgbT1mdW5jdGlvbigpe20uX2QmJkh0KC0xKTt2YXIgUz13cih1KSxJO3RyeXtJPWEoLi4uYXJndW1lbnRzKX1maW5hbGx5e3dyKFMpLG0uX2QmJkh0KDEpfXJldHVybiBJfTtyZXR1cm4gbS5fbj0hMCxtLl9jPSEwLG0uX2Q9ITAsbX1mdW5jdGlvbiBabygpe31mdW5jdGlvbiBYbyhhKXt2YXJ7dHlwZTp1LHZub2RlOm0scHJveHk6Uyx3aXRoUHJveHk6SSxwcm9wczpPLHByb3BzT3B0aW9uczpbRl0sc2xvdHM6VyxhdHRyczpHLGVtaXQ6bGUscmVuZGVyOldlLHJlbmRlckNhY2hlOml0LGRhdGE6Z2Usc2V0dXBTdGF0ZTpZZSxjdHg6SmUsaW5oZXJpdEF0dHJzOm10fT1hLGF0LFNlLEVlPXdyKGEpO3RyeXtpZihtLnNoYXBlRmxhZyY0KXt2YXIgQWU9SXx8UzthdD1VbihXZS5jYWxsKEFlLEFlLGl0LE8sWWUsZ2UsSmUpKSxTZT1HfWVsc2V7dmFyIGx0PXU7YXQ9VW4obHQubGVuZ3RoPjE/bHQoTyx7YXR0cnM6RyxzbG90czpXLGVtaXQ6bGV9KTpsdChPLG51bGwpKSxTZT11LnByb3BzP0c6cmkoRyl9fWNhdGNoKGwpe0llLmxlbmd0aD0wLHd0KGwsYSwxKSxhdD1VdChjZSl9dmFyIFZlPWF0O2lmKFNlJiZtdCE9PSExKXt2YXIgVHQ9T2JqZWN0LmtleXMoU2UpLHtzaGFwZUZsYWc6aX09VmU7VHQubGVuZ3RoJiZpJigxfDYpJiYoRiYmVHQuc29tZSh5LmlzTW9kZWxMaXN0ZW5lcikmJihTZT1DbyhTZSxGKSksVmU9Y2koVmUsU2UpKX1yZXR1cm4gbS5kaXJzJiYoVmU9Y2koVmUpLFZlLmRpcnM9VmUuZGlycz9WZS5kaXJzLmNvbmNhdChtLmRpcnMpOm0uZGlycyksbS50cmFuc2l0aW9uJiYoVmUudHJhbnNpdGlvbj1tLnRyYW5zaXRpb24pLGF0PVZlLHdyKEVlKSxhdH1mdW5jdGlvbiAkaShhKXtmb3IodmFyIHUsbT0wO208YS5sZW5ndGg7bSsrKXt2YXIgUz1hW21dO2lmKGRuKFMpKXtpZihTLnR5cGUhPT1jZXx8Uy5jaGlsZHJlbj09PSJ2LWlmIil7aWYodSlyZXR1cm47dT1TfX1lbHNlIHJldHVybn1yZXR1cm4gdX12YXIgcmk9YT0+e3ZhciB1O2Zvcih2YXIgbSBpbiBhKShtPT09ImNsYXNzInx8bT09PSJzdHlsZSJ8fHkuaXNPbihtKSkmJigodXx8KHU9e30pKVttXT1hW21dKTtyZXR1cm4gdX0sQ289KGEsdSk9Pnt2YXIgbT17fTtmb3IodmFyIFMgaW4gYSkoIXkuaXNNb2RlbExpc3RlbmVyKFMpfHwhKFMuc2xpY2UoOSlpbiB1KSkmJihtW1NdPWFbU10pO3JldHVybiBtfTtmdW5jdGlvbiBBbyhhLHUsbSl7dmFye3Byb3BzOlMsY2hpbGRyZW46SSxjb21wb25lbnQ6T309YSx7cHJvcHM6RixjaGlsZHJlbjpXLHBhdGNoRmxhZzpHfT11LGxlPU8uZW1pdHNPcHRpb25zO2lmKHUuZGlyc3x8dS50cmFuc2l0aW9uKXJldHVybiEwO2lmKG0mJkc+PTApe2lmKEcmMTAyNClyZXR1cm4hMDtpZihHJjE2KXJldHVybiBTP09vKFMsRixsZSk6ISFGO2lmKEcmOClmb3IodmFyIFdlPXUuZHluYW1pY1Byb3BzLGl0PTA7aXQ8V2UubGVuZ3RoO2l0Kyspe3ZhciBnZT1XZVtpdF07aWYoRltnZV0hPT1TW2dlXSYmIVduKGxlLGdlKSlyZXR1cm4hMH19ZWxzZSByZXR1cm4oSXx8VykmJighV3x8IVcuJHN0YWJsZSk/ITA6Uz09PUY/ITE6Uz9GP09vKFMsRixsZSk6ITA6ISFGO3JldHVybiExfWZ1bmN0aW9uIE9vKGEsdSxtKXt2YXIgUz1PYmplY3Qua2V5cyh1KTtpZihTLmxlbmd0aCE9PU9iamVjdC5rZXlzKGEpLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIEk9MDtJPFMubGVuZ3RoO0krKyl7dmFyIE89U1tJXTtpZih1W09dIT09YVtPXSYmIVduKG0sTykpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWGkoYSx1KXtmb3IodmFye3Zub2RlOm0scGFyZW50OlN9PWE7UyYmUy5zdWJUcmVlPT09bTspKG09Uy52bm9kZSkuZWw9dSxTPVMucGFyZW50fXZhciBtaT1hPT5hLl9faXNTdXNwZW5zZSxUbz17bmFtZToiU3VzcGVuc2UiLF9faXNTdXNwZW5zZTohMCxwcm9jZXNzKGEsdSxtLFMsSSxPLEYsVyxHLGxlKXthPT1udWxsP0NyKHUsbSxTLEksTyxGLFcsRyxsZSk6UWkoYSx1LG0sUyxJLEYsVyxHLGxlKX0saHlkcmF0ZTplbyxjcmVhdGU6S24sbm9ybWFsaXplOlBvfSx1bz1UbztmdW5jdGlvbiBrbihhLHUpe3ZhciBtPWEucHJvcHMmJmEucHJvcHNbdV07eS5pc0Z1bmN0aW9uKG0pJiZtKCl9ZnVuY3Rpb24gQ3IoYSx1LG0sUyxJLE8sRixXLEcpe3ZhcntwOmxlLG86e2NyZWF0ZUVsZW1lbnQ6V2V9fT1HLGl0PVdlKCJkaXYiKSxnZT1hLnN1c3BlbnNlPUtuKGEsSSxTLHUsaXQsbSxPLEYsVyxHKTtsZShudWxsLGdlLnBlbmRpbmdCcmFuY2g9YS5zc0NvbnRlbnQsaXQsbnVsbCxTLGdlLE8sRiksZ2UuZGVwcz4wPyhrbihhLCJvblBlbmRpbmciKSxrbihhLCJvbkZhbGxiYWNrIiksbGUobnVsbCxhLnNzRmFsbGJhY2ssdSxtLFMsbnVsbCxPLEYpLGFyKGdlLGEuc3NGYWxsYmFjaykpOmdlLnJlc29sdmUoKX1mdW5jdGlvbiBRaShhLHUsbSxTLEksTyxGLFcsRyl7dmFye3A6bGUsdW06V2Usbzp7Y3JlYXRlRWxlbWVudDppdH19PUcsZ2U9dS5zdXNwZW5zZT1hLnN1c3BlbnNlO2dlLnZub2RlPXUsdS5lbD1hLmVsO3ZhciBZZT11LnNzQ29udGVudCxKZT11LnNzRmFsbGJhY2sse2FjdGl2ZUJyYW5jaDptdCxwZW5kaW5nQnJhbmNoOmF0LGlzSW5GYWxsYmFjazpTZSxpc0h5ZHJhdGluZzpFZX09Z2U7aWYoYXQpZ2UucGVuZGluZ0JyYW5jaD1ZZSxHdChZZSxhdCk/KGxlKGF0LFllLGdlLmhpZGRlbkNvbnRhaW5lcixudWxsLEksZ2UsTyxGLFcpLGdlLmRlcHM8PTA/Z2UucmVzb2x2ZSgpOlNlJiYobGUobXQsSmUsbSxTLEksbnVsbCxPLEYsVyksYXIoZ2UsSmUpKSk6KGdlLnBlbmRpbmdJZCsrLEVlPyhnZS5pc0h5ZHJhdGluZz0hMSxnZS5hY3RpdmVCcmFuY2g9YXQpOldlKGF0LEksZ2UpLGdlLmRlcHM9MCxnZS5lZmZlY3RzLmxlbmd0aD0wLGdlLmhpZGRlbkNvbnRhaW5lcj1pdCgiZGl2IiksU2U/KGxlKG51bGwsWWUsZ2UuaGlkZGVuQ29udGFpbmVyLG51bGwsSSxnZSxPLEYsVyksZ2UuZGVwczw9MD9nZS5yZXNvbHZlKCk6KGxlKG10LEplLG0sUyxJLG51bGwsTyxGLFcpLGFyKGdlLEplKSkpOm10JiZHdChZZSxtdCk/KGxlKG10LFllLG0sUyxJLGdlLE8sRixXKSxnZS5yZXNvbHZlKCEwKSk6KGxlKG51bGwsWWUsZ2UuaGlkZGVuQ29udGFpbmVyLG51bGwsSSxnZSxPLEYsVyksZ2UuZGVwczw9MCYmZ2UucmVzb2x2ZSgpKSk7ZWxzZSBpZihtdCYmR3QoWWUsbXQpKWxlKG10LFllLG0sUyxJLGdlLE8sRixXKSxhcihnZSxZZSk7ZWxzZSBpZihrbih1LCJvblBlbmRpbmciKSxnZS5wZW5kaW5nQnJhbmNoPVllLGdlLnBlbmRpbmdJZCsrLGxlKG51bGwsWWUsZ2UuaGlkZGVuQ29udGFpbmVyLG51bGwsSSxnZSxPLEYsVyksZ2UuZGVwczw9MClnZS5yZXNvbHZlKCk7ZWxzZXt2YXJ7dGltZW91dDpBZSxwZW5kaW5nSWQ6bHR9PWdlO0FlPjA/c2V0VGltZW91dCgoKT0+e2dlLnBlbmRpbmdJZD09PWx0JiZnZS5mYWxsYmFjayhKZSl9LEFlKTpBZT09PTAmJmdlLmZhbGxiYWNrKEplKX19ZnVuY3Rpb24gS24oYSx1LG0sUyxJLE8sRixXLEcsbGUpe3ZhciBXZT1hcmd1bWVudHMubGVuZ3RoPjEwJiZhcmd1bWVudHNbMTBdIT09dm9pZCAwP2FyZ3VtZW50c1sxMF06ITEse3A6aXQsbTpnZSx1bTpZZSxuOkplLG86e3BhcmVudE5vZGU6bXQscmVtb3ZlOmF0fX09bGUsU2U9YS5wcm9wcz95LnRvTnVtYmVyKGEucHJvcHMudGltZW91dCk6dm9pZCAwLEVlPXt2bm9kZTphLHBhcmVudDp1LHBhcmVudENvbXBvbmVudDptLGlzU1ZHOkYsY29udGFpbmVyOlMsaGlkZGVuQ29udGFpbmVyOkksYW5jaG9yOk8sZGVwczowLHBlbmRpbmdJZDowLHRpbWVvdXQ6dHlwZW9mIFNlPT0ibnVtYmVyIj9TZTotMSxhY3RpdmVCcmFuY2g6bnVsbCxwZW5kaW5nQnJhbmNoOm51bGwsaXNJbkZhbGxiYWNrOiEwLGlzSHlkcmF0aW5nOldlLGlzVW5tb3VudGVkOiExLGVmZmVjdHM6W10scmVzb2x2ZSgpe3ZhciBBZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEse3Zub2RlOmx0LGFjdGl2ZUJyYW5jaDpWZSxwZW5kaW5nQnJhbmNoOlR0LHBlbmRpbmdJZDppLGVmZmVjdHM6bCxwYXJlbnRDb21wb25lbnQ6ZCxjb250YWluZXI6X309RWU7aWYoRWUuaXNIeWRyYXRpbmcpRWUuaXNIeWRyYXRpbmc9ITE7ZWxzZSBpZighQWUpe3ZhciBBPVZlJiZUdC50cmFuc2l0aW9uJiZUdC50cmFuc2l0aW9uLm1vZGU9PT0ib3V0LWluIjtBJiYoVmUudHJhbnNpdGlvbi5hZnRlckxlYXZlPSgpPT57aT09PUVlLnBlbmRpbmdJZCYmZ2UoVHQsXyxDLDApfSk7dmFye2FuY2hvcjpDfT1FZTtWZSYmKEM9SmUoVmUpLFllKFZlLGQsRWUsITApKSxBfHxnZShUdCxfLEMsMCl9YXIoRWUsVHQpLEVlLnBlbmRpbmdCcmFuY2g9bnVsbCxFZS5pc0luRmFsbGJhY2s9ITE7Zm9yKHZhciBrPUVlLnBhcmVudCxEPSExO2s7KXtpZihrLnBlbmRpbmdCcmFuY2gpe2suZWZmZWN0cy5wdXNoKC4uLmwpLEQ9ITA7YnJlYWt9az1rLnBhcmVudH1EfHxKcihsKSxFZS5lZmZlY3RzPVtdLGtuKGx0LCJvblJlc29sdmUiKX0sZmFsbGJhY2soQWUpe2lmKCEhRWUucGVuZGluZ0JyYW5jaCl7dmFye3Zub2RlOmx0LGFjdGl2ZUJyYW5jaDpWZSxwYXJlbnRDb21wb25lbnQ6VHQsY29udGFpbmVyOmksaXNTVkc6bH09RWU7a24obHQsIm9uRmFsbGJhY2siKTt2YXIgZD1KZShWZSksXz0oKT0+eyFFZS5pc0luRmFsbGJhY2t8fChpdChudWxsLEFlLGksZCxUdCxudWxsLGwsVyxHKSxhcihFZSxBZSkpfSxBPUFlLnRyYW5zaXRpb24mJkFlLnRyYW5zaXRpb24ubW9kZT09PSJvdXQtaW4iO0EmJihWZS50cmFuc2l0aW9uLmFmdGVyTGVhdmU9XyksRWUuaXNJbkZhbGxiYWNrPSEwLFllKFZlLFR0LG51bGwsITApLEF8fF8oKX19LG1vdmUoQWUsbHQsVmUpe0VlLmFjdGl2ZUJyYW5jaCYmZ2UoRWUuYWN0aXZlQnJhbmNoLEFlLGx0LFZlKSxFZS5jb250YWluZXI9QWV9LG5leHQoKXtyZXR1cm4gRWUuYWN0aXZlQnJhbmNoJiZKZShFZS5hY3RpdmVCcmFuY2gpfSxyZWdpc3RlckRlcChBZSxsdCl7dmFyIFZlPSEhRWUucGVuZGluZ0JyYW5jaDtWZSYmRWUuZGVwcysrO3ZhciBUdD1BZS52bm9kZS5lbDtBZS5hc3luY0RlcC5jYXRjaChpPT57d3QoaSxBZSwwKX0pLnRoZW4oaT0+e2lmKCEoQWUuaXNVbm1vdW50ZWR8fEVlLmlzVW5tb3VudGVkfHxFZS5wZW5kaW5nSWQhPT1BZS5zdXNwZW5zZUlkKSl7QWUuYXN5bmNSZXNvbHZlZD0hMDt2YXJ7dm5vZGU6bH09QWU7SWEoQWUsaSwhMSksVHQmJihsLmVsPVR0KTt2YXIgZD0hVHQmJkFlLnN1YlRyZWUuZWw7bHQoQWUsbCxtdChUdHx8QWUuc3ViVHJlZS5lbCksVHQ/bnVsbDpKZShBZS5zdWJUcmVlKSxFZSxGLEcpLGQmJmF0KGQpLFhpKEFlLGwuZWwpLFZlJiYtLUVlLmRlcHM9PT0wJiZFZS5yZXNvbHZlKCl9fSl9LHVubW91bnQoQWUsbHQpe0VlLmlzVW5tb3VudGVkPSEwLEVlLmFjdGl2ZUJyYW5jaCYmWWUoRWUuYWN0aXZlQnJhbmNoLG0sQWUsbHQpLEVlLnBlbmRpbmdCcmFuY2gmJlllKEVlLnBlbmRpbmdCcmFuY2gsbSxBZSxsdCl9fTtyZXR1cm4gRWV9ZnVuY3Rpb24gZW8oYSx1LG0sUyxJLE8sRixXLEcpe3ZhciBsZT11LnN1c3BlbnNlPUtuKHUsUyxtLGEucGFyZW50Tm9kZSxzLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG51bGwsSSxPLEYsVywhMCksV2U9RyhhLGxlLnBlbmRpbmdCcmFuY2g9dS5zc0NvbnRlbnQsbSxsZSxPLEYpO3JldHVybiBsZS5kZXBzPT09MCYmbGUucmVzb2x2ZSgpLFdlfWZ1bmN0aW9uIFBvKGEpe3ZhcntzaGFwZUZsYWc6dSxjaGlsZHJlbjptfT1hLFM9dSYzMjthLnNzQ29udGVudD1mbyhTP20uZGVmYXVsdDptKSxhLnNzRmFsbGJhY2s9Uz9mbyhtLmZhbGxiYWNrKTpVdChjZSl9ZnVuY3Rpb24gZm8oYSl7dmFyIHU7aWYoeS5pc0Z1bmN0aW9uKGEpKXt2YXIgbT1ndCYmYS5fYzttJiYoYS5fZD0hMSxDZSgpKSxhPWEoKSxtJiYoYS5fZD0hMCx1PWZlLGN0KCkpfWlmKHkuaXNBcnJheShhKSl7dmFyIFM9JGkoYSk7YT1TfXJldHVybiBhPVVuKGEpLHUmJiFhLmR5bmFtaWNDaGlsZHJlbiYmKGEuZHluYW1pY0NoaWxkcmVuPXUuZmlsdGVyKEk9PkkhPT1hKSksYX1mdW5jdGlvbiBpaShhLHUpe3UmJnUucGVuZGluZ0JyYW5jaD95LmlzQXJyYXkoYSk/dS5lZmZlY3RzLnB1c2goLi4uYSk6dS5lZmZlY3RzLnB1c2goYSk6SnIoYSl9ZnVuY3Rpb24gYXIoYSx1KXthLmFjdGl2ZUJyYW5jaD11O3Zhcnt2bm9kZTptLHBhcmVudENvbXBvbmVudDpTfT1hLEk9bS5lbD11LmVsO1MmJlMuc3ViVHJlZT09PW0mJihTLnZub2RlLmVsPUksWGkoUyxJKSl9ZnVuY3Rpb24ga3IoYSx1KXtpZihvbil7dmFyIG09b24ucHJvdmlkZXMsUz1vbi5wYXJlbnQmJm9uLnBhcmVudC5wcm92aWRlcztTPT09bSYmKG09b24ucHJvdmlkZXM9T2JqZWN0LmNyZWF0ZShTKSksbVthXT11LG9uLnR5cGUubXBUeXBlPT09ImFwcCImJm9uLmFwcENvbnRleHQuYXBwLnByb3ZpZGUoYSx1KX19ZnVuY3Rpb24gTm4oYSx1KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsUz1vbnx8QW47aWYoUyl7dmFyIEk9Uy5wYXJlbnQ9PW51bGw/Uy52bm9kZS5hcHBDb250ZXh0JiZTLnZub2RlLmFwcENvbnRleHQucHJvdmlkZXM6Uy5wYXJlbnQucHJvdmlkZXM7aWYoSSYmYSBpbiBJKXJldHVybiBJW2FdO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gbSYmeS5pc0Z1bmN0aW9uKHUpP3UuY2FsbChTLnByb3h5KTp1fX1mdW5jdGlvbiBabihhLHUpe3JldHVybiB2cihhLG51bGwsdSl9ZnVuY3Rpb24gTmkoYSx1KXtyZXR1cm4gdnIoYSxudWxsLHtmbHVzaDoicG9zdCJ9KX1mdW5jdGlvbiBIaShhLHUpe3JldHVybiB2cihhLG51bGwse2ZsdXNoOiJzeW5jIn0pfXZhciBvaT17fTtmdW5jdGlvbiBGcihhLHUsbSl7cmV0dXJuIHZyKGEsdSxtKX1mdW5jdGlvbiB2cihhLHUpe3ZhcntpbW1lZGlhdGU6bSxkZWVwOlMsZmx1c2g6SSxvblRyYWNrOk8sb25UcmlnZ2VyOkZ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp5LkVNUFRZX09CSixXPVIuZ2V0Q3VycmVudFNjb3BlKCk9PT0ob249PW51bGw/dm9pZCAwOm9uLnNjb3BlKT9vbjpudWxsLEcsbGU9ITEsV2U9ITE7aWYoUi5pc1JlZihhKT8oRz0oKT0+YS52YWx1ZSxsZT1SLmlzU2hhbGxvdyhhKSk6Ui5pc1JlYWN0aXZlKGEpPyhHPSgpPT5hLFM9ITApOnkuaXNBcnJheShhKT8oV2U9ITAsbGU9YS5zb21lKEFlPT5SLmlzUmVhY3RpdmUoQWUpfHxSLmlzU2hhbGxvdyhBZSkpLEc9KCk9PmEubWFwKEFlPT57aWYoUi5pc1JlZihBZSkpcmV0dXJuIEFlLnZhbHVlO2lmKFIuaXNSZWFjdGl2ZShBZSkpcmV0dXJuIFZyKEFlKTtpZih5LmlzRnVuY3Rpb24oQWUpKXJldHVybiBPdChBZSxXLDIpfSkpOnkuaXNGdW5jdGlvbihhKT91P0c9KCk9Pk90KGEsVywyKTpHPSgpPT57aWYoIShXJiZXLmlzVW5tb3VudGVkKSlyZXR1cm4gZ2UmJmdlKCksUChhLFcsMyxbWWVdKX06Rz15Lk5PT1AsdSYmUyl7dmFyIGl0PUc7Rz0oKT0+VnIoaXQoKSl9dmFyIGdlLFllPUFlPT57Z2U9U2Uub25TdG9wPSgpPT57T3QoQWUsVyw0KX19LEplPVdlP25ldyBBcnJheShhLmxlbmd0aCkuZmlsbChvaSk6b2ksbXQ9KCk9PntpZighIVNlLmFjdGl2ZSlpZih1KXt2YXIgQWU9U2UucnVuKCk7KFN8fGxlfHwoV2U/QWUuc29tZSgobHQsVmUpPT55Lmhhc0NoYW5nZWQobHQsSmVbVmVdKSk6eS5oYXNDaGFuZ2VkKEFlLEplKSkpJiYoZ2UmJmdlKCksUCh1LFcsMyxbQWUsSmU9PT1vaT92b2lkIDA6V2UmJkplWzBdPT09b2k/W106SmUsWWVdKSxKZT1BZSl9ZWxzZSBTZS5ydW4oKX07bXQuYWxsb3dSZWN1cnNlPSEhdTt2YXIgYXQ7ST09PSJzeW5jIj9hdD1tdDpJPT09InBvc3QiP2F0PSgpPT51cihtdCxXJiZXLnN1c3BlbnNlKToobXQucHJlPSEwLFcmJihtdC5pZD1XLnVpZCksYXQ9KCk9PlNuKG10KSk7dmFyIFNlPW5ldyBSLlJlYWN0aXZlRWZmZWN0KEcsYXQpO3U/bT9tdCgpOkplPVNlLnJ1bigpOkk9PT0icG9zdCI/dXIoU2UucnVuLmJpbmQoU2UpLFcmJlcuc3VzcGVuc2UpOlNlLnJ1bigpO3ZhciBFZT0oKT0+e1NlLnN0b3AoKSxXJiZXLnNjb3BlJiZ5LnJlbW92ZShXLnNjb3BlLmVmZmVjdHMsU2UpfTtyZXR1cm4gRWV9ZnVuY3Rpb24ga2koYSx1LG0pe3ZhciBTPXRoaXMucHJveHksST15LmlzU3RyaW5nKGEpP2EuaW5jbHVkZXMoIi4iKT9JbyhTLGEpOigpPT5TW2FdOmEuYmluZChTLFMpLE87eS5pc0Z1bmN0aW9uKHUpP089dTooTz11LmhhbmRsZXIsbT11KTt2YXIgRj1vbjtqbih0aGlzKTt2YXIgVz12cihJLE8uYmluZChTKSxtKTtyZXR1cm4gRj9qbihGKTpxbigpLFd9ZnVuY3Rpb24gSW8oYSx1KXt2YXIgbT11LnNwbGl0KCIuIik7cmV0dXJuKCk9Pntmb3IodmFyIFM9YSxJPTA7STxtLmxlbmd0aCYmUztJKyspUz1TW21bSV1dO3JldHVybiBTfX1mdW5jdGlvbiBWcihhLHUpe2lmKCF5LmlzT2JqZWN0KGEpfHxhLl9fdl9za2lwfHwodT11fHxuZXcgU2V0LHUuaGFzKGEpKSlyZXR1cm4gYTtpZih1LmFkZChhKSxSLmlzUmVmKGEpKVZyKGEudmFsdWUsdSk7ZWxzZSBpZih5LmlzQXJyYXkoYSkpZm9yKHZhciBtPTA7bTxhLmxlbmd0aDttKyspVnIoYVttXSx1KTtlbHNlIGlmKHkuaXNTZXQoYSl8fHkuaXNNYXAoYSkpYS5mb3JFYWNoKEk9PntWcihJLHUpfSk7ZWxzZSBpZih5LmlzUGxhaW5PYmplY3QoYSkpZm9yKHZhciBTIGluIGEpVnIoYVtTXSx1KTtyZXR1cm4gYX1mdW5jdGlvbiBacigpe3ZhciBhPXtpc01vdW50ZWQ6ITEsaXNMZWF2aW5nOiExLGlzVW5tb3VudGluZzohMSxsZWF2aW5nVk5vZGVzOm5ldyBNYXB9O3JldHVybiBlcigoKT0+e2EuaXNNb3VudGVkPSEwfSksbnIoKCk9PnthLmlzVW5tb3VudGluZz0hMH0pLGF9dmFyIEFyPVtGdW5jdGlvbixBcnJheV0scG49e21vZGU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLHBlcnNpc3RlZDpCb29sZWFuLG9uQmVmb3JlRW50ZXI6QXIsb25FbnRlcjpBcixvbkFmdGVyRW50ZXI6QXIsb25FbnRlckNhbmNlbGxlZDpBcixvbkJlZm9yZUxlYXZlOkFyLG9uTGVhdmU6QXIsb25BZnRlckxlYXZlOkFyLG9uTGVhdmVDYW5jZWxsZWQ6QXIsb25CZWZvcmVBcHBlYXI6QXIsb25BcHBlYXI6QXIsb25BZnRlckFwcGVhcjpBcixvbkFwcGVhckNhbmNlbGxlZDpBcn0sWHI9e25hbWU6IkJhc2VUcmFuc2l0aW9uIixwcm9wczpwbixzZXR1cChhLHUpe3ZhcntzbG90czptfT11LFM9X24oKSxJPVpyKCksTztyZXR1cm4oKT0+e3ZhciBGPW0uZGVmYXVsdCYmT3IobS5kZWZhdWx0KCksITApO2lmKCEoIUZ8fCFGLmxlbmd0aCkpe3ZhciBXPUZbMF07aWYoRi5sZW5ndGg+MSl7Zm9yKHZhciBHIG9mIEYpaWYoRy50eXBlIT09Y2Upe1c9RzticmVha319dmFyIGxlPVIudG9SYXcoYSkse21vZGU6V2V9PWxlO2lmKEkuaXNMZWF2aW5nKXJldHVybiBfaShXKTt2YXIgaXQ9YmkoVyk7aWYoIWl0KXJldHVybiBfaShXKTt2YXIgZ2U9VGUoaXQsbGUsSSxTKTt5aShpdCxnZSk7dmFyIFllPVMuc3ViVHJlZSxKZT1ZZSYmYmkoWWUpLG10PSExLHtnZXRUcmFuc2l0aW9uS2V5OmF0fT1pdC50eXBlO2lmKGF0KXt2YXIgU2U9YXQoKTtPPT09dm9pZCAwP089U2U6U2UhPT1PJiYoTz1TZSxtdD0hMCl9aWYoSmUmJkplLnR5cGUhPT1jZSYmKCFHdChpdCxKZSl8fG10KSl7dmFyIEVlPVRlKEplLGxlLEksUyk7aWYoeWkoSmUsRWUpLFdlPT09Im91dC1pbiIpcmV0dXJuIEkuaXNMZWF2aW5nPSEwLEVlLmFmdGVyTGVhdmU9KCk9PntJLmlzTGVhdmluZz0hMSxTLnVwZGF0ZS5hY3RpdmUhPT0hMSYmUy51cGRhdGUoKX0sX2koVyk7V2U9PT0iaW4tb3V0IiYmaXQudHlwZSE9PWNlJiYoRWUuZGVsYXlMZWF2ZT0oQWUsbHQsVmUpPT57dmFyIFR0PUR0KEksSmUpO1R0W1N0cmluZyhKZS5rZXkpXT1KZSxBZS5fbGVhdmVDYj0oKT0+e2x0KCksQWUuX2xlYXZlQ2I9dm9pZCAwLGRlbGV0ZSBnZS5kZWxheWVkTGVhdmV9LGdlLmRlbGF5ZWRMZWF2ZT1WZX0pfXJldHVybiBXfX19fSxVcj1YcjtmdW5jdGlvbiBEdChhLHUpe3ZhcntsZWF2aW5nVk5vZGVzOm19PWEsUz1tLmdldCh1LnR5cGUpO3JldHVybiBTfHwoUz1PYmplY3QuY3JlYXRlKG51bGwpLG0uc2V0KHUudHlwZSxTKSksU31mdW5jdGlvbiBUZShhLHUsbSxTKXt2YXJ7YXBwZWFyOkksbW9kZTpPLHBlcnNpc3RlZDpGPSExLG9uQmVmb3JlRW50ZXI6VyxvbkVudGVyOkcsb25BZnRlckVudGVyOmxlLG9uRW50ZXJDYW5jZWxsZWQ6V2Usb25CZWZvcmVMZWF2ZTppdCxvbkxlYXZlOmdlLG9uQWZ0ZXJMZWF2ZTpZZSxvbkxlYXZlQ2FuY2VsbGVkOkplLG9uQmVmb3JlQXBwZWFyOm10LG9uQXBwZWFyOmF0LG9uQWZ0ZXJBcHBlYXI6U2Usb25BcHBlYXJDYW5jZWxsZWQ6RWV9PXUsQWU9U3RyaW5nKGEua2V5KSxsdD1EdChtLGEpLFZlPShsLGQpPT57bCYmUChsLFMsOSxkKX0sVHQ9KGwsZCk9Pnt2YXIgXz1kWzFdO1ZlKGwsZCkseS5pc0FycmF5KGwpP2wuZXZlcnkoQT0+QS5sZW5ndGg8PTEpJiZfKCk6bC5sZW5ndGg8PTEmJl8oKX0saT17bW9kZTpPLHBlcnNpc3RlZDpGLGJlZm9yZUVudGVyKGwpe3ZhciBkPVc7aWYoIW0uaXNNb3VudGVkKWlmKEkpZD1tdHx8VztlbHNlIHJldHVybjtsLl9sZWF2ZUNiJiZsLl9sZWF2ZUNiKCEwKTt2YXIgXz1sdFtBZV07XyYmR3QoYSxfKSYmXy5lbC5fbGVhdmVDYiYmXy5lbC5fbGVhdmVDYigpLFZlKGQsW2xdKX0sZW50ZXIobCl7dmFyIGQ9RyxfPWxlLEE9V2U7aWYoIW0uaXNNb3VudGVkKWlmKEkpZD1hdHx8RyxfPVNlfHxsZSxBPUVlfHxXZTtlbHNlIHJldHVybjt2YXIgQz0hMSxrPWwuX2VudGVyQ2I9RD0+e0N8fChDPSEwLEQ/VmUoQSxbbF0pOlZlKF8sW2xdKSxpLmRlbGF5ZWRMZWF2ZSYmaS5kZWxheWVkTGVhdmUoKSxsLl9lbnRlckNiPXZvaWQgMCl9O2Q/VHQoZCxbbCxrXSk6aygpfSxsZWF2ZShsLGQpe3ZhciBfPVN0cmluZyhhLmtleSk7aWYobC5fZW50ZXJDYiYmbC5fZW50ZXJDYighMCksbS5pc1VubW91bnRpbmcpcmV0dXJuIGQoKTtWZShpdCxbbF0pO3ZhciBBPSExLEM9bC5fbGVhdmVDYj1rPT57QXx8KEE9ITAsZCgpLGs/VmUoSmUsW2xdKTpWZShZZSxbbF0pLGwuX2xlYXZlQ2I9dm9pZCAwLGx0W19dPT09YSYmZGVsZXRlIGx0W19dKX07bHRbX109YSxnZT9UdChnZSxbbCxDXSk6QygpfSxjbG9uZShsKXtyZXR1cm4gVGUobCx1LG0sUyl9fTtyZXR1cm4gaX1mdW5jdGlvbiBfaShhKXtpZihQcihhKSlyZXR1cm4gYT1jaShhKSxhLmNoaWxkcmVuPW51bGwsYX1mdW5jdGlvbiBiaShhKXtyZXR1cm4gUHIoYSk/YS5jaGlsZHJlbj9hLmNoaWxkcmVuWzBdOnZvaWQgMDphfWZ1bmN0aW9uIHlpKGEsdSl7YS5zaGFwZUZsYWcmNiYmYS5jb21wb25lbnQ/eWkoYS5jb21wb25lbnQuc3ViVHJlZSx1KTphLnNoYXBlRmxhZyYxMjg/KGEuc3NDb250ZW50LnRyYW5zaXRpb249dS5jbG9uZShhLnNzQ29udGVudCksYS5zc0ZhbGxiYWNrLnRyYW5zaXRpb249dS5jbG9uZShhLnNzRmFsbGJhY2spKTphLnRyYW5zaXRpb249dX1mdW5jdGlvbiBPcihhKXtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLG09YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsUz1bXSxJPTAsTz0wO088YS5sZW5ndGg7TysrKXt2YXIgRj1hW09dLFc9bT09bnVsbD9GLmtleTpTdHJpbmcobSkrU3RyaW5nKEYua2V5IT1udWxsP0Yua2V5Ok8pO0YudHlwZT09PXE/KEYucGF0Y2hGbGFnJjEyOCYmSSsrLFM9Uy5jb25jYXQoT3IoRi5jaGlsZHJlbix1LFcpKSk6KHV8fEYudHlwZSE9PWNlKSYmUy5wdXNoKFchPW51bGw/Y2koRix7a2V5Old9KTpGKX1pZihJPjEpZm9yKHZhciBHPTA7RzxTLmxlbmd0aDtHKyspU1tHXS5wYXRjaEZsYWc9LTI7cmV0dXJuIFN9ZnVuY3Rpb24gUmkoYSl7cmV0dXJuIHkuaXNGdW5jdGlvbihhKT97c2V0dXA6YSxuYW1lOmEubmFtZX06YX12YXIgVHI9YT0+ISFhLnR5cGUuX19hc3luY0xvYWRlcjtmdW5jdGlvbiBScihhKXt5LmlzRnVuY3Rpb24oYSkmJihhPXtsb2FkZXI6YX0pO3Zhcntsb2FkZXI6dSxsb2FkaW5nQ29tcG9uZW50Om0sZXJyb3JDb21wb25lbnQ6UyxkZWxheTpJPTIwMCx0aW1lb3V0Ok8sc3VzcGVuc2libGU6Rj0hMCxvbkVycm9yOld9PWEsRz1udWxsLGxlLFdlPTAsaXQ9KCk9PihXZSsrLEc9bnVsbCxnZSgpKSxnZT0oKT0+e3ZhciBZZTtyZXR1cm4gR3x8KFllPUc9dSgpLmNhdGNoKEplPT57aWYoSmU9SmUgaW5zdGFuY2VvZiBFcnJvcj9KZTpuZXcgRXJyb3IoU3RyaW5nKEplKSksVylyZXR1cm4gbmV3IFByb21pc2UoKG10LGF0KT0+e3ZhciBTZT0oKT0+bXQoaXQoKSksRWU9KCk9PmF0KEplKTtXKEplLFNlLEVlLFdlKzEpfSk7dGhyb3cgSmV9KS50aGVuKEplPT5ZZSE9PUcmJkc/RzooSmUmJihKZS5fX2VzTW9kdWxlfHxKZVtTeW1ib2wudG9TdHJpbmdUYWddPT09Ik1vZHVsZSIpJiYoSmU9SmUuZGVmYXVsdCksbGU9SmUsSmUpKSl9O3JldHVybiBSaSh7bmFtZToiQXN5bmNDb21wb25lbnRXcmFwcGVyIixfX2FzeW5jTG9hZGVyOmdlLGdldCBfX2FzeW5jUmVzb2x2ZWQoKXtyZXR1cm4gbGV9LHNldHVwKCl7dmFyIFllPW9uO2lmKGxlKXJldHVybigpPT5haShsZSxZZSk7dmFyIEplPUVlPT57Rz1udWxsLHd0KEVlLFllLDEzKX07aWYoRiYmWWUuc3VzcGVuc2UpcmV0dXJuIGdlKCkudGhlbihFZT0+KCk9PmFpKEVlLFllKSkuY2F0Y2goRWU9PihKZShFZSksKCk9PlM/VXQoUyx7ZXJyb3I6RWV9KTpudWxsKSk7dmFyIG10PVIucmVmKCExKSxhdD1SLnJlZigpLFNlPVIucmVmKCEhSSk7cmV0dXJuIEkmJnNldFRpbWVvdXQoKCk9PntTZS52YWx1ZT0hMX0sSSksTyE9bnVsbCYmc2V0VGltZW91dCgoKT0+e2lmKCFtdC52YWx1ZSYmIWF0LnZhbHVlKXt2YXIgRWU9bmV3IEVycm9yKCJBc3luYyBjb21wb25lbnQgdGltZWQgb3V0IGFmdGVyICIuY29uY2F0KE8sIm1zLiIpKTtKZShFZSksYXQudmFsdWU9RWV9fSxPKSxnZSgpLnRoZW4oKCk9PnttdC52YWx1ZT0hMCxZZS5wYXJlbnQmJlByKFllLnBhcmVudC52bm9kZSkmJlNuKFllLnBhcmVudC51cGRhdGUpfSkuY2F0Y2goRWU9PntKZShFZSksYXQudmFsdWU9RWV9KSwoKT0+e2lmKG10LnZhbHVlJiZsZSlyZXR1cm4gYWkobGUsWWUpO2lmKGF0LnZhbHVlJiZTKXJldHVybiBVdChTLHtlcnJvcjphdC52YWx1ZX0pO2lmKG0mJiFTZS52YWx1ZSlyZXR1cm4gVXQobSl9fX0pfWZ1bmN0aW9uIGFpKGEsdSl7dmFye3JlZjptLHByb3BzOlMsY2hpbGRyZW46SSxjZTpPfT11LnZub2RlLEY9VXQoYSxTLEkpO3JldHVybiBGLnJlZj1tLEYuY2U9TyxkZWxldGUgdS52bm9kZS5jZSxGfXZhciBQcj1hPT5hLnR5cGUuX19pc0tlZXBBbGl2ZSxFaT17bmFtZToiS2VlcEFsaXZlIixfX2lzS2VlcEFsaXZlOiEwLHByb3BzOntpbmNsdWRlOltTdHJpbmcsUmVnRXhwLEFycmF5XSxleGNsdWRlOltTdHJpbmcsUmVnRXhwLEFycmF5XSxtYXg6W1N0cmluZyxOdW1iZXJdfSxzZXR1cChhLHUpe3ZhcntzbG90czptfT11LFM9X24oKSxJPVMuY3R4LE89bmV3IE1hcCxGPW5ldyBTZXQsVz1udWxsLEc9Uy5zdXNwZW5zZSx7cmVuZGVyZXI6e3A6bGUsbTpXZSx1bTppdCxvOntjcmVhdGVFbGVtZW50OmdlfX19PUksWWU9Z2UoImRpdiIpO0kuYWN0aXZhdGU9KEFlLGx0LFZlLFR0LGkpPT57dmFyIGw9QWUuY29tcG9uZW50O1dlKEFlLGx0LFZlLDAsRyksbGUobC52bm9kZSxBZSxsdCxWZSxsLEcsVHQsQWUuc2xvdFNjb3BlSWRzLGkpLHVyKCgpPT57bC5pc0RlYWN0aXZhdGVkPSExLGwuYSYmeS5pbnZva2VBcnJheUZucyhsLmEpO3ZhciBkPUFlLnByb3BzJiZBZS5wcm9wcy5vblZub2RlTW91bnRlZDtkJiZ5cihkLGwucGFyZW50LEFlKX0sRyl9LEkuZGVhY3RpdmF0ZT1BZT0+e3ZhciBsdD1BZS5jb21wb25lbnQ7V2UoQWUsWWUsbnVsbCwxLEcpLHVyKCgpPT57bHQuZGEmJnkuaW52b2tlQXJyYXlGbnMobHQuZGEpO3ZhciBWZT1BZS5wcm9wcyYmQWUucHJvcHMub25Wbm9kZVVubW91bnRlZDtWZSYmeXIoVmUsbHQucGFyZW50LEFlKSxsdC5pc0RlYWN0aXZhdGVkPSEwfSxHKX07ZnVuY3Rpb24gSmUoQWUpe3NyKEFlKSxpdChBZSxTLEcsITApfWZ1bmN0aW9uIG10KEFlKXtPLmZvckVhY2goKGx0LFZlKT0+e3ZhciBUdD1EaShsdC50eXBlKTtUdCYmKCFBZXx8IUFlKFR0KSkmJmF0KFZlKX0pfWZ1bmN0aW9uIGF0KEFlKXt2YXIgbHQ9Ty5nZXQoQWUpOyFXfHwhR3QobHQsVyk/SmUobHQpOlcmJnNyKFcpLE8uZGVsZXRlKEFlKSxGLmRlbGV0ZShBZSl9RnIoKCk9PlthLmluY2x1ZGUsYS5leGNsdWRlXSxBZT0+e3ZhcltsdCxWZV09QWU7bHQmJm10KFR0PT5qaShsdCxUdCkpLFZlJiZtdChUdD0+IWppKFZlLFR0KSl9LHtmbHVzaDoicG9zdCIsZGVlcDohMH0pO3ZhciBTZT1udWxsLEVlPSgpPT57U2UhPW51bGwmJk8uc2V0KFNlLFNpKFMuc3ViVHJlZSkpfTtyZXR1cm4gZXIoRWUpLEduKEVlKSxucigoKT0+e08uZm9yRWFjaChBZT0+e3ZhcntzdWJUcmVlOmx0LHN1c3BlbnNlOlZlfT1TLFR0PVNpKGx0KTtpZihBZS50eXBlPT09VHQudHlwZSYmQWUua2V5PT09VHQua2V5KXtzcihUdCk7dmFyIGk9VHQuY29tcG9uZW50LmRhO2kmJnVyKGksVmUpO3JldHVybn1KZShBZSl9KX0pLCgpPT57aWYoU2U9bnVsbCwhbS5kZWZhdWx0KXJldHVybiBudWxsO3ZhciBBZT1tLmRlZmF1bHQoKSxsdD1BZVswXTtpZihBZS5sZW5ndGg+MSlyZXR1cm4gVz1udWxsLEFlO2lmKCFkbihsdCl8fCEobHQuc2hhcGVGbGFnJjQpJiYhKGx0LnNoYXBlRmxhZyYxMjgpKXJldHVybiBXPW51bGwsbHQ7dmFyIFZlPVNpKGx0KSxUdD1WZS50eXBlLGk9RGkoVHIoVmUpP1ZlLnR5cGUuX19hc3luY1Jlc29sdmVkfHx7fTpUdCkse2luY2x1ZGU6bCxleGNsdWRlOmQsbWF4Ol99PWE7aWYobCYmKCFpfHwhamkobCxpKSl8fGQmJmkmJmppKGQsaSkpcmV0dXJuIFc9VmUsbHQ7dmFyIEE9VmUua2V5PT1udWxsP1R0OlZlLmtleSxDPU8uZ2V0KEEpO3JldHVybiBWZS5lbCYmKFZlPWNpKFZlKSxsdC5zaGFwZUZsYWcmMTI4JiYobHQuc3NDb250ZW50PVZlKSksU2U9QSxDPyhWZS5lbD1DLmVsLFZlLmNvbXBvbmVudD1DLmNvbXBvbmVudCxWZS50cmFuc2l0aW9uJiZ5aShWZSxWZS50cmFuc2l0aW9uKSxWZS5zaGFwZUZsYWd8PTUxMixGLmRlbGV0ZShBKSxGLmFkZChBKSk6KEYuYWRkKEEpLF8mJkYuc2l6ZT5wYXJzZUludChfLDEwKSYmYXQoRi52YWx1ZXMoKS5uZXh0KCkudmFsdWUpKSxWZS5zaGFwZUZsYWd8PTI1NixXPVZlLG1pKGx0LnR5cGUpP2x0OlZlfX19LGZuPUVpO2Z1bmN0aW9uIGppKGEsdSl7cmV0dXJuIHkuaXNBcnJheShhKT9hLnNvbWUobT0+amkobSx1KSk6eS5pc1N0cmluZyhhKT9hLnNwbGl0KCIsIikuaW5jbHVkZXModSk6eS5pc1JlZ0V4cChhKT9hLnRlc3QodSk6ITF9ZnVuY3Rpb24gJHIoYSx1KXtFbihhLCJhIix1KX1mdW5jdGlvbiB0byhhLHUpe0VuKGEsImRhIix1KX1mdW5jdGlvbiBFbihhLHUpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpvbixTPWEuX193ZGN8fChhLl9fd2RjPSgpPT57Zm9yKHZhciBPPW07Tzspe2lmKE8uaXNEZWFjdGl2YXRlZClyZXR1cm47Tz1PLnBhcmVudH1yZXR1cm4gYSgpfSk7aWYoeGkodSxTLG0pLG0pZm9yKHZhciBJPW0ucGFyZW50O0kmJkkucGFyZW50OylQcihJLnBhcmVudC52bm9kZSkmJkhyKFMsdSxtLEkpLEk9SS5wYXJlbnR9ZnVuY3Rpb24gSHIoYSx1LG0sUyl7dmFyIEk9eGkodSxhLFMsITApO2NyKCgpPT57eS5yZW1vdmUoU1t1XSxJKX0sbSl9ZnVuY3Rpb24gc3IoYSl7YS5zaGFwZUZsYWcmPX4yNTYsYS5zaGFwZUZsYWcmPX41MTJ9ZnVuY3Rpb24gU2koYSl7cmV0dXJuIGEuc2hhcGVGbGFnJjEyOD9hLnNzQ29udGVudDphfWZ1bmN0aW9uIHhpKGEsdSl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm9uLFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKG0pe2lmKEZlLmlzUm9vdEhvb2soYSkmJm0hPT1tLnJvb3QmJihtPW0ucm9vdCxGZS5pc1Jvb3RJbW1lZGlhdGVIb29rKGEpKSl7dmFyIEk9bS5wcm94eTtQKHUuYmluZChJKSxtLGEsRmUuT05fTE9BRD09PWE/W0kuJHBhZ2Uub3B0aW9uc106W10pfXZhciBPPW1bYV18fChtW2FdPVtdKSxGPXUuX193ZWh8fCh1Ll9fd2VoPWZ1bmN0aW9uKCl7aWYoIW0uaXNVbm1vdW50ZWQpe1IucGF1c2VUcmFja2luZygpLGpuKG0pO2Zvcih2YXIgVz1hcmd1bWVudHMubGVuZ3RoLEc9bmV3IEFycmF5KFcpLGxlPTA7bGU8VztsZSsrKUdbbGVdPWFyZ3VtZW50c1tsZV07dmFyIFdlPVAodSxtLGEsRyk7cmV0dXJuIHFuKCksUi5yZXNldFRyYWNraW5nKCksV2V9fSk7cmV0dXJuIFM/Ty51bnNoaWZ0KEYpOk8ucHVzaChGKSxGfX12YXIgbXI9YT0+ZnVuY3Rpb24odSl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm9uO3JldHVybighaC5pc0luU1NSQ29tcG9uZW50U2V0dXB8fGE9PT0ic3AiKSYmeGkoYSxmdW5jdGlvbigpe3JldHVybiB1KC4uLmFyZ3VtZW50cyl9LG0pfSxRcj1tcigiYm0iKSxlcj1tcigibSIpLHRyPW1yKCJidSIpLEduPW1yKCJ1IiksbnI9bXIoImJ1bSIpLGNyPW1yKCJ1bSIpLGhvPW1yKCJzcCIpLGdvPW1yKCJydGciKSxObz1tcigicnRjIik7ZnVuY3Rpb24gbm8oYSl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm9uO3hpKCJlYyIsYSx1KX1mdW5jdGlvbiBrbyhhLHUpe3ZhciBtPUFuO2lmKG09PT1udWxsKXJldHVybiBhO2Zvcih2YXIgUz1GbyhtKXx8bS5wcm94eSxJPWEuZGlyc3x8KGEuZGlycz1bXSksTz0wO088dS5sZW5ndGg7TysrKXt2YXJbRixXLEcsbGU9eS5FTVBUWV9PQkpdPXVbT107RiYmKHkuaXNGdW5jdGlvbihGKSYmKEY9e21vdW50ZWQ6Rix1cGRhdGVkOkZ9KSxGLmRlZXAmJlZyKFcpLEkucHVzaCh7ZGlyOkYsaW5zdGFuY2U6Uyx2YWx1ZTpXLG9sZFZhbHVlOnZvaWQgMCxhcmc6Ryxtb2RpZmllcnM6bGV9KSl9cmV0dXJuIGF9ZnVuY3Rpb24ganIoYSx1LG0sUyl7Zm9yKHZhciBJPWEuZGlycyxPPXUmJnUuZGlycyxGPTA7RjxJLmxlbmd0aDtGKyspe3ZhciBXPUlbRl07TyYmKFcub2xkVmFsdWU9T1tGXS52YWx1ZSk7dmFyIEc9Vy5kaXJbU107RyYmKFIucGF1c2VUcmFja2luZygpLFAoRyxtLDgsW2EuZWwsVyxhLHVdKSxSLnJlc2V0VHJhY2tpbmcoKSl9fXZhciB4cj0iY29tcG9uZW50cyIscG89ImRpcmVjdGl2ZXMiO2Z1bmN0aW9uIFJvKGEsdSl7cmV0dXJuIE1pKHhyLGEsITAsdSl8fGF9dmFyIHJvPVN5bWJvbCgpO2Z1bmN0aW9uIEJpKGEpe3JldHVybiB5LmlzU3RyaW5nKGEpP01pKHhyLGEsITEpfHxhOmF8fHJvfWZ1bmN0aW9uIHZvKGEpe3JldHVybiBNaShwbyxhKX1mdW5jdGlvbiBNaShhLHUpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxTPUFufHxvbjtpZihTKXt2YXIgST1TLnR5cGU7aWYoYT09PXhyKXt2YXIgTz1EaShJLCExKTtpZihPJiYoTz09PXV8fE89PT15LmNhbWVsaXplKHUpfHxPPT09eS5jYXBpdGFsaXplKHkuY2FtZWxpemUodSkpKSlyZXR1cm4gSX12YXIgRj16aShTW2FdfHxJW2FdLHUpfHx6aShTLmFwcENvbnRleHRbYV0sdSk7cmV0dXJuIUYmJm0/STpGfX1mdW5jdGlvbiB6aShhLHUpe3JldHVybiBhJiYoYVt1XXx8YVt5LmNhbWVsaXplKHUpXXx8YVt5LmNhcGl0YWxpemUoeS5jYW1lbGl6ZSh1KSldKX1mdW5jdGlvbiBRbyhhLHUsbSxTKXt2YXIgSSxPPW0mJm1bU107aWYoeS5pc0FycmF5KGEpfHx5LmlzU3RyaW5nKGEpKXtJPW5ldyBBcnJheShhLmxlbmd0aCk7Zm9yKHZhciBGPTAsVz1hLmxlbmd0aDtGPFc7RisrKUlbRl09dShhW0ZdLEYsdm9pZCAwLE8mJk9bRl0pfWVsc2UgaWYodHlwZW9mIGE9PSJudW1iZXIiKXtJPW5ldyBBcnJheShhKTtmb3IodmFyIEc9MDtHPGE7RysrKUlbR109dShHKzEsRyx2b2lkIDAsTyYmT1tHXSl9ZWxzZSBpZih5LmlzT2JqZWN0KGEpKWlmKGFbU3ltYm9sLml0ZXJhdG9yXSlJPUFycmF5LmZyb20oYSwoWWUsSmUpPT51KFllLEplLHZvaWQgMCxPJiZPW0plXSkpO2Vsc2V7dmFyIGxlPU9iamVjdC5rZXlzKGEpO0k9bmV3IEFycmF5KGxlLmxlbmd0aCk7Zm9yKHZhciBXZT0wLGl0PWxlLmxlbmd0aDtXZTxpdDtXZSsrKXt2YXIgZ2U9bGVbV2VdO0lbV2VdPXUoYVtnZV0sZ2UsV2UsTyYmT1tXZV0pfX1lbHNlIEk9W107cmV0dXJuIG0mJihtW1NdPUkpLEl9ZnVuY3Rpb24gQihhLHUpe2Zvcih2YXIgbT1mdW5jdGlvbihJKXt2YXIgTz11W0ldO2lmKHkuaXNBcnJheShPKSlmb3IodmFyIEY9MDtGPE8ubGVuZ3RoO0YrKylhW09bRl0ubmFtZV09T1tGXS5mbjtlbHNlIE8mJihhW08ubmFtZV09Ty5rZXk/ZnVuY3Rpb24oKXt2YXIgVz1PLmZuKC4uLmFyZ3VtZW50cyk7cmV0dXJuIFcmJihXLmtleT1PLmtleSksV306Ty5mbil9LFM9MDtTPHUubGVuZ3RoO1MrKyltKFMpO3JldHVybiBhfWZ1bmN0aW9uIFEoYSx1KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06e30sUz1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxJPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06dm9pZCAwO2lmKEFuLmlzQ0V8fEFuLnBhcmVudCYmVHIoQW4ucGFyZW50KSYmQW4ucGFyZW50LmlzQ0UpcmV0dXJuIHUhPT0iZGVmYXVsdCImJihtLm5hbWU9dSksVXQoInNsb3QiLG0sUyYmUygpKTt2YXIgTz1hW3VdO08mJk8uX2MmJihPLl9kPSExKSxDZSgpO3ZhciBGPU8mJmhlKE8obSkpLFc9TXQocSx7a2V5Om0ua2V5fHxGJiZGLmtleXx8Il8iLmNvbmNhdCh1KX0sRnx8KFM/UygpOltdKSxGJiZhLl89PT0xPzY0Oi0yKTtyZXR1cm4hSSYmVy5zY29wZUlkJiYoVy5zbG90U2NvcGVJZHM9W1cuc2NvcGVJZCsiLXMiXSksTyYmTy5fYyYmKE8uX2Q9ITApLFd9ZnVuY3Rpb24gaGUoYSl7cmV0dXJuIGEuc29tZSh1PT5kbih1KT8hKHUudHlwZT09PWNlfHx1LnR5cGU9PT1xJiYhaGUodS5jaGlsZHJlbikpOiEwKT9hOm51bGx9ZnVuY3Rpb24gYWUoYSx1KXt2YXIgbT17fTtmb3IodmFyIFMgaW4gYSltW3UmJi9bQS1aXS8udGVzdChTKT8ib246Ii5jb25jYXQoUyk6eS50b0hhbmRsZXJLZXkoUyldPWFbU107cmV0dXJuIG19dmFyIGRlPWE9PmE/QWkoYSk/Rm8oYSl8fGEucHJveHk6ZGUoYS5wYXJlbnQpOm51bGwsdnQ9eS5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSx7JDphPT5hLCRlbDphPT5hLnZub2RlLmVsLCRkYXRhOmE9PmEuZGF0YSwkcHJvcHM6YT0+YS5wcm9wcywkYXR0cnM6YT0+YS5hdHRycywkc2xvdHM6YT0+YS5zbG90cywkcmVmczphPT5hLnJlZnMsJHBhcmVudDphPT5kZShhLnBhcmVudCksJHJvb3Q6YT0+ZGUoYS5yb290KSwkZW1pdDphPT5hLmVtaXQsJG9wdGlvbnM6YT0+RG4oYSksJGZvcmNlVXBkYXRlOmE9PmEuZnx8KGEuZj0oKT0+U24oYS51cGRhdGUpKSwkbmV4dFRpY2s6YT0+YS5ufHwoYS5uPXFyLmJpbmQoYS5wcm94eSkpLCR3YXRjaDphPT5raS5iaW5kKGEpfSksa3Q9KGEsdSk9PmEhPT15LkVNUFRZX09CSiYmIWEuX19pc1NjcmlwdFNldHVwJiZ5Lmhhc093bihhLHUpLFg9e2dldChhLHUpe3ZhcntfOm19PWEse2N0eDpTLHNldHVwU3RhdGU6SSxkYXRhOk8scHJvcHM6RixhY2Nlc3NDYWNoZTpXLHR5cGU6RyxhcHBDb250ZXh0OmxlfT1tLFdlO2lmKHVbMF0hPT0iJCIpe3ZhciBpdD1XW3VdO2lmKGl0IT09dm9pZCAwKXN3aXRjaChpdCl7Y2FzZSAxOnJldHVybiBJW3VdO2Nhc2UgMjpyZXR1cm4gT1t1XTtjYXNlIDQ6cmV0dXJuIFNbdV07Y2FzZSAzOnJldHVybiBGW3VdfWVsc2V7aWYoa3QoSSx1KSlyZXR1cm4gV1t1XT0xLElbdV07aWYoTyE9PXkuRU1QVFlfT0JKJiZ5Lmhhc093bihPLHUpKXJldHVybiBXW3VdPTIsT1t1XTtpZigoV2U9bS5wcm9wc09wdGlvbnNbMF0pJiZ5Lmhhc093bihXZSx1KSlyZXR1cm4gV1t1XT0zLEZbdV07aWYoUyE9PXkuRU1QVFlfT0JKJiZ5Lmhhc093bihTLHUpKXJldHVybiBXW3VdPTQsU1t1XTtpZSYmKFdbdV09MCl9fXZhciBnZT12dFt1XSxZZSxKZTtpZihnZSlyZXR1cm4gdT09PSIkYXR0cnMiJiZSLnRyYWNrKG0sImdldCIsdSksZ2UobSk7aWYoKFllPUcuX19jc3NNb2R1bGVzKSYmKFllPVllW3VdKSlyZXR1cm4gWWU7aWYoUyE9PXkuRU1QVFlfT0JKJiZ5Lmhhc093bihTLHUpKXJldHVybiBXW3VdPTQsU1t1XTtpZihKZT1sZS5jb25maWcuZ2xvYmFsUHJvcGVydGllcyx5Lmhhc093bihKZSx1KSlyZXR1cm4gSmVbdV19LHNldChhLHUsbSl7dmFye186U309YSx7ZGF0YTpJLHNldHVwU3RhdGU6TyxjdHg6Rn09UztyZXR1cm4ga3QoTyx1KT8oT1t1XT1tLCEwKTpJIT09eS5FTVBUWV9PQkomJnkuaGFzT3duKEksdSk/KElbdV09bSwhMCk6eS5oYXNPd24oUy5wcm9wcyx1KXx8dVswXT09PSIkIiYmdS5zbGljZSgxKWluIFM/ITE6KEZbdV09bSwhMCl9LGhhcyhhLHUpe3ZhcntfOntkYXRhOm0sc2V0dXBTdGF0ZTpTLGFjY2Vzc0NhY2hlOkksY3R4Ok8sYXBwQ29udGV4dDpGLHByb3BzT3B0aW9uczpXfX09YSxHO3JldHVybiEhSVt1XXx8bSE9PXkuRU1QVFlfT0JKJiZ5Lmhhc093bihtLHUpfHxrdChTLHUpfHwoRz1XWzBdKSYmeS5oYXNPd24oRyx1KXx8eS5oYXNPd24oTyx1KXx8eS5oYXNPd24odnQsdSl8fHkuaGFzT3duKEYuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsdSl9LGRlZmluZVByb3BlcnR5KGEsdSxtKXtyZXR1cm4gbS5nZXQhPW51bGw/YS5fLmFjY2Vzc0NhY2hlW3VdPTA6eS5oYXNPd24obSwidmFsdWUiKSYmdGhpcy5zZXQoYSx1LG0udmFsdWUsbnVsbCksUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShhLHUsbSl9fSxLPXkuZXh0ZW5kKHt9LFgse2dldChhLHUpe2lmKHUhPT1TeW1ib2wudW5zY29wYWJsZXMpcmV0dXJuIFguZ2V0KGEsdSxhKX0saGFzKGEsdSl7dmFyIG09dVswXSE9PSJfIiYmIXkuaXNHbG9iYWxseVdoaXRlbGlzdGVkKHUpO3JldHVybiBtfX0pLGllPSEwO2Z1bmN0aW9uIE5lKGEpe3ZhciB1PURuKGEpLG09YS5wcm94eSxTPWEuY3R4O2llPSExLHUuYmVmb3JlQ3JlYXRlJiZYdCh1LmJlZm9yZUNyZWF0ZSxhLCJiYyIpO3ZhcntkYXRhOkksY29tcHV0ZWQ6TyxtZXRob2RzOkYsd2F0Y2g6Vyxwcm92aWRlOkcsaW5qZWN0OmxlLGNyZWF0ZWQ6V2UsYmVmb3JlTW91bnQ6aXQsbW91bnRlZDpnZSxiZWZvcmVVcGRhdGU6WWUsdXBkYXRlZDpKZSxhY3RpdmF0ZWQ6bXQsZGVhY3RpdmF0ZWQ6YXQsYmVmb3JlRGVzdHJveTpTZSxiZWZvcmVVbm1vdW50OkVlLGRlc3Ryb3llZDpBZSx1bm1vdW50ZWQ6bHQscmVuZGVyOlZlLHJlbmRlclRyYWNrZWQ6VHQscmVuZGVyVHJpZ2dlcmVkOmksZXJyb3JDYXB0dXJlZDpsLHNlcnZlclByZWZldGNoOmQsZXhwb3NlOl8saW5oZXJpdEF0dHJzOkEsY29tcG9uZW50czpDLGRpcmVjdGl2ZXM6ayxmaWx0ZXJzOkR9PXUsSD1udWxsO2lmKGxlJiZzdChsZSxTLEgsYS5hcHBDb250ZXh0LmNvbmZpZy51bndyYXBJbmplY3RlZFJlZiksRilmb3IodmFyIG5lIGluIEYpe3ZhciB2ZT1GW25lXTt5LmlzRnVuY3Rpb24odmUpJiYoU1tuZV09dmUuYmluZChtKSl9aWYoSSl7dmFyIEJlPUkuY2FsbChtLG0pO3kuaXNPYmplY3QoQmUpJiYoYS5kYXRhPVIucmVhY3RpdmUoQmUpKX1pZihpZT0hMCxPKXt2YXIgdWU9ZnVuY3Rpb24oeWUpe3ZhciBMZT1PW3llXSxPZT15LmlzRnVuY3Rpb24oTGUpP0xlLmJpbmQobSxtKTp5LmlzRnVuY3Rpb24oTGUuZ2V0KT9MZS5nZXQuYmluZChtLG0pOnkuTk9PUCxidD0heS5pc0Z1bmN0aW9uKExlKSYmeS5pc0Z1bmN0aW9uKExlLnNldCk/TGUuc2V0LmJpbmQobSk6eS5OT09QLEN0PWJvKHtnZXQ6T2Usc2V0OmJ0fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMseWUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+Q3QudmFsdWUsc2V0OktlPT5DdC52YWx1ZT1LZX0pfTtmb3IodmFyIGtlIGluIE8pdWUoa2UpfWlmKFcpZm9yKHZhciBHZSBpbiBXKXhuKFdbR2VdLFMsbSxHZSk7aWYoRyl7dmFyIHV0PXkuaXNGdW5jdGlvbihHKT9HLmNhbGwobSk6RztSZWZsZWN0Lm93bktleXModXQpLmZvckVhY2goeWU9Pntrcih5ZSx1dFt5ZV0pfSl9V2UmJlh0KFdlLGEsImMiKTtmdW5jdGlvbiBRZSh5ZSxMZSl7eS5pc0FycmF5KExlKT9MZS5mb3JFYWNoKE9lPT55ZShPZS5iaW5kKG0pKSk6TGUmJnllKExlLmJpbmQobSkpfWlmKFFlKFFyLGl0KSxRZShlcixnZSksUWUodHIsWWUpLFFlKEduLEplKSxRZSgkcixtdCksUWUodG8sYXQpLFFlKG5vLGwpLFFlKE5vLFR0KSxRZShnbyxpKSxRZShucixFZSksUWUoY3IsbHQpLFFlKGhvLGQpLHkuaXNBcnJheShfKSlpZihfLmxlbmd0aCl7dmFyIFJlPWEuZXhwb3NlZHx8KGEuZXhwb3NlZD17fSk7Xy5mb3JFYWNoKHllPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KFJlLHllLHtnZXQ6KCk9Pm1beWVdLHNldDpMZT0+bVt5ZV09TGV9KX0pfWVsc2UgYS5leHBvc2VkfHwoYS5leHBvc2VkPXt9KTtWZSYmYS5yZW5kZXI9PT15Lk5PT1AmJihhLnJlbmRlcj1WZSksQSE9bnVsbCYmKGEuaW5oZXJpdEF0dHJzPUEpLEMmJihhLmNvbXBvbmVudHM9QyksayYmKGEuZGlyZWN0aXZlcz1rKTt2YXIgbWU9YS5hcHBDb250ZXh0LmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLiRhcHBseU9wdGlvbnM7bWUmJm1lKHUsYSxtKX1mdW5jdGlvbiBzdChhLHUpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMTt5LmlzQXJyYXkoYSkmJihhPUJvKGEpKTt2YXIgUz1mdW5jdGlvbihPKXt2YXIgRj1hW09dLFc9dm9pZCAwO3kuaXNPYmplY3QoRik/ImRlZmF1bHQiaW4gRj9XPU5uKEYuZnJvbXx8TyxGLmRlZmF1bHQsITApOlc9Tm4oRi5mcm9tfHxPKTpXPU5uKEYpLFIuaXNSZWYoVykmJm0/T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsTyx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5XLnZhbHVlLHNldDpHPT5XLnZhbHVlPUd9KTp1W09dPVd9O2Zvcih2YXIgSSBpbiBhKVMoSSl9ZnVuY3Rpb24gWHQoYSx1LG0pe1AoeS5pc0FycmF5KGEpP2EubWFwKFM9PlMuYmluZCh1LnByb3h5KSk6YS5iaW5kKHUucHJveHkpLHUsbSl9ZnVuY3Rpb24geG4oYSx1LG0sUyl7dmFyIEk9Uy5pbmNsdWRlcygiLiIpP0lvKG0sUyk6KCk9Pm1bU107aWYoeS5pc1N0cmluZyhhKSl7dmFyIE89dVthXTt5LmlzRnVuY3Rpb24oTykmJkZyKEksTyl9ZWxzZSBpZih5LmlzRnVuY3Rpb24oYSkpRnIoSSxhLmJpbmQobSkpO2Vsc2UgaWYoeS5pc09iamVjdChhKSlpZih5LmlzQXJyYXkoYSkpYS5mb3JFYWNoKFc9PnhuKFcsdSxtLFMpKTtlbHNle3ZhciBGPXkuaXNGdW5jdGlvbihhLmhhbmRsZXIpP2EuaGFuZGxlci5iaW5kKG0pOnVbYS5oYW5kbGVyXTt5LmlzRnVuY3Rpb24oRikmJkZyKEksRixhKX19ZnVuY3Rpb24gRG4oYSl7dmFyIHU9YS50eXBlLHttaXhpbnM6bSxleHRlbmRzOlN9PXUse21peGluczpJLG9wdGlvbnNDYWNoZTpPLGNvbmZpZzp7b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOkZ9fT1hLmFwcENvbnRleHQsVz1PLmdldCh1KSxHO3JldHVybiBXP0c9VzohSS5sZW5ndGgmJiFtJiYhUz9HPXU6KEc9e30sSS5sZW5ndGgmJkkuZm9yRWFjaChsZT0+X3IoRyxsZSxGLCEwKSksX3IoRyx1LEYpKSx5LmlzT2JqZWN0KHUpJiZPLnNldCh1LEcpLEd9ZnVuY3Rpb24gX3IoYSx1LG0pe3ZhciBTPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSx7bWl4aW5zOkksZXh0ZW5kczpPfT11O08mJl9yKGEsTyxtLCEwKSxJJiZJLmZvckVhY2goRz0+X3IoYSxHLG0sITApKTtmb3IodmFyIEYgaW4gdSlpZighKFMmJkY9PT0iZXhwb3NlIikpe3ZhciBXPUJyW0ZdfHxtJiZtW0ZdO2FbRl09Vz9XKGFbRl0sdVtGXSk6dVtGXX1yZXR1cm4gYX12YXIgQnI9e2RhdGE6bW8scHJvcHM6WW4sZW1pdHM6WW4sbWV0aG9kczpZbixjb21wdXRlZDpZbixiZWZvcmVDcmVhdGU6TG4sY3JlYXRlZDpMbixiZWZvcmVNb3VudDpMbixtb3VudGVkOkxuLGJlZm9yZVVwZGF0ZTpMbix1cGRhdGVkOkxuLGJlZm9yZURlc3Ryb3k6TG4sYmVmb3JlVW5tb3VudDpMbixkZXN0cm95ZWQ6TG4sdW5tb3VudGVkOkxuLGFjdGl2YXRlZDpMbixkZWFjdGl2YXRlZDpMbixlcnJvckNhcHR1cmVkOkxuLHNlcnZlclByZWZldGNoOkxuLGNvbXBvbmVudHM6WW4sZGlyZWN0aXZlczpZbix3YXRjaDpGbixwcm92aWRlOm1vLGluamVjdDp4b307ZnVuY3Rpb24gbW8oYSx1KXtyZXR1cm4gdT9hP2Z1bmN0aW9uKCl7cmV0dXJuIHkuZXh0ZW5kKHkuaXNGdW5jdGlvbihhKT9hLmNhbGwodGhpcyx0aGlzKTphLHkuaXNGdW5jdGlvbih1KT91LmNhbGwodGhpcyx0aGlzKTp1KX06dTphfWZ1bmN0aW9uIHhvKGEsdSl7cmV0dXJuIFluKEJvKGEpLEJvKHUpKX1mdW5jdGlvbiBCbyhhKXtpZih5LmlzQXJyYXkoYSkpe2Zvcih2YXIgdT17fSxtPTA7bTxhLmxlbmd0aDttKyspdVthW21dXT1hW21dO3JldHVybiB1fXJldHVybiBhfWZ1bmN0aW9uIExuKGEsdSl7cmV0dXJuIGE/Wy4uLm5ldyBTZXQoW10uY29uY2F0KGEsdSkpXTp1fWZ1bmN0aW9uIFluKGEsdSl7cmV0dXJuIGE/eS5leHRlbmQoeS5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxhKSx1KTp1fWZ1bmN0aW9uIEZuKGEsdSl7aWYoIWEpcmV0dXJuIHU7aWYoIXUpcmV0dXJuIGE7dmFyIG09eS5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxhKTtmb3IodmFyIFMgaW4gdSltW1NdPUxuKGFbU10sdVtTXSk7cmV0dXJuIG19ZnVuY3Rpb24gd2koYSx1LG0pe3ZhciBTPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxJPXt9LE89e307eS5kZWYoTyxlbiwxKSxhLnByb3BzRGVmYXVsdHM9T2JqZWN0LmNyZWF0ZShudWxsKSxoYShhLHUsSSxPKTtmb3IodmFyIEYgaW4gYS5wcm9wc09wdGlvbnNbMF0pRiBpbiBJfHwoSVtGXT12b2lkIDApO20/YS5wcm9wcz1TP0k6Ui5zaGFsbG93UmVhY3RpdmUoSSk6YS50eXBlLnByb3BzP2EucHJvcHM9STphLnByb3BzPU8sYS5hdHRycz1PfWZ1bmN0aW9uIGlzKGEsdSxtLFMpe3Zhcntwcm9wczpJLGF0dHJzOk8sdm5vZGU6e3BhdGNoRmxhZzpGfX09YSxXPVIudG9SYXcoSSksW0ddPWEucHJvcHNPcHRpb25zLGxlPSExO2lmKChTfHxGPjApJiYhKEYmMTYpKXtpZihGJjgpZm9yKHZhciBXZT1hLnZub2RlLmR5bmFtaWNQcm9wcyxpdD0wO2l0PFdlLmxlbmd0aDtpdCsrKXt2YXIgZ2U9V2VbaXRdO2lmKCFXbihhLmVtaXRzT3B0aW9ucyxnZSkpe3ZhciBZZT11W2dlXTtpZihHKWlmKHkuaGFzT3duKE8sZ2UpKVllIT09T1tnZV0mJihPW2dlXT1ZZSxsZT0hMCk7ZWxzZXt2YXIgSmU9eS5jYW1lbGl6ZShnZSk7SVtKZV09YnIoRyxXLEplLFllLGEsITEpfWVsc2UgWWUhPT1PW2dlXSYmKE9bZ2VdPVllLGxlPSEwKX19fWVsc2V7aGEoYSx1LEksTykmJihsZT0hMCk7dmFyIG10O2Zvcih2YXIgYXQgaW4gVykoIXV8fCF5Lmhhc093bih1LGF0KSYmKChtdD15Lmh5cGhlbmF0ZShhdCkpPT09YXR8fCF5Lmhhc093bih1LG10KSkpJiYoRz9tJiYobVthdF0hPT12b2lkIDB8fG1bbXRdIT09dm9pZCAwKSYmKElbYXRdPWJyKEcsVyxhdCx2b2lkIDAsYSwhMCkpOmRlbGV0ZSBJW2F0XSk7aWYoTyE9PVcpZm9yKHZhciBTZSBpbiBPKSghdXx8IXkuaGFzT3duKHUsU2UpJiYhMCkmJihkZWxldGUgT1tTZV0sbGU9ITApfWxlJiZSLnRyaWdnZXIoYSwic2V0IiwiJGF0dHJzIil9ZnVuY3Rpb24gaGEoYSx1LG0sUyl7dmFyW0ksT109YS5wcm9wc09wdGlvbnMsRj0hMSxXO2lmKHUpe2Zvcih2YXIgRyBpbiB1KWlmKCF5LmlzUmVzZXJ2ZWRQcm9wKEcpKXt2YXIgbGU9dVtHXSxXZT12b2lkIDA7SSYmeS5oYXNPd24oSSxXZT15LmNhbWVsaXplKEcpKT8hT3x8IU8uaW5jbHVkZXMoV2UpP21bV2VdPWxlOihXfHwoVz17fSkpW1dlXT1sZTpXbihhLmVtaXRzT3B0aW9ucyxHKXx8KCEoRyBpbiBTKXx8bGUhPT1TW0ddKSYmKFNbR109bGUsRj0hMCl9fWlmKE8pZm9yKHZhciBpdD1SLnRvUmF3KG0pLGdlPVd8fHkuRU1QVFlfT0JKLFllPTA7WWU8Ty5sZW5ndGg7WWUrKyl7dmFyIEplPU9bWWVdO21bSmVdPWJyKEksaXQsSmUsZ2VbSmVdLGEsIXkuaGFzT3duKGdlLEplKSl9cmV0dXJuIEZ9ZnVuY3Rpb24gYnIoYSx1LG0sUyxJLE8pe3ZhciBGPWFbbV07aWYoRiE9bnVsbCl7dmFyIFc9eS5oYXNPd24oRiwiZGVmYXVsdCIpO2lmKFcmJlM9PT12b2lkIDApe3ZhciBHPUYuZGVmYXVsdDtpZihGLnR5cGUhPT1GdW5jdGlvbiYmeS5pc0Z1bmN0aW9uKEcpKXt2YXJ7cHJvcHNEZWZhdWx0czpsZX09STttIGluIGxlP1M9bGVbbV06KGpuKEkpLFM9bGVbbV09Ry5jYWxsKG51bGwsdSkscW4oKSl9ZWxzZSBTPUd9RlswXSYmKE8mJiFXP1M9ITE6RlsxXSYmKFM9PT0iInx8Uz09PXkuaHlwaGVuYXRlKG0pKSYmKFM9ITApKX1yZXR1cm4gU31mdW5jdGlvbiBUYShhLHUpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxTPXUucHJvcHNDYWNoZSxJPVMuZ2V0KGEpO2lmKEkpcmV0dXJuIEk7dmFyIE89YS5wcm9wcyxGPXt9LFc9W10sRz0hMTtpZigheS5pc0Z1bmN0aW9uKGEpKXt2YXIgbGU9QWU9PntHPSEwO3ZhcltsdCxWZV09VGEoQWUsdSwhMCk7eS5leHRlbmQoRixsdCksVmUmJlcucHVzaCguLi5WZSl9OyFtJiZ1Lm1peGlucy5sZW5ndGgmJnUubWl4aW5zLmZvckVhY2gobGUpLGEuZXh0ZW5kcyYmbGUoYS5leHRlbmRzKSxhLm1peGlucyYmYS5taXhpbnMuZm9yRWFjaChsZSl9aWYoIU8mJiFHKXJldHVybiB5LmlzT2JqZWN0KGEpJiZTLnNldChhLHkuRU1QVFlfQVJSKSx5LkVNUFRZX0FSUjtpZih5LmlzQXJyYXkoTykpZm9yKHZhciBXZT0wO1dlPE8ubGVuZ3RoO1dlKyspe3ZhciBpdD15LmNhbWVsaXplKE9bV2VdKTtMYShpdCkmJihGW2l0XT15LkVNUFRZX09CSil9ZWxzZSBpZihPKWZvcih2YXIgZ2UgaW4gTyl7dmFyIFllPXkuY2FtZWxpemUoZ2UpO2lmKExhKFllKSl7dmFyIEplPU9bZ2VdLG10PUZbWWVdPXkuaXNBcnJheShKZSl8fHkuaXNGdW5jdGlvbihKZSk/e3R5cGU6SmV9Ok9iamVjdC5hc3NpZ24oe30sSmUpO2lmKG10KXt2YXIgYXQ9VWEoQm9vbGVhbixtdC50eXBlKSxTZT1VYShTdHJpbmcsbXQudHlwZSk7bXRbMF09YXQ+LTEsbXRbMV09U2U8MHx8YXQ8U2UsKGF0Pi0xfHx5Lmhhc093bihtdCwiZGVmYXVsdCIpKSYmVy5wdXNoKFllKX19fXZhciBFZT1bRixXXTtyZXR1cm4geS5pc09iamVjdChhKSYmUy5zZXQoYSxFZSksRWV9ZnVuY3Rpb24gTGEoYSl7cmV0dXJuIGFbMF0hPT0iJCJ9ZnVuY3Rpb24gRmEoYSl7dmFyIHU9YSYmYS50b1N0cmluZygpLm1hdGNoKC9eXHMqKGZ1bmN0aW9ufGNsYXNzKSAoXHcrKS8pO3JldHVybiB1P3VbMl06YT09PW51bGw/Im51bGwiOiIifWZ1bmN0aW9uIFZhKGEsdSl7cmV0dXJuIEZhKGEpPT09RmEodSl9ZnVuY3Rpb24gVWEoYSx1KXtyZXR1cm4geS5pc0FycmF5KHUpP3UuZmluZEluZGV4KG09PlZhKG0sYSkpOnkuaXNGdW5jdGlvbih1KSYmVmEodSxhKT8wOi0xfXZhciBnYT1hPT5hWzBdPT09Il8ifHxhPT09IiRzdGFibGUiLFBhPWE9PnkuaXNBcnJheShhKT9hLm1hcChVbik6W1VuKGEpXSxWbj0oYSx1LG0pPT57aWYodS5fbilyZXR1cm4gdTt2YXIgUz1VaShmdW5jdGlvbigpe3JldHVybiBQYSh1KC4uLmFyZ3VtZW50cykpfSxtKTtyZXR1cm4gUy5fYz0hMSxTfSxNbz0oYSx1LG0pPT57dmFyIFM9YS5fY3R4O2Zvcih2YXIgSSBpbiBhKWlmKCFnYShJKSl7dmFyIE89YVtJXTt5LmlzRnVuY3Rpb24oTyk/dVtJXT1WbihJLE8sUyk6TyE9bnVsbCYmZnVuY3Rpb24oKXt2YXIgRj1QYShPKTt1W0ldPSgpPT5GfSgpfX0sZWE9KGEsdSk9Pnt2YXIgbT1QYSh1KTthLnNsb3RzLmRlZmF1bHQ9KCk9Pm19LFdpPShhLHUpPT57aWYoYS52bm9kZS5zaGFwZUZsYWcmMzIpe3ZhciBtPXUuXzttPyhhLnNsb3RzPVIudG9SYXcodSkseS5kZWYodSwiXyIsbSkpOk1vKHUsYS5zbG90cz17fSl9ZWxzZSBhLnNsb3RzPXt9LHUmJmVhKGEsdSk7eS5kZWYoYS5zbG90cyxlbiwxKX0sb3M9KGEsdSxtKT0+e3Zhcnt2bm9kZTpTLHNsb3RzOkl9PWEsTz0hMCxGPXkuRU1QVFlfT0JKO2lmKFMuc2hhcGVGbGFnJjMyKXt2YXIgVz11Ll87Vz9tJiZXPT09MT9PPSExOih5LmV4dGVuZChJLHUpLCFtJiZXPT09MSYmZGVsZXRlIEkuXyk6KE89IXUuJHN0YWJsZSxNbyh1LEkpKSxGPXV9ZWxzZSB1JiYoZWEoYSx1KSxGPXtkZWZhdWx0OjF9KTtpZihPKWZvcih2YXIgRyBpbiBJKSFnYShHKSYmIShHIGluIEYpJiZkZWxldGUgSVtHXX07ZnVuY3Rpb24gYXMoKXtyZXR1cm57YXBwOm51bGwsY29uZmlnOntpc05hdGl2ZVRhZzp5Lk5PLHBlcmZvcm1hbmNlOiExLGdsb2JhbFByb3BlcnRpZXM6e30sb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOnt9LGVycm9ySGFuZGxlcjp2b2lkIDAsd2FybkhhbmRsZXI6dm9pZCAwLGNvbXBpbGVyT3B0aW9uczp7fX0sbWl4aW5zOltdLGNvbXBvbmVudHM6e30sZGlyZWN0aXZlczp7fSxwcm92aWRlczpPYmplY3QuY3JlYXRlKG51bGwpLG9wdGlvbnNDYWNoZTpuZXcgV2Vha01hcCxwcm9wc0NhY2hlOm5ldyBXZWFrTWFwLGVtaXRzQ2FjaGU6bmV3IFdlYWtNYXB9fXZhciBEbz0wO2Z1bmN0aW9uIHNzKGEsdSl7cmV0dXJuIGZ1bmN0aW9uKFMpe3ZhciBJPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO3kuaXNGdW5jdGlvbihTKXx8KFM9T2JqZWN0LmFzc2lnbih7fSxTKSksSSE9bnVsbCYmIXkuaXNPYmplY3QoSSkmJihJPW51bGwpO3ZhciBPPWFzKCksRj1uZXcgU2V0LFc9ITEsRz1PLmFwcD17X3VpZDpEbysrLF9jb21wb25lbnQ6UyxfcHJvcHM6SSxfY29udGFpbmVyOm51bGwsX2NvbnRleHQ6TyxfaW5zdGFuY2U6bnVsbCx2ZXJzaW9uOnBzLGdldCBjb25maWcoKXtyZXR1cm4gTy5jb25maWd9LHNldCBjb25maWcobGUpe30sdXNlKGxlKXtmb3IodmFyIFdlPWFyZ3VtZW50cy5sZW5ndGgsaXQ9bmV3IEFycmF5KFdlPjE/V2UtMTowKSxnZT0xO2dlPFdlO2dlKyspaXRbZ2UtMV09YXJndW1lbnRzW2dlXTtyZXR1cm4gRi5oYXMobGUpfHwobGUmJnkuaXNGdW5jdGlvbihsZS5pbnN0YWxsKT8oRi5hZGQobGUpLGxlLmluc3RhbGwoRywuLi5pdCkpOnkuaXNGdW5jdGlvbihsZSkmJihGLmFkZChsZSksbGUoRywuLi5pdCkpKSxHfSxtaXhpbihsZSl7cmV0dXJuIE8ubWl4aW5zLmluY2x1ZGVzKGxlKXx8Ty5taXhpbnMucHVzaChsZSksR30sY29tcG9uZW50KGxlLFdlKXtyZXR1cm4gV2U/KE8uY29tcG9uZW50c1tsZV09V2UsRyk6Ty5jb21wb25lbnRzW2xlXX0sZGlyZWN0aXZlKGxlLFdlKXtyZXR1cm4gV2U/KE8uZGlyZWN0aXZlc1tsZV09V2UsRyk6Ty5kaXJlY3RpdmVzW2xlXX0sbW91bnQobGUsV2UsaXQpe2lmKCFXKXt2YXIgZ2U9VXQoUyxJKTtyZXR1cm4gZ2UuYXBwQ29udGV4dD1PLFdlJiZ1P3UoZ2UsbGUpOmEoZ2UsbGUsaXQpLFc9ITAsRy5fY29udGFpbmVyPWxlLGxlLl9fdnVlX2FwcF9fPUcsRy5faW5zdGFuY2U9Z2UuY29tcG9uZW50LEZvKGdlLmNvbXBvbmVudCl8fGdlLmNvbXBvbmVudC5wcm94eX19LHVubW91bnQoKXtXJiYoYShudWxsLEcuX2NvbnRhaW5lciksZGVsZXRlIEcuX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyl9LHByb3ZpZGUobGUsV2Upe3JldHVybiBPLnByb3ZpZGVzW2xlXT1XZSxHfX07cmV0dXJuIEd9fWZ1bmN0aW9uIGlvKGEsdSxtLFMpe3ZhciBJPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMTtpZih5LmlzQXJyYXkoYSkpe2EuZm9yRWFjaCgobXQsYXQpPT5pbyhtdCx1JiYoeS5pc0FycmF5KHUpP3VbYXRdOnUpLG0sUyxJKSk7cmV0dXJufWlmKCEoVHIoUykmJiFJKSl7dmFyIE89Uy5zaGFwZUZsYWcmND9GbyhTLmNvbXBvbmVudCl8fFMuY29tcG9uZW50LnByb3h5OlMuZWwsRj1JP251bGw6Tyx7aTpXLHI6R309YSxsZT11JiZ1LnIsV2U9Vy5yZWZzPT09eS5FTVBUWV9PQko/Vy5yZWZzPXt9OlcucmVmcyxpdD1XLnNldHVwU3RhdGU7aWYobGUhPW51bGwmJmxlIT09RyYmKHkuaXNTdHJpbmcobGUpPyhXZVtsZV09bnVsbCx5Lmhhc093bihpdCxsZSkmJihpdFtsZV09bnVsbCkpOlIuaXNSZWYobGUpJiYobGUudmFsdWU9bnVsbCkpLHkuaXNGdW5jdGlvbihHKSlPdChHLFcsMTIsW0YsV2VdKTtlbHNle3ZhciBnZT15LmlzU3RyaW5nKEcpLFllPVIuaXNSZWYoRyk7aWYoZ2V8fFllKXt2YXIgSmU9KCk9PntpZihhLmYpe3ZhciBtdD1nZT95Lmhhc093bihpdCxHKT9pdFtHXTpXZVtHXTpHLnZhbHVlO0k/eS5pc0FycmF5KG10KSYmeS5yZW1vdmUobXQsTyk6eS5pc0FycmF5KG10KT9tdC5pbmNsdWRlcyhPKXx8bXQucHVzaChPKTpnZT8oV2VbR109W09dLHkuaGFzT3duKGl0LEcpJiYoaXRbR109V2VbR10pKTooRy52YWx1ZT1bT10sYS5rJiYoV2VbYS5rXT1HLnZhbHVlKSl9ZWxzZSBnZT8oV2VbR109Rix5Lmhhc093bihpdCxHKSYmKGl0W0ddPUYpKTpZZSYmKEcudmFsdWU9RixhLmsmJihXZVthLmtdPUYpKX07Rj8oSmUuaWQ9LTEsdXIoSmUsbSkpOkplKCl9fX19dmFyIHNpPSExLENpPWE9Pi9zdmcvLnRlc3QoYS5uYW1lc3BhY2VVUkkpJiZhLnRhZ05hbWUhPT0iZm9yZWlnbk9iamVjdCIsR2k9YT0+YS5ub2RlVHlwZT09PTg7ZnVuY3Rpb24gbGkoYSl7dmFye210OnUscDptLG86e3BhdGNoUHJvcDpTLGNyZWF0ZVRleHQ6SSxuZXh0U2libGluZzpPLHBhcmVudE5vZGU6RixyZW1vdmU6VyxpbnNlcnQ6RyxjcmVhdGVDb21tZW50OmxlfX09YSxXZT0oU2UsRWUpPT57aWYoIUVlLmhhc0NoaWxkTm9kZXMoKSl7bShudWxsLFNlLEVlKSxQbigpLEVlLl92bm9kZT1TZTtyZXR1cm59c2k9ITEsaXQoRWUuZmlyc3RDaGlsZCxTZSxudWxsLG51bGwsbnVsbCksUG4oKSxFZS5fdm5vZGU9U2Usc2kmJmNvbnNvbGUuZXJyb3IoIkh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuIil9LGl0PWZ1bmN0aW9uKFNlLEVlLEFlLGx0LFZlKXt2YXIgVHQ9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiExLGk9R2koU2UpJiZTZS5kYXRhPT09IlsiLGw9KCk9Pm10KFNlLEVlLEFlLGx0LFZlLGkpLHt0eXBlOmQscmVmOl8sc2hhcGVGbGFnOkEscGF0Y2hGbGFnOkN9PUVlLGs9U2Uubm9kZVR5cGU7RWUuZWw9U2UsQz09PS0yJiYoVHQ9ITEsRWUuZHluYW1pY0NoaWxkcmVuPW51bGwpO3ZhciBEPW51bGw7c3dpdGNoKGQpe2Nhc2UgdGU6ayE9PTM/RWUuY2hpbGRyZW49PT0iIj8oRyhFZS5lbD1JKCIiKSxGKFNlKSxTZSksRD1TZSk6RD1sKCk6KFNlLmRhdGEhPT1FZS5jaGlsZHJlbiYmKHNpPSEwLFNlLmRhdGE9RWUuY2hpbGRyZW4pLEQ9TyhTZSkpO2JyZWFrO2Nhc2UgY2U6ayE9PTh8fGk/RD1sKCk6RD1PKFNlKTticmVhaztjYXNlIHBlOmlmKGkmJihTZT1PKFNlKSxrPVNlLm5vZGVUeXBlKSxrPT09MXx8az09PTMpe0Q9U2U7Zm9yKHZhciBIPSFFZS5jaGlsZHJlbi5sZW5ndGgsbmU9MDtuZTxFZS5zdGF0aWNDb3VudDtuZSsrKUgmJihFZS5jaGlsZHJlbis9RC5ub2RlVHlwZT09PTE/RC5vdXRlckhUTUw6RC5kYXRhKSxuZT09PUVlLnN0YXRpY0NvdW50LTEmJihFZS5hbmNob3I9RCksRD1PKEQpO3JldHVybiBpP08oRCk6RH1lbHNlIGwoKTticmVhaztjYXNlIHE6aT9EPUplKFNlLEVlLEFlLGx0LFZlLFR0KTpEPWwoKTticmVhaztkZWZhdWx0OmlmKEEmMSlrIT09MXx8RWUudHlwZS50b0xvd2VyQ2FzZSgpIT09U2UudGFnTmFtZS50b0xvd2VyQ2FzZSgpP0Q9bCgpOkQ9Z2UoU2UsRWUsQWUsbHQsVmUsVHQpO2Vsc2UgaWYoQSY2KXtFZS5zbG90U2NvcGVJZHM9VmU7dmFyIHZlPUYoU2UpO2lmKHUoRWUsdmUsbnVsbCxBZSxsdCxDaSh2ZSksVHQpLEQ9aT9hdChTZSk6TyhTZSksRCYmR2koRCkmJkQuZGF0YT09PSJ0ZWxlcG9ydCBlbmQiJiYoRD1PKEQpKSxUcihFZSkpe3ZhciBCZTtpPyhCZT1VdChxKSxCZS5hbmNob3I9RD9ELnByZXZpb3VzU2libGluZzp2ZS5sYXN0Q2hpbGQpOkJlPVNlLm5vZGVUeXBlPT09Mz9laSgiIik6VXQoImRpdiIpLEJlLmVsPVNlLEVlLmNvbXBvbmVudC5zdWJUcmVlPUJlfX1lbHNlIEEmNjQ/ayE9PTg/RD1sKCk6RD1FZS50eXBlLmh5ZHJhdGUoU2UsRWUsQWUsbHQsVmUsVHQsYSxZZSk6QSYxMjgmJihEPUVlLnR5cGUuaHlkcmF0ZShTZSxFZSxBZSxsdCxDaShGKFNlKSksVmUsVHQsYSxpdCkpfXJldHVybiBfIT1udWxsJiZpbyhfLG51bGwsbHQsRWUpLER9LGdlPShTZSxFZSxBZSxsdCxWZSxUdCk9PntUdD1UdHx8ISFFZS5keW5hbWljQ2hpbGRyZW47dmFye3R5cGU6aSxwcm9wczpsLHBhdGNoRmxhZzpkLHNoYXBlRmxhZzpfLGRpcnM6QX09RWUsQz1pPT09ImlucHV0IiYmQXx8aT09PSJvcHRpb24iO2lmKEN8fGQhPT0tMSl7aWYoQSYmanIoRWUsbnVsbCxBZSwiY3JlYXRlZCIpLGwpaWYoQ3x8IVR0fHxkJigxNnwzMikpZm9yKHZhciBrIGluIGwpKEMmJmsuZW5kc1dpdGgoInZhbHVlIil8fHkuaXNPbihrKSYmIXkuaXNSZXNlcnZlZFByb3AoaykpJiZTKFNlLGssbnVsbCxsW2tdLCExLHZvaWQgMCxBZSk7ZWxzZSBsLm9uQ2xpY2smJlMoU2UsIm9uQ2xpY2siLG51bGwsbC5vbkNsaWNrLCExLHZvaWQgMCxBZSk7dmFyIEQ7aWYoKEQ9bCYmbC5vblZub2RlQmVmb3JlTW91bnQpJiZ5cihELEFlLEVlKSxBJiZqcihFZSxudWxsLEFlLCJiZWZvcmVNb3VudCIpLCgoRD1sJiZsLm9uVm5vZGVNb3VudGVkKXx8QSkmJmlpKCgpPT57RCYmeXIoRCxBZSxFZSksQSYmanIoRWUsbnVsbCxBZSwibW91bnRlZCIpfSxsdCksXyYxNiYmIShsJiYobC5pbm5lckhUTUx8fGwudGV4dENvbnRlbnQpKSlmb3IodmFyIEg9WWUoU2UuZmlyc3RDaGlsZCxFZSxTZSxBZSxsdCxWZSxUdCk7SDspe3NpPSEwO3ZhciBuZT1IO0g9SC5uZXh0U2libGluZyxXKG5lKX1lbHNlIF8mOCYmU2UudGV4dENvbnRlbnQhPT1FZS5jaGlsZHJlbiYmKHNpPSEwLFNlLnRleHRDb250ZW50PUVlLmNoaWxkcmVuKX1yZXR1cm4gU2UubmV4dFNpYmxpbmd9LFllPShTZSxFZSxBZSxsdCxWZSxUdCxpKT0+e2k9aXx8ISFFZS5keW5hbWljQ2hpbGRyZW47Zm9yKHZhciBsPUVlLmNoaWxkcmVuLGQ9bC5sZW5ndGgsXz0wO188ZDtfKyspe3ZhciBBPWk/bFtfXTpsW19dPVVuKGxbX10pO2lmKFNlKVNlPWl0KFNlLEEsbHQsVmUsVHQsaSk7ZWxzZXtpZihBLnR5cGU9PT10ZSYmIUEuY2hpbGRyZW4pY29udGludWU7c2k9ITAsbShudWxsLEEsQWUsbnVsbCxsdCxWZSxDaShBZSksVHQpfX1yZXR1cm4gU2V9LEplPShTZSxFZSxBZSxsdCxWZSxUdCk9Pnt2YXJ7c2xvdFNjb3BlSWRzOml9PUVlO2kmJihWZT1WZT9WZS5jb25jYXQoaSk6aSk7dmFyIGw9RihTZSksZD1ZZShPKFNlKSxFZSxsLEFlLGx0LFZlLFR0KTtyZXR1cm4gZCYmR2koZCkmJmQuZGF0YT09PSJdIj9PKEVlLmFuY2hvcj1kKTooc2k9ITAsRyhFZS5hbmNob3I9bGUoIl0iKSxsLGQpLGQpfSxtdD0oU2UsRWUsQWUsbHQsVmUsVHQpPT57aWYoc2k9ITAsRWUuZWw9bnVsbCxUdClmb3IodmFyIGk9YXQoU2UpOzspe3ZhciBsPU8oU2UpO2lmKGwmJmwhPT1pKVcobCk7ZWxzZSBicmVha312YXIgZD1PKFNlKSxfPUYoU2UpO3JldHVybiBXKFNlKSxtKG51bGwsRWUsXyxkLEFlLGx0LENpKF8pLFZlKSxkfSxhdD1TZT0+e2Zvcih2YXIgRWU9MDtTZTspaWYoU2U9TyhTZSksU2UmJkdpKFNlKSYmKFNlLmRhdGE9PT0iWyImJkVlKyssU2UuZGF0YT09PSJdIikpe2lmKEVlPT09MClyZXR1cm4gTyhTZSk7RWUtLX1yZXR1cm4gU2V9O3JldHVybltXZSxpdF19dmFyIHVyPWlpO2Z1bmN0aW9uIGxyKGEpe3JldHVybiBIYShhKX1mdW5jdGlvbiAkYShhKXtyZXR1cm4gSGEoYSxsaSl9ZnVuY3Rpb24gSGEoYSx1KXt2YXIgbT15LmdldEdsb2JhbFRoaXMoKTttLl9fVlVFX189ITA7dmFye2luc2VydDpTLHJlbW92ZTpJLHBhdGNoUHJvcDpPLGZvcmNlUGF0Y2hQcm9wOkYsY3JlYXRlRWxlbWVudDpXLGNyZWF0ZVRleHQ6RyxjcmVhdGVDb21tZW50OmxlLHNldFRleHQ6V2Usc2V0RWxlbWVudFRleHQ6aXQscGFyZW50Tm9kZTpnZSxuZXh0U2libGluZzpZZSxzZXRTY29wZUlkOkplPXkuTk9PUCxpbnNlcnRTdGF0aWNDb250ZW50Om10fT1hLGF0PWZ1bmN0aW9uKE0saixzZSl7dmFyIHJlPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsLG9lPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLFVlPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTpudWxsLHJ0PWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdIT09dm9pZCAwP2FyZ3VtZW50c1s2XTohMSxxZT1hcmd1bWVudHMubGVuZ3RoPjcmJmFyZ3VtZW50c1s3XSE9PXZvaWQgMD9hcmd1bWVudHNbN106bnVsbCxaZT1hcmd1bWVudHMubGVuZ3RoPjgmJmFyZ3VtZW50c1s4XSE9PXZvaWQgMD9hcmd1bWVudHNbOF06ISFqLmR5bmFtaWNDaGlsZHJlbjtpZihNIT09ail7TSYmIUd0KE0saikmJihyZT1PZShNKSxRZShNLG9lLFVlLCEwKSxNPW51bGwpLGoucGF0Y2hGbGFnPT09LTImJihaZT0hMSxqLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXJ7dHlwZTokZSxyZWY6JHQsc2hhcGVGbGFnOnB0fT1qO3N3aXRjaCgkZSl7Y2FzZSB0ZTpTZShNLGosc2UscmUpO2JyZWFrO2Nhc2UgY2U6RWUoTSxqLHNlLHJlKTticmVhaztjYXNlIHBlOk09PW51bGwmJkFlKGosc2UscmUscnQpO2JyZWFrO2Nhc2UgcTprKE0saixzZSxyZSxvZSxVZSxydCxxZSxaZSk7YnJlYWs7ZGVmYXVsdDpwdCYxP1R0KE0saixzZSxyZSxvZSxVZSxydCxxZSxaZSk6cHQmNj9EKE0saixzZSxyZSxvZSxVZSxydCxxZSxaZSk6KHB0JjY0fHxwdCYxMjgpJiYkZS5wcm9jZXNzKE0saixzZSxyZSxvZSxVZSxydCxxZSxaZSxDdCl9JHQhPW51bGwmJm9lJiZpbygkdCxNJiZNLnJlZixVZSxqfHxNLCFqKX19LFNlPShNLGosc2UscmUpPT57aWYoTT09bnVsbClTKGouZWw9RyhqLmNoaWxkcmVuKSxzZSxyZSk7ZWxzZXt2YXIgb2U9ai5lbD1NLmVsO2ouY2hpbGRyZW4hPT1NLmNoaWxkcmVuJiZXZShvZSxqLmNoaWxkcmVuKX19LEVlPShNLGosc2UscmUpPT57TT09bnVsbD9TKGouZWw9bGUoai5jaGlsZHJlbnx8IiIpLHNlLHJlKTpqLmVsPU0uZWx9LEFlPShNLGosc2UscmUpPT57W00uZWwsTS5hbmNob3JdPW10KE0uY2hpbGRyZW4saixzZSxyZSxNLmVsLE0uYW5jaG9yKX0sbHQ9KE0saixzZSk9Pntmb3IodmFye2VsOnJlLGFuY2hvcjpvZX09TSxVZTtyZSYmcmUhPT1vZTspVWU9WWUocmUpLFMocmUsaixzZSkscmU9VWU7UyhvZSxqLHNlKX0sVmU9TT0+e2Zvcih2YXJ7ZWw6aixhbmNob3I6c2V9PU0scmU7aiYmaiE9PXNlOylyZT1ZZShqKSxJKGopLGo9cmU7SShzZSl9LFR0PShNLGosc2UscmUsb2UsVWUscnQscWUsWmUpPT57cnQ9cnR8fGoudHlwZT09PSJzdmciLE09PW51bGw/aShqLHNlLHJlLG9lLFVlLHJ0LHFlLFplKTpfKE0saixvZSxVZSxydCxxZSxaZSl9LGk9KE0saixzZSxyZSxvZSxVZSxydCxxZSk9Pnt2YXIgWmUsJGUse3R5cGU6JHQscHJvcHM6cHQsc2hhcGVGbGFnOnh0LHRyYW5zaXRpb246QnQsZGlyczpNbn09TTtpZihaZT1NLmVsPVcoTS50eXBlLFVlLHB0JiZwdC5pcyxwdCkseHQmOD9pdChaZSxNLmNoaWxkcmVuKTp4dCYxNiYmZChNLmNoaWxkcmVuLFplLG51bGwscmUsb2UsVWUmJiR0IT09ImZvcmVpZ25PYmplY3QiLHJ0LHFlKSxNbiYmanIoTSxudWxsLHJlLCJjcmVhdGVkIiksbChaZSxNLE0uc2NvcGVJZCxydCxyZSkscHQpe2Zvcih2YXIgUm4gaW4gcHQpUm4hPT0idmFsdWUiJiYheS5pc1Jlc2VydmVkUHJvcChSbikmJk8oWmUsUm4sbnVsbCxwdFtSbl0sVWUsTS5jaGlsZHJlbixyZSxvZSxMZSxNLmhvc3RJbnN0YW5jZSk7InZhbHVlImluIHB0JiZPKFplLCJ2YWx1ZSIsbnVsbCxwdC52YWx1ZSwhMSxbXSxyZSxudWxsLHZvaWQgMCxNLmhvc3RJbnN0YW5jZSksKCRlPXB0Lm9uVm5vZGVCZWZvcmVNb3VudCkmJnlyKCRlLHJlLE0pfU1uJiZqcihNLG51bGwscmUsImJlZm9yZU1vdW50Iik7dmFyIHZuPSghb2V8fG9lJiYhb2UucGVuZGluZ0JyYW5jaCkmJkJ0JiYhQnQucGVyc2lzdGVkO3ZuJiZCdC5iZWZvcmVFbnRlcihaZSksUyhaZSxqLHNlKSwoKCRlPXB0JiZwdC5vblZub2RlTW91bnRlZCl8fHZufHxNbikmJnVyKCgpPT57JGUmJnlyKCRlLHJlLE0pLHZuJiZCdC5lbnRlcihaZSksTW4mJmpyKE0sbnVsbCxyZSwibW91bnRlZCIpfSxvZSl9LGw9KE0saixzZSxyZSxvZSk9PntpZihzZSYmSmUoTSxzZSkscmUpZm9yKHZhciBVZT0wO1VlPHJlLmxlbmd0aDtVZSsrKUplKE0scmVbVWVdKTtpZihvZSl7dmFyIHJ0PW9lLnN1YlRyZWU7aWYoaj09PXJ0KXt2YXIgcWU9b2Uudm5vZGU7bChNLHFlLHFlLnNjb3BlSWQscWUuc2xvdFNjb3BlSWRzLG9lLnBhcmVudCl9fX0sZD1mdW5jdGlvbihNLGosc2UscmUsb2UsVWUscnQscWUpe2Zvcih2YXIgWmU9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOjAsJGU9WmU7JGU8TS5sZW5ndGg7JGUrKyl7dmFyICR0PU1bJGVdPXFlPyRuKE1bJGVdKTpVbihNWyRlXSk7YXQobnVsbCwkdCxqLHNlLHJlLG9lLFVlLHJ0LHFlKX19LF89KE0saixzZSxyZSxvZSxVZSxydCk9Pnt2YXIgcWU9ai5lbD1NLmVsLHtwYXRjaEZsYWc6WmUsZHluYW1pY0NoaWxkcmVuOiRlLGRpcnM6JHR9PWo7WmV8PU0ucGF0Y2hGbGFnJjE2O3ZhciBwdD1NLnByb3BzfHx5LkVNUFRZX09CSix4dD1qLnByb3BzfHx5LkVNUFRZX09CSixCdDtzZSYmWWkoc2UsITEpLChCdD14dC5vblZub2RlQmVmb3JlVXBkYXRlKSYmeXIoQnQsc2UsaixNKSwkdCYmanIoaixNLHNlLCJiZWZvcmVVcGRhdGUiKSxzZSYmWWkoc2UsITApO3ZhciBNbj1vZSYmai50eXBlIT09ImZvcmVpZ25PYmplY3QiO2lmKCRlP0EoTS5keW5hbWljQ2hpbGRyZW4sJGUscWUsc2UscmUsTW4sVWUpOnJ0fHx1ZShNLGoscWUsbnVsbCxzZSxyZSxNbixVZSwhMSksWmU+MCl7aWYoWmUmMTYpQyhxZSxqLHB0LHh0LHNlLHJlLG9lKTtlbHNlIGlmKFplJjImJnB0LmNsYXNzIT09eHQuY2xhc3MmJk8ocWUsImNsYXNzIixudWxsLHh0LmNsYXNzLG9lLFtdLHNlLG51bGwsdm9pZCAwLGouaG9zdEluc3RhbmNlKSxaZSY0JiZPKHFlLCJzdHlsZSIscHQuc3R5bGUseHQuc3R5bGUsb2UsW10sc2UsbnVsbCx2b2lkIDAsai5ob3N0SW5zdGFuY2UpLFplJjgpZm9yKHZhciBSbj1qLmR5bmFtaWNQcm9wcyx2bj0wO3ZuPFJuLmxlbmd0aDt2bisrKXt2YXIgYm49Um5bdm5dLGZyPXB0W2JuXSxuaT14dFtibl07KG5pIT09ZnJ8fGJuPT09InZhbHVlInx8RiYmRihxZSxibikpJiZPKHFlLGJuLGZyLG5pLG9lLE0uY2hpbGRyZW4sc2UscmUsTGUsai5ob3N0SW5zdGFuY2UpfVplJjEmJk0uY2hpbGRyZW4hPT1qLmNoaWxkcmVuJiZpdChxZSxqLmNoaWxkcmVuKX1lbHNlIXJ0JiYkZT09bnVsbCYmQyhxZSxqLHB0LHh0LHNlLHJlLG9lKTsoKEJ0PXh0Lm9uVm5vZGVVcGRhdGVkKXx8JHQpJiZ1cigoKT0+e0J0JiZ5cihCdCxzZSxqLE0pLCR0JiZqcihqLE0sc2UsInVwZGF0ZWQiKX0scmUpfSxBPShNLGosc2UscmUsb2UsVWUscnQpPT57Zm9yKHZhciBxZT0wO3FlPGoubGVuZ3RoO3FlKyspe3ZhciBaZT1NW3FlXSwkZT1qW3FlXSwkdD1aZS5lbCYmKFplLnR5cGU9PT1xfHwhR3QoWmUsJGUpfHxaZS5zaGFwZUZsYWcmKDZ8NjQpKT9nZShaZS5lbCk6c2U7YXQoWmUsJGUsJHQsbnVsbCxyZSxvZSxVZSxydCwhMCl9fSxDPShNLGosc2UscmUsb2UsVWUscnQpPT57aWYoc2UhPT1yZSl7aWYoc2UhPT15LkVNUFRZX09CSilmb3IodmFyIHFlIGluIHNlKSF5LmlzUmVzZXJ2ZWRQcm9wKHFlKSYmIShxZSBpbiByZSkmJk8oTSxxZSxzZVtxZV0sbnVsbCxydCxqLmNoaWxkcmVuLG9lLFVlLExlLGouaG9zdEluc3RhbmNlKTtmb3IodmFyIFplIGluIHJlKWlmKCF5LmlzUmVzZXJ2ZWRQcm9wKFplKSl7dmFyICRlPXJlW1plXSwkdD1zZVtaZV07KCRlIT09JHQmJlplIT09InZhbHVlInx8RiYmRihNLFplKSkmJk8oTSxaZSwkdCwkZSxydCxqLmNoaWxkcmVuLG9lLFVlLExlLGouaG9zdEluc3RhbmNlKX0idmFsdWUiaW4gcmUmJk8oTSwidmFsdWUiLHNlLnZhbHVlLHJlLnZhbHVlLCExLFtdLG9lLG51bGwsdm9pZCAwLGouaG9zdEluc3RhbmNlKX19LGs9KE0saixzZSxyZSxvZSxVZSxydCxxZSxaZSk9Pnt2YXIgJGU9ai5lbD1NP00uZWw6RygiIiksJHQ9ai5hbmNob3I9TT9NLmFuY2hvcjpHKCIiKSx7cGF0Y2hGbGFnOnB0LGR5bmFtaWNDaGlsZHJlbjp4dCxzbG90U2NvcGVJZHM6QnR9PWo7QnQmJihxZT1xZT9xZS5jb25jYXQoQnQpOkJ0KSxNPT1udWxsPyhTKCRlLHNlLHJlKSxTKCR0LHNlLHJlKSxkKGouY2hpbGRyZW4sc2UsJHQsb2UsVWUscnQscWUsWmUpKTpwdD4wJiZwdCY2NCYmeHQmJk0uZHluYW1pY0NoaWxkcmVuPyhBKE0uZHluYW1pY0NoaWxkcmVuLHh0LHNlLG9lLFVlLHJ0LHFlKSwoai5rZXkhPW51bGx8fG9lJiZqPT09b2Uuc3ViVHJlZSkmJm9vKE0saiwhMCkpOnVlKE0saixzZSwkdCxvZSxVZSxydCxxZSxaZSl9LEQ9KE0saixzZSxyZSxvZSxVZSxydCxxZSxaZSk9PntqLnNsb3RTY29wZUlkcz1xZSxNPT1udWxsP2ouc2hhcGVGbGFnJjUxMj9vZS5jdHguYWN0aXZhdGUoaixzZSxyZSxydCxaZSk6SChqLHNlLHJlLG9lLFVlLHJ0LFplKTpuZShNLGosWmUpfSxIPShNLGosc2UscmUsb2UsVWUscnQpPT57dmFyIHFlPU0uY29tcG9uZW50PWNzKE0scmUsb2UpO2lmKFByKE0pJiYocWUuY3R4LnJlbmRlcmVyPUN0KSx1cyhxZSkscWUuYXN5bmNEZXApe2lmKG9lJiZvZS5yZWdpc3RlckRlcChxZSx2ZSksIU0uZWwpe3ZhciBaZT1xZS5zdWJUcmVlPVV0KGNlKTtFZShudWxsLFplLGosc2UpfXJldHVybn12ZShxZSxNLGosc2Usb2UsVWUscnQpfSxuZT0oTSxqLHNlKT0+e3ZhciByZT1qLmNvbXBvbmVudD1NLmNvbXBvbmVudDtpZihBbyhNLGosc2UpKWlmKHJlLmFzeW5jRGVwJiYhcmUuYXN5bmNSZXNvbHZlZCl7QmUocmUsaixzZSk7cmV0dXJufWVsc2UgcmUubmV4dD1qLExyKHJlLnVwZGF0ZSkscmUudXBkYXRlKCk7ZWxzZSBqLmVsPU0uZWwscmUudm5vZGU9an0sdmU9KE0saixzZSxyZSxvZSxVZSxydCk9Pnt2YXIgcWU9KCk9PntpZihNLmlzTW91bnRlZCl7dmFye25leHQ6SnQsYnU6YW4sdTpsbyxwYXJlbnQ6WSx2bm9kZTplZX09TSxiZT1KdCxNZTtZaShNLCExKSxKdD8oSnQuZWw9ZWUuZWwsQmUoTSxKdCxydCkpOkp0PWVlLGFuJiZ5Lmludm9rZUFycmF5Rm5zKGFuKSwoTWU9SnQucHJvcHMmJkp0LnByb3BzLm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZ5cihNZSxZLEp0LGVlKSxZaShNLCEwKTt2YXIgRGU9WG8oTSksWGU9TS5zdWJUcmVlO00uc3ViVHJlZT1EZSxhdChYZSxEZSxnZShYZS5lbCksT2UoWGUpLE0sb2UsVWUpLEp0LmVsPURlLmVsLGJlPT09bnVsbCYmWGkoTSxEZS5lbCksbG8mJnVyKGxvLG9lKSwoTWU9SnQucHJvcHMmJkp0LnByb3BzLm9uVm5vZGVVcGRhdGVkKSYmdXIoKCk9PnlyKE1lLFksSnQsZWUpLG9lKX1lbHNle3ZhciAkdCx7ZWw6cHQscHJvcHM6eHR9PWose2JtOkJ0LG06TW4scGFyZW50OlJufT1NLHZuPVRyKGopO2lmKFlpKE0sITEpLEJ0JiZ5Lmludm9rZUFycmF5Rm5zKEJ0KSwhdm4mJigkdD14dCYmeHQub25Wbm9kZUJlZm9yZU1vdW50KSYmeXIoJHQsUm4saiksWWkoTSwhMCkscHQmJlJ0KXt2YXIgYm49KCk9PntNLnN1YlRyZWU9WG8oTSksUnQocHQsTS5zdWJUcmVlLE0sb2UsbnVsbCl9O3ZuP2oudHlwZS5fX2FzeW5jTG9hZGVyKCkudGhlbigoKT0+IU0uaXNVbm1vdW50ZWQmJmJuKCkpOmJuKCl9ZWxzZXt2YXIgZnI9TS5zdWJUcmVlPVhvKE0pO2F0KG51bGwsZnIsc2UscmUsTSxvZSxVZSksai5lbD1mci5lbH1pZihNbiYmdXIoTW4sb2UpLCF2biYmKCR0PXh0JiZ4dC5vblZub2RlTW91bnRlZCkpe3ZhciBuaT1qO3VyKCgpPT55cigkdCxSbixuaSksb2UpfShqLnNoYXBlRmxhZyYyNTZ8fFJuJiZUcihSbi52bm9kZSkmJlJuLnZub2RlLnNoYXBlRmxhZyYyNTYpJiZNLmEmJnVyKE0uYSxvZSksTS5pc01vdW50ZWQ9ITAsaj1zZT1yZT1udWxsfX0sWmU9TS5lZmZlY3Q9bmV3IFIuUmVhY3RpdmVFZmZlY3QocWUsKCk9PlNuKCRlKSxNLnNjb3BlKSwkZT1NLnVwZGF0ZT0oKT0+WmUucnVuKCk7JGUuaWQ9TS51aWQsWWkoTSwhMCksJGUoKX0sQmU9KE0saixzZSk9PntqLmNvbXBvbmVudD1NO3ZhciByZT1NLnZub2RlLnByb3BzO00udm5vZGU9aixNLm5leHQ9bnVsbCxpcyhNLGoucHJvcHMscmUsc2UpLG9zKE0sai5jaGlsZHJlbixzZSksUi5wYXVzZVRyYWNraW5nKCksdmkoKSxSLnJlc2V0VHJhY2tpbmcoKX0sdWU9ZnVuY3Rpb24oTSxqLHNlLHJlLG9lLFVlLHJ0LHFlKXt2YXIgWmU9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOiExLCRlPU0mJk0uY2hpbGRyZW4sJHQ9TT9NLnNoYXBlRmxhZzowLHB0PWouY2hpbGRyZW4se3BhdGNoRmxhZzp4dCxzaGFwZUZsYWc6QnR9PWo7aWYoeHQ+MCl7aWYoeHQmMTI4KXtHZSgkZSxwdCxzZSxyZSxvZSxVZSxydCxxZSxaZSk7cmV0dXJufWVsc2UgaWYoeHQmMjU2KXtrZSgkZSxwdCxzZSxyZSxvZSxVZSxydCxxZSxaZSk7cmV0dXJufX1CdCY4PygkdCYxNiYmTGUoJGUsb2UsVWUpLHB0IT09JGUmJml0KHNlLHB0KSk6JHQmMTY/QnQmMTY/R2UoJGUscHQsc2UscmUsb2UsVWUscnQscWUsWmUpOkxlKCRlLG9lLFVlLCEwKTooJHQmOCYmaXQoc2UsIiIpLEJ0JjE2JiZkKHB0LHNlLHJlLG9lLFVlLHJ0LHFlLFplKSl9LGtlPShNLGosc2UscmUsb2UsVWUscnQscWUsWmUpPT57TT1NfHx5LkVNUFRZX0FSUixqPWp8fHkuRU1QVFlfQVJSO3ZhciAkZT1NLmxlbmd0aCwkdD1qLmxlbmd0aCxwdD1NYXRoLm1pbigkZSwkdCkseHQ7Zm9yKHh0PTA7eHQ8cHQ7eHQrKyl7dmFyIEJ0PWpbeHRdPVplPyRuKGpbeHRdKTpVbihqW3h0XSk7YXQoTVt4dF0sQnQsc2UsbnVsbCxvZSxVZSxydCxxZSxaZSl9JGU+JHQ/TGUoTSxvZSxVZSwhMCwhMSxwdCk6ZChqLHNlLHJlLG9lLFVlLHJ0LHFlLFplLHB0KX0sR2U9KE0saixzZSxyZSxvZSxVZSxydCxxZSxaZSk9Pntmb3IodmFyICRlPTAsJHQ9ai5sZW5ndGgscHQ9TS5sZW5ndGgtMSx4dD0kdC0xOyRlPD1wdCYmJGU8PXh0Oyl7dmFyIEJ0PU1bJGVdLE1uPWpbJGVdPVplPyRuKGpbJGVdKTpVbihqWyRlXSk7aWYoR3QoQnQsTW4pKWF0KEJ0LE1uLHNlLG51bGwsb2UsVWUscnQscWUsWmUpO2Vsc2UgYnJlYWs7JGUrK31mb3IoOyRlPD1wdCYmJGU8PXh0Oyl7dmFyIFJuPU1bcHRdLHZuPWpbeHRdPVplPyRuKGpbeHRdKTpVbihqW3h0XSk7aWYoR3QoUm4sdm4pKWF0KFJuLHZuLHNlLG51bGwsb2UsVWUscnQscWUsWmUpO2Vsc2UgYnJlYWs7cHQtLSx4dC0tfWlmKCRlPnB0KXtpZigkZTw9eHQpZm9yKHZhciBibj14dCsxLGZyPWJuPCR0P2pbYm5dLmVsOnJlOyRlPD14dDspYXQobnVsbCxqWyRlXT1aZT8kbihqWyRlXSk6VW4oalskZV0pLHNlLGZyLG9lLFVlLHJ0LHFlLFplKSwkZSsrfWVsc2UgaWYoJGU+eHQpZm9yKDskZTw9cHQ7KVFlKE1bJGVdLG9lLFVlLCEwKSwkZSsrO2Vsc2V7dmFyIG5pPSRlLEp0PSRlLGFuPW5ldyBNYXA7Zm9yKCRlPUp0OyRlPD14dDskZSsrKXt2YXIgbG89alskZV09WmU/JG4oalskZV0pOlVuKGpbJGVdKTtsby5rZXkhPW51bGwmJmFuLnNldChsby5rZXksJGUpfXZhciBZLGVlPTAsYmU9eHQtSnQrMSxNZT0hMSxEZT0wLFhlPW5ldyBBcnJheShiZSk7Zm9yKCRlPTA7JGU8YmU7JGUrKylYZVskZV09MDtmb3IoJGU9bmk7JGU8PXB0OyRlKyspe3ZhciBfdD1NWyRlXTtpZihlZT49YmUpe1FlKF90LG9lLFVlLCEwKTtjb250aW51ZX12YXIgZXQ9dm9pZCAwO2lmKF90LmtleSE9bnVsbClldD1hbi5nZXQoX3Qua2V5KTtlbHNlIGZvcihZPUp0O1k8PXh0O1krKylpZihYZVtZLUp0XT09PTAmJkd0KF90LGpbWV0pKXtldD1ZO2JyZWFrfWV0PT09dm9pZCAwP1FlKF90LG9lLFVlLCEwKTooWGVbZXQtSnRdPSRlKzEsZXQ+PURlP0RlPWV0Ok1lPSEwLGF0KF90LGpbZXRdLHNlLG51bGwsb2UsVWUscnQscWUsWmUpLGVlKyspfXZhciB0dD1NZT9hbyhYZSk6eS5FTVBUWV9BUlI7Zm9yKFk9dHQubGVuZ3RoLTEsJGU9YmUtMTskZT49MDskZS0tKXt2YXIgSGU9SnQrJGUsenQ9altIZV0sTHQ9SGUrMTwkdD9qW0hlKzFdLmVsOnJlO1hlWyRlXT09PTA/YXQobnVsbCx6dCxzZSxMdCxvZSxVZSxydCxxZSxaZSk6TWUmJihZPDB8fCRlIT09dHRbWV0/dXQoenQsc2UsTHQsMik6WS0tKX19fSx1dD1mdW5jdGlvbihNLGosc2UscmUpe3ZhciBvZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCx7ZWw6VWUsdHlwZTpydCx0cmFuc2l0aW9uOnFlLGNoaWxkcmVuOlplLHNoYXBlRmxhZzokZX09TTtpZigkZSY2KXt1dChNLmNvbXBvbmVudC5zdWJUcmVlLGosc2UscmUpO3JldHVybn1pZigkZSYxMjgpe00uc3VzcGVuc2UubW92ZShqLHNlLHJlKTtyZXR1cm59aWYoJGUmNjQpe3J0Lm1vdmUoTSxqLHNlLEN0KTtyZXR1cm59aWYocnQ9PT1xKXtTKFVlLGosc2UpO2Zvcih2YXIgJHQ9MDskdDxaZS5sZW5ndGg7JHQrKyl1dChaZVskdF0saixzZSxyZSk7UyhNLmFuY2hvcixqLHNlKTtyZXR1cm59aWYocnQ9PT1wZSl7bHQoTSxqLHNlKTtyZXR1cm59dmFyIHB0PXJlIT09MiYmJGUmMSYmcWU7aWYocHQpaWYocmU9PT0wKXFlLmJlZm9yZUVudGVyKFVlKSxTKFVlLGosc2UpLHVyKCgpPT5xZS5lbnRlcihVZSksb2UpO2Vsc2V7dmFye2xlYXZlOnh0LGRlbGF5TGVhdmU6QnQsYWZ0ZXJMZWF2ZTpNbn09cWUsUm49KCk9PlMoVWUsaixzZSksdm49KCk9Pnt4dChVZSwoKT0+e1JuKCksTW4mJk1uKCl9KX07QnQ/QnQoVWUsUm4sdm4pOnZuKCl9ZWxzZSBTKFVlLGosc2UpfSxRZT1mdW5jdGlvbihNLGosc2Upe3ZhciByZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsb2U9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiExLHt0eXBlOlVlLHByb3BzOnJ0LHJlZjpxZSxjaGlsZHJlbjpaZSxkeW5hbWljQ2hpbGRyZW46JGUsc2hhcGVGbGFnOiR0LHBhdGNoRmxhZzpwdCxkaXJzOnh0fT1NO2lmKHFlIT1udWxsJiZpbyhxZSxudWxsLHNlLE0sITApLCR0JjI1Nil7ai5jdHguZGVhY3RpdmF0ZShNKTtyZXR1cm59dmFyIEJ0PSR0JjEmJnh0LE1uPSFUcihNKSxSbjtpZihNbiYmKFJuPXJ0JiZydC5vblZub2RlQmVmb3JlVW5tb3VudCkmJnlyKFJuLGosTSksJHQmNil5ZShNLmNvbXBvbmVudCxzZSxyZSk7ZWxzZXtpZigkdCYxMjgpe00uc3VzcGVuc2UudW5tb3VudChzZSxyZSk7cmV0dXJufUJ0JiZqcihNLG51bGwsaiwiYmVmb3JlVW5tb3VudCIpLCR0JjY0P00udHlwZS5yZW1vdmUoTSxqLHNlLG9lLEN0LHJlKTokZSYmKFVlIT09cXx8cHQ+MCYmcHQmNjQpP0xlKCRlLGosc2UsITEsITApOihVZT09PXEmJnB0JigxMjh8MjU2KXx8IW9lJiYkdCYxNikmJkxlKFplLGosc2UpLHJlJiZSZShNKX0oTW4mJihSbj1ydCYmcnQub25Wbm9kZVVubW91bnRlZCl8fEJ0KSYmdXIoKCk9PntSbiYmeXIoUm4saixNKSxCdCYmanIoTSxudWxsLGosInVubW91bnRlZCIpfSxzZSl9LFJlPU09Pnt2YXJ7dHlwZTpqLGVsOnNlLGFuY2hvcjpyZSx0cmFuc2l0aW9uOm9lfT1NO2lmKGo9PT1xKXttZShzZSxyZSk7cmV0dXJufWlmKGo9PT1wZSl7VmUoTSk7cmV0dXJufXZhciBVZT0oKT0+e0koc2UpLG9lJiYhb2UucGVyc2lzdGVkJiZvZS5hZnRlckxlYXZlJiZvZS5hZnRlckxlYXZlKCl9O2lmKE0uc2hhcGVGbGFnJjEmJm9lJiYhb2UucGVyc2lzdGVkKXt2YXJ7bGVhdmU6cnQsZGVsYXlMZWF2ZTpxZX09b2UsWmU9KCk9PnJ0KHNlLFVlKTtxZT9xZShNLmVsLFVlLFplKTpaZSgpfWVsc2UgVWUoKX0sbWU9KE0saik9Pntmb3IodmFyIHNlO00hPT1qOylzZT1ZZShNKSxJKE0pLE09c2U7SShqKX0seWU9KE0saixzZSk9Pnt2YXJ7YnVtOnJlLHNjb3BlOm9lLHVwZGF0ZTpVZSxzdWJUcmVlOnJ0LHVtOnFlfT1NO3JlJiZ5Lmludm9rZUFycmF5Rm5zKHJlKSxvZS5zdG9wKCksVWUmJihVZS5hY3RpdmU9ITEsUWUocnQsTSxqLHNlKSkscWUmJnVyKHFlLGopLHVyKCgpPT57TS5pc1VubW91bnRlZD0hMH0saiksaiYmai5wZW5kaW5nQnJhbmNoJiYhai5pc1VubW91bnRlZCYmTS5hc3luY0RlcCYmIU0uYXN5bmNSZXNvbHZlZCYmTS5zdXNwZW5zZUlkPT09ai5wZW5kaW5nSWQmJihqLmRlcHMtLSxqLmRlcHM9PT0wJiZqLnJlc29sdmUoKSl9LExlPWZ1bmN0aW9uKE0saixzZSl7Zm9yKHZhciByZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsb2U9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiExLFVlPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTowLHJ0PVVlO3J0PE0ubGVuZ3RoO3J0KyspUWUoTVtydF0saixzZSxyZSxvZSl9LE9lPU09Pk0uc2hhcGVGbGFnJjY/T2UoTS5jb21wb25lbnQuc3ViVHJlZSk6TS5zaGFwZUZsYWcmMTI4P00uc3VzcGVuc2UubmV4dCgpOlllKE0uYW5jaG9yfHxNLmVsKSxidD0oTSxqLHNlKT0+e009PW51bGw/ai5fdm5vZGUmJlFlKGouX3Zub2RlLG51bGwsbnVsbCwhMCk6YXQoai5fdm5vZGV8fG51bGwsTSxqLG51bGwsbnVsbCxudWxsLHNlKSx2aSgpLFBuKCksai5fdm5vZGU9TX0sQ3Q9e3A6YXQsdW06UWUsbTp1dCxyOlJlLG10OkgsbWM6ZCxwYzp1ZSxwYmM6QSxuOk9lLG86YX0sS2UsUnQ7cmV0dXJuIHUmJihbS2UsUnRdPXUoQ3QpKSx7cmVuZGVyOmJ0LGh5ZHJhdGU6S2UsY3JlYXRlQXBwOnNzKGJ0LEtlKX19ZnVuY3Rpb24gWWkoYSx1KXt2YXJ7ZWZmZWN0Om0sdXBkYXRlOlN9PWE7bS5hbGxvd1JlY3Vyc2U9Uy5hbGxvd1JlY3Vyc2U9dX1mdW5jdGlvbiBvbyhhLHUpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxTPWEuY2hpbGRyZW4sST11LmNoaWxkcmVuO2lmKHkuaXNBcnJheShTKSYmeS5pc0FycmF5KEkpKWZvcih2YXIgTz0wO088Uy5sZW5ndGg7TysrKXt2YXIgRj1TW09dLFc9SVtPXTtXLnNoYXBlRmxhZyYxJiYhVy5keW5hbWljQ2hpbGRyZW4mJigoVy5wYXRjaEZsYWc8PTB8fFcucGF0Y2hGbGFnPT09MzIpJiYoVz1JW09dPSRuKElbT10pLFcuZWw9Ri5lbCksbXx8b28oRixXKSksVy50eXBlPT09dGUmJihXLmVsPUYuZWwpfX1mdW5jdGlvbiBhbyhhKXt2YXIgdT1hLnNsaWNlKCksbT1bMF0sUyxJLE8sRixXLEc9YS5sZW5ndGg7Zm9yKFM9MDtTPEc7UysrKXt2YXIgbGU9YVtTXTtpZihsZSE9PTApe2lmKEk9bVttLmxlbmd0aC0xXSxhW0ldPGxlKXt1W1NdPUksbS5wdXNoKFMpO2NvbnRpbnVlfWZvcihPPTAsRj1tLmxlbmd0aC0xO088RjspVz1PK0Y+PjEsYVttW1ddXTxsZT9PPVcrMTpGPVc7bGU8YVttW09dXSYmKE8+MCYmKHVbU109bVtPLTFdKSxtW09dPVMpfX1mb3IoTz1tLmxlbmd0aCxGPW1bTy0xXTtPLS0gPjA7KW1bT109RixGPXVbRl07cmV0dXJuIG19dmFyIGxzPWE9PmEuX19pc1RlbGVwb3J0LHBhPWE9PmEmJihhLmRpc2FibGVkfHxhLmRpc2FibGVkPT09IiIpLExvPWE9PnR5cGVvZiBTVkdFbGVtZW50IT0idW5kZWZpbmVkIiYmYSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQsdmE9KGEsdSk9Pnt2YXIgbT1hJiZhLnRvO2lmKHkuaXNTdHJpbmcobSkpaWYodSl7dmFyIFM9dShtKTtyZXR1cm4gU31lbHNlIHJldHVybiBudWxsO2Vsc2UgcmV0dXJuIG19LHY9e19faXNUZWxlcG9ydDohMCxwcm9jZXNzKGEsdSxtLFMsSSxPLEYsVyxHLGxlKXt2YXJ7bWM6V2UscGM6aXQscGJjOmdlLG86e2luc2VydDpZZSxxdWVyeVNlbGVjdG9yOkplLGNyZWF0ZVRleHQ6bXQsY3JlYXRlQ29tbWVudDphdH19PWxlLFNlPXBhKHUucHJvcHMpLHtzaGFwZUZsYWc6RWUsY2hpbGRyZW46QWUsZHluYW1pY0NoaWxkcmVuOmx0fT11O2lmKGE9PW51bGwpe3ZhciBWZT11LmVsPW10KCIiKSxUdD11LmFuY2hvcj1tdCgiIik7WWUoVmUsbSxTKSxZZShUdCxtLFMpO3ZhciBpPXUudGFyZ2V0PXZhKHUucHJvcHMsSmUpLGw9dS50YXJnZXRBbmNob3I9bXQoIiIpO2kmJihZZShsLGkpLEY9Rnx8TG8oaSkpO3ZhciBkPSh2ZSxCZSk9PntFZSYxNiYmV2UoQWUsdmUsQmUsSSxPLEYsVyxHKX07U2U/ZChtLFR0KTppJiZkKGksbCl9ZWxzZXt1LmVsPWEuZWw7dmFyIF89dS5hbmNob3I9YS5hbmNob3IsQT11LnRhcmdldD1hLnRhcmdldCxDPXUudGFyZ2V0QW5jaG9yPWEudGFyZ2V0QW5jaG9yLGs9cGEoYS5wcm9wcyksRD1rP206QSxIPWs/XzpDO2lmKEY9Rnx8TG8oQSksbHQ/KGdlKGEuZHluYW1pY0NoaWxkcmVuLGx0LEQsSSxPLEYsVyksb28oYSx1LCEwKSk6R3x8aXQoYSx1LEQsSCxJLE8sRixXLCExKSxTZSlrfHx4KHUsbSxfLGxlLDEpO2Vsc2UgaWYoKHUucHJvcHMmJnUucHJvcHMudG8pIT09KGEucHJvcHMmJmEucHJvcHMudG8pKXt2YXIgbmU9dS50YXJnZXQ9dmEodS5wcm9wcyxKZSk7bmUmJngodSxuZSxudWxsLGxlLDApfWVsc2UgayYmeCh1LEEsQyxsZSwxKX1aKHUpfSxyZW1vdmUoYSx1LG0sUyxJLE8pe3Zhcnt1bTpGLG86e3JlbW92ZTpXfX09SSx7c2hhcGVGbGFnOkcsY2hpbGRyZW46bGUsYW5jaG9yOldlLHRhcmdldEFuY2hvcjppdCx0YXJnZXQ6Z2UscHJvcHM6WWV9PWE7aWYoZ2UmJlcoaXQpLChPfHwhcGEoWWUpKSYmKFcoV2UpLEcmMTYpKWZvcih2YXIgSmU9MDtKZTxsZS5sZW5ndGg7SmUrKyl7dmFyIG10PWxlW0plXTtGKG10LHUsbSwhMCwhIW10LmR5bmFtaWNDaGlsZHJlbil9fSxtb3ZlOngsaHlkcmF0ZTokfTtmdW5jdGlvbiB4KGEsdSxtLFMpe3ZhcntvOntpbnNlcnQ6SX0sbTpPfT1TLEY9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOjI7Rj09PTAmJkkoYS50YXJnZXRBbmNob3IsdSxtKTt2YXJ7ZWw6VyxhbmNob3I6RyxzaGFwZUZsYWc6bGUsY2hpbGRyZW46V2UscHJvcHM6aXR9PWEsZ2U9Rj09PTI7aWYoZ2UmJkkoVyx1LG0pLCghZ2V8fHBhKGl0KSkmJmxlJjE2KWZvcih2YXIgWWU9MDtZZTxXZS5sZW5ndGg7WWUrKylPKFdlW1llXSx1LG0sMik7Z2UmJkkoRyx1LG0pfWZ1bmN0aW9uICQoYSx1LG0sUyxJLE8sRixXKXt2YXJ7bzp7bmV4dFNpYmxpbmc6RyxwYXJlbnROb2RlOmxlLHF1ZXJ5U2VsZWN0b3I6V2V9fT1GLGl0PXUudGFyZ2V0PXZhKHUucHJvcHMsV2UpO2lmKGl0KXt2YXIgZ2U9aXQuX2xwYXx8aXQuZmlyc3RDaGlsZDtpZih1LnNoYXBlRmxhZyYxNilpZihwYSh1LnByb3BzKSl1LmFuY2hvcj1XKEcoYSksdSxsZShhKSxtLFMsSSxPKSx1LnRhcmdldEFuY2hvcj1nZTtlbHNle3UuYW5jaG9yPUcoYSk7Zm9yKHZhciBZZT1nZTtZZTspaWYoWWU9RyhZZSksWWUmJlllLm5vZGVUeXBlPT09OCYmWWUuZGF0YT09PSJ0ZWxlcG9ydCBhbmNob3IiKXt1LnRhcmdldEFuY2hvcj1ZZSxpdC5fbHBhPXUudGFyZ2V0QW5jaG9yJiZHKHUudGFyZ2V0QW5jaG9yKTticmVha31XKGdlLHUsaXQsbSxTLEksTyl9Wih1KX1yZXR1cm4gdS5hbmNob3ImJkcodS5hbmNob3IpfXZhciBVPXY7ZnVuY3Rpb24gWihhKXt2YXIgdT1hLmN0eDtpZih1JiZ1LnV0KXtmb3IodmFyIG09YS5jaGlsZHJlblswXS5lbDttIT09YS50YXJnZXRBbmNob3I7KW0ubm9kZVR5cGU9PT0xJiZtLnNldEF0dHJpYnV0ZSgiZGF0YS12LW93bmVyIix1LnVpZCksbT1tLm5leHRTaWJsaW5nO3UudXQoKX19dmFyIHE9U3ltYm9sKHZvaWQgMCksdGU9U3ltYm9sKHZvaWQgMCksY2U9U3ltYm9sKHZvaWQgMCkscGU9U3ltYm9sKHZvaWQgMCksSWU9W10sZmU9bnVsbDtmdW5jdGlvbiBDZSgpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMTtJZS5wdXNoKGZlPWE/bnVsbDpbXSl9ZnVuY3Rpb24gY3QoKXtJZS5wb3AoKSxmZT1JZVtJZS5sZW5ndGgtMV18fG51bGx9dmFyIGd0PTE7ZnVuY3Rpb24gSHQoYSl7Z3QrPWF9ZnVuY3Rpb24geXQoYSl7cmV0dXJuIGEuZHluYW1pY0NoaWxkcmVuPWd0PjA/ZmV8fHkuRU1QVFlfQVJSOm51bGwsY3QoKSxndD4wJiZmZSYmZmUucHVzaChhKSxhfWZ1bmN0aW9uIGplKGEsdSxtLFMsSSxPKXtyZXR1cm4geXQoanQoYSx1LG0sUyxJLE8sITApKX1mdW5jdGlvbiBNdChhLHUsbSxTLEkpe3JldHVybiB5dChVdChhLHUsbSxTLEksITApKX1mdW5jdGlvbiBkbihhKXtyZXR1cm4gYT9hLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gR3QoYSx1KXtyZXR1cm4gYS50eXBlPT09dS50eXBlJiZhLmtleT09PXUua2V5fWZ1bmN0aW9uIGR0KGEpe312YXIgZW49Il9fdkludGVybmFsIixCbj1hPT57dmFye2tleTp1fT1hO3JldHVybiB1IT1udWxsP3U6bnVsbH0sWXQ9YT0+e3ZhcntyZWY6dSxyZWZfa2V5Om0scmVmX2ZvcjpTfT1hO3JldHVybiB1IT1udWxsP3kuaXNTdHJpbmcodSl8fFIuaXNSZWYodSl8fHkuaXNGdW5jdGlvbih1KT97aTpBbixyOnUsazptLGY6ISFTfTp1Om51bGx9O2Z1bmN0aW9uIGp0KGEpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsLG09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwsUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106MCxJPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLE89YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOmE9PT1xPzA6MSxGPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdIT09dm9pZCAwP2FyZ3VtZW50c1s2XTohMSxXPWFyZ3VtZW50cy5sZW5ndGg+NyYmYXJndW1lbnRzWzddIT09dm9pZCAwP2FyZ3VtZW50c1s3XTohMSxHPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCx0eXBlOmEscHJvcHM6dSxrZXk6dSYmQm4odSkscmVmOnUmJll0KHUpLHNjb3BlSWQ6Z24sc2xvdFNjb3BlSWRzOm51bGwsY2hpbGRyZW46bSxjb21wb25lbnQ6bnVsbCxzdXNwZW5zZTpudWxsLHNzQ29udGVudDpudWxsLHNzRmFsbGJhY2s6bnVsbCxkaXJzOm51bGwsdHJhbnNpdGlvbjpudWxsLGVsOm51bGwsYW5jaG9yOm51bGwsdGFyZ2V0Om51bGwsdGFyZ2V0QW5jaG9yOm51bGwsc3RhdGljQ291bnQ6MCxzaGFwZUZsYWc6TyxwYXRjaEZsYWc6UyxkeW5hbWljUHJvcHM6SSxkeW5hbWljQ2hpbGRyZW46bnVsbCxhcHBDb250ZXh0Om51bGwsaG9zdEluc3RhbmNlOkFuLGN0eDpBbn07cmV0dXJuIFc/KElyKEcsbSksTyYxMjgmJmEubm9ybWFsaXplKEcpKTptJiYoRy5zaGFwZUZsYWd8PXkuaXNTdHJpbmcobSk/ODoxNiksZ3Q+MCYmIUYmJmZlJiYoRy5wYXRjaEZsYWc+MHx8TyY2KSYmRy5wYXRjaEZsYWchPT0zMiYmZmUucHVzaChHKSxHfXZhciBVdD1xdDtmdW5jdGlvbiBxdChhKXt2YXIgdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbCxtPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsLFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOjAsST1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMTtpZigoIWF8fGE9PT1ybykmJihhPWNlKSxkbihhKSl7dmFyIEY9Y2koYSx1LCEwKTtyZXR1cm4gbSYmSXIoRixtKSxndD4wJiYhTyYmZmUmJihGLnNoYXBlRmxhZyY2P2ZlW2ZlLmluZGV4T2YoYSldPUY6ZmUucHVzaChGKSksRi5wYXRjaEZsYWd8PS0yLEZ9aWYoX28oYSkmJihhPWEuX192Y2NPcHRzKSx1KXt1PXRhKHUpO3ZhcntjbGFzczpXLHN0eWxlOkd9PXU7VyYmIXkuaXNTdHJpbmcoVykmJih1LmNsYXNzPXkubm9ybWFsaXplQ2xhc3MoVykpLHkuaXNPYmplY3QoRykmJihSLmlzUHJveHkoRykmJiF5LmlzQXJyYXkoRykmJihHPXkuZXh0ZW5kKHt9LEcpKSx1LnN0eWxlPXkubm9ybWFsaXplU3R5bGUoRykpfXZhciBsZT15LmlzU3RyaW5nKGEpPzE6bWkoYSk/MTI4OmxzKGEpPzY0OnkuaXNPYmplY3QoYSk/NDp5LmlzRnVuY3Rpb24oYSk/MjowO3JldHVybiBqdChhLHUsbSxTLEksbGUsTywhMCl9ZnVuY3Rpb24gdGEoYSl7cmV0dXJuIGE/Ui5pc1Byb3h5KGEpfHxlbiBpbiBhP3kuZXh0ZW5kKHt9LGEpOmE6bnVsbH1mdW5jdGlvbiBjaShhLHUpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSx7cHJvcHM6UyxyZWY6SSxwYXRjaEZsYWc6TyxjaGlsZHJlbjpGfT1hLFc9dT9IbihTfHx7fSx1KTpTLEc9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6YS50eXBlLHByb3BzOlcsa2V5OlcmJkJuKFcpLHJlZjp1JiZ1LnJlZj9tJiZJP3kuaXNBcnJheShJKT9JLmNvbmNhdChZdCh1KSk6W0ksWXQodSldOll0KHUpOkksc2NvcGVJZDphLnNjb3BlSWQsc2xvdFNjb3BlSWRzOmEuc2xvdFNjb3BlSWRzLGNoaWxkcmVuOkYsdGFyZ2V0OmEudGFyZ2V0LHRhcmdldEFuY2hvcjphLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDphLnN0YXRpY0NvdW50LHNoYXBlRmxhZzphLnNoYXBlRmxhZyxwYXRjaEZsYWc6dSYmYS50eXBlIT09cT9PPT09LTE/MTY6T3wxNjpPLGR5bmFtaWNQcm9wczphLmR5bmFtaWNQcm9wcyxkeW5hbWljQ2hpbGRyZW46YS5keW5hbWljQ2hpbGRyZW4sYXBwQ29udGV4dDphLmFwcENvbnRleHQsaG9zdEluc3RhbmNlOmEuaG9zdEluc3RhbmNlLGRpcnM6YS5kaXJzLHRyYW5zaXRpb246YS50cmFuc2l0aW9uLGNvbXBvbmVudDphLmNvbXBvbmVudCxzdXNwZW5zZTphLnN1c3BlbnNlLHNzQ29udGVudDphLnNzQ29udGVudCYmY2koYS5zc0NvbnRlbnQpLHNzRmFsbGJhY2s6YS5zc0ZhbGxiYWNrJiZjaShhLnNzRmFsbGJhY2spLGVsOmEuZWwsYW5jaG9yOmEuYW5jaG9yLGN0eDphLmN0eCxjZTphLmNlfTtyZXR1cm4gR31mdW5jdGlvbiBlaSgpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXToiICIsdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MDtyZXR1cm4gVXQodGUsbnVsbCxhLHUpfWZ1bmN0aW9uIHFpKGEsdSl7dmFyIG09VXQocGUsbnVsbCxhKTtyZXR1cm4gbS5zdGF0aWNDb3VudD11LG19ZnVuY3Rpb24gamEoKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiIsdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7cmV0dXJuIHU/KENlKCksTXQoY2UsbnVsbCxhKSk6VXQoY2UsbnVsbCxhKX1mdW5jdGlvbiBVbihhKXtyZXR1cm4gYT09bnVsbHx8dHlwZW9mIGE9PSJib29sZWFuIj9VdChjZSk6eS5pc0FycmF5KGEpP1V0KHEsbnVsbCxhLnNsaWNlKCkpOnR5cGVvZiBhPT0ib2JqZWN0Ij8kbihhKTpVdCh0ZSxudWxsLFN0cmluZyhhKSl9ZnVuY3Rpb24gJG4oYSl7cmV0dXJuIGEuZWw9PT1udWxsJiZhLnBhdGNoRmxhZyE9PS0xfHxhLm1lbW8/YTpjaShhKX1mdW5jdGlvbiBJcihhLHUpe3ZhciBtPTAse3NoYXBlRmxhZzpTfT1hO2lmKHU9PW51bGwpdT1udWxsO2Vsc2UgaWYoeS5pc0FycmF5KHUpKW09MTY7ZWxzZSBpZih0eXBlb2YgdT09Im9iamVjdCIpaWYoUyYoMXw2NCkpe3ZhciBJPXUuZGVmYXVsdDtJJiYoSS5fYyYmKEkuX2Q9ITEpLElyKGEsSSgpKSxJLl9jJiYoSS5fZD0hMCkpO3JldHVybn1lbHNle209MzI7dmFyIE89dS5fOyFPJiYhKGVuIGluIHUpP3UuX2N0eD1BbjpPPT09MyYmQW4mJihBbi5zbG90cy5fPT09MT91Ll89MToodS5fPTIsYS5wYXRjaEZsYWd8PTEwMjQpKX1lbHNlIHkuaXNGdW5jdGlvbih1KT8odT17ZGVmYXVsdDp1LF9jdHg6QW59LG09MzIpOih1PVN0cmluZyh1KSxTJjY0PyhtPTE2LHU9W2VpKHUpXSk6bT04KTthLmNoaWxkcmVuPXUsYS5zaGFwZUZsYWd8PW19ZnVuY3Rpb24gSG4oKXtmb3IodmFyIGE9e30sdT0wO3U8YXJndW1lbnRzLmxlbmd0aDt1Kyspe3ZhciBtPXU8MHx8YXJndW1lbnRzLmxlbmd0aDw9dT92b2lkIDA6YXJndW1lbnRzW3VdO2Zvcih2YXIgUyBpbiBtKWlmKFM9PT0iY2xhc3MiKWEuY2xhc3MhPT1tLmNsYXNzJiYoYS5jbGFzcz15Lm5vcm1hbGl6ZUNsYXNzKFthLmNsYXNzLG0uY2xhc3NdKSk7ZWxzZSBpZihTPT09InN0eWxlIilhLnN0eWxlPXkubm9ybWFsaXplU3R5bGUoW2Euc3R5bGUsbS5zdHlsZV0pO2Vsc2UgaWYoeS5pc09uKFMpKXt2YXIgST1hW1NdLE89bVtTXTtPJiZJIT09TyYmISh5LmlzQXJyYXkoSSkmJkkuaW5jbHVkZXMoTykpJiYoYVtTXT1JP1tdLmNvbmNhdChJLE8pOk8pfWVsc2UgUyE9PSIiJiYoYVtTXT1tW1NdKX1yZXR1cm4gYX1mdW5jdGlvbiB5cihhLHUsbSl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGw7UChhLHUsNyxbbSxTXSl9dmFyIHpyPWFzKCksbmE9MDtmdW5jdGlvbiBjcyhhLHUsbSl7dmFyIFM9YS50eXBlLEk9KHU/dS5hcHBDb250ZXh0OmEuYXBwQ29udGV4dCl8fHpyLE89e3VpZDpuYSsrLHZub2RlOmEsdHlwZTpTLHBhcmVudDp1LGFwcENvbnRleHQ6SSxyb290Om51bGwsbmV4dDpudWxsLHN1YlRyZWU6bnVsbCxlZmZlY3Q6bnVsbCx1cGRhdGU6bnVsbCxzY29wZTpuZXcgUi5FZmZlY3RTY29wZSghMCkscmVuZGVyOm51bGwscHJveHk6bnVsbCxleHBvc2VkOm51bGwsZXhwb3NlUHJveHk6bnVsbCx3aXRoUHJveHk6bnVsbCxwcm92aWRlczp1P3UucHJvdmlkZXM6T2JqZWN0LmNyZWF0ZShJLnByb3ZpZGVzKSxhY2Nlc3NDYWNoZTpudWxsLHJlbmRlckNhY2hlOltdLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVzOm51bGwscHJvcHNPcHRpb25zOlRhKFMsSSksZW1pdHNPcHRpb25zOm9yKFMsSSksZW1pdDpudWxsLGVtaXR0ZWQ6bnVsbCxwcm9wc0RlZmF1bHRzOnkuRU1QVFlfT0JKLGluaGVyaXRBdHRyczpTLmluaGVyaXRBdHRycyxjdHg6eS5FTVBUWV9PQkosZGF0YTp5LkVNUFRZX09CSixwcm9wczp5LkVNUFRZX09CSixhdHRyczp5LkVNUFRZX09CSixzbG90czp5LkVNUFRZX09CSixyZWZzOnkuRU1QVFlfT0JKLHNldHVwU3RhdGU6eS5FTVBUWV9PQkosc2V0dXBDb250ZXh0Om51bGwsc3VzcGVuc2U6bSxzdXNwZW5zZUlkOm0/bS5wZW5kaW5nSWQ6MCxhc3luY0RlcDpudWxsLGFzeW5jUmVzb2x2ZWQ6ITEsaXNNb3VudGVkOiExLGlzVW5tb3VudGVkOiExLGlzRGVhY3RpdmF0ZWQ6ITEsYmM6bnVsbCxjOm51bGwsYm06bnVsbCxtOm51bGwsYnU6bnVsbCx1Om51bGwsdW06bnVsbCxidW06bnVsbCxkYTpudWxsLGE6bnVsbCxydGc6bnVsbCxydGM6bnVsbCxlYzpudWxsLHNwOm51bGx9O3JldHVybiBPLmN0eD17XzpPfSxPLnJvb3Q9dT91LnJvb3Q6TyxPLmVtaXQ9c24uYmluZChudWxsLE8pLGEuY2UmJmEuY2UoTyksT312YXIgb249bnVsbCxfbj0oKT0+b258fEFuLGpuPWE9Pntvbj1hLGEuc2NvcGUub24oKX0scW49KCk9PntvbiYmb24uc2NvcGUub2ZmKCksb249bnVsbH07ZnVuY3Rpb24gQWkoYSl7cmV0dXJuIGEudm5vZGUuc2hhcGVGbGFnJjR9aC5pc0luU1NSQ29tcG9uZW50U2V0dXA9ITE7ZnVuY3Rpb24gdXMoYSl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO2guaXNJblNTUkNvbXBvbmVudFNldHVwPXU7dmFye3Byb3BzOm0sY2hpbGRyZW46U309YS52bm9kZSxJPUFpKGEpO3dpKGEsbSxJLHUpLFdpKGEsUyk7dmFyIE89ST96YShhLHUpOnZvaWQgMDtyZXR1cm4gaC5pc0luU1NSQ29tcG9uZW50U2V0dXA9ITEsT31mdW5jdGlvbiB6YShhLHUpe3ZhciBtPWEudHlwZTthLmFjY2Vzc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksYS5wcm94eT1SLm1hcmtSYXcobmV3IFByb3h5KGEuY3R4LFgpKTt2YXJ7c2V0dXA6U309bTtpZihTKXt2YXIgST1hLnNldHVwQ29udGV4dD1TLmxlbmd0aD4xP1lhKGEpOm51bGw7am4oYSksUi5wYXVzZVRyYWNraW5nKCk7dmFyIE89T3QoUyxhLDAsW2EucHJvcHMsSV0pO2lmKFIucmVzZXRUcmFja2luZygpLHFuKCkseS5pc1Byb21pc2UoTykpe2lmKE8udGhlbihxbixxbiksdSlyZXR1cm4gTy50aGVuKEY9PntJYShhLEYsdSl9KS5jYXRjaChGPT57d3QoRixhLDApfSk7YS5hc3luY0RlcD1PfWVsc2UgSWEoYSxPLHUpfWVsc2UgV3IoYSx1KX1mdW5jdGlvbiBJYShhLHUsbSl7eS5pc0Z1bmN0aW9uKHUpP2EucmVuZGVyPXU6eS5pc09iamVjdCh1KSYmKGEuc2V0dXBTdGF0ZT1SLnByb3h5UmVmcyh1KSksV3IoYSxtKX12YXIgcmEsc287ZnVuY3Rpb24gV2EoYSl7cmE9YSxzbz11PT57dS5yZW5kZXIuX3JjJiYodS53aXRoUHJveHk9bmV3IFByb3h5KHUuY3R4LEspKX19dmFyIGZzPSgpPT4hcmE7ZnVuY3Rpb24gV3IoYSx1LG0pe3ZhciBTPWEudHlwZTtpZighYS5yZW5kZXIpe2lmKCF1JiZyYSYmIVMucmVuZGVyKXt2YXIgST1TLnRlbXBsYXRlfHxEbihhKS50ZW1wbGF0ZTtpZihJKXt2YXJ7aXNDdXN0b21FbGVtZW50Ok8sY29tcGlsZXJPcHRpb25zOkZ9PWEuYXBwQ29udGV4dC5jb25maWcse2RlbGltaXRlcnM6Vyxjb21waWxlck9wdGlvbnM6R309UyxsZT15LmV4dGVuZCh5LmV4dGVuZCh7aXNDdXN0b21FbGVtZW50Ok8sZGVsaW1pdGVyczpXfSxGKSxHKTtTLnJlbmRlcj1yYShJLGxlKX19YS5yZW5kZXI9Uy5yZW5kZXJ8fHkuTk9PUCxzbyYmc28oYSl9am4oYSksUi5wYXVzZVRyYWNraW5nKCksTmUoYSksUi5yZXNldFRyYWNraW5nKCkscW4oKX1mdW5jdGlvbiBHYShhKXtyZXR1cm4gbmV3IFByb3h5KGEuYXR0cnMse2dldCh1LG0pe3JldHVybiBSLnRyYWNrKGEsImdldCIsIiRhdHRycyIpLHVbbV19fSl9ZnVuY3Rpb24gWWEoYSl7dmFyIHU9Uz0+e2EuZXhwb3NlZD1TfHx7fX0sbTtyZXR1cm57Z2V0IGF0dHJzKCl7cmV0dXJuIG18fChtPUdhKGEpKX0sc2xvdHM6YS5zbG90cyxlbWl0OmEuZW1pdCxleHBvc2U6dX19ZnVuY3Rpb24gRm8oYSl7aWYoYS5leHBvc2VkKXJldHVybiBhLmV4cG9zZVByb3h5fHwoYS5leHBvc2VQcm94eT1uZXcgUHJveHkoUi5wcm94eVJlZnMoUi5tYXJrUmF3KGEuZXhwb3NlZCkpLHtnZXQodSxtKXtpZihtIGluIHUpcmV0dXJuIHVbbV07aWYobSBpbiB2dClyZXR1cm4gdnRbbV0oYSl9LGhhcyh1LG0pe3JldHVybiBtIGluIHV8fG0gaW4gdnR9fSkpfWZ1bmN0aW9uIERpKGEpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4geS5pc0Z1bmN0aW9uKGEpP2EuZGlzcGxheU5hbWV8fGEubmFtZTphLm5hbWV8fHUmJmEuX19uYW1lfWZ1bmN0aW9uIF9vKGEpe3JldHVybiB5LmlzRnVuY3Rpb24oYSkmJiJfX3ZjY09wdHMiaW4gYX12YXIgYm89KGEsdSk9PlIuY29tcHV0ZWQoYSx1LGguaXNJblNTUkNvbXBvbmVudFNldHVwKTtmdW5jdGlvbiBkcygpe3JldHVybiBudWxsfWZ1bmN0aW9uIFZvKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24geHMoYSl7fWZ1bmN0aW9uIGhzKGEsdSl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gQnMoKXtyZXR1cm4gTnQoKS5zbG90c31mdW5jdGlvbiB4ZSgpe3JldHVybiBOdCgpLmF0dHJzfWZ1bmN0aW9uIE50KCl7dmFyIGE9X24oKTtyZXR1cm4gYS5zZXR1cENvbnRleHR8fChhLnNldHVwQ29udGV4dD1ZYShhKSl9ZnVuY3Rpb24gUHQoYSx1KXt2YXIgbT15LmlzQXJyYXkoYSk/YS5yZWR1Y2UoKE8sRik9PihPW0ZdPXt9LE8pLHt9KTphO2Zvcih2YXIgUyBpbiB1KXt2YXIgST1tW1NdO0k/eS5pc0FycmF5KEkpfHx5LmlzRnVuY3Rpb24oSSk/bVtTXT17dHlwZTpJLGRlZmF1bHQ6dVtTXX06SS5kZWZhdWx0PXVbU106ST09PW51bGwmJihtW1NdPXtkZWZhdWx0OnVbU119KX1yZXR1cm4gbX1mdW5jdGlvbiB3bihhLHUpe3ZhciBtPXt9LFM9ZnVuY3Rpb24oTyl7dS5pbmNsdWRlcyhPKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG0sTyx7ZW51bWVyYWJsZTohMCxnZXQ6KCk9PmFbT119KX07Zm9yKHZhciBJIGluIGEpUyhJKTtyZXR1cm4gbX1mdW5jdGlvbiBFcihhKXt2YXIgdT1fbigpLG09YSgpO3JldHVybiBxbigpLHkuaXNQcm9taXNlKG0pJiYobT1tLmNhdGNoKFM9Pnt0aHJvdyBqbih1KSxTfSkpLFttLCgpPT5qbih1KV19ZnVuY3Rpb24gT2koYSx1LG0pe3ZhciBTPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIFM9PT0yP3kuaXNPYmplY3QodSkmJiF5LmlzQXJyYXkodSk/ZG4odSk/VXQoYSxudWxsLFt1XSk6VXQoYSx1KTpVdChhLG51bGwsdSk6KFM+Mz9tPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTpTPT09MyYmZG4obSkmJihtPVttXSksVXQoYSx1LG0pKX12YXIgSmk9U3ltYm9sKCIiKSxVbz0oKT0+e3t2YXIgYT1ObihKaSk7cmV0dXJuIGF9fTtmdW5jdGlvbiBOYSgpe31mdW5jdGlvbiBpYShhLHUsbSxTKXt2YXIgST1tW1NdO2lmKEkmJmdzKEksYSkpcmV0dXJuIEk7dmFyIE89dSgpO3JldHVybiBPLm1lbW89YS5zbGljZSgpLG1bU109T31mdW5jdGlvbiBncyhhLHUpe3ZhciBtPWEubWVtbztpZihtLmxlbmd0aCE9dS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBTPTA7UzxtLmxlbmd0aDtTKyspaWYoeS5oYXNDaGFuZ2VkKG1bU10sdVtTXSkpcmV0dXJuITE7cmV0dXJuIGd0PjAmJmZlJiZmZS5wdXNoKGEpLCEwfXZhciBwcz0iMy4yLjQ3IixkbD1udWxsLCRsPW51bGwsSGw9bnVsbCxNcz17aW5zZXJ0OihhLHUsbSk9Pm0/dS5pbnNlcnRCZWZvcmUoYSxtKTp1LmFwcGVuZENoaWxkKGEpLHJlbW92ZTphPT57dmFyIHU9YS5wYXJlbnROb2RlO3UmJnUucmVtb3ZlQ2hpbGQoYSl9LGNyZWF0ZUVsZW1lbnQ6YT0+cy5jcmVhdGVFbGVtZW50KGEpLGNyZWF0ZVRleHQ6YT0+cy5jcmVhdGVUZXh0KGEpLGNyZWF0ZUNvbW1lbnQ6YT0+cy5jcmVhdGVDb21tZW50KGEpLHNldFRleHQ6KGEsdSk9PnthLnNldEF0dHIoInZhbHVlIix1KX0sc2V0RWxlbWVudFRleHQ6KGEsdSk9PnthLnNldEF0dHIoInZhbHVlIix1KX0scGFyZW50Tm9kZTphPT5hLnBhcmVudE5vZGUsbmV4dFNpYmxpbmc6YT0+YS5uZXh0U2libGluZ307ZnVuY3Rpb24gJG8oYSl7cmV0dXJuIE9iamVjdC5rZXlzKGEpfWZ1bmN0aW9uIEhvKGEpe3ZhciB1PXt9O3JldHVybiB5LmlzQXJyYXkoYSkmJmEuZm9yRWFjaChtPT57JG8obSkuZm9yRWFjaChTPT57dmFyIEk9bVtTXSxPPXVbU118fCh1W1NdPXt9KTskbyhJKS5mb3JFYWNoKEY9Pnt2YXIgVz1JW0ZdLEc9T1tGXXx8KE9bRl09e30pOyRvKFcpLmZvckVhY2gobGU9PntsZVswXT09PSIhIj8oR1tsZV09V1tsZV0sZGVsZXRlIEdbbGUuc2xpY2UoMSldKTp5Lmhhc093bihHLCIhIitsZSl8fChHW2xlXT1XW2xlXSl9KX0pfSl9KSx1fWZ1bmN0aW9uIG9hKGEsdSl7dmFyIG09dSYmdS5jbGFzc0xpc3Q7cmV0dXJuIG0mJm0uaW5jbHVkZXMoYSl9dmFyIHFhPS9bK34+IF0kLyx2cz0icGFyZW50Tm9kZSIsam89InByZXZpb3VzU2libGluZyI7ZnVuY3Rpb24gRHMoYSx1KXtmb3IodmFyIG09YS5zcGxpdCgiLiIpLFM9bS5sZW5ndGgtMTtTPjA7Uy0tKXt2YXIgST1tW1NdLE89SVtJLmxlbmd0aC0xXSxGPUkucmVwbGFjZShxYSwiIik7aWYoTz09PSJ+Inx8Tz09PSIgIil7Zm9yKHZhciBXPU89PT0ifiI/am86dnM7dSYmKHU9dVtXXSwhb2EoRix1KSk7KTtpZighdSlyZXR1cm4hMX1lbHNlIGlmKE89PT0iPiI/dT11JiZ1W3ZzXTpPPT09IisiJiYodT11JiZ1W2pvXSksIW9hKEYsdSkpcmV0dXJuITF9cmV0dXJuITB9dmFyIGpsPTFlMztmdW5jdGlvbiBMcyhhLHUsbSl7dmFye3N0eWxlczpTLHdlaWdodHM6SX09YTskbyh1KS5mb3JFYWNoKE89PntpZighKE8mJm0mJiFEcyhPLG0pKSl7dmFyIEY9Ty5zcGxpdCgiLiIpLmxlbmd0aCxXPXVbT107JG8oVykuZm9yRWFjaChHPT57dmFyIGxlPVdbR10sV2U9R1swXT09PSIhIjtXZSYmKEc9Ry5zbGljZSgxKSk7dmFyIGl0PUlbR118fDAsZ2U9RisoV2U/amw6MCk7Z2U+PWl0JiYoSVtHXT1nZSxTW0ddPWxlKX0pfX0pfWZ1bmN0aW9uIG1zKGEsdSl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwsUz17c3R5bGVzOnt9LHdlaWdodHM6e319O3JldHVybiBhLmZvckVhY2goST0+e3ZhciBPPXVbSV07TyYmTHMoUyxPLG0pfSksUy5zdHlsZXN9ZnVuY3Rpb24gaGwoYSl7cmV0dXJuIG1zKGEuY2xhc3NMaXN0LGEuc3R5bGVTaGVldCxhKX1mdW5jdGlvbiBGcyhhLHUpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBtcyhhLEphKHUpLG0pfWZ1bmN0aW9uIEphKGEpe3Zhcnt0eXBlOnUsYXBwQ29udGV4dDptfT1hLFM9dTtpZighUy5fX3N0eWxlcylpZihtJiZ5LmlzQXJyYXkobS5wcm92aWRlcy5fX2dsb2JhbFN0eWxlcykmJihtLnByb3ZpZGVzLl9fZ2xvYmFsU3R5bGVzPUhvKG0ucHJvdmlkZXMuX19nbG9iYWxTdHlsZXMpKSxTLm1wVHlwZT09PSJwYWdlIiYmbSlTLl9fc3R5bGVzPW0ucHJvdmlkZXMuX19nbG9iYWxTdHlsZXM7ZWxzZXt2YXIgST1bXTttJiZJLnB1c2gobS5wcm92aWRlcy5fX2dsb2JhbFN0eWxlcykseS5pc0FycmF5KFMuc3R5bGVzKSYmUy5zdHlsZXMuZm9yRWFjaChPPT5JLnB1c2goTykpLFMuX19zdHlsZXM9SG8oSSl9cmV0dXJuIFMuX19zdHlsZXN9ZnVuY3Rpb24gX3MoYSx1LG0pe3ZhciBTPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO1MmJihbdSxtXT1hYShhLHUsbSxTKSksYS5zZXRBdHRyKHUsbSl9dmFyIFZzPSJob3ZlckNsYXNzIixVcz0icGxhY2Vob2xkZXJDbGFzcyIsZ2w9InBsYWNlaG9sZGVyU3R5bGUiLHpvPSJpbmRpY2F0b3JDbGFzcyIsS2E9ImluZGljYXRvclN0eWxlIixtYT0ibWFza0NsYXNzIixrYT0ibWFza1N0eWxlIix5bz17dmlldzp7Y2xhc3M6W1ZzXSxzdHlsZTpbXX0sYnV0dG9uOntjbGFzczpbVnNdLHN0eWxlOltdfSxuYXZpZ2F0b3I6e2NsYXNzOltWc10sc3R5bGU6W119LCJ1LWlucHV0Ijp7Y2xhc3M6W1VzXSxzdHlsZTpbZ2xdfSwidS10ZXh0YXJlYSI6e2NsYXNzOltVc10sc3R5bGU6W2dsXX0sInBpY2tlci12aWV3Ijp7Y2xhc3M6W3pvLG1hXSxzdHlsZTpbS2Esa2FdfX07ZnVuY3Rpb24gYWEoYSx1LG0sUyl7aWYoIW0pcmV0dXJuW3UsbV07dmFyIEk9eW9bYS50eXBlXTtpZihJKXt2YXIgTz15LmNhbWVsaXplKHUpO2lmKEkuY2xhc3MuaW5kZXhPZihPKT4tMSlyZXR1cm5bTyxGcyhbbV0sUyxhKV07aWYoSS5zdHlsZS5pbmRleE9mKHUpPi0xKXJldHVybiB5LmlzU3RyaW5nKG0pP1tPLHkucGFyc2VTdHJpbmdTdHlsZShtKV06W08seS5ub3JtYWxpemVTdHlsZShtKV19cmV0dXJuW3UsbV19ZnVuY3Rpb24gWmEoYSx1LG0pe3ZhciBTPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO2lmKCEhUyl7dmFyIEk9bT9tLnNwbGl0KCIgIik6W107YS5zZXRDbGFzc0xpc3QoSSksYS5zZXRTdHlsZVNoZWV0KEphKFMpKX19ZnVuY3Rpb24gJHMoYSx1LG0sUyl7YS5hZGRFdmVudCh1LG0pfWZ1bmN0aW9uIHBsKGEsdSl7YS5yZW1vdmVFdmVudCh1KX1mdW5jdGlvbiBzYShhLHUsbSxTKXt2YXIgST1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxPPWEuX3ZlaXx8KGEuX3ZlaT17fSksRj1PW3VdO2lmKFMmJkYpRi52YWx1ZT1TO2Vsc2V7dmFyW1csR109UWEodSk7aWYoUyl7dmFyIGxlPU9bdV09dGkoUyxJKTskcyhhLFcsbGUpfWVsc2UgRiYmKHBsKGEsVyksT1t1XT12b2lkIDApfX12YXIgWGE9Lyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bmN0aW9uIEhzKGEpe3JldHVybiBhPT09Im9uLXBvc3QtbWVzc2FnZSI/Im9uUG9zdE1lc3NhZ2UiOmF9ZnVuY3Rpb24gUWEoYSl7dmFyIHU7aWYoWGEudGVzdChhKSl7dT17fTtmb3IodmFyIG07bT1hLm1hdGNoKFhhKTspYT1hLnNsaWNlKDAsYS5sZW5ndGgtbVswXS5sZW5ndGgpLHVbbVswXS50b0xvd2VyQ2FzZSgpXT0hMH12YXIgUz1hWzJdPT09IjoiP2Euc2xpY2UoMyk6YS5zbGljZSgyKTtyZXR1cm5bSHMoeS5oeXBoZW5hdGUoUykpLHVdfWZ1bmN0aW9uIHRpKGEsdSl7dmFyIG09ST0+e1AobS52YWx1ZSx1LDUsW0ldKX07bS52YWx1ZT1hO3ZhciBTPW5ldyBTZXQ7cmV0dXJuIHkuaXNBcnJheShtLnZhbHVlKT9tLnZhbHVlLmZvckVhY2goST0+e0kubW9kaWZpZXJzJiZJLm1vZGlmaWVycy5mb3JFYWNoKE89PntTLmFkZChPKX0pfSk6bS52YWx1ZS5tb2RpZmllcnMmJm0udmFsdWUubW9kaWZpZXJzLmZvckVhY2goST0+e1MuYWRkKEkpfSksbS5tb2RpZmllcnM9Wy4uLlNdLG19ZnVuY3Rpb24gTXIoYSx1LG0pe2lmKCEhbSl7eS5pc1N0cmluZyhtKSYmKG09eS5wYXJzZVN0cmluZ1N0eWxlKG0pKTt2YXIgUz17fSxJPXUmJiF5LmlzU3RyaW5nKHUpO2lmKEkpe2Zvcih2YXIgTyBpbiB1KW1bT109PW51bGwmJihTW3kuY2FtZWxpemUoTyldPSIiKTtmb3IodmFyIEYgaW4gbSl7dmFyIFc9bVtGXTtXIT09dVtGXSYmKFNbeS5jYW1lbGl6ZShGKV09Vyl9fWVsc2UgZm9yKHZhciBHIGluIG0pU1t5LmNhbWVsaXplKEcpXT1tW0ddO2Euc2V0U3R5bGVzKFMpfX12YXIgbGE9WyJ1LWlucHV0IiwidS10ZXh0YXJlYSJdLHZsPWZ1bmN0aW9uKGEsdSxtLFMpe3ZhciBJPWFyZ3VtZW50cy5sZW5ndGg+Nj9hcmd1bWVudHNbNl06dm9pZCAwLE89YXJndW1lbnRzLmxlbmd0aD45P2FyZ3VtZW50c1s5XTp2b2lkIDA7dT09PSJjbGFzcyI/WmEoYSxtLFMsT3x8SSk6dT09PSJzdHlsZSI/TXIoYSxtLFMpOnkuaXNPbih1KT95LmlzTW9kZWxMaXN0ZW5lcih1KXx8c2EoYSx1LG0sUyxJKTp1PT09Im1vZGVsVmFsdWUiJiZsYS5pbmNsdWRlcyhhLnR5cGUpP2Euc2V0QXR0cnMoe21vZGVsVmFsdWU6Uyx2YWx1ZTpTfSk6X3MoYSx1LFMsSSl9O2Z1bmN0aW9uIHpsKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIkc3R5bGUiO3t2YXIgdT1fbigpO2lmKCF1KXJldHVybiB5LkVNUFRZX09CSjt2YXIgbT11LnR5cGUuX19jc3NNb2R1bGVzO2lmKCFtKXJldHVybiB5LkVNUFRZX09CSjt2YXIgUz1tW2FdO3JldHVybiBTfHx5LkVNUFRZX09CSn19ZnVuY3Rpb24ganMoYSl7dmFyIHU9X24oKTtpZighIXUpe3ZhciBtPSgpPT5icyh1LnN1YlRyZWUsYSh1LnByb3h5KSk7ZXIoKCk9PlpuKG0se2ZsdXNoOiJwb3N0In0pKSxHbihtKX19ZnVuY3Rpb24gYnMoYSx1KXtpZihhLnNoYXBlRmxhZyYxMjgpe3ZhciBtPWEuc3VzcGVuc2U7YT1tLmFjdGl2ZUJyYW5jaCxtLnBlbmRpbmdCcmFuY2gmJiFtLmlzSHlkcmF0aW5nJiZtLmVmZmVjdHMucHVzaCgoKT0+e2JzKG0uYWN0aXZlQnJhbmNoLHUpfSl9Zm9yKDthLmNvbXBvbmVudDspYT1hLmNvbXBvbmVudC5zdWJUcmVlO2lmKGEuc2hhcGVGbGFnJjEmJmEuZWwpe3ZhciBTPWEuZWwuc3R5bGU7Zm9yKHZhciBJIGluIHUpUy5zZXRQcm9wZXJ0eSgiLS0iLmNvbmNhdChJKSx1W0ldKX1lbHNlIGEudHlwZT09PXEmJmEuY2hpbGRyZW4uZm9yRWFjaChPPT5icyhPLHUpKX12YXIgenM9WyJjdHJsIiwic2hpZnQiLCJhbHQiLCJtZXRhIl0sV3M9e3N0b3A6YT0+YS5zdG9wUHJvcGFnYXRpb24oKSxwcmV2ZW50OmE9PmEucHJldmVudERlZmF1bHQoKSxzZWxmOmE9PmEudGFyZ2V0IT09YS5jdXJyZW50VGFyZ2V0LGN0cmw6YT0+IWEuY3RybEtleSxzaGlmdDphPT4hYS5zaGlmdEtleSxhbHQ6YT0+IWEuYWx0S2V5LG1ldGE6YT0+IWEubWV0YUtleSxsZWZ0OmE9PiJidXR0b24iaW4gYSYmYS5idXR0b24hPT0wLG1pZGRsZTphPT4iYnV0dG9uImluIGEmJmEuYnV0dG9uIT09MSxyaWdodDphPT4iYnV0dG9uImluIGEmJmEuYnV0dG9uIT09MixleGFjdDooYSx1KT0+enMuc29tZShtPT5hWyIiLmNvbmNhdChtLCJLZXkiKV0mJiF1LmluY2x1ZGVzKG0pKX0sbWw9KGEsdSk9PmZ1bmN0aW9uKG0pe2Zvcih2YXIgUz0wO1M8dS5sZW5ndGg7UysrKXt2YXIgST1Xc1t1W1NdXTtpZihJJiZJKG0sdSkpcmV0dXJufWZvcih2YXIgTz1hcmd1bWVudHMubGVuZ3RoLEY9bmV3IEFycmF5KE8+MT9PLTE6MCksVz0xO1c8TztXKyspRltXLTFdPWFyZ3VtZW50c1tXXTtyZXR1cm4gYShtLC4uLkYpfSxHcz0oYSx1KT0+bT0+e2lmKCJrZXkiaW4gbSl7dmFyIFM9eS5oeXBoZW5hdGUobS5rZXkpO2lmKHUuc29tZShJPT5JPT09UykpcmV0dXJuIGEobSl9fSx5cz15LmV4dGVuZCh7cGF0Y2hQcm9wOnZsfSxNcyksRXM7ZnVuY3Rpb24gU3MoKXtyZXR1cm4gRXN8fChFcz1scih5cykpfXZhciBfbD1mdW5jdGlvbigpe1NzKCkucmVuZGVyKC4uLmFyZ3VtZW50cyl9LGJsPWZ1bmN0aW9uKCl7dmFyIGE9U3MoKS5jcmVhdGVBcHAoLi4uYXJndW1lbnRzKSx7bW91bnQ6dX09YTtyZXR1cm4gYS5tb3VudD1tPT51KG0pLGF9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiY2FtZWxpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LmNhbWVsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJjYXBpdGFsaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5jYXBpdGFsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJoeXBoZW5hdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5Lmh5cGhlbmF0ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwibm9ybWFsaXplQ2xhc3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5Lm5vcm1hbGl6ZUNsYXNzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJub3JtYWxpemVQcm9wcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkubm9ybWFsaXplUHJvcHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIm5vcm1hbGl6ZVN0eWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5ub3JtYWxpemVTdHlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwidG9EaXNwbGF5U3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS50b0Rpc3BsYXlTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInRvSGFuZGxlcktleSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkudG9IYW5kbGVyS2V5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJFZmZlY3RTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuRWZmZWN0U2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIlJlYWN0aXZlRWZmZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5SZWFjdGl2ZUVmZmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiY3VzdG9tUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5jdXN0b21SZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImVmZmVjdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuZWZmZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJlZmZlY3RTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuZWZmZWN0U2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImdldEN1cnJlbnRTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuZ2V0Q3VycmVudFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJpc1Byb3h5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5pc1Byb3h5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJpc1JlYWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5pc1JlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJpc1JlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5pc1JlYWRvbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJpc1JlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuaXNSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImlzU2hhbGxvdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuaXNTaGFsbG93fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJtYXJrUmF3Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5tYXJrUmF3fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJvblNjb3BlRGlzcG9zZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIub25TY29wZURpc3Bvc2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInByb3h5UmVmcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIucHJveHlSZWZzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJyZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIucmVhY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInJlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5yZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwicmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5yZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInNoYWxsb3dSZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuc2hhbGxvd1JlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJzaGFsbG93UmVhZG9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLnNoYWxsb3dSZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwic2hhbGxvd1JlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuc2hhbGxvd1JlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwic3RvcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuc3RvcH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwidG9SYXciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLnRvUmF3fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ0b1JlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIudG9SZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInRvUmVmcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIudG9SZWZzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ0cmlnZ2VyUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi50cmlnZ2VyUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ1bnJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIudW5yZWZ9fSksaC5CYXNlVHJhbnNpdGlvbj1VcixoLkJhc2VUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzPXBuLGguQ29tbWVudD1jZSxoLkZyYWdtZW50PXEsaC5LZWVwQWxpdmU9Zm4saC5TdGF0aWM9cGUsaC5TdXNwZW5zZT11byxoLlRlbGVwb3J0PVUsaC5UZXh0PXRlLGguYXNzZXJ0TnVtYmVyPVZ0LGguY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmc9UCxoLmNhbGxXaXRoRXJyb3JIYW5kbGluZz1PdCxoLmNsb25lVk5vZGU9Y2ksaC5jb21wYXRVdGlscz1IbCxoLmNvbXB1dGVkPWJvLGguY3JlYXRlQXBwPWJsLGguY3JlYXRlQmxvY2s9TXQsaC5jcmVhdGVDb21tZW50Vk5vZGU9amEsaC5jcmVhdGVFbGVtZW50QmxvY2s9amUsaC5jcmVhdGVFbGVtZW50Vk5vZGU9anQsaC5jcmVhdGVIeWRyYXRpb25SZW5kZXJlcj0kYSxoLmNyZWF0ZVByb3BzUmVzdFByb3h5PXduLGguY3JlYXRlUmVuZGVyZXI9bHIsaC5jcmVhdGVTbG90cz1CLGguY3JlYXRlU3RhdGljVk5vZGU9cWksaC5jcmVhdGVUZXh0Vk5vZGU9ZWksaC5jcmVhdGVWTm9kZT1VdCxoLmRlZmluZUFzeW5jQ29tcG9uZW50PVJyLGguZGVmaW5lQ29tcG9uZW50PVJpLGguZGVmaW5lRW1pdHM9Vm8saC5kZWZpbmVFeHBvc2U9eHMsaC5kZWZpbmVQcm9wcz1kcyxoLmdldEN1cnJlbnRJbnN0YW5jZT1fbixoLmdldFRyYW5zaXRpb25SYXdDaGlsZHJlbj1PcixoLmd1YXJkUmVhY3RpdmVQcm9wcz10YSxoLmg9T2ksaC5oYW5kbGVFcnJvcj13dCxoLmluaXRDdXN0b21Gb3JtYXR0ZXI9TmEsaC5pbmplY3Q9Tm4saC5pbmplY3RIb29rPXhpLGguaXNNZW1vU2FtZT1ncyxoLmlzUnVudGltZU9ubHk9ZnMsaC5pc1ZOb2RlPWRuLGgubWVyZ2VEZWZhdWx0cz1QdCxoLm1lcmdlUHJvcHM9SG4saC5uZXh0VGljaz1xcixoLm9uQWN0aXZhdGVkPSRyLGgub25CZWZvcmVNb3VudD1RcixoLm9uQmVmb3JlVW5tb3VudD1ucixoLm9uQmVmb3JlVXBkYXRlPXRyLGgub25EZWFjdGl2YXRlZD10byxoLm9uRXJyb3JDYXB0dXJlZD1ubyxoLm9uTW91bnRlZD1lcixoLm9uUmVuZGVyVHJhY2tlZD1ObyxoLm9uUmVuZGVyVHJpZ2dlcmVkPWdvLGgub25TZXJ2ZXJQcmVmZXRjaD1obyxoLm9uVW5tb3VudGVkPWNyLGgub25VcGRhdGVkPUduLGgub3BlbkJsb2NrPUNlLGgucGFyc2VDbGFzc0xpc3Q9RnMsaC5wYXJzZUNsYXNzU3R5bGVzPWhsLGgucG9wU2NvcGVJZD13byxoLnByb3ZpZGU9a3IsaC5wdXNoU2NvcGVJZD1LcixoLnF1ZXVlUG9zdEZsdXNoQ2I9SnIsaC5yZWdpc3RlclJ1bnRpbWVDb21waWxlcj1XYSxoLnJlbmRlcj1fbCxoLnJlbmRlckxpc3Q9UW8saC5yZW5kZXJTbG90PVEsaC5yZXNvbHZlQ29tcG9uZW50PVJvLGgucmVzb2x2ZURpcmVjdGl2ZT12byxoLnJlc29sdmVEeW5hbWljQ29tcG9uZW50PUJpLGgucmVzb2x2ZUZpbHRlcj0kbCxoLnJlc29sdmVUcmFuc2l0aW9uSG9va3M9VGUsaC5zZXRCbG9ja1RyYWNraW5nPUh0LGguc2V0RGV2dG9vbHNIb29rPVRuLGguc2V0VHJhbnNpdGlvbkhvb2tzPXlpLGguc3NyQ29udGV4dEtleT1KaSxoLnNzclV0aWxzPWRsLGgudG9IYW5kbGVycz1hZSxoLnRyYW5zZm9ybVZOb2RlQXJncz1kdCxoLnVzZUF0dHJzPXhlLGgudXNlQ3NzTW9kdWxlPXpsLGgudXNlQ3NzU3R5bGVzPUhvLGgudXNlQ3NzVmFycz1qcyxoLnVzZVNTUkNvbnRleHQ9VW8saC51c2VTbG90cz1CcyxoLnVzZVRyYW5zaXRpb25TdGF0ZT1acixoLnZlcnNpb249cHMsaC53YXJuPUl0LGgud2F0Y2g9RnIsaC53YXRjaEVmZmVjdD1abixoLndhdGNoUG9zdEVmZmVjdD1OaSxoLndhdGNoU3luY0VmZmVjdD1IaSxoLndpdGhBc3luY0NvbnRleHQ9RXIsaC53aXRoQ3R4PVVpLGgud2l0aERlZmF1bHRzPWhzLGgud2l0aERpcmVjdGl2ZXM9a28saC53aXRoS2V5cz1HcyxoLndpdGhNZW1vPWlhLGgud2l0aE1vZGlmaWVycz1tbCxoLndpdGhTY29wZUlkPWRhLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxofSh7fSx3LE4scCk7cmV0dXJuIEUuX19UWVBFX189Im52dWUiLEV9dmFyIERwPU5JKE1JKTt2YXIgaGM9e307QUkoaGMse0VNUFRZX0FSUjooKT0+SkksRU1QVFlfT0JKOigpPT5xSSxOTzooKT0+WkksTk9PUDooKT0+S0ksY2FtZWxpemU6KCk9PmZOLGNhcGl0YWxpemU6KCk9PnJ1LGRlZjooKT0+dk4sZXh0ZW5kOigpPT5GaSxnZXRHbG9iYWxUaGlzOigpPT5iTixoYXNDaGFuZ2VkOigpPT5nTixoYXNPd246KCk9PmlsLGh5cGhlbmF0ZTooKT0+ZmYsaW52b2tlQXJyYXlGbnM6KCk9PnBOLGlzQXJyYXk6KCk9PklpLGlzQnVpbHRJbkRpcmVjdGl2ZTooKT0+Y04saXNGdW5jdGlvbjooKT0+em4saXNHbG9iYWxseVdoaXRlbGlzdGVkOigpPT5GSSxpc0hUTUxUYWc6KCk9PldJLGlzSW50ZWdlcktleTooKT0+c04saXNNYXA6KCk9PlZwLGlzTW9kZWxMaXN0ZW5lcjooKT0+ZU4saXNPYmplY3Q6KCk9PkxsLGlzT246KCk9PlFJLGlzUGxhaW5PYmplY3Q6KCk9PkZsLGlzUHJvbWlzZTooKT0+b04saXNSZWdFeHA6KCk9PnJOLGlzUmVzZXJ2ZWRQcm9wOigpPT5sTixpc1NWR1RhZzooKT0+R0ksaXNTZXQ6KCk9PlVwLGlzU3RyaW5nOigpPT5oaSxpc1N5bWJvbDooKT0+aU4sbG9vc2VUb051bWJlcjooKT0+bU4sbWFrZU1hcDooKT0+RGwsbm9ybWFsaXplQ2xhc3M6KCk9PnVmLG5vcm1hbGl6ZVByb3BzOigpPT5ISSxub3JtYWxpemVTdHlsZTooKT0+Y2YscGFyc2VTdHJpbmdTdHlsZTooKT0+THAscmVtb3ZlOigpPT50Tix0b0Rpc3BsYXlTdHJpbmc6KCk9PllJLHRvSGFuZGxlcktleTooKT0+aE4sdG9OdW1iZXI6KCk9Pl9OLHRvUmF3VHlwZTooKT0+YU4sdG9UeXBlU3RyaW5nOigpPT5NYX0pO2Z1bmN0aW9uIERsKGYscyl7bGV0IHA9T2JqZWN0LmNyZWF0ZShudWxsKSx3PWYuc3BsaXQoIiwiKTtmb3IobGV0IE49MDtOPHcubGVuZ3RoO04rKylwW3dbTl1dPSEwO3JldHVybiBzP049PiEhcFtOLnRvTG93ZXJDYXNlKCldOk49PiEhcFtOXX12YXIgTEk9IkluZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4scGFyc2VGbG9hdCxwYXJzZUludCxkZWNvZGVVUkksZGVjb2RlVVJJQ29tcG9uZW50LGVuY29kZVVSSSxlbmNvZGVVUklDb21wb25lbnQsTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLEJpZ0ludCIsRkk9RGwoTEkpO2Z1bmN0aW9uIGNmKGYpe2lmKElpKGYpKXtsZXQgcz17fTtmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IHc9ZltwXSxOPWhpKHcpP0xwKHcpOmNmKHcpO2lmKE4pZm9yKGxldCBFIGluIE4pc1tFXT1OW0VdfXJldHVybiBzfWVsc2V7aWYoaGkoZikpcmV0dXJuIGY7aWYoTGwoZikpcmV0dXJuIGZ9fXZhciBWST0vOyg/IVteKF0qXCkpL2csVUk9LzooW15dKykvLCRJPS9cL1wqLio/XCpcLy9ncztmdW5jdGlvbiBMcChmKXtsZXQgcz17fTtyZXR1cm4gZi5yZXBsYWNlKCRJLCIiKS5zcGxpdChWSSkuZm9yRWFjaChwPT57aWYocCl7bGV0IHc9cC5zcGxpdChVSSk7dy5sZW5ndGg+MSYmKHNbd1swXS50cmltKCldPXdbMV0udHJpbSgpKX19KSxzfWZ1bmN0aW9uIHVmKGYpe2xldCBzPSIiO2lmKGhpKGYpKXM9ZjtlbHNlIGlmKElpKGYpKWZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKXtsZXQgdz11ZihmW3BdKTt3JiYocys9dysiICIpfWVsc2UgaWYoTGwoZikpZm9yKGxldCBwIGluIGYpZltwXSYmKHMrPXArIiAiKTtyZXR1cm4gcy50cmltKCl9ZnVuY3Rpb24gSEkoZil7aWYoIWYpcmV0dXJuIG51bGw7bGV0e2NsYXNzOnMsc3R5bGU6cH09ZjtyZXR1cm4gcyYmIWhpKHMpJiYoZi5jbGFzcz11ZihzKSkscCYmKGYuc3R5bGU9Y2YocCkpLGZ9dmFyIGpJPSJodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSxhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsaDEsaDIsaDMsaDQsaDUsaDYsbmF2LHNlY3Rpb24sZGl2LGRkLGRsLGR0LGZpZ2NhcHRpb24sZmlndXJlLHBpY3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ1YnkscyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsY2FwdGlvbixjb2wsY29sZ3JvdXAsdGFibGUsdGhlYWQsdGJvZHksdGQsdGgsdHIsYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbixvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLGRldGFpbHMsZGlhbG9nLG1lbnUsc3VtbWFyeSx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCIsekk9InN2ZyxhbmltYXRlLGFuaW1hdGVNb3Rpb24sYW5pbWF0ZVRyYW5zZm9ybSxjaXJjbGUsY2xpcFBhdGgsY29sb3ItcHJvZmlsZSxkZWZzLGRlc2MsZGlzY2FyZCxlbGxpcHNlLGZlQmxlbmQsZmVDb2xvck1hdHJpeCxmZUNvbXBvbmVudFRyYW5zZmVyLGZlQ29tcG9zaXRlLGZlQ29udm9sdmVNYXRyaXgsZmVEaWZmdXNlTGlnaHRpbmcsZmVEaXNwbGFjZW1lbnRNYXAsZmVEaXN0YW50TGlnaHQsZmVEcm9wU2hhZG93LGZlRmxvb2QsZmVGdW5jQSxmZUZ1bmNCLGZlRnVuY0csZmVGdW5jUixmZUdhdXNzaWFuQmx1cixmZUltYWdlLGZlTWVyZ2UsZmVNZXJnZU5vZGUsZmVNb3JwaG9sb2d5LGZlT2Zmc2V0LGZlUG9pbnRMaWdodCxmZVNwZWN1bGFyTGlnaHRpbmcsZmVTcG90TGlnaHQsZmVUaWxlLGZlVHVyYnVsZW5jZSxmaWx0ZXIsZm9yZWlnbk9iamVjdCxnLGhhdGNoLGhhdGNocGF0aCxpbWFnZSxsaW5lLGxpbmVhckdyYWRpZW50LG1hcmtlcixtYXNrLG1lc2gsbWVzaGdyYWRpZW50LG1lc2hwYXRjaCxtZXNocm93LG1ldGFkYXRhLG1wYXRoLHBhdGgscGF0dGVybixwb2x5Z29uLHBvbHlsaW5lLHJhZGlhbEdyYWRpZW50LHJlY3Qsc2V0LHNvbGlkY29sb3Isc3RvcCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dFBhdGgsdGl0bGUsdHNwYW4sdW5rbm93bix1c2UsdmlldyIsV0k9RGwoakkpLEdJPURsKHpJKSxZST1mPT5oaShmKT9mOmY9PW51bGw/IiI6SWkoZil8fExsKGYpJiYoZi50b1N0cmluZz09PSRwfHwhem4oZi50b1N0cmluZykpP0pTT04uc3RyaW5naWZ5KGYsRnAsMik6U3RyaW5nKGYpLEZwPShmLHMpPT5zJiZzLl9fdl9pc1JlZj9GcChmLHMudmFsdWUpOlZwKHMpP3tbYE1hcCgke3Muc2l6ZX0pYF06Wy4uLnMuZW50cmllcygpXS5yZWR1Y2UoKHAsW3csTl0pPT4ocFtgJHt3fSA9PmBdPU4scCkse30pfTpVcChzKT97W2BTZXQoJHtzLnNpemV9KWBdOlsuLi5zLnZhbHVlcygpXX06TGwocykmJiFJaShzKSYmIUZsKHMpP1N0cmluZyhzKTpzLHFJPXt9LEpJPVtdLEtJPSgpPT57fSxaST0oKT0+ITEsWEk9L15vblteYS16XS8sUUk9Zj0+WEkudGVzdChmKSxlTj1mPT5mLnN0YXJ0c1dpdGgoIm9uVXBkYXRlOiIpLEZpPU9iamVjdC5hc3NpZ24sdE49KGYscyk9PntsZXQgcD1mLmluZGV4T2Yocyk7cD4tMSYmZi5zcGxpY2UocCwxKX0sbk49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxpbD0oZixzKT0+bk4uY2FsbChmLHMpLElpPUFycmF5LmlzQXJyYXksVnA9Zj0+TWEoZik9PT0iW29iamVjdCBNYXBdIixVcD1mPT5NYShmKT09PSJbb2JqZWN0IFNldF0iLHJOPWY9Pk1hKGYpPT09IltvYmplY3QgUmVnRXhwXSIsem49Zj0+dHlwZW9mIGY9PSJmdW5jdGlvbiIsaGk9Zj0+dHlwZW9mIGY9PSJzdHJpbmciLGlOPWY9PnR5cGVvZiBmPT0ic3ltYm9sIixMbD1mPT5mIT09bnVsbCYmdHlwZW9mIGY9PSJvYmplY3QiLG9OPWY9PkxsKGYpJiZ6bihmLnRoZW4pJiZ6bihmLmNhdGNoKSwkcD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLE1hPWY9PiRwLmNhbGwoZiksYU49Zj0+TWEoZikuc2xpY2UoOCwtMSksRmw9Zj0+TWEoZik9PT0iW29iamVjdCBPYmplY3RdIixzTj1mPT5oaShmKSYmZiE9PSJOYU4iJiZmWzBdIT09Ii0iJiYiIitwYXJzZUludChmLDEwKT09PWYsbE49RGwoIixrZXkscmVmLHJlZl9mb3IscmVmX2tleSxvblZub2RlQmVmb3JlTW91bnQsb25Wbm9kZU1vdW50ZWQsb25Wbm9kZUJlZm9yZVVwZGF0ZSxvblZub2RlVXBkYXRlZCxvblZub2RlQmVmb3JlVW5tb3VudCxvblZub2RlVW5tb3VudGVkIiksY049RGwoImJpbmQsY2xvYWssZWxzZS1pZixlbHNlLGZvcixodG1sLGlmLG1vZGVsLG9uLG9uY2UscHJlLHNob3csc2xvdCx0ZXh0LG1lbW8iKSxudT1mPT57bGV0IHM9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcD0+c1twXXx8KHNbcF09ZihwKSl9LHVOPS8tKFx3KS9nLGZOPW51KGY9PmYucmVwbGFjZSh1TiwocyxwKT0+cD9wLnRvVXBwZXJDYXNlKCk6IiIpKSxkTj0vXEIoW0EtWl0pL2csZmY9bnUoZj0+Zi5yZXBsYWNlKGROLCItJDEiKS50b0xvd2VyQ2FzZSgpKSxydT1udShmPT5mLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Yuc2xpY2UoMSkpLGhOPW51KGY9PmY/YG9uJHtydShmKX1gOiIiKSxnTj0oZixzKT0+IU9iamVjdC5pcyhmLHMpLHBOPShmLHMpPT57Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZltwXShzKX0sdk49KGYscyxwKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShmLHMse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnB9KX0sbU49Zj0+e2xldCBzPXBhcnNlRmxvYXQoZik7cmV0dXJuIGlzTmFOKHMpP2Y6c30sX049Zj0+e2xldCBzPWhpKGYpP051bWJlcihmKTpOYU47cmV0dXJuIGlzTmFOKHMpP2Y6c30sSHAsYk49KCk9PkhwfHwoSHA9dHlwZW9mIGdsb2JhbFRoaXMhPSJ1bmRlZmluZWQiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGYhPSJ1bmRlZmluZWQiP3NlbGY6dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCI/d2luZG93OnR5cGVvZiBnbG9iYWwhPSJ1bmRlZmluZWQiP2dsb2JhbDp7fSk7ZnVuY3Rpb24ganAoZil7dmFyIHM9ZnVuY3Rpb24ocCx3KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTihCLC4uLlEpe2NvbnNvbGUud2FybihgW1Z1ZSB3YXJuXSAke0J9YCwuLi5RKX1sZXQgRTtjbGFzcyBoe2NvbnN0cnVjdG9yKFE9ITEpe3RoaXMuZGV0YWNoZWQ9USx0aGlzLl9hY3RpdmU9ITAsdGhpcy5lZmZlY3RzPVtdLHRoaXMuY2xlYW51cHM9W10sdGhpcy5wYXJlbnQ9RSwhUSYmRSYmKHRoaXMuaW5kZXg9KEUuc2NvcGVzfHwoRS5zY29wZXM9W10pKS5wdXNoKHRoaXMpLTEpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXJ1bihRKXtpZih0aGlzLl9hY3RpdmUpe2xldCBoZT1FO3RyeXtyZXR1cm4gRT10aGlzLFEoKX1maW5hbGx5e0U9aGV9fX1vbigpe0U9dGhpc31vZmYoKXtFPXRoaXMucGFyZW50fXN0b3AoUSl7aWYodGhpcy5fYWN0aXZlKXtsZXQgaGUsYWU7Zm9yKGhlPTAsYWU9dGhpcy5lZmZlY3RzLmxlbmd0aDtoZTxhZTtoZSsrKXRoaXMuZWZmZWN0c1toZV0uc3RvcCgpO2ZvcihoZT0wLGFlPXRoaXMuY2xlYW51cHMubGVuZ3RoO2hlPGFlO2hlKyspdGhpcy5jbGVhbnVwc1toZV0oKTtpZih0aGlzLnNjb3Blcylmb3IoaGU9MCxhZT10aGlzLnNjb3Blcy5sZW5ndGg7aGU8YWU7aGUrKyl0aGlzLnNjb3Blc1toZV0uc3RvcCghMCk7aWYoIXRoaXMuZGV0YWNoZWQmJnRoaXMucGFyZW50JiYhUSl7bGV0IGRlPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtkZSYmZGUhPT10aGlzJiYodGhpcy5wYXJlbnQuc2NvcGVzW3RoaXMuaW5kZXhdPWRlLGRlLmluZGV4PXRoaXMuaW5kZXgpfXRoaXMucGFyZW50PXZvaWQgMCx0aGlzLl9hY3RpdmU9ITF9fX1mdW5jdGlvbiB5KEIpe3JldHVybiBuZXcgaChCKX1mdW5jdGlvbiBSKEIsUT1FKXtRJiZRLmFjdGl2ZSYmUS5lZmZlY3RzLnB1c2goQil9ZnVuY3Rpb24gRmUoKXtyZXR1cm4gRX1mdW5jdGlvbiBJdChCKXtFJiZFLmNsZWFudXBzLnB1c2goQil9bGV0IFZ0PUI9PntsZXQgUT1uZXcgU2V0KEIpO3JldHVybiBRLnc9MCxRLm49MCxRfSxPdD1CPT4oQi53JkopPjAsUD1CPT4oQi5uJkopPjAsd3Q9KHtkZXBzOkJ9KT0+e2lmKEIubGVuZ3RoKWZvcihsZXQgUT0wO1E8Qi5sZW5ndGg7USsrKUJbUV0ud3w9Sn0sSW49Qj0+e2xldHtkZXBzOlF9PUI7aWYoUS5sZW5ndGgpe2xldCBoZT0wO2ZvcihsZXQgYWU9MDthZTxRLmxlbmd0aDthZSsrKXtsZXQgZGU9UVthZV07T3QoZGUpJiYhUChkZSk/ZGUuZGVsZXRlKEIpOlFbaGUrK109ZGUsZGUudyY9fkosZGUubiY9fkp9US5sZW5ndGg9aGV9fSxvdD1uZXcgV2Vha01hcCx6PTAsSj0xLGhuPTMwLHVuLHluPVN5bWJvbCgiIiksSm49U3ltYm9sKCIiKTtjbGFzcyBnaXtjb25zdHJ1Y3RvcihRLGhlPW51bGwsYWUpe3RoaXMuZm49USx0aGlzLnNjaGVkdWxlcj1oZSx0aGlzLmFjdGl2ZT0hMCx0aGlzLmRlcHM9W10sdGhpcy5wYXJlbnQ9dm9pZCAwLFIodGhpcyxhZSl9cnVuKCl7aWYoIXRoaXMuYWN0aXZlKXJldHVybiB0aGlzLmZuKCk7bGV0IFE9dW4saGU9U247Zm9yKDtROyl7aWYoUT09PXRoaXMpcmV0dXJuO1E9US5wYXJlbnR9dHJ5e3JldHVybiB0aGlzLnBhcmVudD11bix1bj10aGlzLFNuPSEwLEo9MTw8Kyt6LHo8PWhuP3d0KHRoaXMpOnBpKHRoaXMpLHRoaXMuZm4oKX1maW5hbGx5e3o8PWhuJiZJbih0aGlzKSxKPTE8PC0teix1bj10aGlzLnBhcmVudCxTbj1oZSx0aGlzLnBhcmVudD12b2lkIDAsdGhpcy5kZWZlclN0b3AmJnRoaXMuc3RvcCgpfX1zdG9wKCl7dW49PT10aGlzP3RoaXMuZGVmZXJTdG9wPSEwOnRoaXMuYWN0aXZlJiYocGkodGhpcyksdGhpcy5vblN0b3AmJnRoaXMub25TdG9wKCksdGhpcy5hY3RpdmU9ITEpfX1mdW5jdGlvbiBwaShCKXtsZXR7ZGVwczpRfT1CO2lmKFEubGVuZ3RoKXtmb3IobGV0IGhlPTA7aGU8US5sZW5ndGg7aGUrKylRW2hlXS5kZWxldGUoQik7US5sZW5ndGg9MH19ZnVuY3Rpb24gcXIoQixRKXtCLmVmZmVjdCYmKEI9Qi5lZmZlY3QuZm4pO2xldCBoZT1uZXcgZ2koQik7USYmKHcuZXh0ZW5kKGhlLFEpLFEuc2NvcGUmJlIoaGUsUS5zY29wZSkpLCghUXx8IVEubGF6eSkmJmhlLnJ1bigpO2xldCBhZT1oZS5ydW4uYmluZChoZSk7cmV0dXJuIGFlLmVmZmVjdD1oZSxhZX1mdW5jdGlvbiBncihCKXtCLmVmZmVjdC5zdG9wKCl9bGV0IFNuPSEwLHByPVtdO2Z1bmN0aW9uIExyKCl7cHIucHVzaChTbiksU249ITF9ZnVuY3Rpb24gSnIoKXtwci5wdXNoKFNuKSxTbj0hMH1mdW5jdGlvbiB2aSgpe2xldCBCPXByLnBvcCgpO1NuPUI9PT12b2lkIDA/ITA6Qn1mdW5jdGlvbiBQbihCLFEsaGUpe2lmKFNuJiZ1bil7bGV0IGFlPW90LmdldChCKTthZXx8b3Quc2V0KEIsYWU9bmV3IE1hcCk7bGV0IGRlPWFlLmdldChoZSk7ZGV8fGFlLnNldChoZSxkZT1WdCgpKSx6ZShkZSx2b2lkIDApfX1mdW5jdGlvbiB6ZShCLFEpe2xldCBoZT0hMTt6PD1obj9QKEIpfHwoQi5ufD1KLGhlPSFPdChCKSk6aGU9IUIuaGFzKHVuKSxoZSYmKEIuYWRkKHVuKSx1bi5kZXBzLnB1c2goQikpfWZ1bmN0aW9uIG50KEIsUSxoZSxhZSxkZSx2dCl7bGV0IGt0PW90LmdldChCKTtpZigha3QpcmV0dXJuO2xldCBYPVtdO2lmKFE9PT0iY2xlYXIiKVg9Wy4uLmt0LnZhbHVlcygpXTtlbHNlIGlmKGhlPT09Imxlbmd0aCImJncuaXNBcnJheShCKSl7bGV0IGllPU51bWJlcihhZSk7a3QuZm9yRWFjaCgoTmUsc3QpPT57KHN0PT09Imxlbmd0aCJ8fHN0Pj1pZSkmJlgucHVzaChOZSl9KX1lbHNlIHN3aXRjaChoZSE9PXZvaWQgMCYmWC5wdXNoKGt0LmdldChoZSkpLFEpe2Nhc2UiYWRkIjp3LmlzQXJyYXkoQik/dy5pc0ludGVnZXJLZXkoaGUpJiZYLnB1c2goa3QuZ2V0KCJsZW5ndGgiKSk6KFgucHVzaChrdC5nZXQoeW4pKSx3LmlzTWFwKEIpJiZYLnB1c2goa3QuZ2V0KEpuKSkpO2JyZWFrO2Nhc2UiZGVsZXRlIjp3LmlzQXJyYXkoQil8fChYLnB1c2goa3QuZ2V0KHluKSksdy5pc01hcChCKSYmWC5wdXNoKGt0LmdldChKbikpKTticmVhaztjYXNlInNldCI6dy5pc01hcChCKSYmWC5wdXNoKGt0LmdldCh5bikpO2JyZWFrfWxldCBLPXZvaWQgMDtpZihYLmxlbmd0aD09PTEpWFswXSYmQXQoWFswXSk7ZWxzZXtsZXQgaWU9W107Zm9yKGxldCBOZSBvZiBYKU5lJiZpZS5wdXNoKC4uLk5lKTtBdChWdChpZSkpfX1mdW5jdGlvbiBBdChCLFEpe2xldCBoZT13LmlzQXJyYXkoQik/QjpbLi4uQl07Zm9yKGxldCBhZSBvZiBoZSlhZS5jb21wdXRlZCYmUXQoYWUsUSk7Zm9yKGxldCBhZSBvZiBoZSlhZS5jb21wdXRlZHx8UXQoYWUsUSl9ZnVuY3Rpb24gUXQoQixRKXsoQiE9PXVufHxCLmFsbG93UmVjdXJzZSkmJihCLnNjaGVkdWxlcj9CLnNjaGVkdWxlcigpOkIucnVuKCkpfWZ1bmN0aW9uIFRuKEIsUSl7dmFyIGhlO3JldHVybihoZT1vdC5nZXQoQikpPT09bnVsbHx8aGU9PT12b2lkIDA/dm9pZCAwOmhlLmdldChRKX1sZXQgc249dy5tYWtlTWFwKCJfX3Byb3RvX18sX192X2lzUmVmLF9faXNWdWUiKSxvcj1uZXcgU2V0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN5bWJvbCkuZmlsdGVyKEI9PkIhPT0iYXJndW1lbnRzIiYmQiE9PSJjYWxsZXIiKS5tYXAoQj0+U3ltYm9sW0JdKS5maWx0ZXIody5pc1N5bWJvbCkpLFduPVVpKCksQW49VWkoITEsITApLGduPVVpKCEwKSx3cj1VaSghMCwhMCksS3I9d28oKTtmdW5jdGlvbiB3bygpe2xldCBCPXt9O3JldHVyblsiaW5jbHVkZXMiLCJpbmRleE9mIiwibGFzdEluZGV4T2YiXS5mb3JFYWNoKFE9PntCW1FdPWZ1bmN0aW9uKC4uLmhlKXtsZXQgYWU9Zm4odGhpcyk7Zm9yKGxldCB2dD0wLGt0PXRoaXMubGVuZ3RoO3Z0PGt0O3Z0KyspUG4oYWUsImdldCIsdnQrIiIpO2xldCBkZT1hZVtRXSguLi5oZSk7cmV0dXJuIGRlPT09LTF8fGRlPT09ITE/YWVbUV0oLi4uaGUubWFwKGZuKSk6ZGV9fSksWyJwdXNoIiwicG9wIiwic2hpZnQiLCJ1bnNoaWZ0Iiwic3BsaWNlIl0uZm9yRWFjaChRPT57QltRXT1mdW5jdGlvbiguLi5oZSl7THIoKTtsZXQgYWU9Zm4odGhpcylbUV0uYXBwbHkodGhpcyxoZSk7cmV0dXJuIHZpKCksYWV9fSksQn1mdW5jdGlvbiBkYShCKXtsZXQgUT1mbih0aGlzKTtyZXR1cm4gUG4oUSwiaGFzIixCKSxRLmhhc093blByb3BlcnR5KEIpfWZ1bmN0aW9uIFVpKEI9ITEsUT0hMSl7cmV0dXJuIGZ1bmN0aW9uKGFlLGRlLHZ0KXtpZihkZT09PSJfX3ZfaXNSZWFjdGl2ZSIpcmV0dXJuIUI7aWYoZGU9PT0iX192X2lzUmVhZG9ubHkiKXJldHVybiBCO2lmKGRlPT09Il9fdl9pc1NoYWxsb3ciKXJldHVybiBRO2lmKGRlPT09Il9fdl9yYXciJiZ2dD09PShCP1E/RHQ6VXI6UT9YcjpwbikuZ2V0KGFlKSlyZXR1cm4gYWU7bGV0IGt0PXcuaXNBcnJheShhZSk7aWYoIUIpe2lmKGt0JiZ3Lmhhc093bihLcixkZSkpcmV0dXJuIFJlZmxlY3QuZ2V0KEtyLGRlLHZ0KTtpZihkZT09PSJoYXNPd25Qcm9wZXJ0eSIpcmV0dXJuIGRhfWxldCBYPVJlZmxlY3QuZ2V0KGFlLGRlLHZ0KTtyZXR1cm4ody5pc1N5bWJvbChkZSk/b3IuaGFzKGRlKTpzbihkZSkpfHwoQnx8UG4oYWUsImdldCIsZGUpLFEpP1g6c3IoWCk/a3QmJncuaXNJbnRlZ2VyS2V5KGRlKT9YOlgudmFsdWU6dy5pc09iamVjdChYKT9CP09yKFgpOmJpKFgpOlh9fWxldCBabz0kaSgpLFhvPSRpKCEwKTtmdW5jdGlvbiAkaShCPSExKXtyZXR1cm4gZnVuY3Rpb24oaGUsYWUsZGUsdnQpe2xldCBrdD1oZVthZV07aWYoYWkoa3QpJiZzcihrdCkmJiFzcihkZSkpcmV0dXJuITE7aWYoIUImJighUHIoZGUpJiYhYWkoZGUpJiYoa3Q9Zm4oa3QpLGRlPWZuKGRlKSksIXcuaXNBcnJheShoZSkmJnNyKGt0KSYmIXNyKGRlKSkpcmV0dXJuIGt0LnZhbHVlPWRlLCEwO2xldCBYPXcuaXNBcnJheShoZSkmJncuaXNJbnRlZ2VyS2V5KGFlKT9OdW1iZXIoYWUpPGhlLmxlbmd0aDp3Lmhhc093bihoZSxhZSksSz1SZWZsZWN0LnNldChoZSxhZSxkZSx2dCk7cmV0dXJuIGhlPT09Zm4odnQpJiYoWD93Lmhhc0NoYW5nZWQoZGUsa3QpJiZudChoZSwic2V0IixhZSxkZSxrdCk6bnQoaGUsImFkZCIsYWUsZGUpKSxLfX1mdW5jdGlvbiByaShCLFEpe2xldCBoZT13Lmhhc093bihCLFEpLGFlPUJbUV0sZGU9UmVmbGVjdC5kZWxldGVQcm9wZXJ0eShCLFEpO3JldHVybiBkZSYmaGUmJm50KEIsImRlbGV0ZSIsUSx2b2lkIDAsYWUpLGRlfWZ1bmN0aW9uIENvKEIsUSl7bGV0IGhlPVJlZmxlY3QuaGFzKEIsUSk7cmV0dXJuKCF3LmlzU3ltYm9sKFEpfHwhb3IuaGFzKFEpKSYmUG4oQiwiaGFzIixRKSxoZX1mdW5jdGlvbiBBbyhCKXtyZXR1cm4gUG4oQiwiaXRlcmF0ZSIsdy5pc0FycmF5KEIpPyJsZW5ndGgiOnluKSxSZWZsZWN0Lm93bktleXMoQil9bGV0IE9vPXtnZXQ6V24sc2V0OlpvLGRlbGV0ZVByb3BlcnR5OnJpLGhhczpDbyxvd25LZXlzOkFvfSxYaT17Z2V0OmduLHNldChCLFEpe3JldHVybiEwfSxkZWxldGVQcm9wZXJ0eShCLFEpe3JldHVybiEwfX0sbWk9dy5leHRlbmQoe30sT28se2dldDpBbixzZXQ6WG99KSxUbz13LmV4dGVuZCh7fSxYaSx7Z2V0OndyfSksdW89Qj0+Qixrbj1CPT5SZWZsZWN0LmdldFByb3RvdHlwZU9mKEIpO2Z1bmN0aW9uIENyKEIsUSxoZT0hMSxhZT0hMSl7Qj1CLl9fdl9yYXc7bGV0IGRlPWZuKEIpLHZ0PWZuKFEpO2hlfHwoUSE9PXZ0JiZQbihkZSwiZ2V0IixRKSxQbihkZSwiZ2V0Iix2dCkpO2xldHtoYXM6a3R9PWtuKGRlKSxYPWFlP3VvOmhlP3RvOiRyO2lmKGt0LmNhbGwoZGUsUSkpcmV0dXJuIFgoQi5nZXQoUSkpO2lmKGt0LmNhbGwoZGUsdnQpKXJldHVybiBYKEIuZ2V0KHZ0KSk7QiE9PWRlJiZCLmdldChRKX1mdW5jdGlvbiBRaShCLFE9ITEpe2xldCBoZT10aGlzLl9fdl9yYXcsYWU9Zm4oaGUpLGRlPWZuKEIpO3JldHVybiBRfHwoQiE9PWRlJiZQbihhZSwiaGFzIixCKSxQbihhZSwiaGFzIixkZSkpLEI9PT1kZT9oZS5oYXMoQik6aGUuaGFzKEIpfHxoZS5oYXMoZGUpfWZ1bmN0aW9uIEtuKEIsUT0hMSl7cmV0dXJuIEI9Qi5fX3ZfcmF3LCFRJiZQbihmbihCKSwiaXRlcmF0ZSIseW4pLFJlZmxlY3QuZ2V0KEIsInNpemUiLEIpfWZ1bmN0aW9uIGVvKEIpe0I9Zm4oQik7bGV0IFE9Zm4odGhpcyk7cmV0dXJuIGtuKFEpLmhhcy5jYWxsKFEsQil8fChRLmFkZChCKSxudChRLCJhZGQiLEIsQikpLHRoaXN9ZnVuY3Rpb24gUG8oQixRKXtRPWZuKFEpO2xldCBoZT1mbih0aGlzKSx7aGFzOmFlLGdldDpkZX09a24oaGUpLHZ0PWFlLmNhbGwoaGUsQik7dnR8fChCPWZuKEIpLHZ0PWFlLmNhbGwoaGUsQikpO2xldCBrdD1kZS5jYWxsKGhlLEIpO3JldHVybiBoZS5zZXQoQixRKSx2dD93Lmhhc0NoYW5nZWQoUSxrdCkmJm50KGhlLCJzZXQiLEIsUSxrdCk6bnQoaGUsImFkZCIsQixRKSx0aGlzfWZ1bmN0aW9uIGZvKEIpe2xldCBRPWZuKHRoaXMpLHtoYXM6aGUsZ2V0OmFlfT1rbihRKSxkZT1oZS5jYWxsKFEsQik7ZGV8fChCPWZuKEIpLGRlPWhlLmNhbGwoUSxCKSk7bGV0IHZ0PWFlP2FlLmNhbGwoUSxCKTp2b2lkIDAsa3Q9US5kZWxldGUoQik7cmV0dXJuIGRlJiZudChRLCJkZWxldGUiLEIsdm9pZCAwLHZ0KSxrdH1mdW5jdGlvbiBpaSgpe2xldCBCPWZuKHRoaXMpLFE9Qi5zaXplIT09MCxoZT12b2lkIDAsYWU9Qi5jbGVhcigpO3JldHVybiBRJiZudChCLCJjbGVhciIsdm9pZCAwLHZvaWQgMCxoZSksYWV9ZnVuY3Rpb24gYXIoQixRKXtyZXR1cm4gZnVuY3Rpb24oYWUsZGUpe2xldCB2dD10aGlzLGt0PXZ0Ll9fdl9yYXcsWD1mbihrdCksSz1RP3VvOkI/dG86JHI7cmV0dXJuIUImJlBuKFgsIml0ZXJhdGUiLHluKSxrdC5mb3JFYWNoKChpZSxOZSk9PmFlLmNhbGwoZGUsSyhpZSksSyhOZSksdnQpKX19ZnVuY3Rpb24ga3IoQixRLGhlKXtyZXR1cm4gZnVuY3Rpb24oLi4uYWUpe2xldCBkZT10aGlzLl9fdl9yYXcsdnQ9Zm4oZGUpLGt0PXcuaXNNYXAodnQpLFg9Qj09PSJlbnRyaWVzInx8Qj09PVN5bWJvbC5pdGVyYXRvciYma3QsSz1CPT09ImtleXMiJiZrdCxpZT1kZVtCXSguLi5hZSksTmU9aGU/dW86UT90bzokcjtyZXR1cm4hUSYmUG4odnQsIml0ZXJhdGUiLEs/Sm46eW4pLHtuZXh0KCl7bGV0e3ZhbHVlOnN0LGRvbmU6WHR9PWllLm5leHQoKTtyZXR1cm4gWHQ/e3ZhbHVlOnN0LGRvbmU6WHR9Ont2YWx1ZTpYP1tOZShzdFswXSksTmUoc3RbMV0pXTpOZShzdCksZG9uZTpYdH19LFtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX19ZnVuY3Rpb24gTm4oQil7cmV0dXJuIGZ1bmN0aW9uKC4uLlEpe3JldHVybiBCPT09ImRlbGV0ZSI/ITE6dGhpc319ZnVuY3Rpb24gWm4oKXtsZXQgQj17Z2V0KHZ0KXtyZXR1cm4gQ3IodGhpcyx2dCl9LGdldCBzaXplKCl7cmV0dXJuIEtuKHRoaXMpfSxoYXM6UWksYWRkOmVvLHNldDpQbyxkZWxldGU6Zm8sY2xlYXI6aWksZm9yRWFjaDphcighMSwhMSl9LFE9e2dldCh2dCl7cmV0dXJuIENyKHRoaXMsdnQsITEsITApfSxnZXQgc2l6ZSgpe3JldHVybiBLbih0aGlzKX0saGFzOlFpLGFkZDplbyxzZXQ6UG8sZGVsZXRlOmZvLGNsZWFyOmlpLGZvckVhY2g6YXIoITEsITApfSxoZT17Z2V0KHZ0KXtyZXR1cm4gQ3IodGhpcyx2dCwhMCl9LGdldCBzaXplKCl7cmV0dXJuIEtuKHRoaXMsITApfSxoYXModnQpe3JldHVybiBRaS5jYWxsKHRoaXMsdnQsITApfSxhZGQ6Tm4oImFkZCIpLHNldDpObigic2V0IiksZGVsZXRlOk5uKCJkZWxldGUiKSxjbGVhcjpObigiY2xlYXIiKSxmb3JFYWNoOmFyKCEwLCExKX0sYWU9e2dldCh2dCl7cmV0dXJuIENyKHRoaXMsdnQsITAsITApfSxnZXQgc2l6ZSgpe3JldHVybiBLbih0aGlzLCEwKX0saGFzKHZ0KXtyZXR1cm4gUWkuY2FsbCh0aGlzLHZ0LCEwKX0sYWRkOk5uKCJhZGQiKSxzZXQ6Tm4oInNldCIpLGRlbGV0ZTpObigiZGVsZXRlIiksY2xlYXI6Tm4oImNsZWFyIiksZm9yRWFjaDphcighMCwhMCl9O3JldHVyblsia2V5cyIsInZhbHVlcyIsImVudHJpZXMiLFN5bWJvbC5pdGVyYXRvcl0uZm9yRWFjaCh2dD0+e0JbdnRdPWtyKHZ0LCExLCExKSxoZVt2dF09a3IodnQsITAsITEpLFFbdnRdPWtyKHZ0LCExLCEwKSxhZVt2dF09a3IodnQsITAsITApfSksW0IsaGUsUSxhZV19bGV0W05pLEhpLG9pLEZyXT1abigpO2Z1bmN0aW9uIHZyKEIsUSl7bGV0IGhlPVE/Qj9GcjpvaTpCP0hpOk5pO3JldHVybihhZSxkZSx2dCk9PmRlPT09Il9fdl9pc1JlYWN0aXZlIj8hQjpkZT09PSJfX3ZfaXNSZWFkb25seSI/QjpkZT09PSJfX3ZfcmF3Ij9hZTpSZWZsZWN0LmdldCh3Lmhhc093bihoZSxkZSkmJmRlIGluIGFlP2hlOmFlLGRlLHZ0KX1sZXQga2k9e2dldDp2cighMSwhMSl9LElvPXtnZXQ6dnIoITEsITApfSxWcj17Z2V0OnZyKCEwLCExKX0sWnI9e2dldDp2cighMCwhMCl9O2Z1bmN0aW9uIEFyKEIsUSxoZSl7bGV0IGFlPWZuKGhlKTtpZihhZSE9PWhlJiZRLmNhbGwoQixhZSkpe2xldCBkZT13LnRvUmF3VHlwZShCKTtjb25zb2xlLndhcm4oYFJlYWN0aXZlICR7ZGV9IGNvbnRhaW5zIGJvdGggdGhlIHJhdyBhbmQgcmVhY3RpdmUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgb2JqZWN0JHtkZT09PSJNYXAiPyIgYXMga2V5cyI6IiJ9LCB3aGljaCBjYW4gbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMuIEF2b2lkIGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHRoZSByYXcgYW5kIHJlYWN0aXZlIHZlcnNpb25zIG9mIGFuIG9iamVjdCBhbmQgb25seSB1c2UgdGhlIHJlYWN0aXZlIHZlcnNpb24gaWYgcG9zc2libGUuYCl9fWxldCBwbj1uZXcgV2Vha01hcCxYcj1uZXcgV2Vha01hcCxVcj1uZXcgV2Vha01hcCxEdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBUZShCKXtzd2l0Y2goQil7Y2FzZSJPYmplY3QiOmNhc2UiQXJyYXkiOnJldHVybiAxO2Nhc2UiTWFwIjpjYXNlIlNldCI6Y2FzZSJXZWFrTWFwIjpjYXNlIldlYWtTZXQiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIF9pKEIpe3JldHVybiBCLl9fdl9za2lwfHwhT2JqZWN0LmlzRXh0ZW5zaWJsZShCKT8wOlRlKHcudG9SYXdUeXBlKEIpKX1mdW5jdGlvbiBiaShCKXtyZXR1cm4gYWkoQik/QjpUcihCLCExLE9vLGtpLHBuKX1mdW5jdGlvbiB5aShCKXtyZXR1cm4gVHIoQiwhMSxtaSxJbyxYcil9ZnVuY3Rpb24gT3IoQil7cmV0dXJuIFRyKEIsITAsWGksVnIsVXIpfWZ1bmN0aW9uIFJpKEIpe3JldHVybiBUcihCLCEwLFRvLFpyLER0KX1mdW5jdGlvbiBUcihCLFEsaGUsYWUsZGUpe2lmKCF3LmlzT2JqZWN0KEIpfHxCLl9fdl9yYXcmJiEoUSYmQi5fX3ZfaXNSZWFjdGl2ZSkpcmV0dXJuIEI7bGV0IHZ0PWRlLmdldChCKTtpZih2dClyZXR1cm4gdnQ7bGV0IGt0PV9pKEIpO2lmKGt0PT09MClyZXR1cm4gQjtsZXQgWD1uZXcgUHJveHkoQixrdD09PTI/YWU6aGUpO3JldHVybiBkZS5zZXQoQixYKSxYfWZ1bmN0aW9uIFJyKEIpe3JldHVybiBhaShCKT9ScihCLl9fdl9yYXcpOiEhKEImJkIuX192X2lzUmVhY3RpdmUpfWZ1bmN0aW9uIGFpKEIpe3JldHVybiEhKEImJkIuX192X2lzUmVhZG9ubHkpfWZ1bmN0aW9uIFByKEIpe3JldHVybiEhKEImJkIuX192X2lzU2hhbGxvdyl9ZnVuY3Rpb24gRWkoQil7cmV0dXJuIFJyKEIpfHxhaShCKX1mdW5jdGlvbiBmbihCKXtsZXQgUT1CJiZCLl9fdl9yYXc7cmV0dXJuIFE/Zm4oUSk6Qn1mdW5jdGlvbiBqaShCKXtyZXR1cm4gdy5kZWYoQiwiX192X3NraXAiLCEwKSxCfWxldCAkcj1CPT53LmlzT2JqZWN0KEIpP2JpKEIpOkIsdG89Qj0+dy5pc09iamVjdChCKT9PcihCKTpCO2Z1bmN0aW9uIEVuKEIpe1NuJiZ1biYmKEI9Zm4oQiksemUoQi5kZXB8fChCLmRlcD1WdCgpKSkpfWZ1bmN0aW9uIEhyKEIsUSl7Qj1mbihCKTtsZXQgaGU9Qi5kZXA7aGUmJkF0KGhlKX1mdW5jdGlvbiBzcihCKXtyZXR1cm4hIShCJiZCLl9fdl9pc1JlZj09PSEwKX1mdW5jdGlvbiBTaShCKXtyZXR1cm4gbXIoQiwhMSl9ZnVuY3Rpb24geGkoQil7cmV0dXJuIG1yKEIsITApfWZ1bmN0aW9uIG1yKEIsUSl7cmV0dXJuIHNyKEIpP0I6bmV3IFFyKEIsUSl9Y2xhc3MgUXJ7Y29uc3RydWN0b3IoUSxoZSl7dGhpcy5fX3ZfaXNTaGFsbG93PWhlLHRoaXMuZGVwPXZvaWQgMCx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9yYXdWYWx1ZT1oZT9ROmZuKFEpLHRoaXMuX3ZhbHVlPWhlP1E6JHIoUSl9Z2V0IHZhbHVlKCl7cmV0dXJuIEVuKHRoaXMpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShRKXtsZXQgaGU9dGhpcy5fX3ZfaXNTaGFsbG93fHxQcihRKXx8YWkoUSk7UT1oZT9ROmZuKFEpLHcuaGFzQ2hhbmdlZChRLHRoaXMuX3Jhd1ZhbHVlKSYmKHRoaXMuX3Jhd1ZhbHVlPVEsdGhpcy5fdmFsdWU9aGU/UTokcihRKSxIcih0aGlzLFEpKX19ZnVuY3Rpb24gZXIoQil7SHIoQix2b2lkIDApfWZ1bmN0aW9uIHRyKEIpe3JldHVybiBzcihCKT9CLnZhbHVlOkJ9bGV0IEduPXtnZXQ6KEIsUSxoZSk9PnRyKFJlZmxlY3QuZ2V0KEIsUSxoZSkpLHNldDooQixRLGhlLGFlKT0+e2xldCBkZT1CW1FdO3JldHVybiBzcihkZSkmJiFzcihoZSk/KGRlLnZhbHVlPWhlLCEwKTpSZWZsZWN0LnNldChCLFEsaGUsYWUpfX07ZnVuY3Rpb24gbnIoQil7cmV0dXJuIFJyKEIpP0I6bmV3IFByb3h5KEIsR24pfWNsYXNzIGNye2NvbnN0cnVjdG9yKFEpe3RoaXMuZGVwPXZvaWQgMCx0aGlzLl9fdl9pc1JlZj0hMDtsZXR7Z2V0OmhlLHNldDphZX09USgoKT0+RW4odGhpcyksKCk9PkhyKHRoaXMpKTt0aGlzLl9nZXQ9aGUsdGhpcy5fc2V0PWFlfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9nZXQoKX1zZXQgdmFsdWUoUSl7dGhpcy5fc2V0KFEpfX1mdW5jdGlvbiBobyhCKXtyZXR1cm4gbmV3IGNyKEIpfWZ1bmN0aW9uIGdvKEIpe2xldCBRPXcuaXNBcnJheShCKT9uZXcgQXJyYXkoQi5sZW5ndGgpOnt9O2ZvcihsZXQgaGUgaW4gQilRW2hlXT1ubyhCLGhlKTtyZXR1cm4gUX1jbGFzcyBOb3tjb25zdHJ1Y3RvcihRLGhlLGFlKXt0aGlzLl9vYmplY3Q9USx0aGlzLl9rZXk9aGUsdGhpcy5fZGVmYXVsdFZhbHVlPWFlLHRoaXMuX192X2lzUmVmPSEwfWdldCB2YWx1ZSgpe2xldCBRPXRoaXMuX29iamVjdFt0aGlzLl9rZXldO3JldHVybiBRPT09dm9pZCAwP3RoaXMuX2RlZmF1bHRWYWx1ZTpRfXNldCB2YWx1ZShRKXt0aGlzLl9vYmplY3RbdGhpcy5fa2V5XT1RfWdldCBkZXAoKXtyZXR1cm4gVG4oZm4odGhpcy5fb2JqZWN0KSx0aGlzLl9rZXkpfX1mdW5jdGlvbiBubyhCLFEsaGUpe2xldCBhZT1CW1FdO3JldHVybiBzcihhZSk/YWU6bmV3IE5vKEIsUSxoZSl9dmFyIGtvO2NsYXNzIGpye2NvbnN0cnVjdG9yKFEsaGUsYWUsZGUpe3RoaXMuX3NldHRlcj1oZSx0aGlzLmRlcD12b2lkIDAsdGhpcy5fX3ZfaXNSZWY9ITAsdGhpc1trb109ITEsdGhpcy5fZGlydHk9ITAsdGhpcy5lZmZlY3Q9bmV3IGdpKFEsKCk9Pnt0aGlzLl9kaXJ0eXx8KHRoaXMuX2RpcnR5PSEwLEhyKHRoaXMpKX0pLHRoaXMuZWZmZWN0LmNvbXB1dGVkPXRoaXMsdGhpcy5lZmZlY3QuYWN0aXZlPXRoaXMuX2NhY2hlYWJsZT0hZGUsdGhpcy5fX3ZfaXNSZWFkb25seT1hZX1nZXQgdmFsdWUoKXtsZXQgUT1mbih0aGlzKTtyZXR1cm4gRW4oUSksKFEuX2RpcnR5fHwhUS5fY2FjaGVhYmxlKSYmKFEuX2RpcnR5PSExLFEuX3ZhbHVlPVEuZWZmZWN0LnJ1bigpKSxRLl92YWx1ZX1zZXQgdmFsdWUoUSl7dGhpcy5fc2V0dGVyKFEpfX1rbz0iX192X2lzUmVhZG9ubHkiO2Z1bmN0aW9uIHhyKEIsUSxoZT0hMSl7bGV0IGFlLGRlLHZ0PXcuaXNGdW5jdGlvbihCKTtyZXR1cm4gdnQ/KGFlPUIsZGU9dy5OT09QKTooYWU9Qi5nZXQsZGU9Qi5zZXQpLG5ldyBqcihhZSxkZSx2dHx8IWRlLGhlKX12YXIgcG87bGV0IFJvPVByb21pc2UucmVzb2x2ZSgpLHJvPVtdLEJpPSExLHZvPUI9Pntyby5wdXNoKEIpLEJpfHwoQmk9ITAsUm8udGhlbihNaSkpfSxNaT0oKT0+e2ZvcihsZXQgQj0wO0I8cm8ubGVuZ3RoO0IrKylyb1tCXSgpO3JvLmxlbmd0aD0wLEJpPSExfTtjbGFzcyB6aXtjb25zdHJ1Y3RvcihRKXt0aGlzLmRlcD12b2lkIDAsdGhpcy5fZGlydHk9ITAsdGhpcy5fX3ZfaXNSZWY9ITAsdGhpc1twb109ITA7bGV0IGhlLGFlPSExLGRlPSExO3RoaXMuZWZmZWN0PW5ldyBnaShRLHZ0PT57aWYodGhpcy5kZXApe2lmKHZ0KWhlPXRoaXMuX3ZhbHVlLGFlPSEwO2Vsc2UgaWYoIWRlKXtsZXQga3Q9YWU/aGU6dGhpcy5fdmFsdWU7ZGU9ITAsYWU9ITEsdm8oKCk9Pnt0aGlzLmVmZmVjdC5hY3RpdmUmJnRoaXMuX2dldCgpIT09a3QmJkhyKHRoaXMpLGRlPSExfSl9Zm9yKGxldCBrdCBvZiB0aGlzLmRlcClrdC5jb21wdXRlZCBpbnN0YW5jZW9mIHppJiZrdC5zY2hlZHVsZXIoITApfXRoaXMuX2RpcnR5PSEwfSksdGhpcy5lZmZlY3QuY29tcHV0ZWQ9dGhpc31fZ2V0KCl7cmV0dXJuIHRoaXMuX2RpcnR5Pyh0aGlzLl9kaXJ0eT0hMSx0aGlzLl92YWx1ZT10aGlzLmVmZmVjdC5ydW4oKSk6dGhpcy5fdmFsdWV9Z2V0IHZhbHVlKCl7cmV0dXJuIEVuKHRoaXMpLGZuKHRoaXMpLl9nZXQoKX19cG89Il9fdl9pc1JlYWRvbmx5IjtmdW5jdGlvbiBRbyhCKXtyZXR1cm4gbmV3IHppKEIpfXJldHVybiBwLkVmZmVjdFNjb3BlPWgscC5JVEVSQVRFX0tFWT15bixwLlJlYWN0aXZlRWZmZWN0PWdpLHAuY29tcHV0ZWQ9eHIscC5jdXN0b21SZWY9aG8scC5kZWZlcnJlZENvbXB1dGVkPVFvLHAuZWZmZWN0PXFyLHAuZWZmZWN0U2NvcGU9eSxwLmVuYWJsZVRyYWNraW5nPUpyLHAuZ2V0Q3VycmVudFNjb3BlPUZlLHAuaXNQcm94eT1FaSxwLmlzUmVhY3RpdmU9UnIscC5pc1JlYWRvbmx5PWFpLHAuaXNSZWY9c3IscC5pc1NoYWxsb3c9UHIscC5tYXJrUmF3PWppLHAub25TY29wZURpc3Bvc2U9SXQscC5wYXVzZVRyYWNraW5nPUxyLHAucHJveHlSZWZzPW5yLHAucmVhY3RpdmU9YmkscC5yZWFkb25seT1PcixwLnJlZj1TaSxwLnJlc2V0VHJhY2tpbmc9dmkscC5zaGFsbG93UmVhY3RpdmU9eWkscC5zaGFsbG93UmVhZG9ubHk9UmkscC5zaGFsbG93UmVmPXhpLHAuc3RvcD1ncixwLnRvUmF3PWZuLHAudG9SZWY9bm8scC50b1JlZnM9Z28scC50cmFjaz1QbixwLnRyaWdnZXI9bnQscC50cmlnZ2VyUmVmPWVyLHAudW5yZWY9dHIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHB9KHt9LGYpO3JldHVybiBzfWZ1bmN0aW9uIHpwKGYpe3ZhciBzPWZ1bmN0aW9uKHApeyJ1c2Ugc3RyaWN0IjtsZXQgdz1gCmAsTj00NCxFPTUwLGg9NTAseT1bIiUiLCIlIl0sUj0iIzAwN2FmZiIsRmU9L14oW2Etei1dKzopP1wvXC8vaSxJdD0vXmRhdGE6LiosLiovLFZ0PSJXRUJfSU5WT0tFX0FQUFNFUlZJQ0UiLE90PSJ3eHM6Ly8iLFA9Impzb246Ly8iLHd0PSJ3eHNNb2R1bGVzIixJbj0icmVuZGVyanNNb2R1bGVzIixvdD0ib25TaG93Iix6PSJvbkhpZGUiLEo9Im9uTGF1bmNoIixobj0ib25FcnJvciIsdW49Im9uVGhlbWVDaGFuZ2UiLHluPSJvZmZUaGVtZUNoYW5nZSIsSm49Im9uS2V5Ym9hcmRIZWlnaHRDaGFuZ2UiLGdpPSJvblBhZ2VOb3RGb3VuZCIscGk9Im9uVW5oYW5kbGVkUmVqZWN0aW9uIixxcj0ib25FeGl0Iixncj0ib25Mb2FkIixTbj0ib25SZWFkeSIscHI9Im9uVW5sb2FkIixMcj0ib25Jbml0IixKcj0ib25TYXZlRXhpdFN0YXRlIix2aT0ib25SZXNpemUiLFBuPSJvbkJhY2tQcmVzcyIsemU9Im9uUGFnZVNjcm9sbCIsbnQ9Im9uVGFiSXRlbVRhcCIsQXQ9Im9uUmVhY2hCb3R0b20iLFF0PSJvblB1bGxEb3duUmVmcmVzaCIsVG49Im9uU2hhcmVUaW1lbGluZSIsc249Im9uQWRkVG9GYXZvcml0ZXMiLG9yPSJvblNoYXJlQXBwTWVzc2FnZSIsV249Im9uTmF2aWdhdGlvbkJhckJ1dHRvblRhcCIsQW49Im9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q2xpY2tlZCIsZ249Im9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q2hhbmdlZCIsd3I9Im9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q29uZmlybWVkIixLcj0ib25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRGb2N1c0NoYW5nZWQiLHdvPSJvbkFwcEVudGVyRm9yZWdyb3VuZCIsZGE9Im9uQXBwRW50ZXJCYWNrZ3JvdW5kIixVaT0ib25XeHNJbnZva2VDYWxsTWV0aG9kIjtmdW5jdGlvbiBabyhYKXtyZXR1cm4hIVguYXBwQ29udGV4dH1mdW5jdGlvbiBYbyhYKXtyZXR1cm4gWCYmKFpvKFgpP1gucHJveHk6WCl9ZnVuY3Rpb24gJGkoWCl7cmV0dXJuIFgubm9kZVR5cGU9PT0xfWZ1bmN0aW9uIHJpKFgsSz0hMSl7bGV0e3Zub2RlOmllfT1YO2lmKCRpKGllLmVsKSlyZXR1cm4gSz9pZS5lbD9baWUuZWxdOltdOmllLmVsO2xldHtzdWJUcmVlOk5lfT1YO2lmKE5lLnNoYXBlRmxhZyYxNil7bGV0IHN0PU5lLmNoaWxkcmVuLmZpbHRlcihYdD0+WHQuZWwmJiRpKFh0LmVsKSk7aWYoc3QubGVuZ3RoPjApcmV0dXJuIEs/c3QubWFwKFh0PT5YdC5lbCk6c3RbMF0uZWx9cmV0dXJuIEs/aWUuZWw/W2llLmVsXTpbXTppZS5lbH1sZXQgQ289MDtmdW5jdGlvbiBBbyhYLC4uLkspe2xldCBpZT1EYXRlLm5vdygpLE5lPUNvP2llLUNvOjA7cmV0dXJuIENvPWllLGBbJHtpZX1dWyR7TmV9bXNdWyR7WH1dXHVGRjFBJHtLLm1hcChzdD0+SlNPTi5zdHJpbmdpZnkoc3QpKS5qb2luKCIgIil9YH1mdW5jdGlvbiBPbyhYKXtsZXQgSz1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpZT0+S1tpZV18fChLW2llXT1YKGllKSl9ZnVuY3Rpb24gWGkoWCl7cmV0dXJuIE9vKFgpfWZ1bmN0aW9uIG1pKFg9IiIpe3JldHVybigiIitYKS5yZXBsYWNlKC9bXlx4MDAtXHhmZl0vZywiKioiKS5sZW5ndGh9ZnVuY3Rpb24gVG8oWCl7cmV0dXJuIFguaW5kZXhPZigiLyIpPT09MH1mdW5jdGlvbiB1byhYKXtyZXR1cm4gVG8oWCk/WDoiLyIrWH1mdW5jdGlvbiBrbihYKXtyZXR1cm4gVG8oWCk/WC5zbGljZSgxKTpYfWxldCBDcj0oWCxLKT0+e2xldCBpZTtmb3IobGV0IE5lPTA7TmU8WC5sZW5ndGg7TmUrKylpZT1YW05lXShLKTtyZXR1cm4gaWV9O2Z1bmN0aW9uIFFpKFgsSz1udWxsKXtsZXQgaWU7cmV0dXJuKC4uLk5lKT0+KFgmJihpZT1YLmFwcGx5KEssTmUpLFg9bnVsbCksaWUpfWZ1bmN0aW9uIEtuKFgsSyl7WD1YfHx7fSxwLmlzU3RyaW5nKEspJiYoSz17ZXJyTXNnOkt9KSwvOm9rJC8udGVzdChLLmVyck1zZyk/cC5pc0Z1bmN0aW9uKFguc3VjY2VzcykmJlguc3VjY2VzcyhLKTpwLmlzRnVuY3Rpb24oWC5mYWlsKSYmWC5mYWlsKEspLHAuaXNGdW5jdGlvbihYLmNvbXBsZXRlKSYmWC5jb21wbGV0ZShLKX1mdW5jdGlvbiBlbyhYKXtsZXQgSz17fTtyZXR1cm4gcC5pc1BsYWluT2JqZWN0KFgpJiZPYmplY3Qua2V5cyhYKS5zb3J0KCkuZm9yRWFjaChpZT0+e2xldCBOZT1pZTtLW05lXT1YW05lXX0pLE9iamVjdC5rZXlzKEspP0s6WH1sZXQgUG89ZW5jb2RlVVJJQ29tcG9uZW50O2Z1bmN0aW9uIGZvKFgsSz1Qbyl7bGV0IGllPVg/T2JqZWN0LmtleXMoWCkubWFwKE5lPT57bGV0IHN0PVhbTmVdO3JldHVybiB0eXBlb2Ygc3Q9PT12b2lkIDB8fHN0PT09bnVsbD9zdD0iIjpwLmlzUGxhaW5PYmplY3Qoc3QpJiYoc3Q9SlNPTi5zdHJpbmdpZnkoc3QpKSxLKE5lKSsiPSIrSyhzdCl9KS5maWx0ZXIoTmU9Pk5lLmxlbmd0aD4wKS5qb2luKCImIik6bnVsbDtyZXR1cm4gaWU/YD8ke2llfWA6IiJ9ZnVuY3Rpb24gaWkoWCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoIiIrWCl9Y2F0Y2goSyl7fXJldHVybiIiK1h9bGV0IGFyPS9cKy9nO2Z1bmN0aW9uIGtyKFgpe2xldCBLPXt9O2lmKFg9PT0iInx8WD09PSI/IilyZXR1cm4gSztsZXQgTmU9KFhbMF09PT0iPyI/WC5zbGljZSgxKTpYKS5zcGxpdCgiJiIpO2ZvcihsZXQgc3Q9MDtzdDxOZS5sZW5ndGg7KytzdCl7bGV0IFh0PU5lW3N0XS5yZXBsYWNlKGFyLCIgIikseG49WHQuaW5kZXhPZigiPSIpLERuPWlpKHhuPDA/WHQ6WHQuc2xpY2UoMCx4bikpLF9yPXhuPDA/bnVsbDppaShYdC5zbGljZSh4bisxKSk7aWYoRG4gaW4gSyl7bGV0IEJyPUtbRG5dO3AuaXNBcnJheShCcil8fChCcj1LW0RuXT1bQnJdKSxCci5wdXNoKF9yKX1lbHNlIEtbRG5dPV9yfXJldHVybiBLfWZ1bmN0aW9uIE5uKFgpe2xldFtLLGllXT1YLnNwbGl0KCI/IiwyKTtyZXR1cm57cGF0aDpLLHF1ZXJ5OmtyKGllfHwiIil9fWZ1bmN0aW9uIFpuKFgpe2xldCBLPXt9O3JldHVybiBYJiZPYmplY3Qua2V5cyhYKS5mb3JFYWNoKGllPT57aWUuaW5kZXhPZigiZGF0YS0iKT09PTAmJihLW2llLnJlcGxhY2UoImRhdGEtIiwiIildPVhbaWVdKX0pLEt9Y2xhc3MgTmkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihLKXtzdXBlcihLKTt0aGlzLm5hbWU9IkRPTUV4Y2VwdGlvbiJ9fWZ1bmN0aW9uIEhpKFgsSyl7cmV0dXJuIEsmJihLLmNhcHR1cmUmJihYKz0iQ2FwdHVyZSIpLEsub25jZSYmKFgrPSJPbmNlIiksSy5wYXNzaXZlJiYoWCs9IlBhc3NpdmUiKSksYG9uJHtwLmNhcGl0YWxpemUocC5jYW1lbGl6ZShYKSl9YH1jbGFzcyBvaXtjb25zdHJ1Y3RvcihLLGllKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy50aW1lU3RhbXA9RGF0ZS5ub3coKSx0aGlzLl9zdG9wPSExLHRoaXMuX2VuZD0hMSx0aGlzLnR5cGU9Syx0aGlzLmJ1YmJsZXM9ISFpZS5idWJibGVzLHRoaXMuY2FuY2VsYWJsZT0hIWllLmNhbmNlbGFibGV9cHJldmVudERlZmF1bHQoKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl7dGhpcy5fZW5kPXRoaXMuX3N0b3A9ITB9c3RvcFByb3BhZ2F0aW9uKCl7dGhpcy5fc3RvcD0hMH19ZnVuY3Rpb24gRnIoWCl7aWYoWCBpbnN0YW5jZW9mIG9pKXJldHVybiBYO2xldFtLXT1JbyhYLnR5cGUpLGllPW5ldyBvaShLLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KTtyZXR1cm4gcC5leHRlbmQoaWUsWCksaWV9Y2xhc3MgdnJ7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1PYmplY3QuY3JlYXRlKG51bGwpfWRpc3BhdGNoRXZlbnQoSyl7bGV0IGllPXRoaXMubGlzdGVuZXJzW0sudHlwZV07aWYoIWllKXJldHVybiExO2xldCBOZT1GcihLKSxzdD1pZS5sZW5ndGg7Zm9yKGxldCBYdD0wO1h0PHN0JiYoaWVbWHRdLmNhbGwodGhpcyxOZSksIU5lLl9lbmQpO1h0KyspO3JldHVybiBOZS5jYW5jZWxhYmxlJiZOZS5kZWZhdWx0UHJldmVudGVkfWFkZEV2ZW50TGlzdGVuZXIoSyxpZSxOZSl7Sz1IaShLLE5lKSwodGhpcy5saXN0ZW5lcnNbS118fCh0aGlzLmxpc3RlbmVyc1tLXT1bXSkpLnB1c2goaWUpfXJlbW92ZUV2ZW50TGlzdGVuZXIoSyxpZSxOZSl7Sz1IaShLLE5lKTtsZXQgc3Q9dGhpcy5saXN0ZW5lcnNbS107aWYoIXN0KXJldHVybjtsZXQgWHQ9c3QuaW5kZXhPZihpZSk7WHQ+LTEmJnN0LnNwbGljZShYdCwxKX19bGV0IGtpPS8oPzpPbmNlfFBhc3NpdmV8Q2FwdHVyZSkkLztmdW5jdGlvbiBJbyhYKXtsZXQgSztpZihraS50ZXN0KFgpKXtLPXt9O2xldCBpZTtmb3IoO2llPVgubWF0Y2goa2kpOylYPVguc2xpY2UoMCxYLmxlbmd0aC1pZVswXS5sZW5ndGgpLEtbaWVbMF0udG9Mb3dlckNhc2UoKV09ITB9cmV0dXJuW3AuaHlwaGVuYXRlKFguc2xpY2UoMikpLEtdfWxldCBWcj0oKCk9Pih7c3RvcDoxLHByZXZlbnQ6MTw8MSxzZWxmOjE8PDJ9KSkoKTtmdW5jdGlvbiBacihYKXtsZXQgSz0wO3JldHVybiBYLmluY2x1ZGVzKCJzdG9wIikmJihLfD1Wci5zdG9wKSxYLmluY2x1ZGVzKCJwcmV2ZW50IikmJihLfD1Wci5wcmV2ZW50KSxYLmluY2x1ZGVzKCJzZWxmIikmJihLfD1Wci5zZWxmKSxLfWxldCBBcj0wLHBuPTEsWHI9MyxVcj04O2Z1bmN0aW9uIER0KFgsSyl7bGV0e3BhcmVudE5vZGU6aWV9PVg7aWYoIWllKXJldHVybiBudWxsO2xldHtjaGlsZE5vZGVzOk5lfT1pZTtyZXR1cm4gTmVbTmUuaW5kZXhPZihYKSsoSz09PSJuIj8xOi0xKV18fG51bGx9ZnVuY3Rpb24gVGUoWCl7bGV0e3BhcmVudE5vZGU6S309WDtpZihLKXtsZXR7Y2hpbGROb2RlczppZX09SyxOZT1pZS5pbmRleE9mKFgpO05lPi0xJiYoWC5wYXJlbnROb2RlPW51bGwsaWUuc3BsaWNlKE5lLDEpKX19ZnVuY3Rpb24gX2koWCl7IVgubm9kZUlkJiZYLnBhZ2VOb2RlJiYoWC5ub2RlSWQ9WC5wYWdlTm9kZS5nZW5JZCgpKX1jbGFzcyBiaSBleHRlbmRzIHZye2NvbnN0cnVjdG9yKEssaWUsTmUpe3N1cGVyKCk7aWYodGhpcy5wYWdlTm9kZT1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuX3RleHQ9bnVsbCxOZSl7bGV0e3BhZ2VOb2RlOnN0fT1OZTtzdCYmKHRoaXMucGFnZU5vZGU9c3QsdGhpcy5ub2RlSWQ9c3QuZ2VuSWQoKSwhc3QuaXNVbm1vdW50ZWQmJnN0Lm9uQ3JlYXRlKHRoaXMsaWUpKX10aGlzLm5vZGVUeXBlPUssdGhpcy5ub2RlTmFtZT1pZSx0aGlzLmNoaWxkTm9kZXM9W119Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzWzBdfHxudWxsfWdldCBsYXN0Q2hpbGQoKXtsZXR7Y2hpbGROb2RlczpLfT10aGlzLGllPUsubGVuZ3RoO3JldHVybiBpZT9LW2llLTFdOm51bGx9Z2V0IG5leHRTaWJsaW5nKCl7cmV0dXJuIER0KHRoaXMsIm4iKX1nZXQgbm9kZVZhbHVlKCl7cmV0dXJuIG51bGx9c2V0IG5vZGVWYWx1ZShLKXt9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX3RleHR8fCIifXNldCB0ZXh0Q29udGVudChLKXt0aGlzLl90ZXh0PUssdGhpcy5wYWdlTm9kZSYmIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQmJnRoaXMucGFnZU5vZGUub25UZXh0Q29udGVudCh0aGlzLEspfWdldCBwYXJlbnRFbGVtZW50KCl7bGV0e3BhcmVudE5vZGU6S309dGhpcztyZXR1cm4gSyYmSy5ub2RlVHlwZT09PXBuP0s6bnVsbH1nZXQgcHJldmlvdXNTaWJsaW5nKCl7cmV0dXJuIER0KHRoaXMsInAiKX1hcHBlbmRDaGlsZChLKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoSyxudWxsKX1jbG9uZU5vZGUoSyl7bGV0IGllPXAuZXh0ZW5kKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKSx0aGlzKSx7YXR0cmlidXRlczpOZX09aWU7cmV0dXJuIE5lJiYoaWUuYXR0cmlidXRlcz1wLmV4dGVuZCh7fSxOZSkpLEsmJihpZS5jaGlsZE5vZGVzPWllLmNoaWxkTm9kZXMubWFwKHN0PT5zdC5jbG9uZU5vZGUoITApKSksaWV9aW5zZXJ0QmVmb3JlKEssaWUpe1RlKEspLEsucGFnZU5vZGU9dGhpcy5wYWdlTm9kZSxLLnBhcmVudE5vZGU9dGhpcyxfaShLKTtsZXR7Y2hpbGROb2RlczpOZX09dGhpcztpZihpZSl7bGV0IHN0PU5lLmluZGV4T2YoaWUpO2lmKHN0PT09LTEpdGhyb3cgbmV3IE5pKCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5zZXJ0QmVmb3JlJyBvbiAnTm9kZSc6IFRoZSBub2RlIGJlZm9yZSB3aGljaCB0aGUgbmV3IG5vZGUgaXMgdG8gYmUgaW5zZXJ0ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlLiIpO05lLnNwbGljZShzdCwwLEspfWVsc2UgTmUucHVzaChLKTtyZXR1cm4gdGhpcy5wYWdlTm9kZSYmIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQ/dGhpcy5wYWdlTm9kZS5vbkluc2VydEJlZm9yZSh0aGlzLEssaWUpOkt9cmVtb3ZlQ2hpbGQoSyl7bGV0e2NoaWxkTm9kZXM6aWV9PXRoaXMsTmU9aWUuaW5kZXhPZihLKTtpZihOZT09PS0xKXRocm93IG5ldyBOaSgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlbW92ZUNoaWxkJyBvbiAnTm9kZSc6IFRoZSBub2RlIHRvIGJlIHJlbW92ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlLiIpO3JldHVybiBLLnBhcmVudE5vZGU9bnVsbCxpZS5zcGxpY2UoTmUsMSksdGhpcy5wYWdlTm9kZSYmIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQ/dGhpcy5wYWdlTm9kZS5vblJlbW92ZUNoaWxkKEspOkt9fWxldCB5aT0iY2xhc3MiLE9yPSJzdHlsZSIsUmk9Ii52T3duZXJJZCIsVHI9Ii52UmVuZGVyanMiO2NsYXNzIFJyIGV4dGVuZHMgYml7Y29uc3RydWN0b3IoSyxpZSxOZSl7c3VwZXIoSyxpZSxOZSk7dGhpcy5hdHRyaWJ1dGVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zdHlsZT1udWxsLHRoaXMudlNob3c9bnVsbCx0aGlzLl9odG1sPW51bGx9Z2V0IGNsYXNzTmFtZSgpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbeWldfHwiIn1zZXQgY2xhc3NOYW1lKEspe3RoaXMuc2V0QXR0cmlidXRlKHlpLEspfWdldCBpbm5lckhUTUwoKXtyZXR1cm4iIn1zZXQgaW5uZXJIVE1MKEspe3RoaXMuX2h0bWw9S31hZGRFdmVudExpc3RlbmVyKEssaWUsTmUpe3N1cGVyLmFkZEV2ZW50TGlzdGVuZXIoSyxpZSxOZSksdGhpcy5wYWdlTm9kZSYmIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQmJihpZS53eHNFdmVudD90aGlzLnBhZ2VOb2RlLm9uQWRkV3hzRXZlbnQodGhpcyxIaShLLE5lKSxpZS53eHNFdmVudCxacihpZS5tb2RpZmllcnN8fFtdKSk6dGhpcy5wYWdlTm9kZS5vbkFkZEV2ZW50KHRoaXMsSGkoSyxOZSksWnIoaWUubW9kaWZpZXJzfHxbXSkpKX1yZW1vdmVFdmVudExpc3RlbmVyKEssaWUsTmUpe3N1cGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoSyxpZSxOZSksdGhpcy5wYWdlTm9kZSYmIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQmJnRoaXMucGFnZU5vZGUub25SZW1vdmVFdmVudCh0aGlzLEhpKEssTmUpKX1nZXRBdHRyaWJ1dGUoSyl7cmV0dXJuIEs9PT1Pcj90aGlzLnN0eWxlOnRoaXMuYXR0cmlidXRlc1tLXX1yZW1vdmVBdHRyaWJ1dGUoSyl7Sz09T3I/dGhpcy5zdHlsZT1udWxsOmRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbS10sdGhpcy5wYWdlTm9kZSYmIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQmJnRoaXMucGFnZU5vZGUub25SZW1vdmVBdHRyaWJ1dGUodGhpcyxLKX1zZXRBdHRyaWJ1dGUoSyxpZSl7Sz09PU9yP3RoaXMuc3R5bGU9aWU6dGhpcy5hdHRyaWJ1dGVzW0tdPWllLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiZ0aGlzLnBhZ2VOb2RlLm9uU2V0QXR0cmlidXRlKHRoaXMsSyxpZSl9dG9KU09OKHthdHRyOkssbm9ybWFsaXplOmllfT17fSl7bGV0e2F0dHJpYnV0ZXM6TmUsc3R5bGU6c3QsbGlzdGVuZXJzOlh0LF90ZXh0OnhufT10aGlzLERuPXt9O09iamVjdC5rZXlzKE5lKS5sZW5ndGgmJihEbi5hPWllP2llKE5lKTpOZSk7bGV0IF9yPU9iamVjdC5rZXlzKFh0KTtpZihfci5sZW5ndGgpe2xldCBCcixtbz17fTtfci5mb3JFYWNoKHhvPT57bGV0IEJvPVh0W3hvXTtpZihCby5sZW5ndGgpe2xldHt3eHNFdmVudDpMbixtb2RpZmllcnM6WW59PUJvWzBdLEZuPVpyKFlufHxbXSk7TG4/KEJyfHwoQnI9e30pLEJyW3hvXT1baWU/aWUoTG4pOkxuLEZuXSk6bW9beG9dPUZufX0pLERuLmU9aWU/aWUobW8sITEpOm1vLEJyJiYoRG4udz1pZT9pZShCciwhMSk6QnIpfXJldHVybiBzdCE9PW51bGwmJihEbi5zPWllP2llKHN0KTpzdCksS3x8KERuLmk9dGhpcy5ub2RlSWQsRG4ubj10aGlzLm5vZGVOYW1lKSx4biE9PW51bGwmJihEbi50PWllP2llKHhuKTp4biksRG59fWNsYXNzIGFpIGV4dGVuZHMgYml7Y29uc3RydWN0b3IoSyxpZSl7c3VwZXIoVXIsIiNjb21tZW50IixpZSk7dGhpcy5fdGV4dD0iIn10b0pTT04oSz17fSl7cmV0dXJuIEsuYXR0cj97fTp7aTp0aGlzLm5vZGVJZH19fWNsYXNzIFByIGV4dGVuZHMgUnJ7Y29uc3RydWN0b3IoSyxpZSl7c3VwZXIocG4sSy50b1VwcGVyQ2FzZSgpLGllKTt0aGlzLnRhZ05hbWU9dGhpcy5ub2RlTmFtZX19Y2xhc3MgRWkgZXh0ZW5kcyBQcntnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoInZhbHVlIil9c2V0IHZhbHVlKEspe3RoaXMuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsSyl9fWNsYXNzIGZuIGV4dGVuZHMgRWl7fWNsYXNzIGppIGV4dGVuZHMgUnJ7Y29uc3RydWN0b3IoSyxpZSl7c3VwZXIoWHIsIiN0ZXh0IixpZSk7dGhpcy5fdGV4dD1LfWdldCBub2RlVmFsdWUoKXtyZXR1cm4gdGhpcy5fdGV4dHx8IiJ9c2V0IG5vZGVWYWx1ZShLKXt0aGlzLl90ZXh0PUssdGhpcy5wYWdlTm9kZSYmIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQmJnRoaXMucGFnZU5vZGUub25Ob2RlVmFsdWUodGhpcyxLKX19bGV0ICRyPXtBRDpbImRhdGEiXSwiQUQtRFJBVyI6WyJkYXRhIl0sIkxJVkUtUExBWUVSIjpbInBpY3R1cmUtaW4tcGljdHVyZS1tb2RlIl0sTUFQOlsibWFya2VycyIsInBvbHlsaW5lIiwiY2lyY2xlcyIsImNvbnRyb2xzIiwiaW5jbHVkZS1wb2ludHMiLCJwb2x5Z29ucyJdLFBJQ0tFUjpbInJhbmdlIiwidmFsdWUiXSwiUElDS0VSLVZJRVciOlsidmFsdWUiXSwiUklDSC1URVhUIjpbIm5vZGVzIl0sVklERU86WyJkYW5tdS1saXN0IiwiaGVhZGVyIl0sIldFQi1WSUVXIjpbIndlYnZpZXctc3R5bGVzIl19LHRvPVsiYW5pbWF0aW9uIl0sRW49KFgsSyk9PntpZih0by5pbmRleE9mKEspPi0xKXJldHVybiEwO2xldCBpZT0kcltYLm5vZGVOYW1lXTtyZXR1cm4hIShpZSYmaWUuaW5kZXhPZihLKT4tMSl9LEhyPTEsc3I9MixTaT0zLHhpPTQsbXI9NSxRcj02LGVyPTcsdHI9OCxHbj05LG5yPTEwLGNyPTEyLGhvPTE1LGdvPTIwO2Z1bmN0aW9uIE5vKFgsSyx7Y2xlYXJUaW1lb3V0OmllLHNldFRpbWVvdXQ6TmV9KXtsZXQgc3QsWHQ9ZnVuY3Rpb24oKXtpZShzdCksc3Q9TmUoKCk9PlguYXBwbHkodGhpcyxhcmd1bWVudHMpLEspfTtyZXR1cm4gWHQuY2FuY2VsPWZ1bmN0aW9uKCl7aWUoc3QpfSxYdH1jbGFzcyBub3tjb25zdHJ1Y3RvcihLLGllKXt0aGlzLmlkPUssdGhpcy5saXN0ZW5lcj17fSx0aGlzLmVtaXRDYWNoZT1bXSxpZSYmT2JqZWN0LmtleXMoaWUpLmZvckVhY2goTmU9Pnt0aGlzLm9uKE5lLGllW05lXSl9KX1lbWl0KEssLi4uaWUpe2xldCBOZT10aGlzLmxpc3RlbmVyW0tdO2lmKCFOZSlyZXR1cm4gdGhpcy5lbWl0Q2FjaGUucHVzaCh7ZXZlbnROYW1lOkssYXJnczppZX0pO05lLmZvckVhY2goc3Q9PntzdC5mbi5hcHBseShzdC5mbixpZSl9KSx0aGlzLmxpc3RlbmVyW0tdPU5lLmZpbHRlcihzdD0+c3QudHlwZSE9PSJvbmNlIil9b24oSyxpZSl7dGhpcy5fYWRkTGlzdGVuZXIoSywib24iLGllKSx0aGlzLl9jbGVhckNhY2hlKEspfW9uY2UoSyxpZSl7dGhpcy5fYWRkTGlzdGVuZXIoSywib25jZSIsaWUpLHRoaXMuX2NsZWFyQ2FjaGUoSyl9b2ZmKEssaWUpe2xldCBOZT10aGlzLmxpc3RlbmVyW0tdO2lmKCEhTmUpaWYoaWUpZm9yKGxldCBzdD0wO3N0PE5lLmxlbmd0aDspTmVbc3RdLmZuPT09aWUmJihOZS5zcGxpY2Uoc3QsMSksc3QtLSksc3QrKztlbHNlIGRlbGV0ZSB0aGlzLmxpc3RlbmVyW0tdfV9jbGVhckNhY2hlKEspe2ZvcihsZXQgaWU9MDtpZTx0aGlzLmVtaXRDYWNoZS5sZW5ndGg7aWUrKyl7bGV0IE5lPXRoaXMuZW1pdENhY2hlW2llXSxzdD1LP05lLmV2ZW50TmFtZT09PUs/SzpudWxsOk5lLmV2ZW50TmFtZTtpZighc3QpY29udGludWU7aWYodHlwZW9mIHRoaXMuZW1pdC5hcHBseSh0aGlzLFtzdCwuLi5OZS5hcmdzXSk9PSJudW1iZXIiKXt0aGlzLmVtaXRDYWNoZS5wb3AoKTtjb250aW51ZX10aGlzLmVtaXRDYWNoZS5zcGxpY2UoaWUsMSksaWUtLX19X2FkZExpc3RlbmVyKEssaWUsTmUpeyh0aGlzLmxpc3RlbmVyW0tdfHwodGhpcy5saXN0ZW5lcltLXT1bXSkpLnB1c2goe2ZuOk5lLHR5cGU6aWV9KX19bGV0IGtvPVtMcixncixvdCx6LHByLFBuLHplLG50LEF0LFF0LFRuLG9yLHNuLEpyLFduLEFuLGduLHdyLEtyXSxqcj1bZ3Isb3RdO2Z1bmN0aW9uIHhyKFgpe3JldHVybiBqci5pbmRleE9mKFgpPi0xfWZ1bmN0aW9uIHBvKFgpe3JldHVybiBrby5pbmRleE9mKFgpPi0xfWxldCBSbz1bb3QseixKLGhuLHVuLGdpLHBpLHFyLExyLGdyLFNuLHByLHZpLFBuLHplLG50LEF0LFF0LFRuLHNuLG9yLEpyLFduLEFuLGduLHdyLEtyXTtmdW5jdGlvbiBybyhYLEssaWU9ITApe3JldHVybiBpZSYmIXAuaXNGdW5jdGlvbihLKT8hMTpSby5pbmRleE9mKFgpPi0xPyEwOlguaW5kZXhPZigib24iKT09PTB9bGV0IEJpLHZvPVtdO2Z1bmN0aW9uIE1pKFgpe2lmKEJpKXJldHVybiBYKEJpKTt2by5wdXNoKFgpfWZ1bmN0aW9uIHppKFgpe0JpPVgsdm8uZm9yRWFjaChLPT5LKFgpKX1sZXQgUW89UWkoKFgsSyk9PntpZihwLmlzRnVuY3Rpb24oWC5fY29tcG9uZW50Lm9uRXJyb3IpKXJldHVybiBLKFgpfSksQj1mdW5jdGlvbigpe307Qi5wcm90b3R5cGU9e29uOmZ1bmN0aW9uKFgsSyxpZSl7dmFyIE5lPXRoaXMuZXx8KHRoaXMuZT17fSk7cmV0dXJuKE5lW1hdfHwoTmVbWF09W10pKS5wdXNoKHtmbjpLLGN0eDppZX0pLHRoaXN9LG9uY2U6ZnVuY3Rpb24oWCxLLGllKXt2YXIgTmU9dGhpcztmdW5jdGlvbiBzdCgpe05lLm9mZihYLHN0KSxLLmFwcGx5KGllLGFyZ3VtZW50cyl9cmV0dXJuIHN0Ll89Syx0aGlzLm9uKFgsc3QsaWUpfSxlbWl0OmZ1bmN0aW9uKFgpe3ZhciBLPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGllPSgodGhpcy5lfHwodGhpcy5lPXt9KSlbWF18fFtdKS5zbGljZSgpLE5lPTAsc3Q9aWUubGVuZ3RoO2ZvcihOZTtOZTxzdDtOZSsrKWllW05lXS5mbi5hcHBseShpZVtOZV0uY3R4LEspO3JldHVybiB0aGlzfSxvZmY6ZnVuY3Rpb24oWCxLKXt2YXIgaWU9dGhpcy5lfHwodGhpcy5lPXt9KSxOZT1pZVtYXSxzdD1bXTtpZihOZSYmSylmb3IodmFyIFh0PTAseG49TmUubGVuZ3RoO1h0PHhuO1h0KyspTmVbWHRdLmZuIT09SyYmTmVbWHRdLmZuLl8hPT1LJiZzdC5wdXNoKE5lW1h0XSk7cmV0dXJuIHN0Lmxlbmd0aD9pZVtYXT1zdDpkZWxldGUgaWVbWF0sdGhpc319O3ZhciBRPUI7bGV0IGhlPXtibGFjazoicmdiYSgwLDAsMCwwLjQpIix3aGl0ZToicmdiYSgyNTUsMjU1LDI1NSwwLjQpIn07ZnVuY3Rpb24gYWUoWCl7cmV0dXJuIFgmJlggaW4gaGU/aGVbWF06WH1mdW5jdGlvbiBkZShYKXtyZXR1cm4gWD09PSJibGFjayI/IiMwMDAwMDAiOiIjZmZmZmZmIn1mdW5jdGlvbiB2dChYLEs9e30saWU9ImxpZ2h0Iil7bGV0IE5lPUtbaWVdLHN0PXt9O3JldHVybiBOZT8oT2JqZWN0LmtleXMoWCkuZm9yRWFjaChYdD0+e2xldCB4bj1YW1h0XTtzdFtYdF09KCgpPT57aWYocC5pc1BsYWluT2JqZWN0KHhuKSlyZXR1cm4gdnQoeG4sSyxpZSk7aWYocC5pc0FycmF5KHhuKSlyZXR1cm4geG4ubWFwKERuPT5wLmlzUGxhaW5PYmplY3QoRG4pP3Z0KERuLEssaWUpOkRuKTtpZihwLmlzU3RyaW5nKHhuKSYmeG4uc3RhcnRzV2l0aCgiQCIpKXtsZXQgRG49eG4ucmVwbGFjZSgiQCIsIiIpLF9yPU5lW0RuXXx8eG47c3dpdGNoKFh0KXtjYXNlInRpdGxlQ29sb3IiOl9yPWRlKF9yKTticmVhaztjYXNlImJvcmRlclN0eWxlIjpfcj1hZShfcik7YnJlYWt9cmV0dXJuIF9yfXJldHVybiB4bn0pKCl9KSxzdCk6WH12YXIga3Q9e2ludm9rZUFycmF5Rm5zOkNyLGlzVW5pTGlmZWN5Y2xlSG9vazpybyxPTl9MT0FEOmdyLE9OX1NIT1c6b3QsTElORUZFRUQ6dyxSRU5ERVJKU19NT0RVTEVTOkluLGZvcm1hdExvZzpBbyxXWFNfUFJPVE9DT0w6T3QsV1hTX01PRFVMRVM6d3QsVW5pTGlmZWN5Y2xlSG9va3M6Um8sT05fRVJST1I6aG4saW52b2tlQ3JlYXRlRXJyb3JIYW5kbGVyOlFvLGludm9rZUNyZWF0ZVZ1ZUFwcEhvb2s6emkscGFyc2VOVnVlRGF0YXNldDpabixvbmNlOlFpLEkxOE5fSlNPTl9ERUxJTUlURVJTOnksRW1pdHRlcjpRLG5vcm1hbGl6ZVN0eWxlczp2dCxhZGRMZWFkaW5nU2xhc2g6dW8scmVzb2x2ZUNvbXBvbmVudEluc3RhbmNlOlhvLHJlbW92ZUxlYWRpbmdTbGFzaDprbixPTl9SRVNJWkU6dmksT05fQVBQX0VOVEVSX0ZPUkVHUk9VTkQ6d28sT05fQVBQX0VOVEVSX0JBQ0tHUk9VTkQ6ZGEsT05fSElERTp6LE9OX1BBR0VfU0NST0xMOnplLE9OX1JFQUNIX0JPVFRPTTpBdCxTQ0hFTUVfUkU6RmUsREFUQV9SRTpJdCxjYWNoZVN0cmluZ0Z1bmN0aW9uOlhpLHBhcnNlUXVlcnk6a3IsY2FsbE9wdGlvbnM6S24sT05fVU5IQU5ETEVfUkVKRUNUSU9OOnBpLE9OX1BBR0VfTk9UX0ZPVU5EOmdpLFBSSU1BUllfQ09MT1I6UixnZXRMZW46bWksT05fVEhFTUVfQ0hBTkdFOnVuLFRBQkJBUl9IRUlHSFQ6RSxOQVZCQVJfSEVJR0hUOk4sc29ydE9iamVjdDplbyxPRkZfVEhFTUVfQ0hBTkdFOnluLE9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0U6Sm4sbm9ybWFsaXplVGFiQmFyU3R5bGVzOmFlLE9OX05BVklHQVRJT05fQkFSX0JVVFRPTl9UQVA6V24sc3RyaW5naWZ5UXVlcnk6Zm8sZGVib3VuY2U6Tm8sT05fUFVMTF9ET1dOX1JFRlJFU0g6UXQsT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NIQU5HRUQ6Z24sT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NPTkZJUk1FRDp3cixPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ0xJQ0tFRDpBbixPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfRk9DVVNfQ0hBTkdFRDpLcixPTl9CQUNLX1BSRVNTOlBuLFVuaU5vZGU6YmksTk9ERV9UWVBFX1BBR0U6QXIsQUNUSU9OX1RZUEVfUEFHRV9DUkVBVEU6SHIsQUNUSU9OX1RZUEVfUEFHRV9DUkVBVEVEOnNyLEFDVElPTl9UWVBFX1BBR0VfU0NST0xMOmhvLEFDVElPTl9UWVBFX0lOU0VSVDp4aSxBQ1RJT05fVFlQRV9DUkVBVEU6U2ksQUNUSU9OX1RZUEVfUkVNT1ZFOm1yLEFDVElPTl9UWVBFX0FERF9FVkVOVDp0cixBQ1RJT05fVFlQRV9BRERfV1hTX0VWRU5UOmNyLEFDVElPTl9UWVBFX1JFTU9WRV9FVkVOVDpHbixBQ1RJT05fVFlQRV9TRVRfQVRUUklCVVRFOlFyLEFDVElPTl9UWVBFX1JFTU9WRV9BVFRSSUJVVEU6ZXIsQUNUSU9OX1RZUEVfU0VUX1RFWFQ6bnIsT05fUkVBRFk6U24sT05fVU5MT0FEOnByLEV2ZW50Q2hhbm5lbDpubyxPTl9SRUFDSF9CT1RUT01fRElTVEFOQ0U6aCxwYXJzZVVybDpObixvbkNyZWF0ZVZ1ZUFwcDpNaSxPTl9UQUJfSVRFTV9UQVA6bnQsT05fTEFVTkNIOkosQUNUSU9OX1RZUEVfRVZFTlQ6Z28sY3JlYXRlVW5pRXZlbnQ6RnIsT05fV1hTX0lOVk9LRV9DQUxMX01FVEhPRDpVaSxXRUJfSU5WT0tFX0FQUFNFUlZJQ0U6VnQsaXNSb290SG9vazpwbyxpc1Jvb3RJbW1lZGlhdGVIb29rOnhyLFVuaUlucHV0RWxlbWVudDpFaSxVbmlUZXh0QXJlYUVsZW1lbnQ6Zm4sVW5pRWxlbWVudDpQcixVbmlUZXh0Tm9kZTpqaSxVbmlDb21tZW50Tm9kZTphaSxmb3JjZVBhdGNoUHJvcDpFbixKU09OX1BST1RPQ09MOlAscmVzb2x2ZU93bmVyRWw6cmksQVRUUl9WX09XTkVSX0lEOlJpLEFUVFJfVl9SRU5ERVJKUzpUcn07cmV0dXJuIGt0fShmKTtyZXR1cm4gc312YXIgeU49MTtmdW5jdGlvbiBXcCgpe3JldHVybih5TisrKS50b1N0cmluZygpfXZhciBkZj1mPT5mJiZKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGYpKXx8ZjtmdW5jdGlvbiBnYyhmKXtsZXQgcz1NYShmKTtyZXR1cm4gcy5zdWJzdHJpbmcoOCxzLmxlbmd0aC0xKX1mdW5jdGlvbiBoZihmKXtpZighem4oYnRvYSkpcmV0dXJuIiI7bGV0IHM9QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG5ldyBVaW50OEFycmF5KGYpLHA9PlN0cmluZy5mcm9tQ2hhckNvZGUocCkpLmpvaW4oIiIpO3JldHVybiBidG9hKHMpfWZ1bmN0aW9uIHBjKGYpe2lmKCFmfHx0eXBlb2YgZiE9Im9iamVjdCIpcmV0dXJuITA7Zm9yKGxldCBzIGluIGYpaWYoaWwoZixzKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgaXU9WyJvZmYiLCJlcnJvciIsIndhcm4iLCJpbmZvIiwibG9nIiwiZGVidWciXSxvdT17fTtmdW5jdGlvbiBHcCgpe2l1LmZvckVhY2goZj0+e2xldCBzPWl1LmluZGV4T2YoZik7b3VbZl09e30saXUuZm9yRWFjaChwPT57aXUuaW5kZXhPZihwKTw9cyYmKG91W2ZdW3BdPSEwKX0pfSl9ZnVuY3Rpb24gUW4oZil7bGV0IHM9Z2xvYmFsLldYRW52aXJvbm1lbnQmJmdsb2JhbC5XWEVudmlyb25tZW50LmxvZ0xldmVsfHwibG9nIjtyZXR1cm4gb3Vbc10mJm91W3NdW2ZdfWZ1bmN0aW9uIFZpKGYpe2dsb2JhbC5uYXRpdmVMb2coInd4SW50ZXJhY3Rpb25BbmFseXplcjogW2pzZm1dIitmLCJfX0RFQlVHIil9ZnVuY3Rpb24gWXAoZixzLHApe3JldHVybmAke3N9QCR7cH0jJHtmfWB9dmFyIGF1PWNsYXNze2NvbnN0cnVjdG9yKHMpe3RoaXMuaW5zdGFuY2VJZD1TdHJpbmcocyksdGhpcy5sYXN0Q2FsbGJhY2tJZD0wLHRoaXMuY2FsbGJhY2tzPXt9LHRoaXMuaG9va3M9e319YWRkKHMpe3JldHVybiB0aGlzLmxhc3RDYWxsYmFja0lkKyssdGhpcy5jYWxsYmFja3NbdGhpcy5sYXN0Q2FsbGJhY2tJZF09cyx0aGlzLmxhc3RDYWxsYmFja0lkfXJlbW92ZShzKXtsZXQgcD10aGlzLmNhbGxiYWNrc1tzXTtyZXR1cm4gZGVsZXRlIHRoaXMuY2FsbGJhY2tzW3NdLHB9cmVnaXN0ZXJIb29rKHMscCx3LE4pe2xldCBFPVlwKHMscCx3KTt0aGlzLmhvb2tzW0VdJiZjb25zb2xlLndhcm4oYFtKUyBGcmFtZXdvcmtdIE92ZXJyaWRlIGFuIGV4aXN0aW5nIGNvbXBvbmVudCBob29rICIke0V9Ii5gKSx0aGlzLmhvb2tzW0VdPU59dHJpZ2dlckhvb2socyxwLHcsTil7bGV0IEU9WXAocyxwLHcpLGg9dGhpcy5ob29rc1tFXTtpZighem4oaCkpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEludmFsaWQgaG9vayBmdW5jdGlvbiB0eXBlICgke3R5cGVvZiBofSkgb24gIiR7RX0iLmApLG51bGw7bGV0IHk9bnVsbDt0cnl7eT1oLmFwcGx5KG51bGwsTnx8W10pfWNhdGNoKFIpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBleGVjdXRlIHRoZSBob29rIGZ1bmN0aW9uIG9uICIke0V9Ii5gKSxSfXJldHVybiB5fWNvbnN1bWUocyxwLHcpe2xldCBOPXRoaXMuY2FsbGJhY2tzW3NdO2lmKCh0eXBlb2Ygdz09InVuZGVmaW5lZCJ8fHc9PT0hMSkmJmRlbGV0ZSB0aGlzLmNhbGxiYWNrc1tzXSx6bihOKSl0cnl7cmV0dXJuIE4uY2FsbChudWxsLHAsdyl9Y2F0Y2goRSl7dGhyb3cgY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uOgogJHtFLnRvU3RyaW5nKCl9YCksRX1yZXR1cm4gbmV3IEVycm9yKGBpbnZhbGlkIGNhbGxiYWNrIGlkICIke3N9ImApfWNsb3NlKCl7dGhpcy5jYWxsYmFja3M9e30sdGhpcy5ob29rcz17fX19O3ZhciBzdT17fTtmdW5jdGlvbiBxcChmLHMpe2YmJihzdVtmXT1zKX1mdW5jdGlvbiBycyhmKXtyZXR1cm4gc3VbZl19ZnVuY3Rpb24gSnAoZil7ZGVsZXRlIHN1W2ZdfWZ1bmN0aW9uIERyKGYpe2lmKGYpe2xldCBzPXN1W2ZdO2lmKHMmJnMudGFza0NlbnRlcilyZXR1cm4gcy50YXNrQ2VudGVyfXJldHVybiBudWxsfWZ1bmN0aW9uIEVOKGYpe2YuY2FsY0NsYXNzTGlzdCYmZi5jYWxjQ2xhc3NMaXN0KCl9ZnVuY3Rpb24gZ2YoZixzLHApe2xldHtkb2N1bWVudEVsZW1lbnQ6d309ZjtpZih3LnB1cmVDaGlsZHJlbi5sZW5ndGg+MHx8cy5wYXJlbnROb2RlKXJldHVybjtsZXQgTj13LmNoaWxkcmVuLEU9cD9OLmluZGV4T2YocCk6LTE7RTwwP04ucHVzaChzKTpOLnNwbGljZShFLDAscykscy5ub2RlVHlwZT09PTE/KHMucm9sZT09PSJib2R5Ij8ocy5kb2NJZD1mLmlkLHMub3duZXJEb2N1bWVudD1mLHMucGFyZW50Tm9kZT13LG9sKHMsdykpOihzLmNoaWxkcmVuLmZvckVhY2goaD0+e2gucGFyZW50Tm9kZT1zfSkscGYoZixzKSxvbChzLHcpLGRlbGV0ZSBmLm5vZGVNYXBbcy5ub2RlSWRdKSx3LnB1cmVDaGlsZHJlbi5wdXNoKHMpLFNOKGYscykpOihzLnBhcmVudE5vZGU9dyxmLm5vZGVNYXBbcy5yZWZdPXMpfWZ1bmN0aW9uIFNOKGYscyl7bGV0IHA9cy50b0pTT04oKTtmJiZmLnRhc2tDZW50ZXImJnpuKGYudGFza0NlbnRlci5zZW5kKSYmZi50YXNrQ2VudGVyLnNlbmQoImRvbSIse2FjdGlvbjoiY3JlYXRlQm9keSJ9LFtwXSl9ZnVuY3Rpb24gcGYoZixzKXtzLnJvbGU9ImJvZHkiLHMuZGVwdGg9MSxkZWxldGUgZi5ub2RlTWFwW3Mubm9kZUlkXSxzLnJlZj0iX3Jvb3QiLGYubm9kZU1hcC5fcm9vdD1zLGYuYm9keT1zfWZ1bmN0aW9uIG9sKGYscyl7Zi5wYXJlbnROb2RlPXMsRU4oZikscy5kb2NJZCYmKGYuZG9jSWQ9cy5kb2NJZCxmLm93bmVyRG9jdW1lbnQ9cy5vd25lckRvY3VtZW50LGYub3duZXJEb2N1bWVudC5ub2RlTWFwW2Yubm9kZUlkXT1mLGYuZGVwdGg9cy5kZXB0aCsxKSxmLmNoaWxkcmVuLmZvckVhY2gocD0+e29sKHAsZil9KX1mdW5jdGlvbiB2ZihmKXtmb3IoO2Y7KXtpZihmLm5vZGVUeXBlPT09MSlyZXR1cm4gZjtmPWYubmV4dFNpYmxpbmd9fWZ1bmN0aW9uIG1mKGYpe2Zvcig7Zjspe2lmKGYubm9kZVR5cGU9PT0xKXJldHVybiBmO2Y9Zi5wcmV2aW91c1NpYmxpbmd9fWZ1bmN0aW9uIGFsKGYscyxwLHc9ITEpe3A8MCYmKHA9MCk7bGV0IE49c1twLTFdLEU9c1twXTtyZXR1cm4gcy5zcGxpY2UocCwwLGYpLHcmJihOJiYoTi5uZXh0U2libGluZz1mKSxmLnByZXZpb3VzU2libGluZz1OLGYubmV4dFNpYmxpbmc9RSxFJiYoRS5wcmV2aW91c1NpYmxpbmc9ZikpLHB9ZnVuY3Rpb24gc2woZixzLHAsdz0hMSl7bGV0IE49cy5pbmRleE9mKGYpO2lmKE48MClyZXR1cm4tMTtpZih3KXtsZXQgUj1zW04tMV0sRmU9c1tOKzFdO1ImJihSLm5leHRTaWJsaW5nPUZlKSxGZSYmKEZlLnByZXZpb3VzU2libGluZz1SKX1zLnNwbGljZShOLDEpO2xldCBFPXA7Tjw9cCYmKEU9cC0xKTtsZXQgaD1zW0UtMV0seT1zW0VdO3JldHVybiBzLnNwbGljZShFLDAsZiksdyYmKGgmJihoLm5leHRTaWJsaW5nPWYpLGYucHJldmlvdXNTaWJsaW5nPWgsZi5uZXh0U2libGluZz15LHkmJih5LnByZXZpb3VzU2libGluZz1mKSksTj09PUU/LTE6cH1mdW5jdGlvbiBfZihmLHMscD0hMSl7bGV0IHc9cy5pbmRleE9mKGYpO2lmKCEodzwwKSl7aWYocCl7bGV0IE49c1t3LTFdLEU9c1t3KzFdO04mJihOLm5leHRTaWJsaW5nPUUpLEUmJihFLnByZXZpb3VzU2libGluZz1OKX1zLnNwbGljZSh3LDEpfX12YXIgbGw9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlcHRoPTA7dGhpcy5ub2RlSWQ9V3AoKSx0aGlzLnJlZj10aGlzLm5vZGVJZCx0aGlzLmNoaWxkcmVuPVtdLHRoaXMucHVyZUNoaWxkcmVuPVtdLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMubmV4dFNpYmxpbmc9bnVsbCx0aGlzLnByZXZpb3VzU2libGluZz1udWxsfWRlc3Ryb3koKXtsZXQgcz1ycyh0aGlzLmRvY0lkKTtzJiYoZGVsZXRlIHRoaXMuZG9jSWQsZGVsZXRlIHMubm9kZU1hcFt0aGlzLm5vZGVJZF0pLHRoaXMuY2hpbGRyZW4uZm9yRWFjaChwPT57cC5kZXN0cm95KCl9KX19O3ZhciBLcD17fTtmdW5jdGlvbiBiZihmLHMpe2lmKCFJaShzKXx8IXMubGVuZ3RoKXJldHVybjtjbGFzcyBwIGV4dGVuZHMgWml7fXMuZm9yRWFjaCh3PT57cC5wcm90b3R5cGVbd109ZnVuY3Rpb24oLi4uTil7bGV0IEU9RHIodGhpcy5kb2NJZCk7aWYoRSlyZXR1cm4gRS5zZW5kKCJjb21wb25lbnQiLHtyZWY6dGhpcy5yZWYsY29tcG9uZW50OmYsbWV0aG9kOnd9LE4pfX0pLEtwW2ZdPXB9ZnVuY3Rpb24gWnAoZil7cmV0dXJuIEtwW2ZdfWZ1bmN0aW9uIE5yKGYscyxwLHcsTil7bGV0IEU9e3R5cGU6ImRlY2wiLHByb3A6Zix2YWx1ZTpzLnRvU3RyaW5nKCkscmF3czp3LHNvdXJjZTpOfTtyZXR1cm4gcCYmKEUuaW1wb3J0YW50PSEwKSxFfXZhciB3Tj0iYmFja2dyb3VuZENvbG9yIixDTj0iYmFja2dyb3VuZEltYWdlIixBTj1mPT57bGV0e3ZhbHVlOnMsaW1wb3J0YW50OnAscmF3czp3LHNvdXJjZTpOfT1mO3JldHVybi9eIz9cUyskLy50ZXN0KHMpfHwvXnJnYmE/KC4rKSQvLnRlc3Qocyk/W05yKHdOLHMscCx3LE4pXTovXmxpbmVhci1ncmFkaWVudCguKykkLy50ZXN0KHMpP1tOcihDTixzLHAsdyxOKV06W2ZdfSxPTj0iV2lkdGgiLFROPSJTdHlsZSIsUE49IkNvbG9yIjtmdW5jdGlvbiBJTihmKXtyZXR1cm4gcz0+e2xldHtwcm9wOnAsdmFsdWU6dyxpbXBvcnRhbnQ6TixyYXdzOkUsc291cmNlOmh9PXMseT13LnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKSxSPVsvXltcZFwuXStcUyp8Xih0aGlufG1lZGl1bXx0aGljaykkLywvXihzb2xpZHxkYXNoZWR8ZG90dGVkfG5vbmUpJC8sL1xTKy9dLm1hcChGZT0+e2xldCBJdD15LmZpbmRJbmRleChWdD0+RmUudGVzdChWdCkpO3JldHVybiBJdDwwP251bGw6eS5zcGxpY2UoSXQsMSlbMF19KTtyZXR1cm4geS5sZW5ndGg/W3NdOltOcihwK09OLChSWzBdfHwoZi50eXBlPT09InV2dWUiPyJ0aGluIjoiMCIpKS50cmltKCksTixFLGgpLE5yKHArVE4sKFJbMV18fChmLnR5cGU9PT0idXZ1ZSI/Im5vbmUiOiJzb2xpZCIpKS50cmltKCksTixFLGgpLE5yKHArUE4sKFJbMl18fCIjMDAwMDAwIikudHJpbSgpLE4sRSxoKV19fXZhciBOTj0iYm9yZGVyVG9wIixrTj0iYm9yZGVyUmlnaHQiLFJOPSJib3JkZXJCb3R0b20iLHhOPSJib3JkZXJMZWZ0Iix5Zj1mPT57bGV0e3Byb3A6cyx2YWx1ZTpwLGltcG9ydGFudDp3LHJhd3M6Tixzb3VyY2U6RX09ZixoPWZmKHMpLnNwbGl0KCItIilbMV07aD1ydShoKTtsZXQgeT1wLnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKTtzd2l0Y2goeS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bZl07Y2FzZSAyOnkucHVzaCh5WzBdLHlbMV0pO2JyZWFrO2Nhc2UgMzp5LnB1c2goeVsxXSk7YnJlYWt9cmV0dXJuW05yKE5OK2gseVswXSx3LE4sRSksTnIoa04raCx5WzFdLHcsTixFKSxOcihSTitoLHlbMl0sdyxOLEUpLE5yKHhOK2gseVszXSx3LE4sRSldfSxCTj0iYm9yZGVyVG9wTGVmdFJhZGl1cyIsTU49ImJvcmRlclRvcFJpZ2h0UmFkaXVzIixETj0iYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLExOPSJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIixGTj1mPT57bGV0e3ZhbHVlOnMsaW1wb3J0YW50OnAscmF3czp3LHNvdXJjZTpOfT1mLEU9cy5zcGxpdCgvXHMrLyk7aWYocy5pbmNsdWRlcygiLyIpKXJldHVybltmXTtzd2l0Y2goRS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bZl07Y2FzZSAyOkUucHVzaChFWzBdLEVbMV0pO2JyZWFrO2Nhc2UgMzpFLnB1c2goRVsxXSk7YnJlYWt9cmV0dXJuW05yKEJOLEVbMF0scCx3LE4pLE5yKE1OLEVbMV0scCx3LE4pLE5yKEROLEVbMl0scCx3LE4pLE5yKExOLEVbM10scCx3LE4pXX0sVk49eWYsVU49eWYsJE49ImZsZXhEaXJlY3Rpb24iLEhOPSJmbGV4V3JhcCIsak49Zj0+e2xldHt2YWx1ZTpzLGltcG9ydGFudDpwLHJhd3M6dyxzb3VyY2U6Tn09ZixFPXMuc3BsaXQoL1xzKy8pLGg9Wy9eKGNvbHVtbnxjb2x1bW4tcmV2ZXJzZXxyb3d8cm93LXJldmVyc2UpJC8sL14obm93cmFwfHdyYXB8d3JhcC1yZXZlcnNlKSQvXS5tYXAoeT0+e2xldCBSPUUuZmluZEluZGV4KEZlPT55LnRlc3QoRmUpKTtyZXR1cm4gUjwwP251bGw6RS5zcGxpY2UoUiwxKVswXX0pO3JldHVybiBFLmxlbmd0aD9bZl06W05yKCROLGhbMF18fCJjb2x1bW4iLHAsdyxOKSxOcihITixoWzFdfHwibm93cmFwIixwLHcsTildfSx6Tj0iVG9wIixXTj0iUmlnaHQiLEdOPSJCb3R0b20iLFlOPSJMZWZ0IixYcD1mPT5zPT57bGV0e3ZhbHVlOnAsaW1wb3J0YW50OncscmF3czpOLHNvdXJjZTpFfT1zLGg9cC5zcGxpdCgvXHMrLyk7c3dpdGNoKGgubGVuZ3RoKXtjYXNlIDE6aC5wdXNoKGhbMF0saFswXSxoWzBdKTticmVhaztjYXNlIDI6aC5wdXNoKGhbMF0saFsxXSk7YnJlYWs7Y2FzZSAzOmgucHVzaChoWzFdKTticmVha31yZXR1cm5bTnIoZit6TixoWzBdLHcsTixFKSxOcihmK1dOLGhbMV0sdyxOLEUpLE5yKGYrR04saFsyXSx3LE4sRSksTnIoZitZTixoWzNdLHcsTixFKV19LHFOPVhwKCJtYXJnaW4iKSxKTj1YcCgicGFkZGluZyIpLEtOPSJ0cmFuc2l0aW9uUHJvcGVydHkiLFpOPSJ0cmFuc2l0aW9uRHVyYXRpb24iLFhOPSJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLFFOPSJ0cmFuc2l0aW9uRGVsYXkiLGVrPWY9PntsZXQgcz0vXihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pP1xzKihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pPyQvLHt2YWx1ZTpwLGltcG9ydGFudDp3LHJhd3M6Tixzb3VyY2U6RX09ZixoPVtdLHk9cC5tYXRjaChzKTtyZXR1cm4geSYmKHlbMV0mJmgucHVzaChOcihLTix5WzFdLHcsTixFKSkseVsyXSYmaC5wdXNoKE5yKFpOLHlbMl0sdyxOLEUpKSx5WzNdJiZoLnB1c2goTnIoWE4seVszXSx3LE4sRSkpLHlbNF0mJmgucHVzaChOcihRTix5WzRdLHcsTixFKSkpLGh9O2Z1bmN0aW9uIHRrKGYpe2xldCBzPUlOKGYpLHA9TnAoe3RyYW5zaXRpb246ZWssYm9yZGVyOnMsYmFja2dyb3VuZDpBTixib3JkZXJUb3A6cyxib3JkZXJSaWdodDpzLGJvcmRlckJvdHRvbTpzLGJvcmRlckxlZnQ6cyxib3JkZXJTdHlsZTpWTixib3JkZXJXaWR0aDpVTixib3JkZXJDb2xvcjp5Zixib3JkZXJSYWRpdXM6Rk59LGYudHlwZSE9PSJ1dnVlIj97bWFyZ2luOnFOLHBhZGRpbmc6Sk4sZmxleEZsb3c6ak59Ont9KSx3PXt9O3JldHVybiB3PXAsd312YXIgRWYsUXA9U3ltYm9sKCJleHBhbmRlZCIpO2Z1bmN0aW9uIGV2KGYpe3JldHVybntwb3N0Y3NzUGx1Z2luOiJudnVlOmV4cGFuZCIsRGVjbGFyYXRpb24ocCl7aWYocFtRcF0pcmV0dXJuO0VmfHwoRWY9dGsoZikpO2xldCB3PUVmW3AucHJvcF07aWYodyl7bGV0IE49dyhwKTtOLmxlbmd0aD09PTEmJk5bMF09PT1wfHxwLnJlcGxhY2VXaXRoKE4pfXBbUXBdPSEwfX19dmFyIG5rPWV2KHt0eXBlOiJudnVlIn0pLkRlY2xhcmF0aW9uO2Z1bmN0aW9uIFNmKGYscyl7bGV0IHA9Rmkoe3JlcGxhY2VXaXRoKE4pe3c9Tn19LHJrKGYscykpLHc9W3BdO3JldHVybiBuayhwKSx3fWZ1bmN0aW9uIHJrKGYscyl7bGV0IHA9cysiIjtyZXR1cm4gcC5pbmNsdWRlcygiIWltcG9ydGFudCIpP3twcm9wOmYsdmFsdWU6cC5yZXBsYWNlKC9ccyohaW1wb3J0YW50LywiIiksaW1wb3J0YW50OiEwfTp7cHJvcDpmLHZhbHVlOnAsaW1wb3J0YW50OiExfX12YXIgaWs9InZpZXciLG9rPVsiY2xpY2siLCJsb25ncHJlc3MiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJwYW5zdGFydCIsInBhbm1vdmUiLCJwYW5lbmQiLCJob3Jpem9udGFscGFuIiwidmVydGljYWxwYW4iLCJzd2lwZSJdO2Z1bmN0aW9uIHdmKGYscyl7bGV0IHA9cnMoZik7cC5ub2RlTWFwW3Mubm9kZUlkXT1zfXZhciBDZjtmdW5jdGlvbiB0dihmKXtDZnx8KENmPWYpfXZhciBaaT1jbGFzcyBleHRlbmRzIGxse2NvbnN0cnVjdG9yKHM9aWsscD17fSx3KXtzdXBlcigpO2xldCBOPVpwKHMpO2lmKE4mJiF3KXJldHVybiBuZXcgTihzLHAsITApO3RoaXMubm9kZVR5cGU9MSx0aGlzLnR5cGU9cyx0aGlzLmF0dHI9cC5hdHRyfHx7fSx0aGlzLnN0eWxlPXAuc3R5bGV8fHt9LHRoaXMuY2xhc3NTdHlsZT1wLmNsYXNzU3R5bGV8fHt9LHRoaXMuY2xhc3NMaXN0PXAuY2xhc3NMaXN0fHxbXSx0aGlzLnN0eWxlU2hlZXQ9cC5zdHlsZVNoZWV0fHx7fSx0aGlzLmV2ZW50PXt9fWFwcGVuZENoaWxkKHMpe2lmKCEocy5wYXJlbnROb2RlJiZzLnBhcmVudE5vZGUhPT10aGlzKSl7aWYocy5wYXJlbnROb2RlKXtpZihRbigiZGVidWciKSYmVmkoYFthcHBlbmRDaGlsZF0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIE1vdmUgPCR7cy50eXBlfT4gdG8gJHt0aGlzLmNoaWxkcmVuLmxlbmd0aH0gb2YgPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSxzbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5sZW5ndGgsITApLHMubm9kZVR5cGU9PT0xKXtsZXQgcD1zbChzLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCksdz1Ecih0aGlzLmRvY0lkKTtpZih3JiZwPj0wKXJldHVybiB3LnNlbmQoImRvbSIse2FjdGlvbjoibW92ZUVsZW1lbnQifSxbcy5yZWYsdGhpcy5yZWYscF0pfX1lbHNlIGlmKFFuKCJkZWJ1ZyIpJiZWaShgW2FwcGVuZENoaWxkXSgke3RoaXMuZG9jSWR9LCR7cy50eXBlfSwke3MucmVmfSkgQXBwZW5kIDwke3MudHlwZX0+IHRvIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksb2wocyx0aGlzKSxhbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5sZW5ndGgsITApLHRoaXMuZG9jSWQmJndmKHRoaXMuZG9jSWQscykscy5ub2RlVHlwZT09PTEpe2FsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdGhpcy5wdXJlQ2hpbGRyZW4ubGVuZ3RoKTtsZXQgcD1Ecih0aGlzLmRvY0lkKTtpZihwKXJldHVybiBwLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRWxlbWVudCJ9LFt0aGlzLnJlZixzLnRvSlNPTigpLC0xXSl9fX1pbnNlcnRCZWZvcmUocyxwKXtpZighKHMucGFyZW50Tm9kZSYmcy5wYXJlbnROb2RlIT09dGhpcykmJiEocz09PXB8fHMubmV4dFNpYmxpbmcmJnMubmV4dFNpYmxpbmc9PT1wKSl7aWYocy5wYXJlbnROb2RlKXtpZihzbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApLCEwKSxzLm5vZGVUeXBlPT09MSl7bGV0IHc9dmYocCksTj1zbChzLHRoaXMucHVyZUNoaWxkcmVuLHc/dGhpcy5wdXJlQ2hpbGRyZW4uaW5kZXhPZih3KTp0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGgpLEU9RHIodGhpcy5kb2NJZCk7aWYoRSYmTj49MClyZXR1cm4gRS5zZW5kKCJkb20iLHthY3Rpb246Im1vdmVFbGVtZW50In0sW3MucmVmLHRoaXMucmVmLE5dKX19ZWxzZSBpZihRbigiZGVidWciKSYmVmkoYFtpbnNlcnRCZWZvcmVdKCR7dGhpcy5kb2NJZH0sJHtzLnR5cGV9LCR7cy5yZWZ9KSBJbnNlcnQgPCR7cy50eXBlfT4gdG8gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KSwgYmVmb3JlICgke3AucmVmfSkuYCksb2wocyx0aGlzKSxhbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApLCEwKSx0aGlzLmRvY0lkJiZ3Zih0aGlzLmRvY0lkLHMpLHMubm9kZVR5cGU9PT0xKXtsZXQgdz12ZihwKSxOPWFsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdz90aGlzLnB1cmVDaGlsZHJlbi5pbmRleE9mKHcpOnRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCksRT1Ecih0aGlzLmRvY0lkKTtpZihFKXJldHVybiBFLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRWxlbWVudCJ9LFt0aGlzLnJlZixzLnRvSlNPTigpLE5dKX19fWluc2VydEFmdGVyKHMscCl7aWYoIShzLnBhcmVudE5vZGUmJnMucGFyZW50Tm9kZSE9PXRoaXMpJiYhKHM9PT1wfHxzLnByZXZpb3VzU2libGluZyYmcy5wcmV2aW91c1NpYmxpbmc9PT1wKSl7aWYocy5wYXJlbnROb2RlKXtpZihzbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApKzEsITApLHMubm9kZVR5cGU9PT0xKXtsZXQgdz1zbChzLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmluZGV4T2YobWYocCkpKzEpLE49RHIodGhpcy5kb2NJZCk7aWYoTiYmdz49MClyZXR1cm4gTi5zZW5kKCJkb20iLHthY3Rpb246Im1vdmVFbGVtZW50In0sW3MucmVmLHRoaXMucmVmLHddKX19ZWxzZSBpZihRbigiZGVidWciKSYmVmkoYFtpbnNlcnRBZnRlcl0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIEluc2VydCA8JHtzLnR5cGV9PiB0byA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLCBhZnRlciAoJHtwLnJlZn0pLmApLG9sKHMsdGhpcyksYWwocyx0aGlzLmNoaWxkcmVuLHRoaXMuY2hpbGRyZW4uaW5kZXhPZihwKSsxLCEwKSx0aGlzLmRvY0lkJiZ3Zih0aGlzLmRvY0lkLHMpLHMubm9kZVR5cGU9PT0xKXtsZXQgdz1hbChzLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmluZGV4T2YobWYocCkpKzEpLE49RHIodGhpcy5kb2NJZCk7aWYoTilyZXR1cm4gTi5zZW5kKCJkb20iLHthY3Rpb246ImFkZEVsZW1lbnQifSxbdGhpcy5yZWYscy50b0pTT04oKSx3XSl9fX1yZW1vdmVDaGlsZChzLHApe2lmKHMucGFyZW50Tm9kZSYmKF9mKHMsdGhpcy5jaGlsZHJlbiwhMCkscy5ub2RlVHlwZT09PTEpKXtRbigiZGVidWciKSYmVmkoYFtyZW1vdmVDaGlsZF0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIFJlbW92ZSA8JHtzLnR5cGV9PiBmcm9tIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksX2Yocyx0aGlzLnB1cmVDaGlsZHJlbik7bGV0IHc9RHIodGhpcy5kb2NJZCk7dyYmdy5zZW5kKCJkb20iLHthY3Rpb246InJlbW92ZUVsZW1lbnQifSxbcy5yZWZdKX1wfHxzLmRlc3Ryb3koKX1jbGVhcigpe2xldCBzPURyKHRoaXMuZG9jSWQpO3MmJnRoaXMucHVyZUNoaWxkcmVuLmZvckVhY2gocD0+e3Muc2VuZCgiZG9tIix7YWN0aW9uOiJyZW1vdmVFbGVtZW50In0sW3AucmVmXSl9KSx0aGlzLmNoaWxkcmVuLmZvckVhY2gocD0+e3AuZGVzdHJveSgpfSksdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGg9MH1zZXRBdHRyKHMscCx3KXtpZih0aGlzLmF0dHJbc109PT1wJiZ3IT09ITEpcmV0dXJuO3RoaXMuYXR0cltzXT1wO2xldCBOPURyKHRoaXMuZG9jSWQpOyF3JiZOJiZOLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlQXR0cnMifSxbdGhpcy5yZWYse1tzXTpwfV0pfXNldEF0dHJzKHMscCl7aWYocGMocykpcmV0dXJuO2xldCB3PXt9O2ZvcihsZXQgTiBpbiBzKXRoaXMuYXR0cltOXSE9PXNbTl0mJih0aGlzLmF0dHJbTl09c1tOXSx3W05dPXNbTl0pO2lmKCFwYyh3KSl7bGV0IE49RHIodGhpcy5kb2NJZCk7IXAmJk4mJk4uc2VuZCgiZG9tIix7YWN0aW9uOiJ1cGRhdGVBdHRycyJ9LFt0aGlzLnJlZix3XSl9fXNldFN0eWxlKHMscCx3KXtTZihzLHApLmZvckVhY2goKHtwcm9wOk4sdmFsdWU6RX0pPT57aWYodGhpcy5zdHlsZVtOXT09PUUmJnchPT0hMSlyZXR1cm47dGhpcy5zdHlsZVtOXT1FO2xldCBoPURyKHRoaXMuZG9jSWQpOyF3JiZoJiZoLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlU3R5bGUifSxbdGhpcy5yZWYse1tOXTpFPT09IiImJk4gaW4gdGhpcy5jbGFzc1N0eWxlP3RoaXMuY2xhc3NTdHlsZVtOXTpFfV0pfSl9c2V0U3R5bGVzKHMscCl7aWYocGMocykpcmV0dXJuO2xldCB3PXt9O2ZvcihsZXQgTiBpbiBzKVNmKE4sc1tOXSkuZm9yRWFjaCgoe3Byb3A6RSx2YWx1ZTpofSk9Pnt0aGlzLnN0eWxlW0VdIT09aCYmKHRoaXMuc3R5bGVbRV09aCx3W0VdPWg9PT0iIiYmRSBpbiB0aGlzLmNsYXNzU3R5bGU/dGhpcy5jbGFzc1N0eWxlW0VdOmgpfSk7aWYoIXBjKHcpKXtsZXQgTj1Ecih0aGlzLmRvY0lkKTshcCYmTiYmTi5zZW5kKCJkb20iLHthY3Rpb246InVwZGF0ZVN0eWxlIn0sW3RoaXMucmVmLHddKX19c2V0Q2xhc3NTdHlsZShzKXtmb3IobGV0IHcgaW4gdGhpcy5jbGFzc1N0eWxlKXRoaXMuY2xhc3NTdHlsZVt3XT0iIjtGaSh0aGlzLmNsYXNzU3R5bGUscyk7bGV0IHA9RHIodGhpcy5kb2NJZCk7cCYmcC5zZW5kKCJkb20iLHthY3Rpb246InVwZGF0ZVN0eWxlIn0sW3RoaXMucmVmLHRoaXMudG9TdHlsZSgpXSl9c2V0Q2xhc3NMaXN0KHMpe3MubGVuZ3RoPT09dGhpcy5jbGFzc0xpc3QubGVuZ3RoJiZzLmZpbHRlcihwPT4hdGhpcy5jbGFzc0xpc3QuaW5jbHVkZXMocCkpLmxlbmd0aD09PTB8fCh0aGlzLmNsYXNzTGlzdD1zLHRoaXMucGFyZW50Tm9kZSYmdGhpcy5jYWxjQ2xhc3NMaXN0KCkpfWNhbGNDbGFzc0xpc3QoKXt0aGlzLnNldENsYXNzU3R5bGUoQ2YodGhpcykpfXNldFN0eWxlU2hlZXQocyl7dGhpcy5zdHlsZVNoZWV0PXN9YWRkRXZlbnQocyxwLHcpe2lmKHRoaXMuZXZlbnR8fCh0aGlzLmV2ZW50PXt9KSwhdGhpcy5ldmVudFtzXSl7UW4oImRlYnVnIikmJlZpKGBbYWRkRXZlbnRdKCR7dGhpcy5kb2NJZH0sJHt0aGlzLnR5cGV9LCR7dGhpcy5yZWZ9KSBBZGQgIiR7c30iIGV2ZW50IG9uIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksdGhpcy5ldmVudFtzXT17aGFuZGxlcjpwLHBhcmFtczp3fTtsZXQgTj1Ecih0aGlzLmRvY0lkKTtOJiZOLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRXZlbnQifSxbdGhpcy5yZWYsc10pfX1yZW1vdmVFdmVudChzKXtpZih0aGlzLmV2ZW50JiZ0aGlzLmV2ZW50W3NdKXtRbigiZGVidWciKSYmVmkoYFtyZW1vdmVFdmVudF0oJHt0aGlzLmRvY0lkfSwke3RoaXMudHlwZX0sJHt0aGlzLnJlZn0pIFJlbW92ZSAiJHtzfSIgZXZlbnQgb24gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSxkZWxldGUgdGhpcy5ldmVudFtzXTtsZXQgcD1Ecih0aGlzLmRvY0lkKTtwJiZwLnNlbmQoImRvbSIse2FjdGlvbjoicmVtb3ZlRXZlbnQifSxbdGhpcy5yZWYsc10pfX1maXJlRXZlbnQocyxwLHcsTil7bGV0IEU9bnVsbCxoPSExLHk9dGhpcy5ldmVudFtzXTtpZih5JiZwKXtRbigiZGVidWciKSYmVmkoYFtmaXJlRXZlbnRdKCR7dGhpcy5kb2NJZH0sJHt0aGlzLnR5cGV9LCR7dGhpcy5yZWZ9KSBGaXJlICIke3N9IiBldmVudCBvbiA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLmApO2xldCBSPXkuaGFuZGxlcjtwLnN0b3BQcm9wYWdhdGlvbj0oKT0+e2g9ITB9LHAucHJldmVudERlZmF1bHQ9KCk9Pnt9O3RyeXtOJiZOLnBhcmFtcz9FPVIuY2FsbCh0aGlzLC4uLk4ucGFyYW1zLHApOkU9Ui5jYWxsKHRoaXMscCl9Y2F0Y2goRmUpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBpbnZva2UgdGhlIGV2ZW50IGhhbmRsZXIgb2YgIiR7c30iIG9uICR7dGhpcy50eXBlfSAoJHt0aGlzLnJlZn0pOgogJHtGZS50b1N0cmluZygpfWApLEZlfX1yZXR1cm4haCYmdyYmb2suaW5kZXhPZihzKSE9PS0xJiZ0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5maXJlRXZlbnQmJihwLmN1cnJlbnRUYXJnZXQ9dGhpcy5wYXJlbnROb2RlLHRoaXMucGFyZW50Tm9kZS5maXJlRXZlbnQocyxwLHcpKSxFfXRvU3R5bGUoKXtsZXQgcz1PYmplY3QuYXNzaWduKHt9LHRoaXMuY2xhc3NTdHlsZSkscD10aGlzLnN0eWxlO2ZvcihsZXQgdyBpbiBwKXtsZXQgTj1wW3ddO3Nbd109Tj09PSIiJiZ3IGluIHRoaXMuY2xhc3NTdHlsZT90aGlzLmNsYXNzU3R5bGVbd106Tn1yZXR1cm4gc310b0pTT04ocz0hMSl7bGV0IHA9e3JlZjp0aGlzLnJlZi50b1N0cmluZygpLHR5cGU6dGhpcy50eXBlLGF0dHI6dGhpcy5hdHRyLHN0eWxlOnRoaXMudG9TdHlsZSgpfSx3PVtdO2ZvcihsZXQgTiBpbiB0aGlzLmV2ZW50KXtsZXR7cGFyYW1zOkV9PXRoaXMuZXZlbnRbTl07RT93LnB1c2goe3R5cGU6TixwYXJhbXM6RX0pOncucHVzaChOKX1yZXR1cm4gdy5sZW5ndGgmJihwLmV2ZW50PXcpLCFzJiZ0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGgmJihwLmNoaWxkcmVuPXRoaXMucHVyZUNoaWxkcmVuLm1hcChOPT5OLnRvSlNPTigpKSkscH10b1N0cmluZygpe3JldHVybiI8Iit0aGlzLnR5cGUrIiBhdHRyPSIrSlNPTi5zdHJpbmdpZnkodGhpcy5hdHRyKSsiIHN0eWxlPSIrSlNPTi5zdHJpbmdpZnkodGhpcy50b1N0eWxlKCkpKyI+Iit0aGlzLnB1cmVDaGlsZHJlbi5tYXAocz0+cy50b1N0cmluZygpKS5qb2luKCIiKSsiPC8iK3RoaXMudHlwZSsiPiJ9fTtmdW5jdGlvbiBudihmKXtsZXQgcz1mJiZmLl9fdl9yYXc7cmV0dXJuIHM/bnYocyk6Zn1mdW5jdGlvbiBydihmKXtsZXQgcz1nYyhmKTtzd2l0Y2gocyl7Y2FzZSJVbmRlZmluZWQiOmNhc2UiTnVsbCI6cmV0dXJuIiI7Y2FzZSJSZWdFeHAiOnJldHVybiBmLnRvU3RyaW5nKCk7Y2FzZSJEYXRlIjpyZXR1cm4gZi50b0lTT1N0cmluZygpO2Nhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJCb29sZWFuIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6cmV0dXJuIG52KGYpO2Nhc2UiQXJyYXlCdWZmZXIiOnJldHVybnsiQHR5cGUiOiJiaW5hcnkiLGRhdGFUeXBlOnMsYmFzZTY0OmhmKGYpfTtjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpyZXR1cm57IkB0eXBlIjoiYmluYXJ5IixkYXRhVHlwZTpzLGJhc2U2NDpoZihmLmJ1ZmZlcil9O2RlZmF1bHQ6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGYpfX12YXIgbHU9ZnVuY3Rpb24oKXt9LFZsPWNsYXNze2NvbnN0cnVjdG9yKHMscCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImluc3RhbmNlSWQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOlN0cmluZyhzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjYWxsYmFja01hbmFnZXIiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOm5ldyBhdShzKX0pLGx1PXB8fGZ1bmN0aW9uKCl7fX1jYWxsYmFjayhzLHAsdyl7cmV0dXJuIHRoaXMuY2FsbGJhY2tNYW5hZ2VyLmNvbnN1bWUocyxwLHcpfXJlZ2lzdGVySG9vayhzLHAsdyxOKXtyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIucmVnaXN0ZXJIb29rKHMscCx3LE4pfXRyaWdnZXJIb29rKHMscCx3LE4pe3JldHVybiB0aGlzLmNhbGxiYWNrTWFuYWdlci50cmlnZ2VySG9vayhzLHAsdyxOKX11cGRhdGVEYXRhKHMscCx3KXt0aGlzLnNlbmQoIm1vZHVsZSIse21vZHVsZToiZG9tIixtZXRob2Q6InVwZGF0ZUNvbXBvbmVudERhdGEifSxbcyxwLHddKX1kZXN0cm95Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIuY2xvc2UoKX1ub3JtYWxpemUocyxwPSExKXtsZXQgdz1nYyhzKTtpZihzJiZzIGluc3RhbmNlb2YgWmkpcmV0dXJuIHMucmVmO2lmKHMmJnMuJGVsIGluc3RhbmNlb2YgWmkpcmV0dXJuIHMuJGVsLnJlZjtpZih3PT09IkZ1bmN0aW9uIilyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIuYWRkKHMpLnRvU3RyaW5nKCk7aWYocCl7aWYodz09PSJPYmplY3QiKXtsZXQgTj17fTtmb3IobGV0IEUgaW4gcylOW0VdPXRoaXMubm9ybWFsaXplKHNbRV0sITApO3JldHVybiBOfWlmKHc9PT0iQXJyYXkiKXJldHVybiBzLm1hcChOPT50aGlzLm5vcm1hbGl6ZShOLCEwKSl9cmV0dXJuIHMmJnMucmVmJiZzWyJbW1ZpcnR1YWxFbGVtZW50XV0iXT9zLnJlZjpydihzKX1zZW5kKHMscCx3LE4pe2xldHthY3Rpb246RSxjb21wb25lbnQ6aCxyZWY6eSxtb2R1bGU6UixtZXRob2Q6RmV9PXA7c3dpdGNoKHc9dy5tYXAoSXQ9PnRoaXMubm9ybWFsaXplKEl0LHMhPT0ibW9kdWxlIikpLGdjKE4pPT09Ik9iamVjdCImJihOPXRoaXMubm9ybWFsaXplKE4sITApKSxzKXtjYXNlImRvbSI6cmV0dXJuIFFuKCJkZWJ1ZyIpJiZWaShgW3Rhc2tdKCR7dGhpcy5pbnN0YW5jZUlkfSwke3N9LCR7RX0pICR7SlNPTi5zdHJpbmdpZnkodyl9YCksdGhpc1tFXSh0aGlzLmluc3RhbmNlSWQsdyk7Y2FzZSJjb21wb25lbnQiOnJldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLHksRmUsdyxGaSh7Y29tcG9uZW50Omh9LE4pKTtkZWZhdWx0OnJldHVybiBRbigiZGVidWciKSYmVmkoYFt0YXNrXSgke3RoaXMuaW5zdGFuY2VJZH0sJHtSfSwke0ZlfSkgJHtKU09OLnN0cmluZ2lmeSh3KX1gKSx0aGlzLm1vZHVsZUhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLFIsRmUsdyxOKX19Y2FsbERPTShzLHApe3JldHVybiB0aGlzW3NdKHRoaXMuaW5zdGFuY2VJZCxwKX1jYWxsQ29tcG9uZW50KHMscCx3LE4pe3JldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLHMscCx3LE4pfWNhbGxNb2R1bGUocyxwLHcsTil7cmV0dXJuIHRoaXMubW9kdWxlSGFuZGxlcih0aGlzLmluc3RhbmNlSWQscyxwLHcsTil9fTtmdW5jdGlvbiBpdigpe2xldCBmPXtjcmVhdGVGaW5pc2g6Z2xvYmFsLmNhbGxDcmVhdGVGaW5pc2gsdXBkYXRlRmluaXNoOmdsb2JhbC5jYWxsVXBkYXRlRmluaXNoLHJlZnJlc2hGaW5pc2g6Z2xvYmFsLmNhbGxSZWZyZXNoRmluaXNoLGNyZWF0ZUJvZHk6Z2xvYmFsLmNhbGxDcmVhdGVCb2R5LGFkZEVsZW1lbnQ6Z2xvYmFsLmNhbGxBZGRFbGVtZW50LHJlbW92ZUVsZW1lbnQ6Z2xvYmFsLmNhbGxSZW1vdmVFbGVtZW50LG1vdmVFbGVtZW50Omdsb2JhbC5jYWxsTW92ZUVsZW1lbnQsdXBkYXRlQXR0cnM6Z2xvYmFsLmNhbGxVcGRhdGVBdHRycyx1cGRhdGVTdHlsZTpnbG9iYWwuY2FsbFVwZGF0ZVN0eWxlLGFkZEV2ZW50Omdsb2JhbC5jYWxsQWRkRXZlbnQscmVtb3ZlRXZlbnQ6Z2xvYmFsLmNhbGxSZW1vdmVFdmVudCxfX3VwZGF0ZUNvbXBvbmVudERhdGE6Z2xvYmFsLl9fdXBkYXRlQ29tcG9uZW50RGF0YX0scz1WbC5wcm90b3R5cGU7Zm9yKGxldCBwIGluIGYpe2xldCB3PWZbcF07c1twXT13PyhOLEUpPT53KE4sLi4uRSk6KE4sRSk9Pmx1KE4sW3ttb2R1bGU6ImRvbSIsbWV0aG9kOnAsYXJnczpFfV0sIi0xIil9cy5jb21wb25lbnRIYW5kbGVyPWdsb2JhbC5jYWxsTmF0aXZlQ29tcG9uZW50fHwoKHAsdyxOLEUsaCk9Pmx1KHAsW3tjb21wb25lbnQ6aC5jb21wb25lbnQscmVmOncsbWV0aG9kOk4sYXJnczpFfV0pKSxzLm1vZHVsZUhhbmRsZXI9Z2xvYmFsLmNhbGxOYXRpdmVNb2R1bGV8fCgocCx3LE4sRSk9Pmx1KHAsW3ttb2R1bGU6dyxtZXRob2Q6TixhcmdzOkV9XSkpfWZ1bmN0aW9uIGFrKGYscyxwLHcsTixFKXtsZXQgaD1mLmdldFJlZihzKTtpZihoKXJldHVybiBmLmZpcmVFdmVudChoLHAsdyxOLEUpO2lmKHcpcmV0dXJuIHcuX25vZGVJZD1zLGYuZmlyZUV2ZW50KGYuZ2V0UmVmKCJfZG9jdW1lbnRFbGVtZW50IikscCx3LE4sRSl9ZnVuY3Rpb24gc2soZixzLHAsdyl7cmV0dXJuIGYudGFza0NlbnRlci5jYWxsYmFjayhzLHAsdyl9ZnVuY3Rpb24gbGsoZixzLHAsdyxOKXtpZighZnx8IWYudGFza0NlbnRlcilyZXR1cm4gY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gQ2FuJ3QgZmluZCAiZG9jdW1lbnQiIG9yICJ0YXNrQ2VudGVyIi5gKSxudWxsO2xldCBFPW51bGw7dHJ5e0U9Zi50YXNrQ2VudGVyLnRyaWdnZXJIb29rKHMscCx3LE4pfWNhdGNoKGgpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byB0cmlnZ2VyIHRoZSAiJHtwfUAke3d9IiBob29rIG9uICR7c30uYCksaH1yZXR1cm4gRX1mdW5jdGlvbiBBZihmLHMpe2xldCBwPXJzKGYpO2lmKCFwKXJldHVybiBuZXcgRXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byByZWNlaXZlVGFza3MsIGluc3RhbmNlICgke2Z9KSBpcyBub3QgYXZhaWxhYmxlLmApO2lmKElpKHMpKXJldHVybiBzLm1hcCh3PT57c3dpdGNoKHcubWV0aG9kKXtjYXNlImNhbGxiYWNrIjpyZXR1cm4gc2socCwuLi53LmFyZ3MpO2Nhc2UiZmlyZUV2ZW50U3luYyI6Y2FzZSJmaXJlRXZlbnQiOnJldHVybiBhayhwLC4uLncuYXJncyk7Y2FzZSJjb21wb25lbnRIb29rIjpyZXR1cm4gbGsocCwuLi53LmFyZ3MpfX0pfXZhciBOcz17fTtmdW5jdGlvbiBvdihmPXt9KXtmb3IobGV0IHMgaW4gZilpbChOcyxzKXx8KE5zW3NdPXt9KSwhIUlpKGZbc10pJiZmW3NdLmZvckVhY2gocD0+e2hpKHApP05zW3NdW3BdPSEwOkZsKHApJiZoaShwLm5hbWUpJiYoTnNbc11bcC5uYW1lXT1wLmFyZ3N8fFtdKX0pfWZ1bmN0aW9uIGN1KGYscyl7cmV0dXJuIGhpKHMpPyEhKE5zW2ZdJiZOc1tmXVtzXSk6ISFOc1tmXX1mdW5jdGlvbiBhdihmKXtyZXR1cm4gTnNbZl19dmFyIE9mPXt9O2Z1bmN0aW9uIHN2KGYpeyFJaShmKXx8Zi5mb3JFYWNoKHM9Pnshc3x8KGhpKHMpP09mW3NdPSEwOkZsKHMpJiZoaShzLnR5cGUpJiYoT2Zbcy50eXBlXT1zLGJmKHMudHlwZSxzLm1ldGhvZHMpKSl9KX1mdW5jdGlvbiBUZihmKXtyZXR1cm4hIU9mW2ZdfXZhciBrcz1bXTtmdW5jdGlvbiB1dShmLHMpe1BmKGYpP2NvbnNvbGUud2FybihgU2VydmljZSAiJHtmfSIgaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbHJlYWR5IWApOihzPUZpKHt9LHMpLGtzLnB1c2goe25hbWU6ZixvcHRpb25zOnN9KSl9ZnVuY3Rpb24gZnUoZil7a3Muc29tZSgocyxwKT0+e2lmKHMubmFtZT09PWYpcmV0dXJuIGtzLnNwbGljZShwLDEpLCEwfSl9ZnVuY3Rpb24gUGYoZil7cmV0dXJuIGNrKGYpPj0wfWZ1bmN0aW9uIGNrKGYpe3JldHVybiBrcy5tYXAocz0+cy5uYW1lKS5pbmRleE9mKGYpfWZ1bmN0aW9uIHVrKGYpe3JldHVybiBzPT57bGV0IHA9ZXUoZixzKSx7Y3JlYXRlQXBwOnd9PXA7cC5jcmVhdGVWdWVBcHA9cC5jcmVhdGVBcHA9KE4sRSk9PncoTixFKS51c2UoZmsscykscy5WdWU9cH19dmFyIGZrPXtpbnN0YWxsKGYscyl7ZGsoZixzKSxkYyhzKS5pbml0QXBwKGYpfX07ZnVuY3Rpb24gZGsoZixzKXtsZXR7bW91bnQ6cH09ZjtmLm1vdW50PXc9PntsZXQgTj1wKHcpO3JldHVybiB3PT09IiNhcHAiJiZzLl9fcmVnaXN0ZXJBcHAoTiksTn19ZnVuY3Rpb24gaGsoZil7bGV0e1VuaVNoYXJlZDpzLFZ1ZVNoYXJlZDpwLFZ1ZVJlYWN0aXZpdHk6d309Zjt2YXIgTj1mdW5jdGlvbihFLGgseSxSKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRmUoaSl7fWZ1bmN0aW9uIEl0KGksbCl7fWZ1bmN0aW9uIFZ0KGksbCxkLF8pe3ZhciBBO3RyeXtBPV8/aSguLi5fKTppKCl9Y2F0Y2goQyl7UChDLGwsZCl9cmV0dXJuIEF9ZnVuY3Rpb24gT3QoaSxsLGQsXyl7aWYoaC5pc0Z1bmN0aW9uKGkpKXt2YXIgQT1WdChpLGwsZCxfKTtyZXR1cm4gQSYmaC5pc1Byb21pc2UoQSkmJkEuY2F0Y2goRD0+e1AoRCxsLGQpfSksQX1mb3IodmFyIEM9W10saz0wO2s8aS5sZW5ndGg7aysrKUMucHVzaChPdChpW2tdLGwsZCxfKSk7cmV0dXJuIEN9ZnVuY3Rpb24gUChpLGwsZCl7aWYobCYmbC52bm9kZSxsKXtmb3IodmFyIF89bC5wYXJlbnQsQT1sLnByb3h5LEM9ZDtfOyl7dmFyIGs9Xy5lYztpZihrKXtmb3IodmFyIEQ9MDtEPGsubGVuZ3RoO0QrKylpZihrW0RdKGksQSxDKT09PSExKXJldHVybn1fPV8ucGFyZW50fXZhciBIPWwuYXBwQ29udGV4dC5jb25maWcuZXJyb3JIYW5kbGVyO2lmKEgpe1Z0KEgsbnVsbCwxMCxbaSxBLENdKTtyZXR1cm59fXd0KGkpfWZ1bmN0aW9uIHd0KGksbCxkKXtjb25zb2xlLmVycm9yKGkpfXZhciBJbj0hMSxvdD0hMSx6PVtdLEo9MCxobj1bXSx1bj1udWxsLHluPTAsSm49e3RoZW4oaSl7c2V0VGltZW91dCgoKT0+aSgpLDApfX0sZ2k9RS5wbGF0Zm9ybT09PSJpT1MiLHBpPWdpP0puOlByb21pc2UucmVzb2x2ZSgpLHFyPW51bGw7ZnVuY3Rpb24gZ3IoaSl7dmFyIGw9cXJ8fHBpO3JldHVybiBpP2wudGhlbih0aGlzP2kuYmluZCh0aGlzKTppKTpsfWZ1bmN0aW9uIFNuKGkpe2Zvcih2YXIgbD1KKzEsZD16Lmxlbmd0aDtsPGQ7KXt2YXIgXz1sK2Q+Pj4xLEE9bnQoeltfXSk7QTxpP2w9XysxOmQ9X31yZXR1cm4gbH1mdW5jdGlvbiBwcihpKXsoIXoubGVuZ3RofHwhei5pbmNsdWRlcyhpLEluJiZpLmFsbG93UmVjdXJzZT9KKzE6SikpJiYoaS5pZD09bnVsbD96LnB1c2goaSk6ei5zcGxpY2UoU24oaS5pZCksMCxpKSxMcigpKX1mdW5jdGlvbiBMcigpeyFJbiYmIW90JiYob3Q9ITAscXI9cGkudGhlbihRdCkpfWZ1bmN0aW9uIEpyKGkpe3ZhciBsPXouaW5kZXhPZihpKTtsPkomJnouc3BsaWNlKGwsMSl9ZnVuY3Rpb24gdmkoaSl7aC5pc0FycmF5KGkpP2huLnB1c2goLi4uaSk6KCF1bnx8IXVuLmluY2x1ZGVzKGksaS5hbGxvd1JlY3Vyc2U/eW4rMTp5bikpJiZobi5wdXNoKGkpLExyKCl9ZnVuY3Rpb24gUG4oaSl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpJbj9KKzE6MDtsPHoubGVuZ3RoO2wrKyl7dmFyIGQ9eltsXTtkJiZkLnByZSYmKHouc3BsaWNlKGwsMSksbC0tLGQoKSl9fWZ1bmN0aW9uIHplKGkpe2lmKGhuLmxlbmd0aCl7dmFyIGw9Wy4uLm5ldyBTZXQoaG4pXTtpZihobi5sZW5ndGg9MCx1bil7dW4ucHVzaCguLi5sKTtyZXR1cm59Zm9yKHVuPWwsdW4uc29ydCgoZCxfKT0+bnQoZCktbnQoXykpLHluPTA7eW48dW4ubGVuZ3RoO3luKyspdW5beW5dKCk7dW49bnVsbCx5bj0wfX12YXIgbnQ9aT0+aS5pZD09bnVsbD8xLzA6aS5pZCxBdD0oaSxsKT0+e3ZhciBkPW50KGkpLW50KGwpO2lmKGQ9PT0wKXtpZihpLnByZSYmIWwucHJlKXJldHVybi0xO2lmKGwucHJlJiYhaS5wcmUpcmV0dXJuIDF9cmV0dXJuIGR9O2Z1bmN0aW9uIFF0KGkpe290PSExLEluPSEwLHouc29ydChBdCk7dmFyIGw9aC5OT09QO3RyeXtmb3IoSj0wO0o8ei5sZW5ndGg7SisrKXt2YXIgZD16W0pdO2QmJmQuYWN0aXZlIT09ITEmJlZ0KGQsbnVsbCwxNCl9fWZpbmFsbHl7Sj0wLHoubGVuZ3RoPTAsemUoKSxJbj0hMSxxcj1udWxsLCh6Lmxlbmd0aHx8aG4ubGVuZ3RoKSYmUXQoKX19RS5kZXZ0b29scz12b2lkIDA7dmFyIFRuPVtdO2Z1bmN0aW9uIHNuKGksbCl7dmFyIGQsXztpZihFLmRldnRvb2xzPWksRS5kZXZ0b29scylFLmRldnRvb2xzLmVuYWJsZWQ9ITAsVG4uZm9yRWFjaChDPT57dmFye2V2ZW50OmssYXJnczpEfT1DO3JldHVybiBFLmRldnRvb2xzLmVtaXQoaywuLi5EKX0pLFRuPVtdO2Vsc2UgaWYodHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5IVE1MRWxlbWVudCYmISgoXz0oZD13aW5kb3cubmF2aWdhdG9yKT09PW51bGx8fGQ9PT12b2lkIDA/dm9pZCAwOmQudXNlckFnZW50KT09PW51bGx8fF89PT12b2lkIDA/dm9pZCAwOl8uaW5jbHVkZXMoImpzZG9tIikpKXt2YXIgQT1sLl9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX189bC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9ffHxbXTtBLnB1c2goQz0+e3NuKEMsbCl9KSxzZXRUaW1lb3V0KCgpPT57RS5kZXZ0b29sc3x8KGwuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1udWxsLFRuPVtdKX0sM2UzKX1lbHNlIFRuPVtdfWZ1bmN0aW9uIG9yKGksbCl7aWYoIWkuaXNVbm1vdW50ZWQpe2Zvcih2YXIgZD1pLnZub2RlLnByb3BzfHxoLkVNUFRZX09CSixfPWFyZ3VtZW50cy5sZW5ndGgsQT1uZXcgQXJyYXkoXz4yP18tMjowKSxDPTI7QzxfO0MrKylBW0MtMl09YXJndW1lbnRzW0NdO3ZhciBrPUEsRD1sLnN0YXJ0c1dpdGgoInVwZGF0ZToiKSxIPUQmJmwuc2xpY2UoNyk7aWYoSCYmSCBpbiBkKXt2YXIgbmU9IiIuY29uY2F0KEg9PT0ibW9kZWxWYWx1ZSI/Im1vZGVsIjpILCJNb2RpZmllcnMiKSx7bnVtYmVyOnZlLHRyaW06QmV9PWRbbmVdfHxoLkVNUFRZX09CSjtCZSYmKGs9QS5tYXAodXQ9PmguaXNTdHJpbmcodXQpP3V0LnRyaW0oKTp1dCkpLHZlJiYoaz1BLm1hcChoLmxvb3NlVG9OdW1iZXIpKX12YXIgdWUsa2U9ZFt1ZT1oLnRvSGFuZGxlcktleShsKV18fGRbdWU9aC50b0hhbmRsZXJLZXkoaC5jYW1lbGl6ZShsKSldOyFrZSYmRCYmKGtlPWRbdWU9aC50b0hhbmRsZXJLZXkoaC5oeXBoZW5hdGUobCkpXSksa2UmJk90KGtlLGksNixrKTt2YXIgR2U9ZFt1ZSsiT25jZSJdO2lmKEdlKXtpZighaS5lbWl0dGVkKWkuZW1pdHRlZD17fTtlbHNlIGlmKGkuZW1pdHRlZFt1ZV0pcmV0dXJuO2kuZW1pdHRlZFt1ZV09ITAsT3QoR2UsaSw2LGspfX19ZnVuY3Rpb24gV24oaSxsKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsXz1sLmVtaXRzQ2FjaGUsQT1fLmdldChpKTtpZihBIT09dm9pZCAwKXJldHVybiBBO3ZhciBDPWkuZW1pdHMsaz17fSxEPSExO2lmKCFoLmlzRnVuY3Rpb24oaSkpe3ZhciBIPW5lPT57dmFyIHZlPVduKG5lLGwsITApO3ZlJiYoRD0hMCxoLmV4dGVuZChrLHZlKSl9OyFkJiZsLm1peGlucy5sZW5ndGgmJmwubWl4aW5zLmZvckVhY2goSCksaS5leHRlbmRzJiZIKGkuZXh0ZW5kcyksaS5taXhpbnMmJmkubWl4aW5zLmZvckVhY2goSCl9cmV0dXJuIUMmJiFEPyhoLmlzT2JqZWN0KGkpJiZfLnNldChpLG51bGwpLG51bGwpOihoLmlzQXJyYXkoQyk/Qy5mb3JFYWNoKG5lPT5rW25lXT1udWxsKTpoLmV4dGVuZChrLEMpLGguaXNPYmplY3QoaSkmJl8uc2V0KGksayksayl9ZnVuY3Rpb24gQW4oaSxsKXtyZXR1cm4haXx8IWguaXNPbihsKT8hMToobD1sLnNsaWNlKDIpLnJlcGxhY2UoL09uY2UkLywiIiksaC5oYXNPd24oaSxsWzBdLnRvTG93ZXJDYXNlKCkrbC5zbGljZSgxKSl8fGguaGFzT3duKGksaC5oeXBoZW5hdGUobCkpfHxoLmhhc093bihpLGwpKX12YXIgZ249bnVsbCx3cj1udWxsO2Z1bmN0aW9uIEtyKGkpe3ZhciBsPWduO3JldHVybiBnbj1pLHdyPWkmJmkudHlwZS5fX3Njb3BlSWR8fG51bGwsbH1mdW5jdGlvbiB3byhpKXt3cj1pfWZ1bmN0aW9uIGRhKCl7d3I9bnVsbH12YXIgVWk9aT0+Wm87ZnVuY3Rpb24gWm8oaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmduO2lmKCFsfHxpLl9uKXJldHVybiBpO3ZhciBkPWZ1bmN0aW9uKCl7ZC5fZCYmeXQoLTEpO3ZhciBfPUtyKGwpLEE7dHJ5e0E9aSguLi5hcmd1bWVudHMpfWZpbmFsbHl7S3IoXyksZC5fZCYmeXQoMSl9cmV0dXJuIEF9O3JldHVybiBkLl9uPSEwLGQuX2M9ITAsZC5fZD0hMCxkfWZ1bmN0aW9uIFhvKCl7fWZ1bmN0aW9uICRpKGkpe3Zhcnt0eXBlOmwsdm5vZGU6ZCxwcm94eTpfLHdpdGhQcm94eTpBLHByb3BzOkMscHJvcHNPcHRpb25zOltrXSxzbG90czpELGF0dHJzOkgsZW1pdDpuZSxyZW5kZXI6dmUscmVuZGVyQ2FjaGU6QmUsZGF0YTp1ZSxzZXR1cFN0YXRlOmtlLGN0eDpHZSxpbmhlcml0QXR0cnM6dXR9PWksUWUsUmUsbWU9S3IoaSk7dHJ5e2lmKGQuc2hhcGVGbGFnJjQpe3ZhciB5ZT1BfHxfO1FlPSRuKHZlLmNhbGwoeWUseWUsQmUsQyxrZSx1ZSxHZSkpLFJlPUh9ZWxzZXt2YXIgTGU9bDtRZT0kbihMZS5sZW5ndGg+MT9MZShDLHthdHRyczpILHNsb3RzOkQsZW1pdDpuZX0pOkxlKEMsbnVsbCkpLFJlPWwucHJvcHM/SDpDbyhIKX19Y2F0Y2goS2Upe2ZlLmxlbmd0aD0wLFAoS2UsaSwxKSxRZT1xdChwZSl9dmFyIE9lPVFlO2lmKFJlJiZ1dCE9PSExKXt2YXIgYnQ9T2JqZWN0LmtleXMoUmUpLHtzaGFwZUZsYWc6Q3R9PU9lO2J0Lmxlbmd0aCYmQ3QmKDF8NikmJihrJiZidC5zb21lKGguaXNNb2RlbExpc3RlbmVyKSYmKFJlPUFvKFJlLGspKSxPZT1laShPZSxSZSkpfXJldHVybiBkLmRpcnMmJihPZT1laShPZSksT2UuZGlycz1PZS5kaXJzP09lLmRpcnMuY29uY2F0KGQuZGlycyk6ZC5kaXJzKSxkLnRyYW5zaXRpb24mJihPZS50cmFuc2l0aW9uPWQudHJhbnNpdGlvbiksUWU9T2UsS3IobWUpLFFlfWZ1bmN0aW9uIHJpKGkpe2Zvcih2YXIgbCxkPTA7ZDxpLmxlbmd0aDtkKyspe3ZhciBfPWlbZF07aWYoR3QoXykpe2lmKF8udHlwZSE9PXBlfHxfLmNoaWxkcmVuPT09InYtaWYiKXtpZihsKXJldHVybjtsPV99fWVsc2UgcmV0dXJufXJldHVybiBsfXZhciBDbz1pPT57dmFyIGw7Zm9yKHZhciBkIGluIGkpKGQ9PT0iY2xhc3MifHxkPT09InN0eWxlInx8aC5pc09uKGQpKSYmKChsfHwobD17fSkpW2RdPWlbZF0pO3JldHVybiBsfSxBbz0oaSxsKT0+e3ZhciBkPXt9O2Zvcih2YXIgXyBpbiBpKSghaC5pc01vZGVsTGlzdGVuZXIoXyl8fCEoXy5zbGljZSg5KWluIGwpKSYmKGRbX109aVtfXSk7cmV0dXJuIGR9O2Z1bmN0aW9uIE9vKGksbCxkKXt2YXJ7cHJvcHM6XyxjaGlsZHJlbjpBLGNvbXBvbmVudDpDfT1pLHtwcm9wczprLGNoaWxkcmVuOkQscGF0Y2hGbGFnOkh9PWwsbmU9Qy5lbWl0c09wdGlvbnM7aWYobC5kaXJzfHxsLnRyYW5zaXRpb24pcmV0dXJuITA7aWYoZCYmSD49MCl7aWYoSCYxMDI0KXJldHVybiEwO2lmKEgmMTYpcmV0dXJuIF8/WGkoXyxrLG5lKTohIWs7aWYoSCY4KWZvcih2YXIgdmU9bC5keW5hbWljUHJvcHMsQmU9MDtCZTx2ZS5sZW5ndGg7QmUrKyl7dmFyIHVlPXZlW0JlXTtpZihrW3VlXSE9PV9bdWVdJiYhQW4obmUsdWUpKXJldHVybiEwfX1lbHNlIHJldHVybihBfHxEKSYmKCFEfHwhRC4kc3RhYmxlKT8hMDpfPT09az8hMTpfP2s/WGkoXyxrLG5lKTohMDohIWs7cmV0dXJuITF9ZnVuY3Rpb24gWGkoaSxsLGQpe3ZhciBfPU9iamVjdC5rZXlzKGwpO2lmKF8ubGVuZ3RoIT09T2JqZWN0LmtleXMoaSkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgQT0wO0E8Xy5sZW5ndGg7QSsrKXt2YXIgQz1fW0FdO2lmKGxbQ10hPT1pW0NdJiYhQW4oZCxDKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBtaShpLGwpe2Zvcih2YXJ7dm5vZGU6ZCxwYXJlbnQ6X309aTtfJiZfLnN1YlRyZWU9PT1kOykoZD1fLnZub2RlKS5lbD1sLF89Xy5wYXJlbnR9dmFyIFRvPWk9PmkuX19pc1N1c3BlbnNlLHVvPXtuYW1lOiJTdXNwZW5zZSIsX19pc1N1c3BlbnNlOiEwLHByb2Nlc3MoaSxsLGQsXyxBLEMsayxELEgsbmUpe2k9PW51bGw/UWkobCxkLF8sQSxDLGssRCxILG5lKTpLbihpLGwsZCxfLEEsayxELEgsbmUpfSxoeWRyYXRlOlBvLGNyZWF0ZTplbyxub3JtYWxpemU6Zm99LGtuPXVvO2Z1bmN0aW9uIENyKGksbCl7dmFyIGQ9aS5wcm9wcyYmaS5wcm9wc1tsXTtoLmlzRnVuY3Rpb24oZCkmJmQoKX1mdW5jdGlvbiBRaShpLGwsZCxfLEEsQyxrLEQsSCl7dmFye3A6bmUsbzp7Y3JlYXRlRWxlbWVudDp2ZX19PUgsQmU9dmUoImRpdiIsbCksdWU9aS5zdXNwZW5zZT1lbyhpLEEsXyxsLEJlLGQsQyxrLEQsSCk7bmUobnVsbCx1ZS5wZW5kaW5nQnJhbmNoPWkuc3NDb250ZW50LEJlLG51bGwsXyx1ZSxDLGspLHVlLmRlcHM+MD8oQ3IoaSwib25QZW5kaW5nIiksQ3IoaSwib25GYWxsYmFjayIpLG5lKG51bGwsaS5zc0ZhbGxiYWNrLGwsZCxfLG51bGwsQyxrKSxrcih1ZSxpLnNzRmFsbGJhY2spKTp1ZS5yZXNvbHZlKCl9ZnVuY3Rpb24gS24oaSxsLGQsXyxBLEMsayxELEgpe3ZhcntwOm5lLHVtOnZlLG86e2NyZWF0ZUVsZW1lbnQ6QmV9fT1ILHVlPWwuc3VzcGVuc2U9aS5zdXNwZW5zZTt1ZS52bm9kZT1sLGwuZWw9aS5lbDt2YXIga2U9bC5zc0NvbnRlbnQsR2U9bC5zc0ZhbGxiYWNrLHthY3RpdmVCcmFuY2g6dXQscGVuZGluZ0JyYW5jaDpRZSxpc0luRmFsbGJhY2s6UmUsaXNIeWRyYXRpbmc6bWV9PXVlO2lmKFFlKXVlLnBlbmRpbmdCcmFuY2g9a2UsZHQoa2UsUWUpPyhuZShRZSxrZSx1ZS5oaWRkZW5Db250YWluZXIsbnVsbCxBLHVlLEMsayxEKSx1ZS5kZXBzPD0wP3VlLnJlc29sdmUoKTpSZSYmKG5lKHV0LEdlLGQsXyxBLG51bGwsQyxrLEQpLGtyKHVlLEdlKSkpOih1ZS5wZW5kaW5nSWQrKyxtZT8odWUuaXNIeWRyYXRpbmc9ITEsdWUuYWN0aXZlQnJhbmNoPVFlKTp2ZShRZSxBLHVlKSx1ZS5kZXBzPTAsdWUuZWZmZWN0cy5sZW5ndGg9MCx1ZS5oaWRkZW5Db250YWluZXI9QmUoImRpdiIsZCksUmU/KG5lKG51bGwsa2UsdWUuaGlkZGVuQ29udGFpbmVyLG51bGwsQSx1ZSxDLGssRCksdWUuZGVwczw9MD91ZS5yZXNvbHZlKCk6KG5lKHV0LEdlLGQsXyxBLG51bGwsQyxrLEQpLGtyKHVlLEdlKSkpOnV0JiZkdChrZSx1dCk/KG5lKHV0LGtlLGQsXyxBLHVlLEMsayxEKSx1ZS5yZXNvbHZlKCEwKSk6KG5lKG51bGwsa2UsdWUuaGlkZGVuQ29udGFpbmVyLG51bGwsQSx1ZSxDLGssRCksdWUuZGVwczw9MCYmdWUucmVzb2x2ZSgpKSk7ZWxzZSBpZih1dCYmZHQoa2UsdXQpKW5lKHV0LGtlLGQsXyxBLHVlLEMsayxEKSxrcih1ZSxrZSk7ZWxzZSBpZihDcihsLCJvblBlbmRpbmciKSx1ZS5wZW5kaW5nQnJhbmNoPWtlLHVlLnBlbmRpbmdJZCsrLG5lKG51bGwsa2UsdWUuaGlkZGVuQ29udGFpbmVyLG51bGwsQSx1ZSxDLGssRCksdWUuZGVwczw9MCl1ZS5yZXNvbHZlKCk7ZWxzZXt2YXJ7dGltZW91dDp5ZSxwZW5kaW5nSWQ6TGV9PXVlO3llPjA/c2V0VGltZW91dCgoKT0+e3VlLnBlbmRpbmdJZD09PUxlJiZ1ZS5mYWxsYmFjayhHZSl9LHllKTp5ZT09PTAmJnVlLmZhbGxiYWNrKEdlKX19ZnVuY3Rpb24gZW8oaSxsLGQsXyxBLEMsayxELEgsbmUpe3ZhciB2ZT1hcmd1bWVudHMubGVuZ3RoPjEwJiZhcmd1bWVudHNbMTBdIT09dm9pZCAwP2FyZ3VtZW50c1sxMF06ITEse3A6QmUsbTp1ZSx1bTprZSxuOkdlLG86e3BhcmVudE5vZGU6dXQscmVtb3ZlOlFlfX09bmUsUmU9aS5wcm9wcz9oLnRvTnVtYmVyKGkucHJvcHMudGltZW91dCk6dm9pZCAwLG1lPXt2bm9kZTppLHBhcmVudDpsLHBhcmVudENvbXBvbmVudDpkLGlzU1ZHOmssY29udGFpbmVyOl8saGlkZGVuQ29udGFpbmVyOkEsYW5jaG9yOkMsZGVwczowLHBlbmRpbmdJZDowLHRpbWVvdXQ6dHlwZW9mIFJlPT0ibnVtYmVyIj9SZTotMSxhY3RpdmVCcmFuY2g6bnVsbCxwZW5kaW5nQnJhbmNoOm51bGwsaXNJbkZhbGxiYWNrOiEwLGlzSHlkcmF0aW5nOnZlLGlzVW5tb3VudGVkOiExLGVmZmVjdHM6W10scmVzb2x2ZSgpe3ZhciB5ZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEse3Zub2RlOkxlLGFjdGl2ZUJyYW5jaDpPZSxwZW5kaW5nQnJhbmNoOmJ0LHBlbmRpbmdJZDpDdCxlZmZlY3RzOktlLHBhcmVudENvbXBvbmVudDpSdCxjb250YWluZXI6TX09bWU7aWYobWUuaXNIeWRyYXRpbmcpbWUuaXNIeWRyYXRpbmc9ITE7ZWxzZSBpZigheWUpe3ZhciBqPU9lJiZidC50cmFuc2l0aW9uJiZidC50cmFuc2l0aW9uLm1vZGU9PT0ib3V0LWluIjtqJiYoT2UudHJhbnNpdGlvbi5hZnRlckxlYXZlPSgpPT57Q3Q9PT1tZS5wZW5kaW5nSWQmJnVlKGJ0LE0sc2UsMCl9KTt2YXJ7YW5jaG9yOnNlfT1tZTtPZSYmKHNlPUdlKE9lKSxrZShPZSxSdCxtZSwhMCkpLGp8fHVlKGJ0LE0sc2UsMCl9a3IobWUsYnQpLG1lLnBlbmRpbmdCcmFuY2g9bnVsbCxtZS5pc0luRmFsbGJhY2s9ITE7Zm9yKHZhciByZT1tZS5wYXJlbnQsb2U9ITE7cmU7KXtpZihyZS5wZW5kaW5nQnJhbmNoKXtyZS5lZmZlY3RzLnB1c2goLi4uS2UpLG9lPSEwO2JyZWFrfXJlPXJlLnBhcmVudH1vZXx8dmkoS2UpLG1lLmVmZmVjdHM9W10sQ3IoTGUsIm9uUmVzb2x2ZSIpfSxmYWxsYmFjayh5ZSl7aWYoISFtZS5wZW5kaW5nQnJhbmNoKXt2YXJ7dm5vZGU6TGUsYWN0aXZlQnJhbmNoOk9lLHBhcmVudENvbXBvbmVudDpidCxjb250YWluZXI6Q3QsaXNTVkc6S2V9PW1lO0NyKExlLCJvbkZhbGxiYWNrIik7dmFyIFJ0PUdlKE9lKSxNPSgpPT57IW1lLmlzSW5GYWxsYmFja3x8KEJlKG51bGwseWUsQ3QsUnQsYnQsbnVsbCxLZSxELEgpLGtyKG1lLHllKSl9LGo9eWUudHJhbnNpdGlvbiYmeWUudHJhbnNpdGlvbi5tb2RlPT09Im91dC1pbiI7aiYmKE9lLnRyYW5zaXRpb24uYWZ0ZXJMZWF2ZT1NKSxtZS5pc0luRmFsbGJhY2s9ITAsa2UoT2UsYnQsbnVsbCwhMCksanx8TSgpfX0sbW92ZSh5ZSxMZSxPZSl7bWUuYWN0aXZlQnJhbmNoJiZ1ZShtZS5hY3RpdmVCcmFuY2gseWUsTGUsT2UpLG1lLmNvbnRhaW5lcj15ZX0sbmV4dCgpe3JldHVybiBtZS5hY3RpdmVCcmFuY2gmJkdlKG1lLmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKHllLExlKXt2YXIgT2U9ISFtZS5wZW5kaW5nQnJhbmNoO09lJiZtZS5kZXBzKys7dmFyIGJ0PXllLnZub2RlLmVsO3llLmFzeW5jRGVwLmNhdGNoKEN0PT57UChDdCx5ZSwwKX0pLnRoZW4oQ3Q9PntpZighKHllLmlzVW5tb3VudGVkfHxtZS5pc1VubW91bnRlZHx8bWUucGVuZGluZ0lkIT09eWUuc3VzcGVuc2VJZCkpe3llLmFzeW5jUmVzb2x2ZWQ9ITA7dmFye3Zub2RlOktlfT15ZTtyYSh5ZSxDdCwhMSksYnQmJihLZS5lbD1idCk7dmFyIFJ0PSFidCYmeWUuc3ViVHJlZS5lbDtMZSh5ZSxLZSx1dChidHx8eWUuc3ViVHJlZS5lbCksYnQ/bnVsbDpHZSh5ZS5zdWJUcmVlKSxtZSxrLEgpLFJ0JiZRZShSdCksbWkoeWUsS2UuZWwpLE9lJiYtLW1lLmRlcHM9PT0wJiZtZS5yZXNvbHZlKCl9fSl9LHVubW91bnQoeWUsTGUpe21lLmlzVW5tb3VudGVkPSEwLG1lLmFjdGl2ZUJyYW5jaCYma2UobWUuYWN0aXZlQnJhbmNoLGQseWUsTGUpLG1lLnBlbmRpbmdCcmFuY2gmJmtlKG1lLnBlbmRpbmdCcmFuY2gsZCx5ZSxMZSl9fTtyZXR1cm4gbWV9ZnVuY3Rpb24gUG8oaSxsLGQsXyxBLEMsayxELEgpe3ZhciBuZT1sLnN1c3BlbnNlPWVvKGwsXyxkLGkucGFyZW50Tm9kZSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxudWxsLEEsQyxrLEQsITApLHZlPUgoaSxuZS5wZW5kaW5nQnJhbmNoPWwuc3NDb250ZW50LGQsbmUsQyxrKTtyZXR1cm4gbmUuZGVwcz09PTAmJm5lLnJlc29sdmUoKSx2ZX1mdW5jdGlvbiBmbyhpKXt2YXJ7c2hhcGVGbGFnOmwsY2hpbGRyZW46ZH09aSxfPWwmMzI7aS5zc0NvbnRlbnQ9aWkoXz9kLmRlZmF1bHQ6ZCksaS5zc0ZhbGxiYWNrPV8/aWkoZC5mYWxsYmFjayk6cXQocGUpfWZ1bmN0aW9uIGlpKGkpe3ZhciBsO2lmKGguaXNGdW5jdGlvbihpKSl7dmFyIGQ9SHQmJmkuX2M7ZCYmKGkuX2Q9ITEsY3QoKSksaT1pKCksZCYmKGkuX2Q9ITAsbD1DZSxndCgpKX1pZihoLmlzQXJyYXkoaSkpe3ZhciBfPXJpKGkpO2k9X31yZXR1cm4gaT0kbihpKSxsJiYhaS5keW5hbWljQ2hpbGRyZW4mJihpLmR5bmFtaWNDaGlsZHJlbj1sLmZpbHRlcihBPT5BIT09aSkpLGl9ZnVuY3Rpb24gYXIoaSxsKXtsJiZsLnBlbmRpbmdCcmFuY2g/aC5pc0FycmF5KGkpP2wuZWZmZWN0cy5wdXNoKC4uLmkpOmwuZWZmZWN0cy5wdXNoKGkpOnZpKGkpfWZ1bmN0aW9uIGtyKGksbCl7aS5hY3RpdmVCcmFuY2g9bDt2YXJ7dm5vZGU6ZCxwYXJlbnRDb21wb25lbnQ6X309aSxBPWQuZWw9bC5lbDtfJiZfLnN1YlRyZWU9PT1kJiYoXy52bm9kZS5lbD1BLG1pKF8sQSkpfWZ1bmN0aW9uIE5uKGksbCl7aWYoX24pe3ZhciBkPV9uLnByb3ZpZGVzLF89X24ucGFyZW50JiZfbi5wYXJlbnQucHJvdmlkZXM7Xz09PWQmJihkPV9uLnByb3ZpZGVzPU9iamVjdC5jcmVhdGUoXykpLGRbaV09bCxfbi50eXBlLm1wVHlwZT09PSJhcHAiJiZfbi5hcHBDb250ZXh0LmFwcC5wcm92aWRlKGksbCl9fWZ1bmN0aW9uIFpuKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLF89X258fGduO2lmKF8pe3ZhciBBPV8ucGFyZW50PT1udWxsP18udm5vZGUuYXBwQ29udGV4dCYmXy52bm9kZS5hcHBDb250ZXh0LnByb3ZpZGVzOl8ucGFyZW50LnByb3ZpZGVzO2lmKEEmJmkgaW4gQSlyZXR1cm4gQVtpXTtpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIGQmJmguaXNGdW5jdGlvbihsKT9sLmNhbGwoXy5wcm94eSk6bH19ZnVuY3Rpb24gTmkoaSxsKXtyZXR1cm4ga2koaSxudWxsLGwpfWZ1bmN0aW9uIEhpKGksbCl7cmV0dXJuIGtpKGksbnVsbCx7Zmx1c2g6InBvc3QifSl9ZnVuY3Rpb24gb2koaSxsKXtyZXR1cm4ga2koaSxudWxsLHtmbHVzaDoic3luYyJ9KX12YXIgRnI9e307ZnVuY3Rpb24gdnIoaSxsLGQpe3JldHVybiBraShpLGwsZCl9ZnVuY3Rpb24ga2koaSxsKXt2YXJ7aW1tZWRpYXRlOmQsZGVlcDpfLGZsdXNoOkEsb25UcmFjazpDLG9uVHJpZ2dlcjprfT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06aC5FTVBUWV9PQkosRD15LmdldEN1cnJlbnRTY29wZSgpPT09KF9uPT1udWxsP3ZvaWQgMDpfbi5zY29wZSk/X246bnVsbCxILG5lPSExLHZlPSExO2lmKHkuaXNSZWYoaSk/KEg9KCk9PmkudmFsdWUsbmU9eS5pc1NoYWxsb3coaSkpOnkuaXNSZWFjdGl2ZShpKT8oSD0oKT0+aSxfPSEwKTpoLmlzQXJyYXkoaSk/KHZlPSEwLG5lPWkuc29tZShPZT0+eS5pc1JlYWN0aXZlKE9lKXx8eS5pc1NoYWxsb3coT2UpKSxIPSgpPT5pLm1hcChPZT0+e2lmKHkuaXNSZWYoT2UpKXJldHVybiBPZS52YWx1ZTtpZih5LmlzUmVhY3RpdmUoT2UpKXJldHVybiBacihPZSk7aWYoaC5pc0Z1bmN0aW9uKE9lKSlyZXR1cm4gVnQoT2UsRCwyKX0pKTpoLmlzRnVuY3Rpb24oaSk/bD9IPSgpPT5WdChpLEQsMik6SD0oKT0+e2lmKCEoRCYmRC5pc1VubW91bnRlZCkpcmV0dXJuIHVlJiZ1ZSgpLE90KGksRCwzLFtrZV0pfTpIPWguTk9PUCxsJiZfKXt2YXIgQmU9SDtIPSgpPT5acihCZSgpKX12YXIgdWUsa2U9T2U9Pnt1ZT15ZS5vblN0b3A9KCk9PntWdChPZSxELDQpfX0sR2U7aWYoRS5pc0luU1NSQ29tcG9uZW50U2V0dXApaWYoa2U9aC5OT09QLGw/ZCYmT3QobCxELDMsW0goKSx2ZT9bXTp2b2lkIDAsa2VdKTpIKCksQT09PSJzeW5jIil7dmFyIHV0PU5hKCk7R2U9dXQuX193YXRjaGVySGFuZGxlc3x8KHV0Ll9fd2F0Y2hlckhhbmRsZXM9W10pfWVsc2UgcmV0dXJuIGguTk9PUDt2YXIgUWU9dmU/bmV3IEFycmF5KGkubGVuZ3RoKS5maWxsKEZyKTpGcixSZT0oKT0+e2lmKCEheWUuYWN0aXZlKWlmKGwpe3ZhciBPZT15ZS5ydW4oKTsoX3x8bmV8fCh2ZT9PZS5zb21lKChidCxDdCk9PmguaGFzQ2hhbmdlZChidCxRZVtDdF0pKTpoLmhhc0NoYW5nZWQoT2UsUWUpKSkmJih1ZSYmdWUoKSxPdChsLEQsMyxbT2UsUWU9PT1Gcj92b2lkIDA6dmUmJlFlWzBdPT09RnI/W106UWUsa2VdKSxRZT1PZSl9ZWxzZSB5ZS5ydW4oKX07UmUuYWxsb3dSZWN1cnNlPSEhbDt2YXIgbWU7QT09PSJzeW5jIj9tZT1SZTpBPT09InBvc3QiP21lPSgpPT5scihSZSxEJiZELnN1c3BlbnNlKTooUmUucHJlPSEwLEQmJihSZS5pZD1ELnVpZCksbWU9KCk9PnByKFJlKSk7dmFyIHllPW5ldyB5LlJlYWN0aXZlRWZmZWN0KEgsbWUpO2w/ZD9SZSgpOlFlPXllLnJ1bigpOkE9PT0icG9zdCI/bHIoeWUucnVuLmJpbmQoeWUpLEQmJkQuc3VzcGVuc2UpOnllLnJ1bigpO3ZhciBMZT0oKT0+e3llLnN0b3AoKSxEJiZELnNjb3BlJiZoLnJlbW92ZShELnNjb3BlLmVmZmVjdHMseWUpfTtyZXR1cm4gR2UmJkdlLnB1c2goTGUpLExlfWZ1bmN0aW9uIElvKGksbCxkKXt2YXIgXz10aGlzLnByb3h5LEE9aC5pc1N0cmluZyhpKT9pLmluY2x1ZGVzKCIuIik/VnIoXyxpKTooKT0+X1tpXTppLmJpbmQoXyxfKSxDO2guaXNGdW5jdGlvbihsKT9DPWw6KEM9bC5oYW5kbGVyLGQ9bCk7dmFyIGs9X247cW4odGhpcyk7dmFyIEQ9a2koQSxDLmJpbmQoXyksZCk7cmV0dXJuIGs/cW4oayk6QWkoKSxEfWZ1bmN0aW9uIFZyKGksbCl7dmFyIGQ9bC5zcGxpdCgiLiIpO3JldHVybigpPT57Zm9yKHZhciBfPWksQT0wO0E8ZC5sZW5ndGgmJl87QSsrKV89X1tkW0FdXTtyZXR1cm4gX319ZnVuY3Rpb24gWnIoaSxsKXtpZighaC5pc09iamVjdChpKXx8aS5fX3Zfc2tpcHx8KGw9bHx8bmV3IFNldCxsLmhhcyhpKSkpcmV0dXJuIGk7aWYobC5hZGQoaSkseS5pc1JlZihpKSlacihpLnZhbHVlLGwpO2Vsc2UgaWYoaC5pc0FycmF5KGkpKWZvcih2YXIgZD0wO2Q8aS5sZW5ndGg7ZCsrKVpyKGlbZF0sbCk7ZWxzZSBpZihoLmlzU2V0KGkpfHxoLmlzTWFwKGkpKWkuZm9yRWFjaChBPT57WnIoQSxsKX0pO2Vsc2UgaWYoaC5pc1BsYWluT2JqZWN0KGkpKWZvcih2YXIgXyBpbiBpKVpyKGlbX10sbCk7cmV0dXJuIGl9ZnVuY3Rpb24gQXIoKXt2YXIgaT17aXNNb3VudGVkOiExLGlzTGVhdmluZzohMSxpc1VubW91bnRpbmc6ITEsbGVhdmluZ1ZOb2RlczpuZXcgTWFwfTtyZXR1cm4gdHIoKCk9PntpLmlzTW91bnRlZD0hMH0pLGNyKCgpPT57aS5pc1VubW91bnRpbmc9ITB9KSxpfXZhciBwbj1bRnVuY3Rpb24sQXJyYXldLFhyPXttb2RlOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixwZXJzaXN0ZWQ6Qm9vbGVhbixvbkJlZm9yZUVudGVyOnBuLG9uRW50ZXI6cG4sb25BZnRlckVudGVyOnBuLG9uRW50ZXJDYW5jZWxsZWQ6cG4sb25CZWZvcmVMZWF2ZTpwbixvbkxlYXZlOnBuLG9uQWZ0ZXJMZWF2ZTpwbixvbkxlYXZlQ2FuY2VsbGVkOnBuLG9uQmVmb3JlQXBwZWFyOnBuLG9uQXBwZWFyOnBuLG9uQWZ0ZXJBcHBlYXI6cG4sb25BcHBlYXJDYW5jZWxsZWQ6cG59LFVyPXtuYW1lOiJCYXNlVHJhbnNpdGlvbiIscHJvcHM6WHIsc2V0dXAoaSxsKXt2YXJ7c2xvdHM6ZH09bCxfPWpuKCksQT1BcigpLEM7cmV0dXJuKCk9Pnt2YXIgaz1kLmRlZmF1bHQmJlJpKGQuZGVmYXVsdCgpLCEwKTtpZighKCFrfHwhay5sZW5ndGgpKXt2YXIgRD1rWzBdO2lmKGsubGVuZ3RoPjEpe2Zvcih2YXIgSCBvZiBrKWlmKEgudHlwZSE9PXBlKXtEPUg7YnJlYWt9fXZhciBuZT15LnRvUmF3KGkpLHttb2RlOnZlfT1uZTtpZihBLmlzTGVhdmluZylyZXR1cm4gYmkoRCk7dmFyIEJlPXlpKEQpO2lmKCFCZSlyZXR1cm4gYmkoRCk7dmFyIHVlPV9pKEJlLG5lLEEsXyk7T3IoQmUsdWUpO3ZhciBrZT1fLnN1YlRyZWUsR2U9a2UmJnlpKGtlKSx1dD0hMSx7Z2V0VHJhbnNpdGlvbktleTpRZX09QmUudHlwZTtpZihRZSl7dmFyIFJlPVFlKCk7Qz09PXZvaWQgMD9DPVJlOlJlIT09QyYmKEM9UmUsdXQ9ITApfWlmKEdlJiZHZS50eXBlIT09cGUmJighZHQoQmUsR2UpfHx1dCkpe3ZhciBtZT1faShHZSxuZSxBLF8pO2lmKE9yKEdlLG1lKSx2ZT09PSJvdXQtaW4iKXJldHVybiBBLmlzTGVhdmluZz0hMCxtZS5hZnRlckxlYXZlPSgpPT57QS5pc0xlYXZpbmc9ITEsXy51cGRhdGUuYWN0aXZlIT09ITEmJl8udXBkYXRlKCl9LGJpKEQpO3ZlPT09ImluLW91dCImJkJlLnR5cGUhPT1wZSYmKG1lLmRlbGF5TGVhdmU9KHllLExlLE9lKT0+e3ZhciBidD1UZShBLEdlKTtidFtTdHJpbmcoR2Uua2V5KV09R2UseWUuX2xlYXZlQ2I9KCk9PntMZSgpLHllLl9sZWF2ZUNiPXZvaWQgMCxkZWxldGUgdWUuZGVsYXllZExlYXZlfSx1ZS5kZWxheWVkTGVhdmU9T2V9KX1yZXR1cm4gRH19fX0sRHQ9VXI7ZnVuY3Rpb24gVGUoaSxsKXt2YXJ7bGVhdmluZ1ZOb2RlczpkfT1pLF89ZC5nZXQobC50eXBlKTtyZXR1cm4gX3x8KF89T2JqZWN0LmNyZWF0ZShudWxsKSxkLnNldChsLnR5cGUsXykpLF99ZnVuY3Rpb24gX2koaSxsLGQsXyl7dmFye2FwcGVhcjpBLG1vZGU6QyxwZXJzaXN0ZWQ6az0hMSxvbkJlZm9yZUVudGVyOkQsb25FbnRlcjpILG9uQWZ0ZXJFbnRlcjpuZSxvbkVudGVyQ2FuY2VsbGVkOnZlLG9uQmVmb3JlTGVhdmU6QmUsb25MZWF2ZTp1ZSxvbkFmdGVyTGVhdmU6a2Usb25MZWF2ZUNhbmNlbGxlZDpHZSxvbkJlZm9yZUFwcGVhcjp1dCxvbkFwcGVhcjpRZSxvbkFmdGVyQXBwZWFyOlJlLG9uQXBwZWFyQ2FuY2VsbGVkOm1lfT1sLHllPVN0cmluZyhpLmtleSksTGU9VGUoZCxpKSxPZT0oS2UsUnQpPT57S2UmJk90KEtlLF8sOSxSdCl9LGJ0PShLZSxSdCk9Pnt2YXIgTT1SdFsxXTtPZShLZSxSdCksaC5pc0FycmF5KEtlKT9LZS5ldmVyeShqPT5qLmxlbmd0aDw9MSkmJk0oKTpLZS5sZW5ndGg8PTEmJk0oKX0sQ3Q9e21vZGU6QyxwZXJzaXN0ZWQ6ayxiZWZvcmVFbnRlcihLZSl7dmFyIFJ0PUQ7aWYoIWQuaXNNb3VudGVkKWlmKEEpUnQ9dXR8fEQ7ZWxzZSByZXR1cm47S2UuX2xlYXZlQ2ImJktlLl9sZWF2ZUNiKCEwKTt2YXIgTT1MZVt5ZV07TSYmZHQoaSxNKSYmTS5lbC5fbGVhdmVDYiYmTS5lbC5fbGVhdmVDYigpLE9lKFJ0LFtLZV0pfSxlbnRlcihLZSl7dmFyIFJ0PUgsTT1uZSxqPXZlO2lmKCFkLmlzTW91bnRlZClpZihBKVJ0PVFlfHxILE09UmV8fG5lLGo9bWV8fHZlO2Vsc2UgcmV0dXJuO3ZhciBzZT0hMSxyZT1LZS5fZW50ZXJDYj1vZT0+e3NlfHwoc2U9ITAsb2U/T2UoaixbS2VdKTpPZShNLFtLZV0pLEN0LmRlbGF5ZWRMZWF2ZSYmQ3QuZGVsYXllZExlYXZlKCksS2UuX2VudGVyQ2I9dm9pZCAwKX07UnQ/YnQoUnQsW0tlLHJlXSk6cmUoKX0sbGVhdmUoS2UsUnQpe3ZhciBNPVN0cmluZyhpLmtleSk7aWYoS2UuX2VudGVyQ2ImJktlLl9lbnRlckNiKCEwKSxkLmlzVW5tb3VudGluZylyZXR1cm4gUnQoKTtPZShCZSxbS2VdKTt2YXIgaj0hMSxzZT1LZS5fbGVhdmVDYj1yZT0+e2p8fChqPSEwLFJ0KCkscmU/T2UoR2UsW0tlXSk6T2Uoa2UsW0tlXSksS2UuX2xlYXZlQ2I9dm9pZCAwLExlW01dPT09aSYmZGVsZXRlIExlW01dKX07TGVbTV09aSx1ZT9idCh1ZSxbS2Usc2VdKTpzZSgpfSxjbG9uZShLZSl7cmV0dXJuIF9pKEtlLGwsZCxfKX19O3JldHVybiBDdH1mdW5jdGlvbiBiaShpKXtpZihFaShpKSlyZXR1cm4gaT1laShpKSxpLmNoaWxkcmVuPW51bGwsaX1mdW5jdGlvbiB5aShpKXtyZXR1cm4gRWkoaSk/aS5jaGlsZHJlbj9pLmNoaWxkcmVuWzBdOnZvaWQgMDppfWZ1bmN0aW9uIE9yKGksbCl7aS5zaGFwZUZsYWcmNiYmaS5jb21wb25lbnQ/T3IoaS5jb21wb25lbnQuc3ViVHJlZSxsKTppLnNoYXBlRmxhZyYxMjg/KGkuc3NDb250ZW50LnRyYW5zaXRpb249bC5jbG9uZShpLnNzQ29udGVudCksaS5zc0ZhbGxiYWNrLnRyYW5zaXRpb249bC5jbG9uZShpLnNzRmFsbGJhY2spKTppLnRyYW5zaXRpb249bH1mdW5jdGlvbiBSaShpKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsXz1bXSxBPTAsQz0wO0M8aS5sZW5ndGg7QysrKXt2YXIgaz1pW0NdLEQ9ZD09bnVsbD9rLmtleTpTdHJpbmcoZCkrU3RyaW5nKGsua2V5IT1udWxsP2sua2V5OkMpO2sudHlwZT09PXRlPyhrLnBhdGNoRmxhZyYxMjgmJkErKyxfPV8uY29uY2F0KFJpKGsuY2hpbGRyZW4sbCxEKSkpOihsfHxrLnR5cGUhPT1wZSkmJl8ucHVzaChEIT1udWxsP2VpKGsse2tleTpEfSk6ayl9aWYoQT4xKWZvcih2YXIgSD0wO0g8Xy5sZW5ndGg7SCsrKV9bSF0ucGF0Y2hGbGFnPS0yO3JldHVybiBffWZ1bmN0aW9uIFRyKGkpe3JldHVybiBoLmlzRnVuY3Rpb24oaSk/e3NldHVwOmksbmFtZTppLm5hbWV9Oml9dmFyIFJyPWk9PiEhaS50eXBlLl9fYXN5bmNMb2FkZXI7ZnVuY3Rpb24gYWkoaSl7aC5pc0Z1bmN0aW9uKGkpJiYoaT17bG9hZGVyOml9KTt2YXJ7bG9hZGVyOmwsbG9hZGluZ0NvbXBvbmVudDpkLGVycm9yQ29tcG9uZW50Ol8sZGVsYXk6QT0yMDAsdGltZW91dDpDLHN1c3BlbnNpYmxlOms9ITAsb25FcnJvcjpEfT1pLEg9bnVsbCxuZSx2ZT0wLEJlPSgpPT4odmUrKyxIPW51bGwsdWUoKSksdWU9KCk9Pnt2YXIga2U7cmV0dXJuIEh8fChrZT1IPWwoKS5jYXRjaChHZT0+e2lmKEdlPUdlIGluc3RhbmNlb2YgRXJyb3I/R2U6bmV3IEVycm9yKFN0cmluZyhHZSkpLEQpcmV0dXJuIG5ldyBQcm9taXNlKCh1dCxRZSk9Pnt2YXIgUmU9KCk9PnV0KEJlKCkpLG1lPSgpPT5RZShHZSk7RChHZSxSZSxtZSx2ZSsxKX0pO3Rocm93IEdlfSkudGhlbihHZT0+a2UhPT1IJiZIP0g6KEdlJiYoR2UuX19lc01vZHVsZXx8R2VbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJNb2R1bGUiKSYmKEdlPUdlLmRlZmF1bHQpLG5lPUdlLEdlKSkpfTtyZXR1cm4gVHIoe25hbWU6IkFzeW5jQ29tcG9uZW50V3JhcHBlciIsX19hc3luY0xvYWRlcjp1ZSxnZXQgX19hc3luY1Jlc29sdmVkKCl7cmV0dXJuIG5lfSxzZXR1cCgpe3ZhciBrZT1fbjtpZihuZSlyZXR1cm4oKT0+UHIobmUsa2UpO3ZhciBHZT1tZT0+e0g9bnVsbCxQKG1lLGtlLDEzKX07aWYoayYma2Uuc3VzcGVuc2V8fEUuaXNJblNTUkNvbXBvbmVudFNldHVwKXJldHVybiB1ZSgpLnRoZW4obWU9PigpPT5QcihtZSxrZSkpLmNhdGNoKG1lPT4oR2UobWUpLCgpPT5fP3F0KF8se2Vycm9yOm1lfSk6bnVsbCkpO3ZhciB1dD15LnJlZighMSksUWU9eS5yZWYoKSxSZT15LnJlZighIUEpO3JldHVybiBBJiZzZXRUaW1lb3V0KCgpPT57UmUudmFsdWU9ITF9LEEpLEMhPW51bGwmJnNldFRpbWVvdXQoKCk9PntpZighdXQudmFsdWUmJiFRZS52YWx1ZSl7dmFyIG1lPW5ldyBFcnJvcigiQXN5bmMgY29tcG9uZW50IHRpbWVkIG91dCBhZnRlciAiLmNvbmNhdChDLCJtcy4iKSk7R2UobWUpLFFlLnZhbHVlPW1lfX0sQyksdWUoKS50aGVuKCgpPT57dXQudmFsdWU9ITAsa2UucGFyZW50JiZFaShrZS5wYXJlbnQudm5vZGUpJiZwcihrZS5wYXJlbnQudXBkYXRlKX0pLmNhdGNoKG1lPT57R2UobWUpLFFlLnZhbHVlPW1lfSksKCk9PntpZih1dC52YWx1ZSYmbmUpcmV0dXJuIFByKG5lLGtlKTtpZihRZS52YWx1ZSYmXylyZXR1cm4gcXQoXyx7ZXJyb3I6UWUudmFsdWV9KTtpZihkJiYhUmUudmFsdWUpcmV0dXJuIHF0KGQpfX19KX1mdW5jdGlvbiBQcihpLGwpe3ZhcntyZWY6ZCxwcm9wczpfLGNoaWxkcmVuOkEsY2U6Q309bC52bm9kZSxrPXF0KGksXyxBKTtyZXR1cm4gay5yZWY9ZCxrLmNlPUMsZGVsZXRlIGwudm5vZGUuY2Usa312YXIgRWk9aT0+aS50eXBlLl9faXNLZWVwQWxpdmUsZm49e25hbWU6IktlZXBBbGl2ZSIsX19pc0tlZXBBbGl2ZTohMCxwcm9wczp7aW5jbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sZXhjbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sbWF4OltTdHJpbmcsTnVtYmVyXX0sc2V0dXAoaSxsKXt2YXJ7c2xvdHM6ZH09bCxfPWpuKCksQT1fLmN0eDtpZighQS5yZW5kZXJlcilyZXR1cm4oKT0+e3ZhciB5ZT1kLmRlZmF1bHQmJmQuZGVmYXVsdCgpO3JldHVybiB5ZSYmeWUubGVuZ3RoPT09MT95ZVswXTp5ZX07dmFyIEM9bmV3IE1hcCxrPW5ldyBTZXQsRD1udWxsLEg9Xy5zdXNwZW5zZSx7cmVuZGVyZXI6e3A6bmUsbTp2ZSx1bTpCZSxvOntjcmVhdGVFbGVtZW50OnVlfX19PUEsa2U9dWUoImRpdiIsbnVsbCk7QS5hY3RpdmF0ZT0oeWUsTGUsT2UsYnQsQ3QpPT57dmFyIEtlPXllLmNvbXBvbmVudDt2ZSh5ZSxMZSxPZSwwLEgpLG5lKEtlLnZub2RlLHllLExlLE9lLEtlLEgsYnQseWUuc2xvdFNjb3BlSWRzLEN0KSxscigoKT0+e0tlLmlzRGVhY3RpdmF0ZWQ9ITEsS2UuYSYmaC5pbnZva2VBcnJheUZucyhLZS5hKTt2YXIgUnQ9eWUucHJvcHMmJnllLnByb3BzLm9uVm5vZGVNb3VudGVkO1J0JiZ6cihSdCxLZS5wYXJlbnQseWUpfSxIKX0sQS5kZWFjdGl2YXRlPXllPT57dmFyIExlPXllLmNvbXBvbmVudDt2ZSh5ZSxrZSxudWxsLDEsSCksbHIoKCk9PntMZS5kYSYmaC5pbnZva2VBcnJheUZucyhMZS5kYSk7dmFyIE9lPXllLnByb3BzJiZ5ZS5wcm9wcy5vblZub2RlVW5tb3VudGVkO09lJiZ6cihPZSxMZS5wYXJlbnQseWUpLExlLmlzRGVhY3RpdmF0ZWQ9ITB9LEgpfTtmdW5jdGlvbiBHZSh5ZSl7U2koeWUpLEJlKHllLF8sSCwhMCl9ZnVuY3Rpb24gdXQoeWUpe0MuZm9yRWFjaCgoTGUsT2UpPT57dmFyIGJ0PV9vKExlLnR5cGUpO2J0JiYoIXllfHwheWUoYnQpKSYmUWUoT2UpfSl9ZnVuY3Rpb24gUWUoeWUpe3ZhciBMZT1DLmdldCh5ZSk7IUR8fCFkdChMZSxEKT9HZShMZSk6RCYmU2koRCksQy5kZWxldGUoeWUpLGsuZGVsZXRlKHllKX12cigoKT0+W2kuaW5jbHVkZSxpLmV4Y2x1ZGVdLHllPT57dmFyW0xlLE9lXT15ZTtMZSYmdXQoYnQ9PiRyKExlLGJ0KSksT2UmJnV0KGJ0PT4hJHIoT2UsYnQpKX0se2ZsdXNoOiJwb3N0IixkZWVwOiEwfSk7dmFyIFJlPW51bGwsbWU9KCk9PntSZSE9bnVsbCYmQy5zZXQoUmUseGkoXy5zdWJUcmVlKSl9O3JldHVybiB0cihtZSksbnIobWUpLGNyKCgpPT57Qy5mb3JFYWNoKHllPT57dmFye3N1YlRyZWU6TGUsc3VzcGVuc2U6T2V9PV8sYnQ9eGkoTGUpO2lmKHllLnR5cGU9PT1idC50eXBlJiZ5ZS5rZXk9PT1idC5rZXkpe1NpKGJ0KTt2YXIgQ3Q9YnQuY29tcG9uZW50LmRhO0N0JiZscihDdCxPZSk7cmV0dXJufUdlKHllKX0pfSksKCk9PntpZihSZT1udWxsLCFkLmRlZmF1bHQpcmV0dXJuIG51bGw7dmFyIHllPWQuZGVmYXVsdCgpLExlPXllWzBdO2lmKHllLmxlbmd0aD4xKXJldHVybiBEPW51bGwseWU7aWYoIUd0KExlKXx8IShMZS5zaGFwZUZsYWcmNCkmJiEoTGUuc2hhcGVGbGFnJjEyOCkpcmV0dXJuIEQ9bnVsbCxMZTt2YXIgT2U9eGkoTGUpLGJ0PU9lLnR5cGUsQ3Q9X28oUnIoT2UpP09lLnR5cGUuX19hc3luY1Jlc29sdmVkfHx7fTpidCkse2luY2x1ZGU6S2UsZXhjbHVkZTpSdCxtYXg6TX09aTtpZihLZSYmKCFDdHx8ISRyKEtlLEN0KSl8fFJ0JiZDdCYmJHIoUnQsQ3QpKXJldHVybiBEPU9lLExlO3ZhciBqPU9lLmtleT09bnVsbD9idDpPZS5rZXksc2U9Qy5nZXQoaik7cmV0dXJuIE9lLmVsJiYoT2U9ZWkoT2UpLExlLnNoYXBlRmxhZyYxMjgmJihMZS5zc0NvbnRlbnQ9T2UpKSxSZT1qLHNlPyhPZS5lbD1zZS5lbCxPZS5jb21wb25lbnQ9c2UuY29tcG9uZW50LE9lLnRyYW5zaXRpb24mJk9yKE9lLE9lLnRyYW5zaXRpb24pLE9lLnNoYXBlRmxhZ3w9NTEyLGsuZGVsZXRlKGopLGsuYWRkKGopKTooay5hZGQoaiksTSYmay5zaXplPnBhcnNlSW50KE0sMTApJiZRZShrLnZhbHVlcygpLm5leHQoKS52YWx1ZSkpLE9lLnNoYXBlRmxhZ3w9MjU2LEQ9T2UsVG8oTGUudHlwZSk/TGU6T2V9fX0samk9Zm47ZnVuY3Rpb24gJHIoaSxsKXtyZXR1cm4gaC5pc0FycmF5KGkpP2kuc29tZShkPT4kcihkLGwpKTpoLmlzU3RyaW5nKGkpP2kuc3BsaXQoIiwiKS5pbmNsdWRlcyhsKTpoLmlzUmVnRXhwKGkpP2kudGVzdChsKTohMX1mdW5jdGlvbiB0byhpLGwpe0hyKGksImEiLGwpfWZ1bmN0aW9uIEVuKGksbCl7SHIoaSwiZGEiLGwpfWZ1bmN0aW9uIEhyKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOl9uLF89aS5fX3dkY3x8KGkuX193ZGM9KCk9Pntmb3IodmFyIEM9ZDtDOyl7aWYoQy5pc0RlYWN0aXZhdGVkKXJldHVybjtDPUMucGFyZW50fXJldHVybiBpKCl9KTtpZihtcihsLF8sZCksZClmb3IodmFyIEE9ZC5wYXJlbnQ7QSYmQS5wYXJlbnQ7KUVpKEEucGFyZW50LnZub2RlKSYmc3IoXyxsLGQsQSksQT1BLnBhcmVudH1mdW5jdGlvbiBzcihpLGwsZCxfKXt2YXIgQT1tcihsLGksXywhMCk7aG8oKCk9PntoLnJlbW92ZShfW2xdLEEpfSxkKX1mdW5jdGlvbiBTaShpKXtpLnNoYXBlRmxhZyY9fjI1NixpLnNoYXBlRmxhZyY9fjUxMn1mdW5jdGlvbiB4aShpKXtyZXR1cm4gaS5zaGFwZUZsYWcmMTI4P2kuc3NDb250ZW50Oml9ZnVuY3Rpb24gbXIoaSxsKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06X24sXz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITE7aWYoZCl7aWYoUi5pc1Jvb3RIb29rKGkpJiZkIT09ZC5yb290JiYoZD1kLnJvb3QsUi5pc1Jvb3RJbW1lZGlhdGVIb29rKGkpKSl7dmFyIEE9ZC5wcm94eTtPdChsLmJpbmQoQSksZCxpLFIuT05fTE9BRD09PWk/W0EuJHBhZ2Uub3B0aW9uc106W10pfXZhcntfX3BhZ2VfY29udGFpbmVyX186Q309ZC5yb290LnZub2RlO0MmJkMub25JbmplY3RIb29rKGkpO3ZhciBrPWRbaV18fChkW2ldPVtdKSxEPWwuX193ZWh8fChsLl9fd2VoPWZ1bmN0aW9uKCl7aWYoIWQuaXNVbm1vdW50ZWQpe3kucGF1c2VUcmFja2luZygpLHFuKGQpO2Zvcih2YXIgSD1hcmd1bWVudHMubGVuZ3RoLG5lPW5ldyBBcnJheShIKSx2ZT0wO3ZlPEg7dmUrKyluZVt2ZV09YXJndW1lbnRzW3ZlXTt2YXIgQmU9T3QobCxkLGksbmUpO3JldHVybiBBaSgpLHkucmVzZXRUcmFja2luZygpLEJlfX0pO3JldHVybiBfP2sudW5zaGlmdChEKTprLnB1c2goRCksRH19dmFyIFFyPWk9PmZ1bmN0aW9uKGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpfbjtyZXR1cm4oIUUuaXNJblNTUkNvbXBvbmVudFNldHVwfHxpPT09InNwIikmJm1yKGksZnVuY3Rpb24oKXtyZXR1cm4gbCguLi5hcmd1bWVudHMpfSxkKX0sZXI9UXIoImJtIiksdHI9UXIoIm0iKSxHbj1RcigiYnUiKSxucj1RcigidSIpLGNyPVFyKCJidW0iKSxobz1RcigidW0iKSxnbz1Rcigic3AiKSxObz1RcigicnRnIiksbm89UXIoInJ0YyIpO2Z1bmN0aW9uIGtvKGkpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpfbjttcigiZWMiLGksbCl9ZnVuY3Rpb24ganIoaSxsKXt2YXIgZD1nbjtpZihkPT09bnVsbClyZXR1cm4gaTtmb3IodmFyIF89RGkoZCl8fGQucHJveHksQT1pLmRpcnN8fChpLmRpcnM9W10pLEM9MDtDPGwubGVuZ3RoO0MrKyl7dmFyW2ssRCxILG5lPWguRU1QVFlfT0JKXT1sW0NdO2smJihoLmlzRnVuY3Rpb24oaykmJihrPXttb3VudGVkOmssdXBkYXRlZDprfSksay5kZWVwJiZacihEKSxBLnB1c2goe2RpcjprLGluc3RhbmNlOl8sdmFsdWU6RCxvbGRWYWx1ZTp2b2lkIDAsYXJnOkgsbW9kaWZpZXJzOm5lfSkpfXJldHVybiBpfWZ1bmN0aW9uIHhyKGksbCxkLF8pe2Zvcih2YXIgQT1pLmRpcnMsQz1sJiZsLmRpcnMsaz0wO2s8QS5sZW5ndGg7aysrKXt2YXIgRD1BW2tdO0MmJihELm9sZFZhbHVlPUNba10udmFsdWUpO3ZhciBIPUQuZGlyW19dO0gmJih5LnBhdXNlVHJhY2tpbmcoKSxPdChILGQsOCxbaS5lbCxELGksbF0pLHkucmVzZXRUcmFja2luZygpKX19dmFyIHBvPSJjb21wb25lbnRzIixSbz0iZGlyZWN0aXZlcyI7ZnVuY3Rpb24gcm8oaSxsKXtyZXR1cm4gemkocG8saSwhMCxsKXx8aX12YXIgQmk9U3ltYm9sKCk7ZnVuY3Rpb24gdm8oaSl7cmV0dXJuIGguaXNTdHJpbmcoaSk/emkocG8saSwhMSl8fGk6aXx8Qml9ZnVuY3Rpb24gTWkoaSl7cmV0dXJuIHppKFJvLGkpfWZ1bmN0aW9uIHppKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLF89Z258fF9uO2lmKF8pe3ZhciBBPV8udHlwZTtpZihpPT09cG8pe3ZhciBDPV9vKEEsITEpO2lmKEMmJihDPT09bHx8Qz09PWguY2FtZWxpemUobCl8fEM9PT1oLmNhcGl0YWxpemUoaC5jYW1lbGl6ZShsKSkpKXJldHVybiBBfXZhciBrPVFvKF9baV18fEFbaV0sbCl8fFFvKF8uYXBwQ29udGV4dFtpXSxsKTtyZXR1cm4hayYmZD9BOmt9fWZ1bmN0aW9uIFFvKGksbCl7cmV0dXJuIGkmJihpW2xdfHxpW2guY2FtZWxpemUobCldfHxpW2guY2FwaXRhbGl6ZShoLmNhbWVsaXplKGwpKV0pfWZ1bmN0aW9uIEIoaSxsLGQsXyl7dmFyIEEsQz1kJiZkW19dO2lmKGguaXNBcnJheShpKXx8aC5pc1N0cmluZyhpKSl7QT1uZXcgQXJyYXkoaS5sZW5ndGgpO2Zvcih2YXIgaz0wLEQ9aS5sZW5ndGg7azxEO2srKylBW2tdPWwoaVtrXSxrLHZvaWQgMCxDJiZDW2tdKX1lbHNlIGlmKHR5cGVvZiBpPT0ibnVtYmVyIil7QT1uZXcgQXJyYXkoaSk7Zm9yKHZhciBIPTA7SDxpO0grKylBW0hdPWwoSCsxLEgsdm9pZCAwLEMmJkNbSF0pfWVsc2UgaWYoaC5pc09iamVjdChpKSlpZihpW1N5bWJvbC5pdGVyYXRvcl0pQT1BcnJheS5mcm9tKGksKGtlLEdlKT0+bChrZSxHZSx2b2lkIDAsQyYmQ1tHZV0pKTtlbHNle3ZhciBuZT1PYmplY3Qua2V5cyhpKTtBPW5ldyBBcnJheShuZS5sZW5ndGgpO2Zvcih2YXIgdmU9MCxCZT1uZS5sZW5ndGg7dmU8QmU7dmUrKyl7dmFyIHVlPW5lW3ZlXTtBW3ZlXT1sKGlbdWVdLHVlLHZlLEMmJkNbdmVdKX19ZWxzZSBBPVtdO3JldHVybiBkJiYoZFtfXT1BKSxBfWZ1bmN0aW9uIFEoaSxsKXtmb3IodmFyIGQ9ZnVuY3Rpb24oQSl7dmFyIEM9bFtBXTtpZihoLmlzQXJyYXkoQykpZm9yKHZhciBrPTA7azxDLmxlbmd0aDtrKyspaVtDW2tdLm5hbWVdPUNba10uZm47ZWxzZSBDJiYoaVtDLm5hbWVdPUMua2V5P2Z1bmN0aW9uKCl7dmFyIEQ9Qy5mbiguLi5hcmd1bWVudHMpO3JldHVybiBEJiYoRC5rZXk9Qy5rZXkpLER9OkMuZm4pfSxfPTA7XzxsLmxlbmd0aDtfKyspZChfKTtyZXR1cm4gaX1mdW5jdGlvbiBoZShpLGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fSxfPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwLEE9YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTp2b2lkIDA7aWYoZ24uaXNDRXx8Z24ucGFyZW50JiZScihnbi5wYXJlbnQpJiZnbi5wYXJlbnQuaXNDRSlyZXR1cm4gbCE9PSJkZWZhdWx0IiYmKGQubmFtZT1sKSxxdCgic2xvdCIsZCxfJiZfKCkpO3ZhciBDPWlbbF07QyYmQy5fYyYmKEMuX2Q9ITEpLGN0KCk7dmFyIGs9QyYmYWUoQyhkKSksRD1kbih0ZSx7a2V5OmQua2V5fHxrJiZrLmtleXx8Il8iLmNvbmNhdChsKX0sa3x8KF8/XygpOltdKSxrJiZpLl89PT0xPzY0Oi0yKTtyZXR1cm4hQSYmRC5zY29wZUlkJiYoRC5zbG90U2NvcGVJZHM9W0Quc2NvcGVJZCsiLXMiXSksQyYmQy5fYyYmKEMuX2Q9ITApLER9ZnVuY3Rpb24gYWUoaSl7cmV0dXJuIGkuc29tZShsPT5HdChsKT8hKGwudHlwZT09PXBlfHxsLnR5cGU9PT10ZSYmIWFlKGwuY2hpbGRyZW4pKTohMCk/aTpudWxsfWZ1bmN0aW9uIGRlKGksbCl7dmFyIGQ9e307Zm9yKHZhciBfIGluIGkpZFtsJiYvW0EtWl0vLnRlc3QoXyk/Im9uOiIuY29uY2F0KF8pOmgudG9IYW5kbGVyS2V5KF8pXT1pW19dO3JldHVybiBkfXZhciB2dD1pPT5pP3VzKGkpP0RpKGkpfHxpLnByb3h5OnZ0KGkucGFyZW50KTpudWxsLGt0PWguZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCkseyQ6aT0+aSwkZWw6aT0+aS52bm9kZS5lbCwkZGF0YTppPT5pLmRhdGEsJHByb3BzOmk9PmkucHJvcHMsJGF0dHJzOmk9PmkuYXR0cnMsJHNsb3RzOmk9Pmkuc2xvdHMsJHJlZnM6aT0+aS5yZWZzLCRwYXJlbnQ6aT0+dnQoaS5wYXJlbnQpLCRyb290Omk9PnZ0KGkucm9vdCksJGVtaXQ6aT0+aS5lbWl0LCRvcHRpb25zOmk9Pl9yKGkpLCRmb3JjZVVwZGF0ZTppPT5pLmZ8fChpLmY9KCk9PnByKGkudXBkYXRlKSksJG5leHRUaWNrOmk9Pmkubnx8KGkubj1nci5iaW5kKGkucHJveHkpKSwkd2F0Y2g6aT0+SW8uYmluZChpKX0pLFg9KGksbCk9PmkhPT1oLkVNUFRZX09CSiYmIWkuX19pc1NjcmlwdFNldHVwJiZoLmhhc093bihpLGwpLEs9e2dldChpLGwpe3ZhcntfOmR9PWkse2N0eDpfLHNldHVwU3RhdGU6QSxkYXRhOkMscHJvcHM6ayxhY2Nlc3NDYWNoZTpELHR5cGU6SCxhcHBDb250ZXh0Om5lfT1kLHZlO2lmKGxbMF0hPT0iJCIpe3ZhciBCZT1EW2xdO2lmKEJlIT09dm9pZCAwKXN3aXRjaChCZSl7Y2FzZSAxOnJldHVybiBBW2xdO2Nhc2UgMjpyZXR1cm4gQ1tsXTtjYXNlIDQ6cmV0dXJuIF9bbF07Y2FzZSAzOnJldHVybiBrW2xdfWVsc2V7aWYoWChBLGwpKXJldHVybiBEW2xdPTEsQVtsXTtpZihDIT09aC5FTVBUWV9PQkomJmguaGFzT3duKEMsbCkpcmV0dXJuIERbbF09MixDW2xdO2lmKCh2ZT1kLnByb3BzT3B0aW9uc1swXSkmJmguaGFzT3duKHZlLGwpKXJldHVybiBEW2xdPTMsa1tsXTtpZihfIT09aC5FTVBUWV9PQkomJmguaGFzT3duKF8sbCkpcmV0dXJuIERbbF09NCxfW2xdO05lJiYoRFtsXT0wKX19dmFyIHVlPWt0W2xdLGtlLEdlO2lmKHVlKXJldHVybiBsPT09IiRhdHRycyImJnkudHJhY2soZCwiZ2V0IixsKSx1ZShkKTtpZigoa2U9SC5fX2Nzc01vZHVsZXMpJiYoa2U9a2VbbF0pKXJldHVybiBrZTtpZihfIT09aC5FTVBUWV9PQkomJmguaGFzT3duKF8sbCkpcmV0dXJuIERbbF09NCxfW2xdO2lmKEdlPW5lLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLGguaGFzT3duKEdlLGwpKXJldHVybiBHZVtsXX0sc2V0KGksbCxkKXt2YXJ7X309aSx7ZGF0YTpBLHNldHVwU3RhdGU6QyxjdHg6a309XztyZXR1cm4gWChDLGwpPyhDW2xdPWQsITApOkEhPT1oLkVNUFRZX09CSiYmaC5oYXNPd24oQSxsKT8oQVtsXT1kLCEwKTpoLmhhc093bihfLnByb3BzLGwpfHxsWzBdPT09IiQiJiZsLnNsaWNlKDEpaW4gXz8hMTooa1tsXT1kLCEwKX0saGFzKGksbCl7dmFye186e2RhdGE6ZCxzZXR1cFN0YXRlOl8sYWNjZXNzQ2FjaGU6QSxjdHg6QyxhcHBDb250ZXh0OmsscHJvcHNPcHRpb25zOkR9fT1pLEg7cmV0dXJuISFBW2xdfHxkIT09aC5FTVBUWV9PQkomJmguaGFzT3duKGQsbCl8fFgoXyxsKXx8KEg9RFswXSkmJmguaGFzT3duKEgsbCl8fGguaGFzT3duKEMsbCl8fGguaGFzT3duKGt0LGwpfHxoLmhhc093bihrLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLGwpfSxkZWZpbmVQcm9wZXJ0eShpLGwsZCl7cmV0dXJuIGQuZ2V0IT1udWxsP2kuXy5hY2Nlc3NDYWNoZVtsXT0wOmguaGFzT3duKGQsInZhbHVlIikmJnRoaXMuc2V0KGksbCxkLnZhbHVlLG51bGwpLFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoaSxsLGQpfX0saWU9aC5leHRlbmQoe30sSyx7Z2V0KGksbCl7aWYobCE9PVN5bWJvbC51bnNjb3BhYmxlcylyZXR1cm4gSy5nZXQoaSxsLGkpfSxoYXMoaSxsKXt2YXIgZD1sWzBdIT09Il8iJiYhaC5pc0dsb2JhbGx5V2hpdGVsaXN0ZWQobCk7cmV0dXJuIGR9fSksTmU9ITA7ZnVuY3Rpb24gc3QoaSl7dmFyIGw9X3IoaSksZD1pLnByb3h5LF89aS5jdHg7TmU9ITEsbC5iZWZvcmVDcmVhdGUmJnhuKGwuYmVmb3JlQ3JlYXRlLGksImJjIik7dmFye2RhdGE6QSxjb21wdXRlZDpDLG1ldGhvZHM6ayx3YXRjaDpELHByb3ZpZGU6SCxpbmplY3Q6bmUsY3JlYXRlZDp2ZSxiZWZvcmVNb3VudDpCZSxtb3VudGVkOnVlLGJlZm9yZVVwZGF0ZTprZSx1cGRhdGVkOkdlLGFjdGl2YXRlZDp1dCxkZWFjdGl2YXRlZDpRZSxiZWZvcmVEZXN0cm95OlJlLGJlZm9yZVVubW91bnQ6bWUsZGVzdHJveWVkOnllLHVubW91bnRlZDpMZSxyZW5kZXI6T2UscmVuZGVyVHJhY2tlZDpidCxyZW5kZXJUcmlnZ2VyZWQ6Q3QsZXJyb3JDYXB0dXJlZDpLZSxzZXJ2ZXJQcmVmZXRjaDpSdCxleHBvc2U6TSxpbmhlcml0QXR0cnM6aixjb21wb25lbnRzOnNlLGRpcmVjdGl2ZXM6cmUsZmlsdGVyczpvZX09bCxVZT1udWxsO2lmKG5lJiZYdChuZSxfLFVlLGkuYXBwQ29udGV4dC5jb25maWcudW53cmFwSW5qZWN0ZWRSZWYpLGspZm9yKHZhciBydCBpbiBrKXt2YXIgcWU9a1tydF07aC5pc0Z1bmN0aW9uKHFlKSYmKF9bcnRdPXFlLmJpbmQoZCkpfWlmKEEpe3ZhciBaZT1BLmNhbGwoZCxkKTtoLmlzT2JqZWN0KFplKSYmKGkuZGF0YT15LnJlYWN0aXZlKFplKSl9aWYoTmU9ITAsQyl7dmFyICRlPWZ1bmN0aW9uKHZuKXt2YXIgYm49Q1t2bl0sZnI9aC5pc0Z1bmN0aW9uKGJuKT9ibi5iaW5kKGQsZCk6aC5pc0Z1bmN0aW9uKGJuLmdldCk/Ym4uZ2V0LmJpbmQoZCxkKTpoLk5PT1Asbmk9IWguaXNGdW5jdGlvbihibikmJmguaXNGdW5jdGlvbihibi5zZXQpP2JuLnNldC5iaW5kKGQpOmguTk9PUCxKdD1kcyh7Z2V0OmZyLHNldDpuaX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLHZuLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9Pkp0LnZhbHVlLHNldDphbj0+SnQudmFsdWU9YW59KX07Zm9yKHZhciAkdCBpbiBDKSRlKCR0KX1pZihEKWZvcih2YXIgcHQgaW4gRClEbihEW3B0XSxfLGQscHQpO2lmKEgpe3ZhciB4dD1oLmlzRnVuY3Rpb24oSCk/SC5jYWxsKGQpOkg7UmVmbGVjdC5vd25LZXlzKHh0KS5mb3JFYWNoKHZuPT57Tm4odm4seHRbdm5dKX0pfXZlJiZ4bih2ZSxpLCJjIik7ZnVuY3Rpb24gQnQodm4sYm4pe2guaXNBcnJheShibik/Ym4uZm9yRWFjaChmcj0+dm4oZnIuYmluZChkKSkpOmJuJiZ2bihibi5iaW5kKGQpKX1pZihCdChlcixCZSksQnQodHIsdWUpLEJ0KEduLGtlKSxCdChucixHZSksQnQodG8sdXQpLEJ0KEVuLFFlKSxCdChrbyxLZSksQnQobm8sYnQpLEJ0KE5vLEN0KSxCdChjcixtZSksQnQoaG8sTGUpLEJ0KGdvLFJ0KSxoLmlzQXJyYXkoTSkpaWYoTS5sZW5ndGgpe3ZhciBNbj1pLmV4cG9zZWR8fChpLmV4cG9zZWQ9e30pO00uZm9yRWFjaCh2bj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShNbix2bix7Z2V0OigpPT5kW3ZuXSxzZXQ6Ym49PmRbdm5dPWJufSl9KX1lbHNlIGkuZXhwb3NlZHx8KGkuZXhwb3NlZD17fSk7T2UmJmkucmVuZGVyPT09aC5OT09QJiYoaS5yZW5kZXI9T2UpLGohPW51bGwmJihpLmluaGVyaXRBdHRycz1qKSxzZSYmKGkuY29tcG9uZW50cz1zZSkscmUmJihpLmRpcmVjdGl2ZXM9cmUpO3ZhciBSbj1pLmFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJGFwcGx5T3B0aW9ucztSbiYmUm4obCxpLGQpfWZ1bmN0aW9uIFh0KGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2guaXNBcnJheShpKSYmKGk9TG4oaSkpO3ZhciBfPWZ1bmN0aW9uKEMpe3ZhciBrPWlbQ10sRD12b2lkIDA7aC5pc09iamVjdChrKT8iZGVmYXVsdCJpbiBrP0Q9Wm4oay5mcm9tfHxDLGsuZGVmYXVsdCwhMCk6RD1abihrLmZyb218fEMpOkQ9Wm4oaykseS5pc1JlZihEKSYmZD9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxDLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PkQudmFsdWUsc2V0Okg9PkQudmFsdWU9SH0pOmxbQ109RH07Zm9yKHZhciBBIGluIGkpXyhBKX1mdW5jdGlvbiB4bihpLGwsZCl7T3QoaC5pc0FycmF5KGkpP2kubWFwKF89Pl8uYmluZChsLnByb3h5KSk6aS5iaW5kKGwucHJveHkpLGwsZCl9ZnVuY3Rpb24gRG4oaSxsLGQsXyl7dmFyIEE9Xy5pbmNsdWRlcygiLiIpP1ZyKGQsXyk6KCk9PmRbX107aWYoaC5pc1N0cmluZyhpKSl7dmFyIEM9bFtpXTtoLmlzRnVuY3Rpb24oQykmJnZyKEEsQyl9ZWxzZSBpZihoLmlzRnVuY3Rpb24oaSkpdnIoQSxpLmJpbmQoZCkpO2Vsc2UgaWYoaC5pc09iamVjdChpKSlpZihoLmlzQXJyYXkoaSkpaS5mb3JFYWNoKEQ9PkRuKEQsbCxkLF8pKTtlbHNle3ZhciBrPWguaXNGdW5jdGlvbihpLmhhbmRsZXIpP2kuaGFuZGxlci5iaW5kKGQpOmxbaS5oYW5kbGVyXTtoLmlzRnVuY3Rpb24oaykmJnZyKEEsayxpKX19ZnVuY3Rpb24gX3IoaSl7dmFyIGw9aS50eXBlLHttaXhpbnM6ZCxleHRlbmRzOl99PWwse21peGluczpBLG9wdGlvbnNDYWNoZTpDLGNvbmZpZzp7b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOmt9fT1pLmFwcENvbnRleHQsRD1DLmdldChsKSxIO3JldHVybiBEP0g9RDohQS5sZW5ndGgmJiFkJiYhXz9IPWw6KEg9e30sQS5sZW5ndGgmJkEuZm9yRWFjaChuZT0+QnIoSCxuZSxrLCEwKSksQnIoSCxsLGspKSxoLmlzT2JqZWN0KGwpJiZDLnNldChsLEgpLEh9ZnVuY3Rpb24gQnIoaSxsLGQpe3ZhciBfPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSx7bWl4aW5zOkEsZXh0ZW5kczpDfT1sO0MmJkJyKGksQyxkLCEwKSxBJiZBLmZvckVhY2goSD0+QnIoaSxILGQsITApKTtmb3IodmFyIGsgaW4gbClpZighKF8mJms9PT0iZXhwb3NlIikpe3ZhciBEPW1vW2tdfHxkJiZkW2tdO2lba109RD9EKGlba10sbFtrXSk6bFtrXX1yZXR1cm4gaX12YXIgbW89e2RhdGE6eG8scHJvcHM6Rm4sZW1pdHM6Rm4sbWV0aG9kczpGbixjb21wdXRlZDpGbixiZWZvcmVDcmVhdGU6WW4sY3JlYXRlZDpZbixiZWZvcmVNb3VudDpZbixtb3VudGVkOlluLGJlZm9yZVVwZGF0ZTpZbix1cGRhdGVkOlluLGJlZm9yZURlc3Ryb3k6WW4sYmVmb3JlVW5tb3VudDpZbixkZXN0cm95ZWQ6WW4sdW5tb3VudGVkOlluLGFjdGl2YXRlZDpZbixkZWFjdGl2YXRlZDpZbixlcnJvckNhcHR1cmVkOlluLHNlcnZlclByZWZldGNoOlluLGNvbXBvbmVudHM6Rm4sZGlyZWN0aXZlczpGbix3YXRjaDp3aSxwcm92aWRlOnhvLGluamVjdDpCb307ZnVuY3Rpb24geG8oaSxsKXtyZXR1cm4gbD9pP2Z1bmN0aW9uKCl7cmV0dXJuIGguZXh0ZW5kKGguaXNGdW5jdGlvbihpKT9pLmNhbGwodGhpcyx0aGlzKTppLGguaXNGdW5jdGlvbihsKT9sLmNhbGwodGhpcyx0aGlzKTpsKX06bDppfWZ1bmN0aW9uIEJvKGksbCl7cmV0dXJuIEZuKExuKGkpLExuKGwpKX1mdW5jdGlvbiBMbihpKXtpZihoLmlzQXJyYXkoaSkpe2Zvcih2YXIgbD17fSxkPTA7ZDxpLmxlbmd0aDtkKyspbFtpW2RdXT1pW2RdO3JldHVybiBsfXJldHVybiBpfWZ1bmN0aW9uIFluKGksbCl7cmV0dXJuIGk/Wy4uLm5ldyBTZXQoW10uY29uY2F0KGksbCkpXTpsfWZ1bmN0aW9uIEZuKGksbCl7cmV0dXJuIGk/aC5leHRlbmQoaC5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxpKSxsKTpsfWZ1bmN0aW9uIHdpKGksbCl7aWYoIWkpcmV0dXJuIGw7aWYoIWwpcmV0dXJuIGk7dmFyIGQ9aC5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxpKTtmb3IodmFyIF8gaW4gbClkW19dPVluKGlbX10sbFtfXSk7cmV0dXJuIGR9ZnVuY3Rpb24gaXMoaSxsLGQpe3ZhciBfPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxBPXt9LEM9e307aC5kZWYoQyxCbiwxKSxpLnByb3BzRGVmYXVsdHM9T2JqZWN0LmNyZWF0ZShudWxsKSxicihpLGwsQSxDKTtmb3IodmFyIGsgaW4gaS5wcm9wc09wdGlvbnNbMF0payBpbiBBfHwoQVtrXT12b2lkIDApO2Q/aS5wcm9wcz1fP0E6eS5zaGFsbG93UmVhY3RpdmUoQSk6aS50eXBlLnByb3BzP2kucHJvcHM9QTppLnByb3BzPUMsaS5hdHRycz1DfWZ1bmN0aW9uIGhhKGksbCxkLF8pe3Zhcntwcm9wczpBLGF0dHJzOkMsdm5vZGU6e3BhdGNoRmxhZzprfX09aSxEPXkudG9SYXcoQSksW0hdPWkucHJvcHNPcHRpb25zLG5lPSExO2lmKChffHxrPjApJiYhKGsmMTYpKXtpZihrJjgpZm9yKHZhciB2ZT1pLnZub2RlLmR5bmFtaWNQcm9wcyxCZT0wO0JlPHZlLmxlbmd0aDtCZSsrKXt2YXIgdWU9dmVbQmVdO2lmKCFBbihpLmVtaXRzT3B0aW9ucyx1ZSkpe3ZhciBrZT1sW3VlXTtpZihIKWlmKGguaGFzT3duKEMsdWUpKWtlIT09Q1t1ZV0mJihDW3VlXT1rZSxuZT0hMCk7ZWxzZXt2YXIgR2U9aC5jYW1lbGl6ZSh1ZSk7QVtHZV09VGEoSCxELEdlLGtlLGksITEpfWVsc2Uga2UhPT1DW3VlXSYmKENbdWVdPWtlLG5lPSEwKX19fWVsc2V7YnIoaSxsLEEsQykmJihuZT0hMCk7dmFyIHV0O2Zvcih2YXIgUWUgaW4gRCkoIWx8fCFoLmhhc093bihsLFFlKSYmKCh1dD1oLmh5cGhlbmF0ZShRZSkpPT09UWV8fCFoLmhhc093bihsLHV0KSkpJiYoSD9kJiYoZFtRZV0hPT12b2lkIDB8fGRbdXRdIT09dm9pZCAwKSYmKEFbUWVdPVRhKEgsRCxRZSx2b2lkIDAsaSwhMCkpOmRlbGV0ZSBBW1FlXSk7aWYoQyE9PUQpZm9yKHZhciBSZSBpbiBDKSghbHx8IWguaGFzT3duKGwsUmUpJiYhMCkmJihkZWxldGUgQ1tSZV0sbmU9ITApfW5lJiZ5LnRyaWdnZXIoaSwic2V0IiwiJGF0dHJzIil9ZnVuY3Rpb24gYnIoaSxsLGQsXyl7dmFyW0EsQ109aS5wcm9wc09wdGlvbnMsaz0hMSxEO2lmKGwpe2Zvcih2YXIgSCBpbiBsKWlmKCFoLmlzUmVzZXJ2ZWRQcm9wKEgpKXt2YXIgbmU9bFtIXSx2ZT12b2lkIDA7QSYmaC5oYXNPd24oQSx2ZT1oLmNhbWVsaXplKEgpKT8hQ3x8IUMuaW5jbHVkZXModmUpP2RbdmVdPW5lOihEfHwoRD17fSkpW3ZlXT1uZTpBbihpLmVtaXRzT3B0aW9ucyxIKXx8KCEoSCBpbiBfKXx8bmUhPT1fW0hdKSYmKF9bSF09bmUsaz0hMCl9fWlmKEMpZm9yKHZhciBCZT15LnRvUmF3KGQpLHVlPUR8fGguRU1QVFlfT0JKLGtlPTA7a2U8Qy5sZW5ndGg7a2UrKyl7dmFyIEdlPUNba2VdO2RbR2VdPVRhKEEsQmUsR2UsdWVbR2VdLGksIWguaGFzT3duKHVlLEdlKSl9cmV0dXJuIGt9ZnVuY3Rpb24gVGEoaSxsLGQsXyxBLEMpe3ZhciBrPWlbZF07aWYoayE9bnVsbCl7dmFyIEQ9aC5oYXNPd24oaywiZGVmYXVsdCIpO2lmKEQmJl89PT12b2lkIDApe3ZhciBIPWsuZGVmYXVsdDtpZihrLnR5cGUhPT1GdW5jdGlvbiYmaC5pc0Z1bmN0aW9uKEgpKXt2YXJ7cHJvcHNEZWZhdWx0czpuZX09QTtkIGluIG5lP189bmVbZF06KHFuKEEpLF89bmVbZF09SC5jYWxsKG51bGwsbCksQWkoKSl9ZWxzZSBfPUh9a1swXSYmKEMmJiFEP189ITE6a1sxXSYmKF89PT0iInx8Xz09PWguaHlwaGVuYXRlKGQpKSYmKF89ITApKX1yZXR1cm4gX31mdW5jdGlvbiBMYShpLGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxfPWwucHJvcHNDYWNoZSxBPV8uZ2V0KGkpO2lmKEEpcmV0dXJuIEE7dmFyIEM9aS5wcm9wcyxrPXt9LEQ9W10sSD0hMTtpZighaC5pc0Z1bmN0aW9uKGkpKXt2YXIgbmU9eWU9PntIPSEwO3ZhcltMZSxPZV09TGEoeWUsbCwhMCk7aC5leHRlbmQoayxMZSksT2UmJkQucHVzaCguLi5PZSl9OyFkJiZsLm1peGlucy5sZW5ndGgmJmwubWl4aW5zLmZvckVhY2gobmUpLGkuZXh0ZW5kcyYmbmUoaS5leHRlbmRzKSxpLm1peGlucyYmaS5taXhpbnMuZm9yRWFjaChuZSl9aWYoIUMmJiFIKXJldHVybiBoLmlzT2JqZWN0KGkpJiZfLnNldChpLGguRU1QVFlfQVJSKSxoLkVNUFRZX0FSUjtpZihoLmlzQXJyYXkoQykpZm9yKHZhciB2ZT0wO3ZlPEMubGVuZ3RoO3ZlKyspe3ZhciBCZT1oLmNhbWVsaXplKENbdmVdKTtGYShCZSkmJihrW0JlXT1oLkVNUFRZX09CSil9ZWxzZSBpZihDKWZvcih2YXIgdWUgaW4gQyl7dmFyIGtlPWguY2FtZWxpemUodWUpO2lmKEZhKGtlKSl7dmFyIEdlPUNbdWVdLHV0PWtba2VdPWguaXNBcnJheShHZSl8fGguaXNGdW5jdGlvbihHZSk/e3R5cGU6R2V9Ok9iamVjdC5hc3NpZ24oe30sR2UpO2lmKHV0KXt2YXIgUWU9Z2EoQm9vbGVhbix1dC50eXBlKSxSZT1nYShTdHJpbmcsdXQudHlwZSk7dXRbMF09UWU+LTEsdXRbMV09UmU8MHx8UWU8UmUsKFFlPi0xfHxoLmhhc093bih1dCwiZGVmYXVsdCIpKSYmRC5wdXNoKGtlKX19fXZhciBtZT1bayxEXTtyZXR1cm4gaC5pc09iamVjdChpKSYmXy5zZXQoaSxtZSksbWV9ZnVuY3Rpb24gRmEoaSl7cmV0dXJuIGlbMF0hPT0iJCJ9ZnVuY3Rpb24gVmEoaSl7dmFyIGw9aSYmaS50b1N0cmluZygpLm1hdGNoKC9eXHMqKGZ1bmN0aW9ufGNsYXNzKSAoXHcrKS8pO3JldHVybiBsP2xbMl06aT09PW51bGw/Im51bGwiOiIifWZ1bmN0aW9uIFVhKGksbCl7cmV0dXJuIFZhKGkpPT09VmEobCl9ZnVuY3Rpb24gZ2EoaSxsKXtyZXR1cm4gaC5pc0FycmF5KGwpP2wuZmluZEluZGV4KGQ9PlVhKGQsaSkpOmguaXNGdW5jdGlvbihsKSYmVWEobCxpKT8wOi0xfXZhciBQYT1pPT5pWzBdPT09Il8ifHxpPT09IiRzdGFibGUiLFZuPWk9PmguaXNBcnJheShpKT9pLm1hcCgkbik6WyRuKGkpXSxNbz0oaSxsLGQpPT57aWYobC5fbilyZXR1cm4gbDt2YXIgXz1abyhmdW5jdGlvbigpe3JldHVybiBWbihsKC4uLmFyZ3VtZW50cykpfSxkKTtyZXR1cm4gXy5fYz0hMSxffSxlYT0oaSxsLGQpPT57dmFyIF89aS5fY3R4O2Zvcih2YXIgQSBpbiBpKWlmKCFQYShBKSl7dmFyIEM9aVtBXTtoLmlzRnVuY3Rpb24oQyk/bFtBXT1NbyhBLEMsXyk6QyE9bnVsbCYmZnVuY3Rpb24oKXt2YXIgaz1WbihDKTtsW0FdPSgpPT5rfSgpfX0sV2k9KGksbCk9Pnt2YXIgZD1WbihsKTtpLnNsb3RzLmRlZmF1bHQ9KCk9PmR9LG9zPShpLGwpPT57aWYoaS52bm9kZS5zaGFwZUZsYWcmMzIpe3ZhciBkPWwuXztkPyhpLnNsb3RzPXkudG9SYXcobCksaC5kZWYobCwiXyIsZCkpOmVhKGwsaS5zbG90cz17fSl9ZWxzZSBpLnNsb3RzPXt9LGwmJldpKGksbCk7aC5kZWYoaS5zbG90cyxCbiwxKX0sYXM9KGksbCxkKT0+e3Zhcnt2bm9kZTpfLHNsb3RzOkF9PWksQz0hMCxrPWguRU1QVFlfT0JKO2lmKF8uc2hhcGVGbGFnJjMyKXt2YXIgRD1sLl87RD9kJiZEPT09MT9DPSExOihoLmV4dGVuZChBLGwpLCFkJiZEPT09MSYmZGVsZXRlIEEuXyk6KEM9IWwuJHN0YWJsZSxlYShsLEEpKSxrPWx9ZWxzZSBsJiYoV2koaSxsKSxrPXtkZWZhdWx0OjF9KTtpZihDKWZvcih2YXIgSCBpbiBBKSFQYShIKSYmIShIIGluIGspJiZkZWxldGUgQVtIXX07ZnVuY3Rpb24gRG8oKXtyZXR1cm57YXBwOm51bGwsY29uZmlnOntpc05hdGl2ZVRhZzpoLk5PLHBlcmZvcm1hbmNlOiExLGdsb2JhbFByb3BlcnRpZXM6e30sb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOnt9LGVycm9ySGFuZGxlcjp2b2lkIDAsd2FybkhhbmRsZXI6dm9pZCAwLGNvbXBpbGVyT3B0aW9uczp7fX0sbWl4aW5zOltdLGNvbXBvbmVudHM6e30sZGlyZWN0aXZlczp7fSxwcm92aWRlczpPYmplY3QuY3JlYXRlKG51bGwpLG9wdGlvbnNDYWNoZTpuZXcgV2Vha01hcCxwcm9wc0NhY2hlOm5ldyBXZWFrTWFwLGVtaXRzQ2FjaGU6bmV3IFdlYWtNYXB9fXZhciBzcz0wO2Z1bmN0aW9uIGlvKGksbCl7cmV0dXJuIGZ1bmN0aW9uKF8pe3ZhciBBPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO2guaXNGdW5jdGlvbihfKXx8KF89T2JqZWN0LmFzc2lnbih7fSxfKSksQSE9bnVsbCYmIWguaXNPYmplY3QoQSkmJihBPW51bGwpO3ZhciBDPURvKCksaz1uZXcgU2V0LEQ9ITEsSD1DLmFwcD17X3VpZDpzcysrLF9jb21wb25lbnQ6XyxfcHJvcHM6QSxfY29udGFpbmVyOm51bGwsX2NvbnRleHQ6QyxfaW5zdGFuY2U6bnVsbCx2ZXJzaW9uOmRsLGdldCBjb25maWcoKXtyZXR1cm4gQy5jb25maWd9LHNldCBjb25maWcobmUpe30sdXNlKG5lKXtmb3IodmFyIHZlPWFyZ3VtZW50cy5sZW5ndGgsQmU9bmV3IEFycmF5KHZlPjE/dmUtMTowKSx1ZT0xO3VlPHZlO3VlKyspQmVbdWUtMV09YXJndW1lbnRzW3VlXTtyZXR1cm4gay5oYXMobmUpfHwobmUmJmguaXNGdW5jdGlvbihuZS5pbnN0YWxsKT8oay5hZGQobmUpLG5lLmluc3RhbGwoSCwuLi5CZSkpOmguaXNGdW5jdGlvbihuZSkmJihrLmFkZChuZSksbmUoSCwuLi5CZSkpKSxIfSxtaXhpbihuZSl7cmV0dXJuIEMubWl4aW5zLmluY2x1ZGVzKG5lKXx8Qy5taXhpbnMucHVzaChuZSksSH0sY29tcG9uZW50KG5lLHZlKXtyZXR1cm4gdmU/KEMuY29tcG9uZW50c1tuZV09dmUsSCk6Qy5jb21wb25lbnRzW25lXX0sZGlyZWN0aXZlKG5lLHZlKXtyZXR1cm4gdmU/KEMuZGlyZWN0aXZlc1tuZV09dmUsSCk6Qy5kaXJlY3RpdmVzW25lXX0sbW91bnQobmUsdmUsQmUpe2lmKCFEKXt2YXIgdWU9cXQoXyxBKTtyZXR1cm4gdWUuYXBwQ29udGV4dD1DLHZlJiZsP2wodWUsbmUpOmkodWUsbmUsQmUpLEQ9ITAsSC5fY29udGFpbmVyPW5lLG5lLl9fdnVlX2FwcF9fPUgsSC5faW5zdGFuY2U9dWUuY29tcG9uZW50LERpKHVlLmNvbXBvbmVudCl8fHVlLmNvbXBvbmVudC5wcm94eX19LHVubW91bnQoKXtEJiYoaShudWxsLEguX2NvbnRhaW5lciksZGVsZXRlIEguX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyl9LHByb3ZpZGUobmUsdmUpe3JldHVybiBDLnByb3ZpZGVzW25lXT12ZSxIfX07cmV0dXJuIEh9fWZ1bmN0aW9uIHNpKGksbCxkLF8pe3ZhciBBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMTtpZihoLmlzQXJyYXkoaSkpe2kuZm9yRWFjaCgodXQsUWUpPT5zaSh1dCxsJiYoaC5pc0FycmF5KGwpP2xbUWVdOmwpLGQsXyxBKSk7cmV0dXJufWlmKCEoUnIoXykmJiFBKSl7dmFyIEM9Xy5zaGFwZUZsYWcmND9EaShfLmNvbXBvbmVudCl8fF8uY29tcG9uZW50LnByb3h5Ol8uZWwsaz1BP251bGw6Qyx7aTpELHI6SH09aSxuZT1sJiZsLnIsdmU9RC5yZWZzPT09aC5FTVBUWV9PQko/RC5yZWZzPXt9OkQucmVmcyxCZT1ELnNldHVwU3RhdGU7aWYobmUhPW51bGwmJm5lIT09SCYmKGguaXNTdHJpbmcobmUpPyh2ZVtuZV09bnVsbCxoLmhhc093bihCZSxuZSkmJihCZVtuZV09bnVsbCkpOnkuaXNSZWYobmUpJiYobmUudmFsdWU9bnVsbCkpLGguaXNGdW5jdGlvbihIKSlWdChILEQsMTIsW2ssdmVdKTtlbHNle3ZhciB1ZT1oLmlzU3RyaW5nKEgpLGtlPXkuaXNSZWYoSCk7aWYodWV8fGtlKXt2YXIgR2U9KCk9PntpZihpLmYpe3ZhciB1dD11ZT9oLmhhc093bihCZSxIKT9CZVtIXTp2ZVtIXTpILnZhbHVlO0E/aC5pc0FycmF5KHV0KSYmaC5yZW1vdmUodXQsQyk6aC5pc0FycmF5KHV0KT91dC5pbmNsdWRlcyhDKXx8dXQucHVzaChDKTp1ZT8odmVbSF09W0NdLGguaGFzT3duKEJlLEgpJiYoQmVbSF09dmVbSF0pKTooSC52YWx1ZT1bQ10saS5rJiYodmVbaS5rXT1ILnZhbHVlKSl9ZWxzZSB1ZT8odmVbSF09ayxoLmhhc093bihCZSxIKSYmKEJlW0hdPWspKTprZSYmKEgudmFsdWU9ayxpLmsmJih2ZVtpLmtdPWspKX07az8oR2UuaWQ9LTEsbHIoR2UsZCkpOkdlKCl9fX19dmFyIENpPSExLEdpPWk9Pi9zdmcvLnRlc3QoaS5uYW1lc3BhY2VVUkkpJiZpLnRhZ05hbWUhPT0iZm9yZWlnbk9iamVjdCIsbGk9aT0+aS5ub2RlVHlwZT09PTg7ZnVuY3Rpb24gdXIoaSl7dmFye210OmwscDpkLG86e3BhdGNoUHJvcDpfLGNyZWF0ZVRleHQ6QSxuZXh0U2libGluZzpDLHBhcmVudE5vZGU6ayxyZW1vdmU6RCxpbnNlcnQ6SCxjcmVhdGVDb21tZW50Om5lfX09aSx2ZT0oUmUsbWUpPT57aWYoIW1lLmhhc0NoaWxkTm9kZXMoKSl7ZChudWxsLFJlLG1lKSx6ZSgpLG1lLl92bm9kZT1SZTtyZXR1cm59Q2k9ITEsQmUobWUuZmlyc3RDaGlsZCxSZSxudWxsLG51bGwsbnVsbCksemUoKSxtZS5fdm5vZGU9UmUsQ2kmJmNvbnNvbGUuZXJyb3IoIkh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuIil9LEJlPWZ1bmN0aW9uKFJlLG1lLHllLExlLE9lKXt2YXIgYnQ9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiExLEN0PWxpKFJlKSYmUmUuZGF0YT09PSJbIixLZT0oKT0+dXQoUmUsbWUseWUsTGUsT2UsQ3QpLHt0eXBlOlJ0LHJlZjpNLHNoYXBlRmxhZzpqLHBhdGNoRmxhZzpzZX09bWUscmU9UmUubm9kZVR5cGU7bWUuZWw9UmUsc2U9PT0tMiYmKGJ0PSExLG1lLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXIgb2U9bnVsbDtzd2l0Y2goUnQpe2Nhc2UgY2U6cmUhPT0zP21lLmNoaWxkcmVuPT09IiI/KEgobWUuZWw9QSgiIixSZS5wYXJlbnROb2RlKSxrKFJlKSxSZSksb2U9UmUpOm9lPUtlKCk6KFJlLmRhdGEhPT1tZS5jaGlsZHJlbiYmKENpPSEwLFJlLmRhdGE9bWUuY2hpbGRyZW4pLG9lPUMoUmUpKTticmVhaztjYXNlIHBlOnJlIT09OHx8Q3Q/b2U9S2UoKTpvZT1DKFJlKTticmVhaztjYXNlIEllOmlmKEN0JiYoUmU9QyhSZSkscmU9UmUubm9kZVR5cGUpLHJlPT09MXx8cmU9PT0zKXtvZT1SZTtmb3IodmFyIFVlPSFtZS5jaGlsZHJlbi5sZW5ndGgscnQ9MDtydDxtZS5zdGF0aWNDb3VudDtydCsrKVVlJiYobWUuY2hpbGRyZW4rPW9lLm5vZGVUeXBlPT09MT9vZS5vdXRlckhUTUw6b2UuZGF0YSkscnQ9PT1tZS5zdGF0aWNDb3VudC0xJiYobWUuYW5jaG9yPW9lKSxvZT1DKG9lKTtyZXR1cm4gQ3Q/QyhvZSk6b2V9ZWxzZSBLZSgpO2JyZWFrO2Nhc2UgdGU6Q3Q/b2U9R2UoUmUsbWUseWUsTGUsT2UsYnQpOm9lPUtlKCk7YnJlYWs7ZGVmYXVsdDppZihqJjEpcmUhPT0xfHxtZS50eXBlLnRvTG93ZXJDYXNlKCkhPT1SZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk/b2U9S2UoKTpvZT11ZShSZSxtZSx5ZSxMZSxPZSxidCk7ZWxzZSBpZihqJjYpe21lLnNsb3RTY29wZUlkcz1PZTt2YXIgcWU9ayhSZSk7aWYobChtZSxxZSxudWxsLHllLExlLEdpKHFlKSxidCksb2U9Q3Q/UWUoUmUpOkMoUmUpLG9lJiZsaShvZSkmJm9lLmRhdGE9PT0idGVsZXBvcnQgZW5kIiYmKG9lPUMob2UpKSxScihtZSkpe3ZhciBaZTtDdD8oWmU9cXQodGUpLFplLmFuY2hvcj1vZT9vZS5wcmV2aW91c1NpYmxpbmc6cWUubGFzdENoaWxkKTpaZT1SZS5ub2RlVHlwZT09PTM/cWkoIiIpOnF0KCJkaXYiKSxaZS5lbD1SZSxtZS5jb21wb25lbnQuc3ViVHJlZT1aZX19ZWxzZSBqJjY0P3JlIT09OD9vZT1LZSgpOm9lPW1lLnR5cGUuaHlkcmF0ZShSZSxtZSx5ZSxMZSxPZSxidCxpLGtlKTpqJjEyOCYmKG9lPW1lLnR5cGUuaHlkcmF0ZShSZSxtZSx5ZSxMZSxHaShrKFJlKSksT2UsYnQsaSxCZSkpfXJldHVybiBNIT1udWxsJiZzaShNLG51bGwsTGUsbWUpLG9lfSx1ZT0oUmUsbWUseWUsTGUsT2UsYnQpPT57YnQ9YnR8fCEhbWUuZHluYW1pY0NoaWxkcmVuO3Zhcnt0eXBlOkN0LHByb3BzOktlLHBhdGNoRmxhZzpSdCxzaGFwZUZsYWc6TSxkaXJzOmp9PW1lLHNlPUN0PT09ImlucHV0IiYmanx8Q3Q9PT0ib3B0aW9uIjtpZihzZXx8UnQhPT0tMSl7aWYoaiYmeHIobWUsbnVsbCx5ZSwiY3JlYXRlZCIpLEtlKWlmKHNlfHwhYnR8fFJ0JigxNnwzMikpZm9yKHZhciByZSBpbiBLZSkoc2UmJnJlLmVuZHNXaXRoKCJ2YWx1ZSIpfHxoLmlzT24ocmUpJiYhaC5pc1Jlc2VydmVkUHJvcChyZSkpJiZfKFJlLHJlLG51bGwsS2VbcmVdLCExLHZvaWQgMCx5ZSk7ZWxzZSBLZS5vbkNsaWNrJiZfKFJlLCJvbkNsaWNrIixudWxsLEtlLm9uQ2xpY2ssITEsdm9pZCAwLHllKTt2YXIgb2U7aWYoKG9lPUtlJiZLZS5vblZub2RlQmVmb3JlTW91bnQpJiZ6cihvZSx5ZSxtZSksaiYmeHIobWUsbnVsbCx5ZSwiYmVmb3JlTW91bnQiKSwoKG9lPUtlJiZLZS5vblZub2RlTW91bnRlZCl8fGopJiZhcigoKT0+e29lJiZ6cihvZSx5ZSxtZSksaiYmeHIobWUsbnVsbCx5ZSwibW91bnRlZCIpfSxMZSksTSYxNiYmIShLZSYmKEtlLmlubmVySFRNTHx8S2UudGV4dENvbnRlbnQpKSlmb3IodmFyIFVlPWtlKFJlLmZpcnN0Q2hpbGQsbWUsUmUseWUsTGUsT2UsYnQpO1VlOyl7Q2k9ITA7dmFyIHJ0PVVlO1VlPVVlLm5leHRTaWJsaW5nLEQocnQpfWVsc2UgTSY4JiZSZS50ZXh0Q29udGVudCE9PW1lLmNoaWxkcmVuJiYoQ2k9ITAsUmUudGV4dENvbnRlbnQ9bWUuY2hpbGRyZW4pfXJldHVybiBSZS5uZXh0U2libGluZ30sa2U9KFJlLG1lLHllLExlLE9lLGJ0LEN0KT0+e0N0PUN0fHwhIW1lLmR5bmFtaWNDaGlsZHJlbjtmb3IodmFyIEtlPW1lLmNoaWxkcmVuLFJ0PUtlLmxlbmd0aCxNPTA7TTxSdDtNKyspe3ZhciBqPUN0P0tlW01dOktlW01dPSRuKEtlW01dKTtpZihSZSlSZT1CZShSZSxqLExlLE9lLGJ0LEN0KTtlbHNle2lmKGoudHlwZT09PWNlJiYhai5jaGlsZHJlbiljb250aW51ZTtDaT0hMCxkKG51bGwsaix5ZSxudWxsLExlLE9lLEdpKHllKSxidCl9fXJldHVybiBSZX0sR2U9KFJlLG1lLHllLExlLE9lLGJ0KT0+e3ZhcntzbG90U2NvcGVJZHM6Q3R9PW1lO0N0JiYoT2U9T2U/T2UuY29uY2F0KEN0KTpDdCk7dmFyIEtlPWsoUmUpLFJ0PWtlKEMoUmUpLG1lLEtlLHllLExlLE9lLGJ0KTtyZXR1cm4gUnQmJmxpKFJ0KSYmUnQuZGF0YT09PSJdIj9DKG1lLmFuY2hvcj1SdCk6KENpPSEwLEgobWUuYW5jaG9yPW5lKCJdIixLZSksS2UsUnQpLFJ0KX0sdXQ9KFJlLG1lLHllLExlLE9lLGJ0KT0+e2lmKENpPSEwLG1lLmVsPW51bGwsYnQpZm9yKHZhciBDdD1RZShSZSk7Oyl7dmFyIEtlPUMoUmUpO2lmKEtlJiZLZSE9PUN0KUQoS2UpO2Vsc2UgYnJlYWt9dmFyIFJ0PUMoUmUpLE09ayhSZSk7cmV0dXJuIEQoUmUpLGQobnVsbCxtZSxNLFJ0LHllLExlLEdpKE0pLE9lKSxSdH0sUWU9UmU9Pntmb3IodmFyIG1lPTA7UmU7KWlmKFJlPUMoUmUpLFJlJiZsaShSZSkmJihSZS5kYXRhPT09IlsiJiZtZSsrLFJlLmRhdGE9PT0iXSIpKXtpZihtZT09PTApcmV0dXJuIEMoUmUpO21lLS19cmV0dXJuIFJlfTtyZXR1cm5bdmUsQmVdfXZhciBscj1hcjtmdW5jdGlvbiAkYShpKXtyZXR1cm4gWWkoaSl9ZnVuY3Rpb24gSGEoaSl7cmV0dXJuIFlpKGksdXIpfWZ1bmN0aW9uIFlpKGksbCl7dmFyIGQ9aC5nZXRHbG9iYWxUaGlzKCk7ZC5fX1ZVRV9fPSEwO3ZhcntpbnNlcnQ6XyxyZW1vdmU6QSxwYXRjaFByb3A6Qyxmb3JjZVBhdGNoUHJvcDprLGNyZWF0ZUVsZW1lbnQ6RCxjcmVhdGVUZXh0OkgsY3JlYXRlQ29tbWVudDpuZSxzZXRUZXh0OnZlLHNldEVsZW1lbnRUZXh0OkJlLHBhcmVudE5vZGU6dWUsbmV4dFNpYmxpbmc6a2Usc2V0U2NvcGVJZDpHZT1oLk5PT1AsaW5zZXJ0U3RhdGljQ29udGVudDp1dH09aSxRZT1mdW5jdGlvbihZLGVlLGJlKXt2YXIgTWU9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGwsRGU9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsWGU9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOm51bGwsX3Q9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0hPT12b2lkIDA/YXJndW1lbnRzWzZdOiExLGV0PWFyZ3VtZW50cy5sZW5ndGg+NyYmYXJndW1lbnRzWzddIT09dm9pZCAwP2FyZ3VtZW50c1s3XTpudWxsLHR0PWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTohIWVlLmR5bmFtaWNDaGlsZHJlbjtpZihZIT09ZWUpe1kmJiFkdChZLGVlKSYmKE1lPWZyKFkpLEJ0KFksRGUsWGUsITApLFk9bnVsbCksZWUucGF0Y2hGbGFnPT09LTImJih0dD0hMSxlZS5keW5hbWljQ2hpbGRyZW49bnVsbCk7dmFye3R5cGU6SGUscmVmOnp0LHNoYXBlRmxhZzpMdH09ZWU7c3dpdGNoKEhlKXtjYXNlIGNlOlJlKFksZWUsYmUsTWUpO2JyZWFrO2Nhc2UgcGU6bWUoWSxlZSxiZSxNZSk7YnJlYWs7Y2FzZSBJZTpZPT1udWxsJiZ5ZShlZSxiZSxNZSxfdCk7YnJlYWs7Y2FzZSB0ZTpyZShZLGVlLGJlLE1lLERlLFhlLF90LGV0LHR0KTticmVhaztkZWZhdWx0Okx0JjE/YnQoWSxlZSxiZSxNZSxEZSxYZSxfdCxldCx0dCk6THQmNj9vZShZLGVlLGJlLE1lLERlLFhlLF90LGV0LHR0KTooTHQmNjR8fEx0JjEyOCkmJkhlLnByb2Nlc3MoWSxlZSxiZSxNZSxEZSxYZSxfdCxldCx0dCxKdCl9enQhPW51bGwmJkRlJiZzaSh6dCxZJiZZLnJlZixYZSxlZXx8WSwhZWUpfX0sUmU9KFksZWUsYmUsTWUpPT57aWYoWT09bnVsbClfKGVlLmVsPUgoZWUuY2hpbGRyZW4sYmUpLGJlLE1lKTtlbHNle3ZhciBEZT1lZS5lbD1ZLmVsO2VlLmNoaWxkcmVuIT09WS5jaGlsZHJlbiYmdmUoRGUsZWUuY2hpbGRyZW4pfX0sbWU9KFksZWUsYmUsTWUpPT57WT09bnVsbD9fKGVlLmVsPW5lKGVlLmNoaWxkcmVufHwiIixiZSksYmUsTWUpOmVlLmVsPVkuZWx9LHllPShZLGVlLGJlLE1lKT0+e1tZLmVsLFkuYW5jaG9yXT11dChZLmNoaWxkcmVuLGVlLGJlLE1lLFkuZWwsWS5hbmNob3IpfSxMZT0oWSxlZSxiZSk9Pntmb3IodmFye2VsOk1lLGFuY2hvcjpEZX09WSxYZTtNZSYmTWUhPT1EZTspWGU9a2UoTWUpLF8oTWUsZWUsYmUpLE1lPVhlO18oRGUsZWUsYmUpfSxPZT1ZPT57Zm9yKHZhcntlbDplZSxhbmNob3I6YmV9PVksTWU7ZWUmJmVlIT09YmU7KU1lPWtlKGVlKSxBKGVlKSxlZT1NZTtBKGJlKX0sYnQ9KFksZWUsYmUsTWUsRGUsWGUsX3QsZXQsdHQpPT57X3Q9X3R8fGVlLnR5cGU9PT0ic3ZnIixZPT1udWxsP0N0KGVlLGJlLE1lLERlLFhlLF90LGV0LHR0KTpNKFksZWUsRGUsWGUsX3QsZXQsdHQpfSxDdD0oWSxlZSxiZSxNZSxEZSxYZSxfdCxldCk9Pnt2YXIgdHQsSGUse3R5cGU6enQscHJvcHM6THQsc2hhcGVGbGFnOld0LHRyYW5zaXRpb246T24sZGlyczpHcn09WTtpZih0dD1ZLmVsPUQoWS50eXBlLGVlKSxXdCY4P0JlKHR0LFkuY2hpbGRyZW4pOld0JjE2JiZSdChZLmNoaWxkcmVuLHR0LG51bGwsTWUsRGUsWGUmJnp0IT09ImZvcmVpZ25PYmplY3QiLF90LGV0KSxHciYmeHIoWSxudWxsLE1lLCJjcmVhdGVkIiksS2UodHQsWSxZLnNjb3BlSWQsX3QsTWUpLEx0KXtmb3IodmFyIFhuIGluIEx0KVhuIT09InZhbHVlIiYmIWguaXNSZXNlcnZlZFByb3AoWG4pJiZDKHR0LFhuLG51bGwsTHRbWG5dLFhlLFkuY2hpbGRyZW4sTWUsRGUsYm4pOyJ2YWx1ZSJpbiBMdCYmQyh0dCwidmFsdWUiLG51bGwsTHQudmFsdWUpLChIZT1MdC5vblZub2RlQmVmb3JlTW91bnQpJiZ6cihIZSxNZSxZKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodHQsIl9fdnVlUGFyZW50Q29tcG9uZW50Iix7dmFsdWU6TWUsZW51bWVyYWJsZTohMX0pLEdyJiZ4cihZLG51bGwsTWUsImJlZm9yZU1vdW50Iik7dmFyIHVpPSghRGV8fERlJiYhRGUucGVuZGluZ0JyYW5jaCkmJk9uJiYhT24ucGVyc2lzdGVkO3VpJiZPbi5iZWZvcmVFbnRlcih0dCksXyh0dCxlZSxiZSksKChIZT1MdCYmTHQub25Wbm9kZU1vdW50ZWQpfHx1aXx8R3IpJiZscigoKT0+e0hlJiZ6cihIZSxNZSxZKSx1aSYmT24uZW50ZXIodHQpLEdyJiZ4cihZLG51bGwsTWUsIm1vdW50ZWQiKX0sRGUpfSxLZT0oWSxlZSxiZSxNZSxEZSk9PntpZihiZSYmR2UoWSxiZSksTWUpZm9yKHZhciBYZT0wO1hlPE1lLmxlbmd0aDtYZSsrKUdlKFksTWVbWGVdKTtpZihEZSl7dmFyIF90PURlLnN1YlRyZWU7aWYoZWU9PT1fdCl7dmFyIGV0PURlLnZub2RlO0tlKFksZXQsZXQuc2NvcGVJZCxldC5zbG90U2NvcGVJZHMsRGUucGFyZW50KX19fSxSdD1mdW5jdGlvbihZLGVlLGJlLE1lLERlLFhlLF90LGV0KXtmb3IodmFyIHR0PWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTowLEhlPXR0O0hlPFkubGVuZ3RoO0hlKyspe3ZhciB6dD1ZW0hlXT1ldD9JcihZW0hlXSk6JG4oWVtIZV0pO1FlKG51bGwsenQsZWUsYmUsTWUsRGUsWGUsX3QsZXQpfX0sTT0oWSxlZSxiZSxNZSxEZSxYZSxfdCk9Pnt2YXIgZXQ9ZWUuZWw9WS5lbCx7cGF0Y2hGbGFnOnR0LGR5bmFtaWNDaGlsZHJlbjpIZSxkaXJzOnp0fT1lZTt0dHw9WS5wYXRjaEZsYWcmMTY7dmFyIEx0PVkucHJvcHN8fGguRU1QVFlfT0JKLFd0PWVlLnByb3BzfHxoLkVNUFRZX09CSixPbjtiZSYmb28oYmUsITEpLChPbj1XdC5vblZub2RlQmVmb3JlVXBkYXRlKSYmenIoT24sYmUsZWUsWSksenQmJnhyKGVlLFksYmUsImJlZm9yZVVwZGF0ZSIpLGJlJiZvbyhiZSwhMCk7dmFyIEdyPURlJiZlZS50eXBlIT09ImZvcmVpZ25PYmplY3QiO2lmKEhlP2ooWS5keW5hbWljQ2hpbGRyZW4sSGUsZXQsYmUsTWUsR3IsWGUpOl90fHwkZShZLGVlLGV0LG51bGwsYmUsTWUsR3IsWGUsITEpLHR0PjApe2lmKHR0JjE2KXNlKGV0LGVlLEx0LFd0LGJlLE1lLERlKTtlbHNlIGlmKHR0JjImJkx0LmNsYXNzIT09V3QuY2xhc3MmJkMoZXQsImNsYXNzIixudWxsLFd0LmNsYXNzLERlKSx0dCY0JiZDKGV0LCJzdHlsZSIsTHQuc3R5bGUsV3Quc3R5bGUsRGUpLHR0JjgpZm9yKHZhciBYbj1lZS5keW5hbWljUHJvcHMsdWk9MDt1aTxYbi5sZW5ndGg7dWkrKyl7dmFyIFdvPVhuW3VpXSxlcz1MdFtXb10sd3M9V3RbV29dOyh3cyE9PWVzfHxXbz09PSJ2YWx1ZSJ8fGsmJmsoZXQsV28pKSYmQyhldCxXbyxlcyx3cyxEZSxZLmNoaWxkcmVuLGJlLE1lLGJuKX10dCYxJiZZLmNoaWxkcmVuIT09ZWUuY2hpbGRyZW4mJkJlKGV0LGVlLmNoaWxkcmVuKX1lbHNlIV90JiZIZT09bnVsbCYmc2UoZXQsZWUsTHQsV3QsYmUsTWUsRGUpOygoT249V3Qub25Wbm9kZVVwZGF0ZWQpfHx6dCkmJmxyKCgpPT57T24mJnpyKE9uLGJlLGVlLFkpLHp0JiZ4cihlZSxZLGJlLCJ1cGRhdGVkIil9LE1lKX0saj0oWSxlZSxiZSxNZSxEZSxYZSxfdCk9Pntmb3IodmFyIGV0PTA7ZXQ8ZWUubGVuZ3RoO2V0Kyspe3ZhciB0dD1ZW2V0XSxIZT1lZVtldF0senQ9dHQuZWwmJih0dC50eXBlPT09dGV8fCFkdCh0dCxIZSl8fHR0LnNoYXBlRmxhZyYoNnw2NCkpP3VlKHR0LmVsKTpiZTtRZSh0dCxIZSx6dCxudWxsLE1lLERlLFhlLF90LCEwKX19LHNlPShZLGVlLGJlLE1lLERlLFhlLF90KT0+e2lmKGJlIT09TWUpe2lmKGJlIT09aC5FTVBUWV9PQkopZm9yKHZhciBldCBpbiBiZSkhaC5pc1Jlc2VydmVkUHJvcChldCkmJiEoZXQgaW4gTWUpJiZDKFksZXQsYmVbZXRdLG51bGwsX3QsZWUuY2hpbGRyZW4sRGUsWGUsYm4pO2Zvcih2YXIgdHQgaW4gTWUpaWYoIWguaXNSZXNlcnZlZFByb3AodHQpKXt2YXIgSGU9TWVbdHRdLHp0PWJlW3R0XTsoSGUhPT16dCYmdHQhPT0idmFsdWUifHxrJiZrKFksdHQpKSYmQyhZLHR0LHp0LEhlLF90LGVlLmNoaWxkcmVuLERlLFhlLGJuKX0idmFsdWUiaW4gTWUmJkMoWSwidmFsdWUiLGJlLnZhbHVlLE1lLnZhbHVlKX19LHJlPShZLGVlLGJlLE1lLERlLFhlLF90LGV0LHR0KT0+e3ZhciBIZT1lZS5lbD1ZP1kuZWw6SCgiIixiZSksenQ9ZWUuYW5jaG9yPVk/WS5hbmNob3I6SCgiIixiZSkse3BhdGNoRmxhZzpMdCxkeW5hbWljQ2hpbGRyZW46V3Qsc2xvdFNjb3BlSWRzOk9ufT1lZTtPbiYmKGV0PWV0P2V0LmNvbmNhdChPbik6T24pLFk9PW51bGw/KF8oSGUsYmUsTWUpLF8oenQsYmUsTWUpLFJ0KGVlLmNoaWxkcmVuLGJlLHp0LERlLFhlLF90LGV0LHR0KSk6THQ+MCYmTHQmNjQmJld0JiZZLmR5bmFtaWNDaGlsZHJlbj8oaihZLmR5bmFtaWNDaGlsZHJlbixXdCxiZSxEZSxYZSxfdCxldCksKGVlLmtleSE9bnVsbHx8RGUmJmVlPT09RGUuc3ViVHJlZSkmJmFvKFksZWUsITApKTokZShZLGVlLGJlLHp0LERlLFhlLF90LGV0LHR0KX0sb2U9KFksZWUsYmUsTWUsRGUsWGUsX3QsZXQsdHQpPT57ZWUuc2xvdFNjb3BlSWRzPWV0LFk9PW51bGw/ZWUuc2hhcGVGbGFnJjUxMj9EZS5jdHguYWN0aXZhdGUoZWUsYmUsTWUsX3QsdHQpOlVlKGVlLGJlLE1lLERlLFhlLF90LHR0KTpydChZLGVlLHR0KX0sVWU9KFksZWUsYmUsTWUsRGUsWGUsX3QpPT57dmFyIGV0PVkuY29tcG9uZW50PW9uKFksTWUsRGUpO2lmKEVpKFkpJiYoZXQuY3R4LnJlbmRlcmVyPUp0KSx6YShldCksZXQuYXN5bmNEZXApe2lmKERlJiZEZS5yZWdpc3RlckRlcChldCxxZSksIVkuZWwpe3ZhciB0dD1ldC5zdWJUcmVlPXF0KHBlKTttZShudWxsLHR0LGVlLGJlKX1yZXR1cm59aWYocWUoZXQsWSxlZSxiZSxEZSxYZSxfdCksZXQuJHd4c01vZHVsZXMpe3ZhciBIZT1SLnJlc29sdmVPd25lckVsKGV0LCEwKTtIZS5sZW5ndGgmJkhlLmZvckVhY2goenQ9Pnt6dC5zZXRBdHRyaWJ1dGUoUi5BVFRSX1ZfT1dORVJfSUQsZXQudWlkKTt2YXJ7JHJlbmRlcmpzTW9kdWxlczpMdH09ZXQudHlwZTtMdCYmenQuc2V0QXR0cmlidXRlKFIuQVRUUl9WX1JFTkRFUkpTLEx0KX0pfX0scnQ9KFksZWUsYmUpPT57dmFyIE1lPWVlLmNvbXBvbmVudD1ZLmNvbXBvbmVudDtpZihPbyhZLGVlLGJlKSlpZihNZS5hc3luY0RlcCYmIU1lLmFzeW5jUmVzb2x2ZWQpe1plKE1lLGVlLGJlKTtyZXR1cm59ZWxzZSBNZS5uZXh0PWVlLEpyKE1lLnVwZGF0ZSksTWUudXBkYXRlKCk7ZWxzZSBlZS5lbD1ZLmVsLE1lLnZub2RlPWVlfSxxZT0oWSxlZSxiZSxNZSxEZSxYZSxfdCk9Pnt2YXIgZXQ9KCk9PntpZihZLmlzTW91bnRlZCl7dmFye25leHQ6cnIsYnU6UmEsdTpDcyxwYXJlbnQ6S2ksdm5vZGU6R299PVksY289cnIsX2E7b28oWSwhMSkscnI/KHJyLmVsPUdvLmVsLFplKFkscnIsX3QpKTpycj1HbyxSYSYmaC5pbnZva2VBcnJheUZucyhSYSksKF9hPXJyLnByb3BzJiZyci5wcm9wcy5vblZub2RlQmVmb3JlVXBkYXRlKSYmenIoX2EsS2kscnIsR28pLG9vKFksITApO3ZhciB0cz0kaShZKSxjYT1ZLnN1YlRyZWU7WS5zdWJUcmVlPXRzLFFlKGNhLHRzLHVlKGNhLmVsKSxmcihjYSksWSxEZSxYZSkscnIuZWw9dHMuZWwsY289PT1udWxsJiZtaShZLHRzLmVsKSxDcyYmbHIoQ3MsRGUpLChfYT1yci5wcm9wcyYmcnIucHJvcHMub25Wbm9kZVVwZGF0ZWQpJiZscigoKT0+enIoX2EsS2kscnIsR28pLERlKX1lbHNle3ZhciB6dCx7ZWw6THQscHJvcHM6V3R9PWVlLHtibTpPbixtOkdyLHBhcmVudDpYbn09WSx1aT1ScihlZSk7aWYob28oWSwhMSksT24mJmguaW52b2tlQXJyYXlGbnMoT24pLCF1aSYmKHp0PVd0JiZXdC5vblZub2RlQmVmb3JlTW91bnQpJiZ6cih6dCxYbixlZSksb28oWSwhMCksTHQmJmxvKXt2YXIgV289KCk9PntZLnN1YlRyZWU9JGkoWSksbG8oTHQsWS5zdWJUcmVlLFksRGUsbnVsbCl9O3VpP2VlLnR5cGUuX19hc3luY0xvYWRlcigpLnRoZW4oKCk9PiFZLmlzVW5tb3VudGVkJiZXbygpKTpXbygpfWVsc2V7dmFyIGVzPVkuc3ViVHJlZT0kaShZKTtRZShudWxsLGVzLGJlLE1lLFksRGUsWGUpLGVlLmVsPWVzLmVsfWlmKEdyJiZscihHcixEZSksIXVpJiYoenQ9V3QmJld0Lm9uVm5vZGVNb3VudGVkKSl7dmFyIHdzPWVlO2xyKCgpPT56cih6dCxYbix3cyksRGUpfShlZS5zaGFwZUZsYWcmMjU2fHxYbiYmUnIoWG4udm5vZGUpJiZYbi52bm9kZS5zaGFwZUZsYWcmMjU2KSYmWS5hJiZscihZLmEsRGUpLFkuaXNNb3VudGVkPSEwLGVlPWJlPU1lPW51bGx9fSx0dD1ZLmVmZmVjdD1uZXcgeS5SZWFjdGl2ZUVmZmVjdChldCwoKT0+cHIoSGUpLFkuc2NvcGUpLEhlPVkudXBkYXRlPSgpPT50dC5ydW4oKTtIZS5pZD1ZLnVpZCxvbyhZLCEwKSxIZSgpfSxaZT0oWSxlZSxiZSk9PntlZS5jb21wb25lbnQ9WTt2YXIgTWU9WS52bm9kZS5wcm9wcztZLnZub2RlPWVlLFkubmV4dD1udWxsLGhhKFksZWUucHJvcHMsTWUsYmUpLGFzKFksZWUuY2hpbGRyZW4sYmUpLHkucGF1c2VUcmFja2luZygpLFBuKCkseS5yZXNldFRyYWNraW5nKCl9LCRlPWZ1bmN0aW9uKFksZWUsYmUsTWUsRGUsWGUsX3QsZXQpe3ZhciB0dD1hcmd1bWVudHMubGVuZ3RoPjgmJmFyZ3VtZW50c1s4XSE9PXZvaWQgMD9hcmd1bWVudHNbOF06ITEsSGU9WSYmWS5jaGlsZHJlbix6dD1ZP1kuc2hhcGVGbGFnOjAsTHQ9ZWUuY2hpbGRyZW4se3BhdGNoRmxhZzpXdCxzaGFwZUZsYWc6T259PWVlO2lmKFd0PjApe2lmKFd0JjEyOCl7cHQoSGUsTHQsYmUsTWUsRGUsWGUsX3QsZXQsdHQpO3JldHVybn1lbHNlIGlmKFd0JjI1Nil7JHQoSGUsTHQsYmUsTWUsRGUsWGUsX3QsZXQsdHQpO3JldHVybn19T24mOD8oenQmMTYmJmJuKEhlLERlLFhlKSxMdCE9PUhlJiZCZShiZSxMdCkpOnp0JjE2P09uJjE2P3B0KEhlLEx0LGJlLE1lLERlLFhlLF90LGV0LHR0KTpibihIZSxEZSxYZSwhMCk6KHp0JjgmJkJlKGJlLCIiKSxPbiYxNiYmUnQoTHQsYmUsTWUsRGUsWGUsX3QsZXQsdHQpKX0sJHQ9KFksZWUsYmUsTWUsRGUsWGUsX3QsZXQsdHQpPT57WT1ZfHxoLkVNUFRZX0FSUixlZT1lZXx8aC5FTVBUWV9BUlI7dmFyIEhlPVkubGVuZ3RoLHp0PWVlLmxlbmd0aCxMdD1NYXRoLm1pbihIZSx6dCksV3Q7Zm9yKFd0PTA7V3Q8THQ7V3QrKyl7dmFyIE9uPWVlW1d0XT10dD9JcihlZVtXdF0pOiRuKGVlW1d0XSk7UWUoWVtXdF0sT24sYmUsbnVsbCxEZSxYZSxfdCxldCx0dCl9SGU+enQ/Ym4oWSxEZSxYZSwhMCwhMSxMdCk6UnQoZWUsYmUsTWUsRGUsWGUsX3QsZXQsdHQsTHQpfSxwdD0oWSxlZSxiZSxNZSxEZSxYZSxfdCxldCx0dCk9Pntmb3IodmFyIEhlPTAsenQ9ZWUubGVuZ3RoLEx0PVkubGVuZ3RoLTEsV3Q9enQtMTtIZTw9THQmJkhlPD1XdDspe3ZhciBPbj1ZW0hlXSxHcj1lZVtIZV09dHQ/SXIoZWVbSGVdKTokbihlZVtIZV0pO2lmKGR0KE9uLEdyKSlRZShPbixHcixiZSxudWxsLERlLFhlLF90LGV0LHR0KTtlbHNlIGJyZWFrO0hlKyt9Zm9yKDtIZTw9THQmJkhlPD1XdDspe3ZhciBYbj1ZW0x0XSx1aT1lZVtXdF09dHQ/SXIoZWVbV3RdKTokbihlZVtXdF0pO2lmKGR0KFhuLHVpKSlRZShYbix1aSxiZSxudWxsLERlLFhlLF90LGV0LHR0KTtlbHNlIGJyZWFrO0x0LS0sV3QtLX1pZihIZT5MdCl7aWYoSGU8PVd0KWZvcih2YXIgV289V3QrMSxlcz1Xbzx6dD9lZVtXb10uZWw6TWU7SGU8PVd0OylRZShudWxsLGVlW0hlXT10dD9JcihlZVtIZV0pOiRuKGVlW0hlXSksYmUsZXMsRGUsWGUsX3QsZXQsdHQpLEhlKyt9ZWxzZSBpZihIZT5XdClmb3IoO0hlPD1MdDspQnQoWVtIZV0sRGUsWGUsITApLEhlKys7ZWxzZXt2YXIgd3M9SGUscnI9SGUsUmE9bmV3IE1hcDtmb3IoSGU9cnI7SGU8PVd0O0hlKyspe3ZhciBDcz1lZVtIZV09dHQ/SXIoZWVbSGVdKTokbihlZVtIZV0pO0NzLmtleSE9bnVsbCYmUmEuc2V0KENzLmtleSxIZSl9dmFyIEtpLEdvPTAsY289V3QtcnIrMSxfYT0hMSx0cz0wLGNhPW5ldyBBcnJheShjbyk7Zm9yKEhlPTA7SGU8Y287SGUrKyljYVtIZV09MDtmb3IoSGU9d3M7SGU8PUx0O0hlKyspe3ZhciB1YT1ZW0hlXTtpZihHbz49Y28pe0J0KHVhLERlLFhlLCEwKTtjb250aW51ZX12YXIgWW89dm9pZCAwO2lmKHVhLmtleSE9bnVsbClZbz1SYS5nZXQodWEua2V5KTtlbHNlIGZvcihLaT1ycjtLaTw9V3Q7S2krKylpZihjYVtLaS1ycl09PT0wJiZkdCh1YSxlZVtLaV0pKXtZbz1LaTticmVha31Zbz09PXZvaWQgMD9CdCh1YSxEZSxYZSwhMCk6KGNhW1lvLXJyXT1IZSsxLFlvPj10cz90cz1ZbzpfYT0hMCxRZSh1YSxlZVtZb10sYmUsbnVsbCxEZSxYZSxfdCxldCx0dCksR28rKyl9dmFyIHlsPV9hP2xzKGNhKTpoLkVNUFRZX0FSUjtmb3IoS2k9eWwubGVuZ3RoLTEsSGU9Y28tMTtIZT49MDtIZS0tKXt2YXIgWXM9cnIrSGUsYmM9ZWVbWXNdLFdsPVlzKzE8enQ/ZWVbWXMrMV0uZWw6TWU7Y2FbSGVdPT09MD9RZShudWxsLGJjLGJlLFdsLERlLFhlLF90LGV0LHR0KTpfYSYmKEtpPDB8fEhlIT09eWxbS2ldP3h0KGJjLGJlLFdsLDIpOktpLS0pfX19LHh0PWZ1bmN0aW9uKFksZWUsYmUsTWUpe3ZhciBEZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCx7ZWw6WGUsdHlwZTpfdCx0cmFuc2l0aW9uOmV0LGNoaWxkcmVuOnR0LHNoYXBlRmxhZzpIZX09WTtpZihIZSY2KXt4dChZLmNvbXBvbmVudC5zdWJUcmVlLGVlLGJlLE1lKTtyZXR1cm59aWYoSGUmMTI4KXtZLnN1c3BlbnNlLm1vdmUoZWUsYmUsTWUpO3JldHVybn1pZihIZSY2NCl7X3QubW92ZShZLGVlLGJlLEp0KTtyZXR1cm59aWYoX3Q9PT10ZSl7XyhYZSxlZSxiZSk7Zm9yKHZhciB6dD0wO3p0PHR0Lmxlbmd0aDt6dCsrKXh0KHR0W3p0XSxlZSxiZSxNZSk7XyhZLmFuY2hvcixlZSxiZSk7cmV0dXJufWlmKF90PT09SWUpe0xlKFksZWUsYmUpO3JldHVybn12YXIgTHQ9TWUhPT0yJiZIZSYxJiZldDtpZihMdClpZihNZT09PTApZXQuYmVmb3JlRW50ZXIoWGUpLF8oWGUsZWUsYmUpLGxyKCgpPT5ldC5lbnRlcihYZSksRGUpO2Vsc2V7dmFye2xlYXZlOld0LGRlbGF5TGVhdmU6T24sYWZ0ZXJMZWF2ZTpHcn09ZXQsWG49KCk9Pl8oWGUsZWUsYmUpLHVpPSgpPT57V3QoWGUsKCk9PntYbigpLEdyJiZHcigpfSl9O09uP09uKFhlLFhuLHVpKTp1aSgpfWVsc2UgXyhYZSxlZSxiZSl9LEJ0PWZ1bmN0aW9uKFksZWUsYmUpe3ZhciBNZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsRGU9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiExLHt0eXBlOlhlLHByb3BzOl90LHJlZjpldCxjaGlsZHJlbjp0dCxkeW5hbWljQ2hpbGRyZW46SGUsc2hhcGVGbGFnOnp0LHBhdGNoRmxhZzpMdCxkaXJzOld0fT1ZO2lmKGV0IT1udWxsJiZzaShldCxudWxsLGJlLFksITApLHp0JjI1Nil7ZWUuY3R4LmRlYWN0aXZhdGUoWSk7cmV0dXJufXZhciBPbj16dCYxJiZXdCxHcj0hUnIoWSksWG47aWYoR3ImJihYbj1fdCYmX3Qub25Wbm9kZUJlZm9yZVVubW91bnQpJiZ6cihYbixlZSxZKSx6dCY2KXZuKFkuY29tcG9uZW50LGJlLE1lKTtlbHNle2lmKHp0JjEyOCl7WS5zdXNwZW5zZS51bm1vdW50KGJlLE1lKTtyZXR1cm59T24mJnhyKFksbnVsbCxlZSwiYmVmb3JlVW5tb3VudCIpLHp0JjY0P1kudHlwZS5yZW1vdmUoWSxlZSxiZSxEZSxKdCxNZSk6SGUmJihYZSE9PXRlfHxMdD4wJiZMdCY2NCk/Ym4oSGUsZWUsYmUsITEsITApOihYZT09PXRlJiZMdCYoMTI4fDI1Nil8fCFEZSYmenQmMTYpJiZibih0dCxlZSxiZSksTWUmJk1uKFkpfShHciYmKFhuPV90JiZfdC5vblZub2RlVW5tb3VudGVkKXx8T24pJiZscigoKT0+e1huJiZ6cihYbixlZSxZKSxPbiYmeHIoWSxudWxsLGVlLCJ1bm1vdW50ZWQiKX0sYmUpfSxNbj1ZPT57dmFye3R5cGU6ZWUsZWw6YmUsYW5jaG9yOk1lLHRyYW5zaXRpb246RGV9PVk7aWYoZWU9PT10ZSl7Um4oYmUsTWUpO3JldHVybn1pZihlZT09PUllKXtPZShZKTtyZXR1cm59dmFyIFhlPSgpPT57QShiZSksRGUmJiFEZS5wZXJzaXN0ZWQmJkRlLmFmdGVyTGVhdmUmJkRlLmFmdGVyTGVhdmUoKX07aWYoWS5zaGFwZUZsYWcmMSYmRGUmJiFEZS5wZXJzaXN0ZWQpe3ZhcntsZWF2ZTpfdCxkZWxheUxlYXZlOmV0fT1EZSx0dD0oKT0+X3QoYmUsWGUpO2V0P2V0KFkuZWwsWGUsdHQpOnR0KCl9ZWxzZSBYZSgpfSxSbj0oWSxlZSk9Pntmb3IodmFyIGJlO1khPT1lZTspYmU9a2UoWSksQShZKSxZPWJlO0EoZWUpfSx2bj0oWSxlZSxiZSk9Pnt2YXJ7YnVtOk1lLHNjb3BlOkRlLHVwZGF0ZTpYZSxzdWJUcmVlOl90LHVtOmV0fT1ZO01lJiZoLmludm9rZUFycmF5Rm5zKE1lKSxEZS5zdG9wKCksWGUmJihYZS5hY3RpdmU9ITEsQnQoX3QsWSxlZSxiZSkpLGV0JiZscihldCxlZSksbHIoKCk9PntZLmlzVW5tb3VudGVkPSEwfSxlZSksZWUmJmVlLnBlbmRpbmdCcmFuY2gmJiFlZS5pc1VubW91bnRlZCYmWS5hc3luY0RlcCYmIVkuYXN5bmNSZXNvbHZlZCYmWS5zdXNwZW5zZUlkPT09ZWUucGVuZGluZ0lkJiYoZWUuZGVwcy0tLGVlLmRlcHM9PT0wJiZlZS5yZXNvbHZlKCkpfSxibj1mdW5jdGlvbihZLGVlLGJlKXtmb3IodmFyIE1lPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxEZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITEsWGU9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOjAsX3Q9WGU7X3Q8WS5sZW5ndGg7X3QrKylCdChZW190XSxlZSxiZSxNZSxEZSl9LGZyPVk9Plkuc2hhcGVGbGFnJjY/ZnIoWS5jb21wb25lbnQuc3ViVHJlZSk6WS5zaGFwZUZsYWcmMTI4P1kuc3VzcGVuc2UubmV4dCgpOmtlKFkuYW5jaG9yfHxZLmVsKSxuaT0oWSxlZSxiZSk9PntZPT1udWxsP2VlLl92bm9kZSYmQnQoZWUuX3Zub2RlLG51bGwsbnVsbCwhMCk6UWUoZWUuX3Zub2RlfHxudWxsLFksZWUsbnVsbCxudWxsLG51bGwsYmUpLFBuKCksemUoKSxlZS5fdm5vZGU9WX0sSnQ9e3A6UWUsdW06QnQsbTp4dCxyOk1uLG10OlVlLG1jOlJ0LHBjOiRlLHBiYzpqLG46ZnIsbzppfSxhbixsbztyZXR1cm4gbCYmKFthbixsb109bChKdCkpLHtyZW5kZXI6bmksaHlkcmF0ZTphbixjcmVhdGVBcHA6aW8obmksYW4pfX1mdW5jdGlvbiBvbyhpLGwpe3ZhcntlZmZlY3Q6ZCx1cGRhdGU6X309aTtkLmFsbG93UmVjdXJzZT1fLmFsbG93UmVjdXJzZT1sfWZ1bmN0aW9uIGFvKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLF89aS5jaGlsZHJlbixBPWwuY2hpbGRyZW47aWYoaC5pc0FycmF5KF8pJiZoLmlzQXJyYXkoQSkpZm9yKHZhciBDPTA7QzxfLmxlbmd0aDtDKyspe3ZhciBrPV9bQ10sRD1BW0NdO0Quc2hhcGVGbGFnJjEmJiFELmR5bmFtaWNDaGlsZHJlbiYmKChELnBhdGNoRmxhZzw9MHx8RC5wYXRjaEZsYWc9PT0zMikmJihEPUFbQ109SXIoQVtDXSksRC5lbD1rLmVsKSxkfHxhbyhrLEQpKSxELnR5cGU9PT1jZSYmKEQuZWw9ay5lbCl9fWZ1bmN0aW9uIGxzKGkpe3ZhciBsPWkuc2xpY2UoKSxkPVswXSxfLEEsQyxrLEQsSD1pLmxlbmd0aDtmb3IoXz0wO188SDtfKyspe3ZhciBuZT1pW19dO2lmKG5lIT09MCl7aWYoQT1kW2QubGVuZ3RoLTFdLGlbQV08bmUpe2xbX109QSxkLnB1c2goXyk7Y29udGludWV9Zm9yKEM9MCxrPWQubGVuZ3RoLTE7QzxrOylEPUMraz4+MSxpW2RbRF1dPG5lP0M9RCsxOms9RDtuZTxpW2RbQ11dJiYoQz4wJiYobFtfXT1kW0MtMV0pLGRbQ109Xyl9fWZvcihDPWQubGVuZ3RoLGs9ZFtDLTFdO0MtLSA+MDspZFtDXT1rLGs9bFtrXTtyZXR1cm4gZH12YXIgcGE9aT0+aS5fX2lzVGVsZXBvcnQsTG89aT0+aSYmKGkuZGlzYWJsZWR8fGkuZGlzYWJsZWQ9PT0iIiksdmE9aT0+dHlwZW9mIFNWR0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZpIGluc3RhbmNlb2YgU1ZHRWxlbWVudCx2PShpLGwpPT57dmFyIGQ9aSYmaS50bztpZihoLmlzU3RyaW5nKGQpKWlmKGwpe3ZhciBfPWwoZCk7cmV0dXJuIF99ZWxzZSByZXR1cm4gbnVsbDtlbHNlIHJldHVybiBkfSx4PXtfX2lzVGVsZXBvcnQ6ITAscHJvY2VzcyhpLGwsZCxfLEEsQyxrLEQsSCxuZSl7dmFye21jOnZlLHBjOkJlLHBiYzp1ZSxvOntpbnNlcnQ6a2UscXVlcnlTZWxlY3RvcjpHZSxjcmVhdGVUZXh0OnV0LGNyZWF0ZUNvbW1lbnQ6UWV9fT1uZSxSZT1MbyhsLnByb3BzKSx7c2hhcGVGbGFnOm1lLGNoaWxkcmVuOnllLGR5bmFtaWNDaGlsZHJlbjpMZX09bDtpZihpPT1udWxsKXt2YXIgT2U9bC5lbD11dCgiIixkKSxidD1sLmFuY2hvcj11dCgiIixkKTtrZShPZSxkLF8pLGtlKGJ0LGQsXyk7dmFyIEN0PWwudGFyZ2V0PXYobC5wcm9wcyxHZSksS2U9bC50YXJnZXRBbmNob3I9dXQoIiIsZCk7Q3QmJihrZShLZSxDdCksaz1rfHx2YShDdCkpO3ZhciBSdD0ocWUsWmUpPT57bWUmMTYmJnZlKHllLHFlLFplLEEsQyxrLEQsSCl9O1JlP1J0KGQsYnQpOkN0JiZSdChDdCxLZSl9ZWxzZXtsLmVsPWkuZWw7dmFyIE09bC5hbmNob3I9aS5hbmNob3Isaj1sLnRhcmdldD1pLnRhcmdldCxzZT1sLnRhcmdldEFuY2hvcj1pLnRhcmdldEFuY2hvcixyZT1MbyhpLnByb3BzKSxvZT1yZT9kOmosVWU9cmU/TTpzZTtpZihrPWt8fHZhKGopLExlPyh1ZShpLmR5bmFtaWNDaGlsZHJlbixMZSxvZSxBLEMsayxEKSxhbyhpLGwsITApKTpIfHxCZShpLGwsb2UsVWUsQSxDLGssRCwhMSksUmUpcmV8fCQobCxkLE0sbmUsMSk7ZWxzZSBpZigobC5wcm9wcyYmbC5wcm9wcy50bykhPT0oaS5wcm9wcyYmaS5wcm9wcy50bykpe3ZhciBydD1sLnRhcmdldD12KGwucHJvcHMsR2UpO3J0JiYkKGwscnQsbnVsbCxuZSwwKX1lbHNlIHJlJiYkKGwsaixzZSxuZSwxKX1xKGwpfSxyZW1vdmUoaSxsLGQsXyxBLEMpe3Zhcnt1bTprLG86e3JlbW92ZTpEfX09QSx7c2hhcGVGbGFnOkgsY2hpbGRyZW46bmUsYW5jaG9yOnZlLHRhcmdldEFuY2hvcjpCZSx0YXJnZXQ6dWUscHJvcHM6a2V9PWk7aWYodWUmJkQoQmUpLChDfHwhTG8oa2UpKSYmKEQodmUpLEgmMTYpKWZvcih2YXIgR2U9MDtHZTxuZS5sZW5ndGg7R2UrKyl7dmFyIHV0PW5lW0dlXTtrKHV0LGwsZCwhMCwhIXV0LmR5bmFtaWNDaGlsZHJlbil9fSxtb3ZlOiQsaHlkcmF0ZTpVfTtmdW5jdGlvbiAkKGksbCxkLF8pe3ZhcntvOntpbnNlcnQ6QX0sbTpDfT1fLGs9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOjI7az09PTAmJkEoaS50YXJnZXRBbmNob3IsbCxkKTt2YXJ7ZWw6RCxhbmNob3I6SCxzaGFwZUZsYWc6bmUsY2hpbGRyZW46dmUscHJvcHM6QmV9PWksdWU9az09PTI7aWYodWUmJkEoRCxsLGQpLCghdWV8fExvKEJlKSkmJm5lJjE2KWZvcih2YXIga2U9MDtrZTx2ZS5sZW5ndGg7a2UrKylDKHZlW2tlXSxsLGQsMik7dWUmJkEoSCxsLGQpfWZ1bmN0aW9uIFUoaSxsLGQsXyxBLEMsayxEKXt2YXJ7bzp7bmV4dFNpYmxpbmc6SCxwYXJlbnROb2RlOm5lLHF1ZXJ5U2VsZWN0b3I6dmV9fT1rLEJlPWwudGFyZ2V0PXYobC5wcm9wcyx2ZSk7aWYoQmUpe3ZhciB1ZT1CZS5fbHBhfHxCZS5maXJzdENoaWxkO2lmKGwuc2hhcGVGbGFnJjE2KWlmKExvKGwucHJvcHMpKWwuYW5jaG9yPUQoSChpKSxsLG5lKGkpLGQsXyxBLEMpLGwudGFyZ2V0QW5jaG9yPXVlO2Vsc2V7bC5hbmNob3I9SChpKTtmb3IodmFyIGtlPXVlO2tlOylpZihrZT1IKGtlKSxrZSYma2Uubm9kZVR5cGU9PT04JiZrZS5kYXRhPT09InRlbGVwb3J0IGFuY2hvciIpe2wudGFyZ2V0QW5jaG9yPWtlLEJlLl9scGE9bC50YXJnZXRBbmNob3ImJkgobC50YXJnZXRBbmNob3IpO2JyZWFrfUQodWUsbCxCZSxkLF8sQSxDKX1xKGwpfXJldHVybiBsLmFuY2hvciYmSChsLmFuY2hvcil9dmFyIFo9eDtmdW5jdGlvbiBxKGkpe3ZhciBsPWkuY3R4O2lmKGwmJmwudXQpe2Zvcih2YXIgZD1pLmNoaWxkcmVuWzBdLmVsO2QhPT1pLnRhcmdldEFuY2hvcjspZC5ub2RlVHlwZT09PTEmJmQuc2V0QXR0cmlidXRlKCJkYXRhLXYtb3duZXIiLGwudWlkKSxkPWQubmV4dFNpYmxpbmc7bC51dCgpfX12YXIgdGU9U3ltYm9sKHZvaWQgMCksY2U9U3ltYm9sKHZvaWQgMCkscGU9U3ltYm9sKHZvaWQgMCksSWU9U3ltYm9sKHZvaWQgMCksZmU9W10sQ2U9bnVsbDtmdW5jdGlvbiBjdCgpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMTtmZS5wdXNoKENlPWk/bnVsbDpbXSl9ZnVuY3Rpb24gZ3QoKXtmZS5wb3AoKSxDZT1mZVtmZS5sZW5ndGgtMV18fG51bGx9dmFyIEh0PTE7ZnVuY3Rpb24geXQoaSl7SHQrPWl9ZnVuY3Rpb24gamUoaSl7cmV0dXJuIGkuZHluYW1pY0NoaWxkcmVuPUh0PjA/Q2V8fGguRU1QVFlfQVJSOm51bGwsZ3QoKSxIdD4wJiZDZSYmQ2UucHVzaChpKSxpfWZ1bmN0aW9uIE10KGksbCxkLF8sQSxDKXtyZXR1cm4gamUoVXQoaSxsLGQsXyxBLEMsITApKX1mdW5jdGlvbiBkbihpLGwsZCxfLEEpe3JldHVybiBqZShxdChpLGwsZCxfLEEsITApKX1mdW5jdGlvbiBHdChpKXtyZXR1cm4gaT9pLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gZHQoaSxsKXtyZXR1cm4gaS50eXBlPT09bC50eXBlJiZpLmtleT09PWwua2V5fWZ1bmN0aW9uIGVuKGkpe312YXIgQm49Il9fdkludGVybmFsIixZdD1pPT57dmFye2tleTpsfT1pO3JldHVybiBsIT1udWxsP2w6bnVsbH0sanQ9aT0+e3ZhcntyZWY6bCxyZWZfa2V5OmQscmVmX2ZvcjpffT1pO3JldHVybiBsIT1udWxsP2guaXNTdHJpbmcobCl8fHkuaXNSZWYobCl8fGguaXNGdW5jdGlvbihsKT97aTpnbixyOmwsazpkLGY6ISFffTpsOm51bGx9O2Z1bmN0aW9uIFV0KGkpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwsXz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106MCxBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLEM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOmk9PT10ZT8wOjEsaz1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSE9PXZvaWQgMD9hcmd1bWVudHNbNl06ITEsRD1hcmd1bWVudHMubGVuZ3RoPjcmJmFyZ3VtZW50c1s3XSE9PXZvaWQgMD9hcmd1bWVudHNbN106ITEsSD17X192X2lzVk5vZGU6ITAsX192X3NraXA6ITAsdHlwZTppLHByb3BzOmwsa2V5OmwmJll0KGwpLHJlZjpsJiZqdChsKSxzY29wZUlkOndyLHNsb3RTY29wZUlkczpudWxsLGNoaWxkcmVuOmQsY29tcG9uZW50Om51bGwsc3VzcGVuc2U6bnVsbCxzc0NvbnRlbnQ6bnVsbCxzc0ZhbGxiYWNrOm51bGwsZGlyczpudWxsLHRyYW5zaXRpb246bnVsbCxlbDpudWxsLGFuY2hvcjpudWxsLHRhcmdldDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2hhcGVGbGFnOkMscGF0Y2hGbGFnOl8sZHluYW1pY1Byb3BzOkEsZHluYW1pY0NoaWxkcmVuOm51bGwsYXBwQ29udGV4dDpudWxsLGN0eDpnbn07cmV0dXJuIEQ/KEhuKEgsZCksQyYxMjgmJmkubm9ybWFsaXplKEgpKTpkJiYoSC5zaGFwZUZsYWd8PWguaXNTdHJpbmcoZCk/ODoxNiksSHQ+MCYmIWsmJkNlJiYoSC5wYXRjaEZsYWc+MHx8QyY2KSYmSC5wYXRjaEZsYWchPT0zMiYmQ2UucHVzaChIKSxIfXZhciBxdD10YTtmdW5jdGlvbiB0YShpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsLF89YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOjAsQT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxDPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMTtpZigoIWl8fGk9PT1CaSkmJihpPXBlKSxHdChpKSl7dmFyIGs9ZWkoaSxsLCEwKTtyZXR1cm4gZCYmSG4oayxkKSxIdD4wJiYhQyYmQ2UmJihrLnNoYXBlRmxhZyY2P0NlW0NlLmluZGV4T2YoaSldPWs6Q2UucHVzaChrKSksay5wYXRjaEZsYWd8PS0yLGt9aWYoYm8oaSkmJihpPWkuX192Y2NPcHRzKSxsKXtsPWNpKGwpO3ZhcntjbGFzczpELHN0eWxlOkh9PWw7RCYmIWguaXNTdHJpbmcoRCkmJihsLmNsYXNzPWgubm9ybWFsaXplQ2xhc3MoRCkpLGguaXNPYmplY3QoSCkmJih5LmlzUHJveHkoSCkmJiFoLmlzQXJyYXkoSCkmJihIPWguZXh0ZW5kKHt9LEgpKSxsLnN0eWxlPWgubm9ybWFsaXplU3R5bGUoSCkpfXZhciBuZT1oLmlzU3RyaW5nKGkpPzE6VG8oaSk/MTI4OnBhKGkpPzY0OmguaXNPYmplY3QoaSk/NDpoLmlzRnVuY3Rpb24oaSk/MjowO3JldHVybiBVdChpLGwsZCxfLEEsbmUsQywhMCl9ZnVuY3Rpb24gY2koaSl7cmV0dXJuIGk/eS5pc1Byb3h5KGkpfHxCbiBpbiBpP2guZXh0ZW5kKHt9LGkpOmk6bnVsbH1mdW5jdGlvbiBlaShpLGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSx7cHJvcHM6XyxyZWY6QSxwYXRjaEZsYWc6QyxjaGlsZHJlbjprfT1pLEQ9bD95cihffHx7fSxsKTpfLEg9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6aS50eXBlLHByb3BzOkQsa2V5OkQmJll0KEQpLHJlZjpsJiZsLnJlZj9kJiZBP2guaXNBcnJheShBKT9BLmNvbmNhdChqdChsKSk6W0EsanQobCldOmp0KGwpOkEsc2NvcGVJZDppLnNjb3BlSWQsc2xvdFNjb3BlSWRzOmkuc2xvdFNjb3BlSWRzLGNoaWxkcmVuOmssdGFyZ2V0OmkudGFyZ2V0LHRhcmdldEFuY2hvcjppLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDppLnN0YXRpY0NvdW50LHNoYXBlRmxhZzppLnNoYXBlRmxhZyxwYXRjaEZsYWc6bCYmaS50eXBlIT09dGU/Qz09PS0xPzE2OkN8MTY6QyxkeW5hbWljUHJvcHM6aS5keW5hbWljUHJvcHMsZHluYW1pY0NoaWxkcmVuOmkuZHluYW1pY0NoaWxkcmVuLGFwcENvbnRleHQ6aS5hcHBDb250ZXh0LGRpcnM6aS5kaXJzLHRyYW5zaXRpb246aS50cmFuc2l0aW9uLGNvbXBvbmVudDppLmNvbXBvbmVudCxzdXNwZW5zZTppLnN1c3BlbnNlLHNzQ29udGVudDppLnNzQ29udGVudCYmZWkoaS5zc0NvbnRlbnQpLHNzRmFsbGJhY2s6aS5zc0ZhbGxiYWNrJiZlaShpLnNzRmFsbGJhY2spLGVsOmkuZWwsYW5jaG9yOmkuYW5jaG9yLGN0eDppLmN0eCxjZTppLmNlfTtyZXR1cm4gSH1mdW5jdGlvbiBxaSgpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXToiICIsbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MDtyZXR1cm4gcXQoY2UsbnVsbCxpLGwpfWZ1bmN0aW9uIGphKGksbCl7dmFyIGQ9cXQoSWUsbnVsbCxpKTtyZXR1cm4gZC5zdGF0aWNDb3VudD1sLGR9ZnVuY3Rpb24gVW4oKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiIsbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7cmV0dXJuIGw/KGN0KCksZG4ocGUsbnVsbCxpKSk6cXQocGUsbnVsbCxpKX1mdW5jdGlvbiAkbihpKXtyZXR1cm4gaT09bnVsbHx8dHlwZW9mIGk9PSJib29sZWFuIj9xdChwZSk6aC5pc0FycmF5KGkpP3F0KHRlLG51bGwsaS5zbGljZSgpKTp0eXBlb2YgaT09Im9iamVjdCI/SXIoaSk6cXQoY2UsbnVsbCxTdHJpbmcoaSkpfWZ1bmN0aW9uIElyKGkpe3JldHVybiBpLmVsPT09bnVsbCYmaS5wYXRjaEZsYWchPT0tMXx8aS5tZW1vP2k6ZWkoaSl9ZnVuY3Rpb24gSG4oaSxsKXt2YXIgZD0wLHtzaGFwZUZsYWc6X309aTtpZihsPT1udWxsKWw9bnVsbDtlbHNlIGlmKGguaXNBcnJheShsKSlkPTE2O2Vsc2UgaWYodHlwZW9mIGw9PSJvYmplY3QiKWlmKF8mKDF8NjQpKXt2YXIgQT1sLmRlZmF1bHQ7QSYmKEEuX2MmJihBLl9kPSExKSxIbihpLEEoKSksQS5fYyYmKEEuX2Q9ITApKTtyZXR1cm59ZWxzZXtkPTMyO3ZhciBDPWwuXzshQyYmIShCbiBpbiBsKT9sLl9jdHg9Z246Qz09PTMmJmduJiYoZ24uc2xvdHMuXz09PTE/bC5fPTE6KGwuXz0yLGkucGF0Y2hGbGFnfD0xMDI0KSl9ZWxzZSBoLmlzRnVuY3Rpb24obCk/KGw9e2RlZmF1bHQ6bCxfY3R4OmdufSxkPTMyKToobD1TdHJpbmcobCksXyY2ND8oZD0xNixsPVtxaShsKV0pOmQ9OCk7aS5jaGlsZHJlbj1sLGkuc2hhcGVGbGFnfD1kfWZ1bmN0aW9uIHlyKCl7Zm9yKHZhciBpPXt9LGw9MDtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXt2YXIgZD1sPDB8fGFyZ3VtZW50cy5sZW5ndGg8PWw/dm9pZCAwOmFyZ3VtZW50c1tsXTtmb3IodmFyIF8gaW4gZClpZihfPT09ImNsYXNzIilpLmNsYXNzIT09ZC5jbGFzcyYmKGkuY2xhc3M9aC5ub3JtYWxpemVDbGFzcyhbaS5jbGFzcyxkLmNsYXNzXSkpO2Vsc2UgaWYoXz09PSJzdHlsZSIpaS5zdHlsZT1oLm5vcm1hbGl6ZVN0eWxlKFtpLnN0eWxlLGQuc3R5bGVdKTtlbHNlIGlmKGguaXNPbihfKSl7dmFyIEE9aVtfXSxDPWRbX107QyYmQSE9PUMmJiEoaC5pc0FycmF5KEEpJiZBLmluY2x1ZGVzKEMpKSYmKGlbX109QT9bXS5jb25jYXQoQSxDKTpDKX1lbHNlIF8hPT0iIiYmKGlbX109ZFtfXSl9cmV0dXJuIGl9ZnVuY3Rpb24genIoaSxsLGQpe3ZhciBfPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO090KGksbCw3LFtkLF9dKX12YXIgbmE9RG8oKSxjcz0wO2Z1bmN0aW9uIG9uKGksbCxkKXt2YXIgXz1pLnR5cGUsQT0obD9sLmFwcENvbnRleHQ6aS5hcHBDb250ZXh0KXx8bmEsQz17dWlkOmNzKyssdm5vZGU6aSx0eXBlOl8scGFyZW50OmwsYXBwQ29udGV4dDpBLHJvb3Q6bnVsbCxuZXh0Om51bGwsc3ViVHJlZTpudWxsLGVmZmVjdDpudWxsLHVwZGF0ZTpudWxsLHNjb3BlOm5ldyB5LkVmZmVjdFNjb3BlKCEwKSxyZW5kZXI6bnVsbCxwcm94eTpudWxsLGV4cG9zZWQ6bnVsbCxleHBvc2VQcm94eTpudWxsLHdpdGhQcm94eTpudWxsLHByb3ZpZGVzOmw/bC5wcm92aWRlczpPYmplY3QuY3JlYXRlKEEucHJvdmlkZXMpLGFjY2Vzc0NhY2hlOm51bGwscmVuZGVyQ2FjaGU6W10sY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZXM6bnVsbCxwcm9wc09wdGlvbnM6TGEoXyxBKSxlbWl0c09wdGlvbnM6V24oXyxBKSxlbWl0Om51bGwsZW1pdHRlZDpudWxsLHByb3BzRGVmYXVsdHM6aC5FTVBUWV9PQkosaW5oZXJpdEF0dHJzOl8uaW5oZXJpdEF0dHJzLGN0eDpoLkVNUFRZX09CSixkYXRhOmguRU1QVFlfT0JKLHByb3BzOmguRU1QVFlfT0JKLGF0dHJzOmguRU1QVFlfT0JKLHNsb3RzOmguRU1QVFlfT0JKLHJlZnM6aC5FTVBUWV9PQkosc2V0dXBTdGF0ZTpoLkVNUFRZX09CSixzZXR1cENvbnRleHQ6bnVsbCxzdXNwZW5zZTpkLHN1c3BlbnNlSWQ6ZD9kLnBlbmRpbmdJZDowLGFzeW5jRGVwOm51bGwsYXN5bmNSZXNvbHZlZDohMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudWxsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLGJ1bTpudWxsLGRhOm51bGwsYTpudWxsLHJ0ZzpudWxsLHJ0YzpudWxsLGVjOm51bGwsc3A6bnVsbH07cmV0dXJuIEMuY3R4PXtfOkN9LEMucm9vdD1sP2wucm9vdDpDLEMuZW1pdD1vci5iaW5kKG51bGwsQyksaS5jZSYmaS5jZShDKSxDfXZhciBfbj1udWxsLGpuPSgpPT5fbnx8Z24scW49aT0+e19uPWksaS5zY29wZS5vbigpfSxBaT0oKT0+e19uJiZfbi5zY29wZS5vZmYoKSxfbj1udWxsfTtmdW5jdGlvbiB1cyhpKXtyZXR1cm4gaS52bm9kZS5zaGFwZUZsYWcmNH1FLmlzSW5TU1JDb21wb25lbnRTZXR1cD0hMTtmdW5jdGlvbiB6YShpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7RS5pc0luU1NSQ29tcG9uZW50U2V0dXA9bDt2YXJ7cHJvcHM6ZCxjaGlsZHJlbjpffT1pLnZub2RlLEE9dXMoaSk7aXMoaSxkLEEsbCksb3MoaSxfKTt2YXIgQz1BP0lhKGksbCk6dm9pZCAwO3JldHVybiBFLmlzSW5TU1JDb21wb25lbnRTZXR1cD0hMSxDfWZ1bmN0aW9uIElhKGksbCl7dmFyIGQ9aS50eXBlO2kuYWNjZXNzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSxpLnByb3h5PXkubWFya1JhdyhuZXcgUHJveHkoaS5jdHgsSykpO3ZhcntzZXR1cDpffT1kO2lmKF8pe3ZhciBBPWkuc2V0dXBDb250ZXh0PV8ubGVuZ3RoPjE/Rm8oaSk6bnVsbDtxbihpKSx5LnBhdXNlVHJhY2tpbmcoKTt2YXIgQz1WdChfLGksMCxbaS5wcm9wcyxBXSk7aWYoeS5yZXNldFRyYWNraW5nKCksQWkoKSxoLmlzUHJvbWlzZShDKSl7aWYoQy50aGVuKEFpLEFpKSxsKXJldHVybiBDLnRoZW4oaz0+e3JhKGksayxsKX0pLmNhdGNoKGs9PntQKGssaSwwKX0pO2kuYXN5bmNEZXA9Q31lbHNlIHJhKGksQyxsKX1lbHNlIEdhKGksbCl9ZnVuY3Rpb24gcmEoaSxsLGQpe2guaXNGdW5jdGlvbihsKT9pLnR5cGUuX19zc3JJbmxpbmVSZW5kZXI/aS5zc3JSZW5kZXI9bDppLnJlbmRlcj1sOmguaXNPYmplY3QobCkmJihpLnNldHVwU3RhdGU9eS5wcm94eVJlZnMobCkpLEdhKGksZCl9dmFyIHNvLFdhO2Z1bmN0aW9uIGZzKGkpe3NvPWksV2E9bD0+e2wucmVuZGVyLl9yYyYmKGwud2l0aFByb3h5PW5ldyBQcm94eShsLmN0eCxpZSkpfX12YXIgV3I9KCk9PiFzbztmdW5jdGlvbiBHYShpLGwsZCl7dmFyIF89aS50eXBlO2lmKCFpLnJlbmRlcil7aWYoIWwmJnNvJiYhXy5yZW5kZXIpe3ZhciBBPV8udGVtcGxhdGV8fF9yKGkpLnRlbXBsYXRlO2lmKEEpe3Zhcntpc0N1c3RvbUVsZW1lbnQ6Qyxjb21waWxlck9wdGlvbnM6a309aS5hcHBDb250ZXh0LmNvbmZpZyx7ZGVsaW1pdGVyczpELGNvbXBpbGVyT3B0aW9uczpIfT1fLG5lPWguZXh0ZW5kKGguZXh0ZW5kKHtpc0N1c3RvbUVsZW1lbnQ6QyxkZWxpbWl0ZXJzOkR9LGspLEgpO18ucmVuZGVyPXNvKEEsbmUpfX1pLnJlbmRlcj1fLnJlbmRlcnx8aC5OT09QLFdhJiZXYShpKX1xbihpKSx5LnBhdXNlVHJhY2tpbmcoKSxzdChpKSx5LnJlc2V0VHJhY2tpbmcoKSxBaSgpfWZ1bmN0aW9uIFlhKGkpe3JldHVybiBuZXcgUHJveHkoaS5hdHRycyx7Z2V0KGwsZCl7cmV0dXJuIHkudHJhY2soaSwiZ2V0IiwiJGF0dHJzIiksbFtkXX19KX1mdW5jdGlvbiBGbyhpKXt2YXIgbD1fPT57aS5leHBvc2VkPV98fHt9fSxkO3JldHVybntnZXQgYXR0cnMoKXtyZXR1cm4gZHx8KGQ9WWEoaSkpfSxzbG90czppLnNsb3RzLGVtaXQ6aS5lbWl0LGV4cG9zZTpsfX1mdW5jdGlvbiBEaShpKXtpZihpLmV4cG9zZWQpcmV0dXJuIGkuZXhwb3NlUHJveHl8fChpLmV4cG9zZVByb3h5PW5ldyBQcm94eSh5LnByb3h5UmVmcyh5Lm1hcmtSYXcoaS5leHBvc2VkKSkse2dldChsLGQpe2lmKGQgaW4gbClyZXR1cm4gbFtkXTtpZihkIGluIGt0KXJldHVybiBrdFtkXShpKX0saGFzKGwsZCl7cmV0dXJuIGQgaW4gbHx8ZCBpbiBrdH19KSl9ZnVuY3Rpb24gX28oaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBoLmlzRnVuY3Rpb24oaSk/aS5kaXNwbGF5TmFtZXx8aS5uYW1lOmkubmFtZXx8bCYmaS5fX25hbWV9ZnVuY3Rpb24gYm8oaSl7cmV0dXJuIGguaXNGdW5jdGlvbihpKSYmIl9fdmNjT3B0cyJpbiBpfXZhciBkcz0oaSxsKT0+eS5jb21wdXRlZChpLGwsRS5pc0luU1NSQ29tcG9uZW50U2V0dXApO2Z1bmN0aW9uIFZvKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24geHMoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBocyhpKXt9ZnVuY3Rpb24gQnMoaSxsKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB4ZSgpe3JldHVybiBQdCgpLnNsb3RzfWZ1bmN0aW9uIE50KCl7cmV0dXJuIFB0KCkuYXR0cnN9ZnVuY3Rpb24gUHQoKXt2YXIgaT1qbigpO3JldHVybiBpLnNldHVwQ29udGV4dHx8KGkuc2V0dXBDb250ZXh0PUZvKGkpKX1mdW5jdGlvbiB3bihpLGwpe3ZhciBkPWguaXNBcnJheShpKT9pLnJlZHVjZSgoQyxrKT0+KENba109e30sQykse30pOmk7Zm9yKHZhciBfIGluIGwpe3ZhciBBPWRbX107QT9oLmlzQXJyYXkoQSl8fGguaXNGdW5jdGlvbihBKT9kW19dPXt0eXBlOkEsZGVmYXVsdDpsW19dfTpBLmRlZmF1bHQ9bFtfXTpBPT09bnVsbCYmKGRbX109e2RlZmF1bHQ6bFtfXX0pfXJldHVybiBkfWZ1bmN0aW9uIEVyKGksbCl7dmFyIGQ9e30sXz1mdW5jdGlvbihDKXtsLmluY2x1ZGVzKEMpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxDLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+aVtDXX0pfTtmb3IodmFyIEEgaW4gaSlfKEEpO3JldHVybiBkfWZ1bmN0aW9uIE9pKGkpe3ZhciBsPWpuKCksZD1pKCk7cmV0dXJuIEFpKCksaC5pc1Byb21pc2UoZCkmJihkPWQuY2F0Y2goXz0+e3Rocm93IHFuKGwpLF99KSksW2QsKCk9PnFuKGwpXX1mdW5jdGlvbiBKaShpLGwsZCl7dmFyIF89YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gXz09PTI/aC5pc09iamVjdChsKSYmIWguaXNBcnJheShsKT9HdChsKT9xdChpLG51bGwsW2xdKTpxdChpLGwpOnF0KGksbnVsbCxsKTooXz4zP2Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOl89PT0zJiZHdChkKSYmKGQ9W2RdKSxxdChpLGwsZCkpfXZhciBVbz1TeW1ib2woIiIpLE5hPSgpPT57e3ZhciBpPVpuKFVvKTtyZXR1cm4gaX19O2Z1bmN0aW9uIGlhKCl7fWZ1bmN0aW9uIGdzKGksbCxkLF8pe3ZhciBBPWRbX107aWYoQSYmcHMoQSxpKSlyZXR1cm4gQTt2YXIgQz1sKCk7cmV0dXJuIEMubWVtbz1pLnNsaWNlKCksZFtfXT1DfWZ1bmN0aW9uIHBzKGksbCl7dmFyIGQ9aS5tZW1vO2lmKGQubGVuZ3RoIT1sLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIF89MDtfPGQubGVuZ3RoO18rKylpZihoLmhhc0NoYW5nZWQoZFtfXSxsW19dKSlyZXR1cm4hMTtyZXR1cm4gSHQ+MCYmQ2UmJkNlLnB1c2goaSksITB9dmFyIGRsPSIzLjIuNDciLCRsPXtjcmVhdGVDb21wb25lbnRJbnN0YW5jZTpvbixzZXR1cENvbXBvbmVudDp6YSxyZW5kZXJDb21wb25lbnRSb290OiRpLHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTpLcixpc1ZOb2RlOkd0LG5vcm1hbGl6ZVZOb2RlOiRufSxIbD0kbCxNcz1udWxsLCRvPW51bGw7ZnVuY3Rpb24gSG8oaSxsKXtyZXR1cm4gaT09PSJpbnB1dCI/bmV3IFIuVW5pSW5wdXRFbGVtZW50KGksbCk6aT09PSJ0ZXh0YXJlYSI/bmV3IFIuVW5pVGV4dEFyZWFFbGVtZW50KGksbCk6bmV3IFIuVW5pRWxlbWVudChpLGwpfWZ1bmN0aW9uIG9hKGksbCl7cmV0dXJuIG5ldyBSLlVuaVRleHROb2RlKGksbCl9ZnVuY3Rpb24gcWEoaSxsKXtyZXR1cm4gbmV3IFIuVW5pQ29tbWVudE5vZGUoaSxsKX12YXIgdnMsam89e2luc2VydDooaSxsLGQpPT57bC5pbnNlcnRCZWZvcmUoaSxkfHxudWxsKX0scmVtb3ZlOmk9Pnt2YXIgbD1pLnBhcmVudE5vZGU7bCYmbC5yZW1vdmVDaGlsZChpKX0sY3JlYXRlRWxlbWVudDooaSxsKT0+SG8oaSxsKSxjcmVhdGVUZXh0OihpLGwpPT5vYShpLGwpLGNyZWF0ZUNvbW1lbnQ6KGksbCk9PnFhKGksbCksc2V0VGV4dDooaSxsKT0+e2kubm9kZVZhbHVlPWx9LHNldEVsZW1lbnRUZXh0OihpLGwpPT57aS50ZXh0Q29udGVudD1sfSxwYXJlbnROb2RlOmk9PmkucGFyZW50Tm9kZSxuZXh0U2libGluZzppPT5pLm5leHRTaWJsaW5nLHNldFNjb3BlSWQoaSxsKXtpLnNldEF0dHJpYnV0ZShsLCIiKX0sY2xvbmVOb2RlKGkpe3ZhciBsPWkuY2xvbmVOb2RlKCEwKTtyZXR1cm4iX3ZhbHVlImluIGkmJihsLl92YWx1ZT1pLl92YWx1ZSksbH0saW5zZXJ0U3RhdGljQ29udGVudChpLGwsZCl7dmFyIF89dnN8fCh2cz1IbygiZGl2IikpO18uaW5uZXJIVE1MPWk7Zm9yKHZhciBBPV8uZmlyc3RDaGlsZCxDPUEsaz1DO0M7KWs9Qyxqby5pbnNlcnQoQyxsLGQpLEM9Xy5maXJzdENoaWxkO3JldHVybltBLGtdfX07ZnVuY3Rpb24gRHMoaSxsKXtsPT1udWxsJiYobD0iIiksaS5zZXRBdHRyaWJ1dGUoImNsYXNzIixsKX1mdW5jdGlvbiBqbChpLGwsZCl7aWYoIWQpaS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7ZWxzZSBpZihoLmlzU3RyaW5nKGQpKWwhPT1kJiZpLnNldEF0dHJpYnV0ZSgic3R5bGUiLGQpO2Vsc2V7dmFyIF89e30sQT1sJiYhaC5pc1N0cmluZyhsKTtpZihBKXtmb3IodmFyIEMgaW4gbClkW0NdPT1udWxsJiYoX1tDXT0iIik7Zm9yKHZhciBrIGluIGQpe3ZhciBEPWRba107RCE9PWxba10mJihfW2tdPUQpfX1lbHNlIGZvcih2YXIgSCBpbiBkKV9bSF09ZFtIXTtPYmplY3Qua2V5cyhfKS5sZW5ndGgmJmkuc2V0QXR0cmlidXRlKCJzdHlsZSIsXyl9fWZ1bmN0aW9uIExzKGksbCxkKXtkPT1udWxsP2kucmVtb3ZlQXR0cmlidXRlKGwpOmkuc2V0QXR0cmlidXRlKGwsZCl9ZnVuY3Rpb24gbXMoaSxsLGQsXyl7aS5hZGRFdmVudExpc3RlbmVyKGwsZCxfKX1mdW5jdGlvbiBobChpLGwsZCxfKXtpLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxkLF8pfWZ1bmN0aW9uIEZzKGksbCxkLF8pe3ZhciBBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLEM9aS5fdmVpfHwoaS5fdmVpPXt9KSxrPUNbbF07aWYoXyYmaylrLnZhbHVlPV87ZWxzZXt2YXJbRCxIXT1fcyhsKTtpZihfKXt2YXIgbmU9Q1tsXT1WcyhfLEEpO21zKGksRCxuZSxIKX1lbHNlIGsmJihobChpLEQsayxIKSxDW2xdPXZvaWQgMCl9fXZhciBKYT0vKD86T25jZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24gX3MoaSl7dmFyIGw7aWYoSmEudGVzdChpKSl7bD17fTtmb3IodmFyIGQ7ZD1pLm1hdGNoKEphKTspaT1pLnNsaWNlKDAsaS5sZW5ndGgtZFswXS5sZW5ndGgpLGxbZFswXS50b0xvd2VyQ2FzZSgpXT0hMH1yZXR1cm5baC5oeXBoZW5hdGUoaS5zbGljZSgyKSksbF19ZnVuY3Rpb24gVnMoaSxsKXt2YXIgZD1BPT57T3QoZC52YWx1ZSxsLDUsW0FdKX07ZC52YWx1ZT1pO3ZhciBfPW5ldyBTZXQ7cmV0dXJuIGguaXNBcnJheShkLnZhbHVlKT9kLnZhbHVlLmZvckVhY2goQT0+e0EubW9kaWZpZXJzJiZBLm1vZGlmaWVycy5mb3JFYWNoKEM9PntfLmFkZChDKX0pfSk6KGQudmFsdWUubW9kaWZpZXJzJiZkLnZhbHVlLm1vZGlmaWVycy5mb3JFYWNoKEE9PntfLmFkZChBKX0pLFVzKGQsbCkpLGQubW9kaWZpZXJzPVsuLi5fXSxkfWZ1bmN0aW9uIFVzKGksbCl7aWYoISFsKXt2YXJ7JHd4c01vZHVsZXM6ZH09bDtpZighIWQpe3ZhciBfPWkudmFsdWUudG9TdHJpbmcoKTshZC5maW5kKEE9Pl8uaW5kZXhPZigiLiIrQSsiLiIpPi0xKXx8KGkud3hzRXZlbnQ9aS52YWx1ZSgpKX19fXZhciBnbD1mdW5jdGlvbihpLGwsZCxfKXt2YXIgQT1hcmd1bWVudHMubGVuZ3RoPjY/YXJndW1lbnRzWzZdOnZvaWQgMDtzd2l0Y2gobCl7Y2FzZSJjbGFzcyI6RHMoaSxfKTticmVhaztjYXNlInN0eWxlIjpqbChpLGQsXyk7YnJlYWs7ZGVmYXVsdDppZihoLmlzT24obCkpaC5pc01vZGVsTGlzdGVuZXIobCl8fEZzKGksbCxkLF8sQSk7ZWxzZXtpZihoLmlzT2JqZWN0KF8pKXt2YXIgQz1kPT09XztpZihfPVIuSlNPTl9QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShfKSxDJiZpLmdldEF0dHJpYnV0ZShsKT09PV8pcmV0dXJufWVsc2UgaWYoZD09PV8pcmV0dXJuO0xzKGksbCxfKX1icmVha319O2Z1bmN0aW9uIHpvKCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIkc3R5bGUiO3t2YXIgbD1qbigpO2lmKCFsKXJldHVybiBoLkVNUFRZX09CSjt2YXIgZD1sLnR5cGUuX19jc3NNb2R1bGVzO2lmKCFkKXJldHVybiBoLkVNUFRZX09CSjt2YXIgXz1kW2ldO3JldHVybiBffHxoLkVNUFRZX09CSn19ZnVuY3Rpb24gS2EoaSl7dmFyIGw9am4oKTtpZighIWwpe3ZhciBkPSgpPT5tYShsLnN1YlRyZWUsaShsLnByb3h5KSk7dHIoKCk9Pk5pKGQse2ZsdXNoOiJwb3N0In0pKSxucihkKX19ZnVuY3Rpb24gbWEoaSxsKXtpZihpLnNoYXBlRmxhZyYxMjgpe3ZhciBkPWkuc3VzcGVuc2U7aT1kLmFjdGl2ZUJyYW5jaCxkLnBlbmRpbmdCcmFuY2gmJiFkLmlzSHlkcmF0aW5nJiZkLmVmZmVjdHMucHVzaCgoKT0+e21hKGQuYWN0aXZlQnJhbmNoLGwpfSl9Zm9yKDtpLmNvbXBvbmVudDspaT1pLmNvbXBvbmVudC5zdWJUcmVlO2lmKGkuc2hhcGVGbGFnJjEmJmkuZWwpa2EoaS5lbCxsKTtlbHNlIGlmKGkudHlwZT09PXRlKWkuY2hpbGRyZW4uZm9yRWFjaChDPT5tYShDLGwpKTtlbHNlIGlmKGkudHlwZT09PUllKWZvcih2YXJ7ZWw6XyxhbmNob3I6QX09aTtfJiYoa2EoXyxsKSxfIT09QSk7KV89Xy5uZXh0U2libGluZ31mdW5jdGlvbiBrYShpLGwpe2lmKGkubm9kZVR5cGU9PT0xKWZvcih2YXIgZCBpbiBsKWkuc2V0QXR0cmlidXRlKCItLSIuY29uY2F0KGQpLGxbZF0pfXZhciB5bz0idHJhbnNpdGlvbiIsYWE9ImFuaW1hdGlvbiIsWmE9KGksbCk9Pnt2YXJ7c2xvdHM6ZH09bDtyZXR1cm4gSmkoRHQsSHMoaSksZCl9O1phLmRpc3BsYXlOYW1lPSJUcmFuc2l0aW9uIjt2YXIgJHM9e25hbWU6U3RyaW5nLHR5cGU6U3RyaW5nLGNzczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGR1cmF0aW9uOltTdHJpbmcsTnVtYmVyLE9iamVjdF0sZW50ZXJGcm9tQ2xhc3M6U3RyaW5nLGVudGVyQWN0aXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsYXBwZWFyRnJvbUNsYXNzOlN0cmluZyxhcHBlYXJBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyVG9DbGFzczpTdHJpbmcsbGVhdmVGcm9tQ2xhc3M6U3RyaW5nLGxlYXZlQWN0aXZlQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmd9LHBsPVphLnByb3BzPWguZXh0ZW5kKHt9LER0LnByb3BzLCRzKSxzYT1mdW5jdGlvbihpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06W107aC5pc0FycmF5KGkpP2kuZm9yRWFjaChkPT5kKC4uLmwpKTppJiZpKC4uLmwpfSxYYT1pPT5pP2guaXNBcnJheShpKT9pLnNvbWUobD0+bC5sZW5ndGg+MSk6aS5sZW5ndGg+MTohMTtmdW5jdGlvbiBIcyhpKXt2YXIgbD17fTtmb3IodmFyIGQgaW4gaSlkIGluICRzfHwobFtkXT1pW2RdKTtpZihpLmNzcz09PSExKXJldHVybiBsO3ZhcntuYW1lOl89InYiLHR5cGU6QSxkdXJhdGlvbjpDLGVudGVyRnJvbUNsYXNzOms9IiIuY29uY2F0KF8sIi1lbnRlci1mcm9tIiksZW50ZXJBY3RpdmVDbGFzczpEPSIiLmNvbmNhdChfLCItZW50ZXItYWN0aXZlIiksZW50ZXJUb0NsYXNzOkg9IiIuY29uY2F0KF8sIi1lbnRlci10byIpLGFwcGVhckZyb21DbGFzczpuZT1rLGFwcGVhckFjdGl2ZUNsYXNzOnZlPUQsYXBwZWFyVG9DbGFzczpCZT1ILGxlYXZlRnJvbUNsYXNzOnVlPSIiLmNvbmNhdChfLCItbGVhdmUtZnJvbSIpLGxlYXZlQWN0aXZlQ2xhc3M6a2U9IiIuY29uY2F0KF8sIi1sZWF2ZS1hY3RpdmUiKSxsZWF2ZVRvQ2xhc3M6R2U9IiIuY29uY2F0KF8sIi1sZWF2ZS10byIpfT1pLHV0PVFhKEMpLFFlPXV0JiZ1dFswXSxSZT11dCYmdXRbMV0se29uQmVmb3JlRW50ZXI6bWUsb25FbnRlcjp5ZSxvbkVudGVyQ2FuY2VsbGVkOkxlLG9uTGVhdmU6T2Usb25MZWF2ZUNhbmNlbGxlZDpidCxvbkJlZm9yZUFwcGVhcjpDdD1tZSxvbkFwcGVhcjpLZT15ZSxvbkFwcGVhckNhbmNlbGxlZDpSdD1MZX09bCxNPShyZSxvZSxVZSk9PntsYShyZSxvZT9CZTpIKSxsYShyZSxvZT92ZTpEKSxVZSYmVWUoKX0saj0ocmUsb2UpPT57bGEocmUsR2UpLGxhKHJlLGtlKSxvZSYmb2UoKX0sc2U9cmU9PihvZSxVZSk9Pnt2YXIgcnQ9cmU/S2U6eWUscWU9KCk9Pk0ob2UscmUsVWUpO3NhKHJ0LFtvZSxxZV0pLHZsKCgpPT57bGEob2UscmU/bmU6ayksTXIob2UscmU/QmU6SCksWGEocnQpfHxqcyhvZSxBLFFlLHFlKX0pfTtyZXR1cm4gaC5leHRlbmQobCx7b25CZWZvcmVFbnRlcihyZSl7c2EobWUsW3JlXSksTXIocmUsayksTXIocmUsRCl9LG9uQmVmb3JlQXBwZWFyKHJlKXtzYShDdCxbcmVdKSxNcihyZSxuZSksTXIocmUsdmUpfSxvbkVudGVyOnNlKCExKSxvbkFwcGVhcjpzZSghMCksb25MZWF2ZShyZSxvZSl7dmFyIFVlPSgpPT5qKHJlLG9lKTtNcihyZSx1ZSksbWwoKSxNcihyZSxrZSksdmwoKCk9PntsYShyZSx1ZSksTXIocmUsR2UpLFhhKE9lKXx8anMocmUsQSxSZSxVZSl9KSxzYShPZSxbcmUsVWVdKX0sb25FbnRlckNhbmNlbGxlZChyZSl7TShyZSwhMSksc2EoTGUsW3JlXSl9LG9uQXBwZWFyQ2FuY2VsbGVkKHJlKXtNKHJlLCEwKSxzYShSdCxbcmVdKX0sb25MZWF2ZUNhbmNlbGxlZChyZSl7aihyZSksc2EoYnQsW3JlXSl9fSl9ZnVuY3Rpb24gUWEoaSl7aWYoaT09bnVsbClyZXR1cm4gbnVsbDtpZihoLmlzT2JqZWN0KGkpKXJldHVyblt0aShpLmVudGVyKSx0aShpLmxlYXZlKV07dmFyIGw9dGkoaSk7cmV0dXJuW2wsbF19ZnVuY3Rpb24gdGkoaSl7dmFyIGw9aC50b051bWJlcihpKTtyZXR1cm4gbH1mdW5jdGlvbiBNcihpLGwpe2wuc3BsaXQoL1xzKy8pLmZvckVhY2goZD0+ZCYmaS5jbGFzc0xpc3QuYWRkKGQpKSwoaS5fdnRjfHwoaS5fdnRjPW5ldyBTZXQpKS5hZGQobCl9ZnVuY3Rpb24gbGEoaSxsKXtsLnNwbGl0KC9ccysvKS5mb3JFYWNoKF89Pl8mJmkuY2xhc3NMaXN0LnJlbW92ZShfKSk7dmFye192dGM6ZH09aTtkJiYoZC5kZWxldGUobCksZC5zaXplfHwoaS5fdnRjPXZvaWQgMCkpfWZ1bmN0aW9uIHZsKGkpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZShpKX0pfXZhciB6bD0wO2Z1bmN0aW9uIGpzKGksbCxkLF8pe3ZhciBBPWkuX2VuZElkPSsremwsQz0oKT0+e0E9PT1pLl9lbmRJZCYmXygpfTtpZihkKXJldHVybiBzZXRUaW1lb3V0KEMsZCk7dmFye3R5cGU6ayx0aW1lb3V0OkQscHJvcENvdW50Okh9PWJzKGksbCk7aWYoIWspcmV0dXJuIF8oKTt2YXIgbmU9aysiZW5kIix2ZT0wLEJlPSgpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKG5lLHVlKSxDKCl9LHVlPWtlPT57a2UudGFyZ2V0PT09aSYmKyt2ZT49SCYmQmUoKX07c2V0VGltZW91dCgoKT0+e3ZlPEgmJkJlKCl9LEQrMSksaS5hZGRFdmVudExpc3RlbmVyKG5lLHVlKX1mdW5jdGlvbiBicyhpLGwpe3ZhciBkPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpLF89R2U9PihkW0dlXXx8IiIpLnNwbGl0KCIsICIpLEE9Xyh5bysiRGVsYXkiKSxDPV8oeW8rIkR1cmF0aW9uIiksaz16cyhBLEMpLEQ9XyhhYSsiRGVsYXkiKSxIPV8oYWErIkR1cmF0aW9uIiksbmU9enMoRCxIKSx2ZT1udWxsLEJlPTAsdWU9MDtsPT09eW8/az4wJiYodmU9eW8sQmU9ayx1ZT1DLmxlbmd0aCk6bD09PWFhP25lPjAmJih2ZT1hYSxCZT1uZSx1ZT1ILmxlbmd0aCk6KEJlPU1hdGgubWF4KGssbmUpLHZlPUJlPjA/az5uZT95bzphYTpudWxsLHVlPXZlP3ZlPT09eW8/Qy5sZW5ndGg6SC5sZW5ndGg6MCk7dmFyIGtlPXZlPT09eW8mJi9cYih0cmFuc2Zvcm18YWxsKSgsfCQpLy50ZXN0KGRbeW8rIlByb3BlcnR5Il0pO3JldHVybnt0eXBlOnZlLHRpbWVvdXQ6QmUscHJvcENvdW50OnVlLGhhc1RyYW5zZm9ybTprZX19ZnVuY3Rpb24genMoaSxsKXtmb3IoO2kubGVuZ3RoPGwubGVuZ3RoOylpPWkuY29uY2F0KGkpO3JldHVybiBNYXRoLm1heCguLi5sLm1hcCgoZCxfKT0+V3MoZCkrV3MoaVtfXSkpKX1mdW5jdGlvbiBXcyhpKXtyZXR1cm4gTnVtYmVyKGkuc2xpY2UoMCwtMSkucmVwbGFjZSgiLCIsIi4iKSkqMWUzfWZ1bmN0aW9uIG1sKCl7cmV0dXJuIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0fXZhciBHcz1uZXcgV2Vha01hcCx5cz1uZXcgV2Vha01hcCxFcz17bmFtZToiVHJhbnNpdGlvbkdyb3VwIixwcm9wczpoLmV4dGVuZCh7fSxwbCx7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSksc2V0dXAoaSxsKXt2YXJ7c2xvdHM6ZH09bCxfPWpuKCksQT1BcigpLEMsaztyZXR1cm4gbnIoKCk9PntpZighIUMubGVuZ3RoKXt2YXIgRD1pLm1vdmVDbGFzc3x8IiIuY29uY2F0KGkubmFtZXx8InYiLCItbW92ZSIpO2lmKCEhbShDWzBdLmVsLF8udm5vZGUuZWwsRCkpe0MuZm9yRWFjaChibCksQy5mb3JFYWNoKGEpO3ZhciBIPUMuZmlsdGVyKHUpO21sKCksSC5mb3JFYWNoKG5lPT57dmFyIHZlPW5lLmVsLEJlPXZlLnN0eWxlO01yKHZlLEQpLEJlLnRyYW5zZm9ybT1CZS53ZWJraXRUcmFuc2Zvcm09QmUudHJhbnNpdGlvbkR1cmF0aW9uPSIiO3ZhciB1ZT12ZS5fbW92ZUNiPWtlPT57a2UmJmtlLnRhcmdldCE9PXZlfHwoIWtlfHwvdHJhbnNmb3JtJC8udGVzdChrZS5wcm9wZXJ0eU5hbWUpKSYmKHZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHVlKSx2ZS5fbW92ZUNiPW51bGwsbGEodmUsRCkpfTt2ZS5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix1ZSl9KX19fSksKCk9Pnt2YXIgRD15LnRvUmF3KGkpLEg9SHMoRCksbmU9RC50YWd8fHRlO0M9ayxrPWQuZGVmYXVsdD9SaShkLmRlZmF1bHQoKSk6W107Zm9yKHZhciB2ZT0wO3ZlPGsubGVuZ3RoO3ZlKyspe3ZhciBCZT1rW3ZlXTtCZS5rZXkhPW51bGwmJk9yKEJlLF9pKEJlLEgsQSxfKSl9aWYoQylmb3IodmFyIHVlPTA7dWU8Qy5sZW5ndGg7dWUrKyl7dmFyIGtlPUNbdWVdO09yKGtlLF9pKGtlLEgsQSxfKSksR3Muc2V0KGtlLGtlLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKX1yZXR1cm4gcXQobmUsbnVsbCxrKX19fSxTcz1pPT5kZWxldGUgaS5tb2RlO0VzLnByb3BzO3ZhciBfbD1FcztmdW5jdGlvbiBibChpKXt2YXIgbD1pLmVsO2wuX21vdmVDYiYmbC5fbW92ZUNiKCksbC5fZW50ZXJDYiYmbC5fZW50ZXJDYigpfWZ1bmN0aW9uIGEoaSl7eXMuc2V0KGksaS5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSl9ZnVuY3Rpb24gdShpKXt2YXIgbD1Hcy5nZXQoaSksZD15cy5nZXQoaSksXz1sLmxlZnQtZC5sZWZ0LEE9bC50b3AtZC50b3A7aWYoX3x8QSl7dmFyIEM9aS5lbC5zdHlsZTtyZXR1cm4gQy50cmFuc2Zvcm09Qy53ZWJraXRUcmFuc2Zvcm09InRyYW5zbGF0ZSgiLmNvbmNhdChfLCJweCwiKS5jb25jYXQoQSwicHgpIiksQy50cmFuc2l0aW9uRHVyYXRpb249IjBzIixpfX1mdW5jdGlvbiBtKGksbCxkKXt2YXIgXz1pLmNsb25lTm9kZSgpO2kuX3Z0YyYmaS5fdnRjLmZvckVhY2goaz0+e2suc3BsaXQoL1xzKy8pLmZvckVhY2goRD0+RCYmXy5jbGFzc0xpc3QucmVtb3ZlKEQpKX0pLGQuc3BsaXQoL1xzKy8pLmZvckVhY2goaz0+ayYmXy5jbGFzc0xpc3QuYWRkKGspKSxfLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciBBPWwubm9kZVR5cGU9PT0xP2w6bC5wYXJlbnROb2RlO0EuYXBwZW5kQ2hpbGQoXyk7dmFye2hhc1RyYW5zZm9ybTpDfT1icyhfKTtyZXR1cm4gQS5yZW1vdmVDaGlsZChfKSxDfXZhciBTPWk9Pnt2YXIgbD1pLnByb3BzWyJvblVwZGF0ZTptb2RlbFZhbHVlIl07cmV0dXJuIGguaXNBcnJheShsKT9kPT5oLmludm9rZUFycmF5Rm5zKGwsZCk6bH0sST17Y3JlYXRlZChpLGwsZCl7dmFye3ZhbHVlOl8sbW9kaWZpZXJzOnt0cmltOkEsbnVtYmVyOkN9fT1sO2kudmFsdWU9Xz09bnVsbD8iIjpfLGkuX2Fzc2lnbj1TKGQpLG1zKGksImlucHV0IixrPT57dmFyIEQ9ay5kZXRhaWwudmFsdWUsSD1pLnBhZ2VOb2RlO2kucGFnZU5vZGU9bnVsbCxpLnZhbHVlPUQsaS5wYWdlTm9kZT1ILEE/RD1ELnRyaW0oKTpDJiYoRD1oLnRvTnVtYmVyKEQpKSxpLl9hc3NpZ24oRCl9KX0sYmVmb3JlVXBkYXRlKGksbCxkKXt2YXJ7dmFsdWU6X309bDtpLl9hc3NpZ249UyhkKTt2YXIgQT1fPT1udWxsPyIiOl87aS52YWx1ZSE9PUEmJihpLnZhbHVlPUEpfX0sTz1JLEY9WyJjdHJsIiwic2hpZnQiLCJhbHQiLCJtZXRhIl0sVz17c3RvcDppPT5pLnN0b3BQcm9wYWdhdGlvbigpLHByZXZlbnQ6aT0+aS5wcmV2ZW50RGVmYXVsdCgpLHNlbGY6aT0+aS50YXJnZXQhPT1pLmN1cnJlbnRUYXJnZXQsY3RybDppPT4haS5jdHJsS2V5LHNoaWZ0Omk9PiFpLnNoaWZ0S2V5LGFsdDppPT4haS5hbHRLZXksbWV0YTppPT4haS5tZXRhS2V5LGxlZnQ6aT0+ImJ1dHRvbiJpbiBpJiZpLmJ1dHRvbiE9PTAsbWlkZGxlOmk9PiJidXR0b24iaW4gaSYmaS5idXR0b24hPT0xLHJpZ2h0Omk9PiJidXR0b24iaW4gaSYmaS5idXR0b24hPT0yLGV4YWN0OihpLGwpPT5GLnNvbWUoZD0+aVsiIi5jb25jYXQoZCwiS2V5IildJiYhbC5pbmNsdWRlcyhkKSl9LEc9KGksbCk9Pnt2YXIgZD1mdW5jdGlvbihfKXtmb3IodmFyIEE9MDtBPGwubGVuZ3RoO0ErKyl7dmFyIEM9V1tsW0FdXTtpZihDJiZDKF8sbCkpcmV0dXJufWZvcih2YXIgaz1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KGs+MT9rLTE6MCksSD0xO0g8aztIKyspRFtILTFdPWFyZ3VtZW50c1tIXTtyZXR1cm4gaShfLC4uLkQpfTtyZXR1cm4gZC5tb2RpZmllcnM9bCxkfSxsZT17ZXNjOiJlc2NhcGUiLHNwYWNlOiIgIix1cDoiYXJyb3ctdXAiLGxlZnQ6ImFycm93LWxlZnQiLHJpZ2h0OiJhcnJvdy1yaWdodCIsZG93bjoiYXJyb3ctZG93biIsZGVsZXRlOiJiYWNrc3BhY2UifSxXZT0oaSxsKT0+ZD0+e2lmKCJrZXkiaW4gZCl7dmFyIF89aC5oeXBoZW5hdGUoZC5rZXkpO2lmKGwuc29tZShBPT5BPT09X3x8bGVbQV09PT1fKSlyZXR1cm4gaShkKX19LGl0PXtiZWZvcmVNb3VudChpLGwpe3Zhcnt2YWx1ZTpkfT1sO2dlKGksZCl9LHVwZGF0ZWQoaSxsKXt2YXJ7dmFsdWU6ZCxvbGRWYWx1ZTpffT1sOyFkIT0hXyYmZ2UoaSxkKX0sYmVmb3JlVW5tb3VudChpLGwpe3Zhcnt2YWx1ZTpkfT1sO2dlKGksZCl9fTtmdW5jdGlvbiBnZShpLGwpe2kuc2V0QXR0cmlidXRlKCIudlNob3ciLCEhbCl9dmFyIFllPWguZXh0ZW5kKHtwYXRjaFByb3A6Z2wsZm9yY2VQYXRjaFByb3A6Ui5mb3JjZVBhdGNoUHJvcH0sam8pLEplO2Z1bmN0aW9uIG10KCl7cmV0dXJuIEplfHwoSmU9JGEoWWUpKX12YXIgYXQ9ZnVuY3Rpb24oKXttdCgpLnJlbmRlciguLi5hcmd1bWVudHMpfSxTZT1mdW5jdGlvbigpe3ZhciBpPW10KCkuY3JlYXRlQXBwKC4uLmFyZ3VtZW50cykse21vdW50Omx9PWk7cmV0dXJuIGkubW91bnQ9ZD0+KGguaXNTdHJpbmcoZCkmJihkPXFhKGQpKSxkJiZsKGQsITEsITEpKSxpfSxFZT1TZTtmdW5jdGlvbiBBZSgpe31mdW5jdGlvbiBsdCgpe31mdW5jdGlvbiBWZShpKXtyZXR1cm4gaC5pc09iamVjdChpKT9SLkpTT05fUFJPVE9DT0wrSlNPTi5zdHJpbmdpZnkoaSk6aX12YXIgVHQ9aT0+VmUoaSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJjYW1lbGl6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguY2FtZWxpemV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsImNhcGl0YWxpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmNhcGl0YWxpemV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsIm5vcm1hbGl6ZUNsYXNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5ub3JtYWxpemVDbGFzc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwibm9ybWFsaXplUHJvcHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLm5vcm1hbGl6ZVByb3BzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJub3JtYWxpemVTdHlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgubm9ybWFsaXplU3R5bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInRvRGlzcGxheVN0cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgudG9EaXNwbGF5U3RyaW5nfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJ0b0hhbmRsZXJLZXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLnRvSGFuZGxlcktleX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiRWZmZWN0U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LkVmZmVjdFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJSZWFjdGl2ZUVmZmVjdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuUmVhY3RpdmVFZmZlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsImN1c3RvbVJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuY3VzdG9tUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJlZmZlY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LmVmZmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiZWZmZWN0U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LmVmZmVjdFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJnZXRDdXJyZW50U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LmdldEN1cnJlbnRTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiaXNQcm94eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuaXNQcm94eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiaXNSZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuaXNSZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiaXNSZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuaXNSZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiaXNSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LmlzUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJpc1NoYWxsb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LmlzU2hhbGxvd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwibWFya1JhdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkubWFya1Jhd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwib25TY29wZURpc3Bvc2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5Lm9uU2NvcGVEaXNwb3NlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJwcm94eVJlZnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnByb3h5UmVmc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwicmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnJlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJyZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkucmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkucmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJzaGFsbG93UmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnNoYWxsb3dSZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwic2hhbGxvd1JlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5zaGFsbG93UmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInNoYWxsb3dSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnNoYWxsb3dSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInN0b3AiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnN0b3B9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInRvUmF3Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS50b1Jhd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwidG9SZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnRvUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJ0b1JlZnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnRvUmVmc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwidHJpZ2dlclJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkudHJpZ2dlclJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwidW5yZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LnVucmVmfX0pLEUuQmFzZVRyYW5zaXRpb249RHQsRS5CYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycz1YcixFLkNvbW1lbnQ9cGUsRS5GcmFnbWVudD10ZSxFLktlZXBBbGl2ZT1qaSxFLlN0YXRpYz1JZSxFLlN1c3BlbnNlPWtuLEUuVGVsZXBvcnQ9WixFLlRleHQ9Y2UsRS5UcmFuc2l0aW9uPVphLEUuVHJhbnNpdGlvbkdyb3VwPV9sLEUuYXNzZXJ0TnVtYmVyPUl0LEUuY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmc9T3QsRS5jYWxsV2l0aEVycm9ySGFuZGxpbmc9VnQsRS5jbG9uZVZOb2RlPWVpLEUuY29tcGF0VXRpbHM9JG8sRS5jb21wdXRlZD1kcyxFLmNyZWF0ZUFwcD1TZSxFLmNyZWF0ZUJsb2NrPWRuLEUuY3JlYXRlQ29tbWVudD1xYSxFLmNyZWF0ZUNvbW1lbnRWTm9kZT1VbixFLmNyZWF0ZUVsZW1lbnQ9SG8sRS5jcmVhdGVFbGVtZW50QmxvY2s9TXQsRS5jcmVhdGVFbGVtZW50Vk5vZGU9VXQsRS5jcmVhdGVIeWRyYXRpb25SZW5kZXJlcj1IYSxFLmNyZWF0ZVByb3BzUmVzdFByb3h5PUVyLEUuY3JlYXRlUmVuZGVyZXI9JGEsRS5jcmVhdGVTU1JBcHA9RWUsRS5jcmVhdGVTbG90cz1RLEUuY3JlYXRlU3RhdGljVk5vZGU9amEsRS5jcmVhdGVUZXh0Tm9kZT1vYSxFLmNyZWF0ZVRleHRWTm9kZT1xaSxFLmNyZWF0ZVZOb2RlPXF0LEUuY3JlYXRlVnVlQXBwPVNlLEUuZGVmaW5lQXN5bmNDb21wb25lbnQ9YWksRS5kZWZpbmVDb21wb25lbnQ9VHIsRS5kZWZpbmVFbWl0cz14cyxFLmRlZmluZUV4cG9zZT1ocyxFLmRlZmluZVByb3BzPVZvLEUuZ2V0Q3VycmVudEluc3RhbmNlPWpuLEUuZ2V0VHJhbnNpdGlvblJhd0NoaWxkcmVuPVJpLEUuZ3VhcmRSZWFjdGl2ZVByb3BzPWNpLEUuaD1KaSxFLmhhbmRsZUVycm9yPVAsRS5pbml0Q3VzdG9tRm9ybWF0dGVyPWlhLEUuaW5qZWN0PVpuLEUuaW5qZWN0SG9vaz1tcixFLmlzTWVtb1NhbWU9cHMsRS5pc1J1bnRpbWVPbmx5PVdyLEUuaXNWTm9kZT1HdCxFLm1lcmdlRGVmYXVsdHM9d24sRS5tZXJnZVByb3BzPXlyLEUubmV4dFRpY2s9Z3IsRS5vbkFjdGl2YXRlZD10byxFLm9uQmVmb3JlQWN0aXZhdGU9QWUsRS5vbkJlZm9yZURlYWN0aXZhdGU9bHQsRS5vbkJlZm9yZU1vdW50PWVyLEUub25CZWZvcmVVbm1vdW50PWNyLEUub25CZWZvcmVVcGRhdGU9R24sRS5vbkRlYWN0aXZhdGVkPUVuLEUub25FcnJvckNhcHR1cmVkPWtvLEUub25Nb3VudGVkPXRyLEUub25SZW5kZXJUcmFja2VkPW5vLEUub25SZW5kZXJUcmlnZ2VyZWQ9Tm8sRS5vblNlcnZlclByZWZldGNoPWdvLEUub25Vbm1vdW50ZWQ9aG8sRS5vblVwZGF0ZWQ9bnIsRS5vcGVuQmxvY2s9Y3QsRS5wb3BTY29wZUlkPWRhLEUucHJvdmlkZT1ObixFLnB1c2hTY29wZUlkPXdvLEUucXVldWVQb3N0Rmx1c2hDYj12aSxFLnJlZ2lzdGVyUnVudGltZUNvbXBpbGVyPWZzLEUucmVuZGVyPWF0LEUucmVuZGVyTGlzdD1CLEUucmVuZGVyU2xvdD1oZSxFLnJlc29sdmVDb21wb25lbnQ9cm8sRS5yZXNvbHZlRGlyZWN0aXZlPU1pLEUucmVzb2x2ZUR5bmFtaWNDb21wb25lbnQ9dm8sRS5yZXNvbHZlRmlsdGVyPU1zLEUucmVzb2x2ZVRyYW5zaXRpb25Ib29rcz1faSxFLnNldEJsb2NrVHJhY2tpbmc9eXQsRS5zZXREZXZ0b29sc0hvb2s9c24sRS5zZXRUcmFuc2l0aW9uSG9va3M9T3IsRS5zc3JDb250ZXh0S2V5PVVvLEUuc3NyVXRpbHM9SGwsRS50b0hhbmRsZXJzPWRlLEUudHJhbnNmb3JtVk5vZGVBcmdzPWVuLEUudXNlQXR0cnM9TnQsRS51c2VDc3NNb2R1bGU9em8sRS51c2VDc3NWYXJzPUthLEUudXNlU1NSQ29udGV4dD1OYSxFLnVzZVNsb3RzPXhlLEUudXNlVHJhbnNpdGlvblN0YXRlPUFyLEUudk1vZGVsRHluYW1pYz1PLEUudk1vZGVsVGV4dD1JLEUudlNob3c9aXQsRS52ZXJzaW9uPWRsLEUud2Fybj1GZSxFLndhdGNoPXZyLEUud2F0Y2hFZmZlY3Q9TmksRS53YXRjaFBvc3RFZmZlY3Q9SGksRS53YXRjaFN5bmNFZmZlY3Q9b2ksRS53aXRoQXN5bmNDb250ZXh0PU9pLEUud2l0aEN0eD1abyxFLndpdGhEZWZhdWx0cz1CcyxFLndpdGhEaXJlY3RpdmVzPWpyLEUud2l0aEtleXM9V2UsRS53aXRoTWVtbz1ncyxFLndpdGhNb2RpZmllcnM9RyxFLndpdGhTY29wZUlkPVVpLEUud3A9VHQsT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEV9KHt9LHAsdyxzKTtyZXR1cm4gTi5fX1RZUEVfXz0idnVlIixOfWZ1bmN0aW9uIGx2KGYscyxwKXtsZXQgdz1wLlZ1ZSxOPXAuc2V0VGltZW91dCxFPXAuY2xlYXJUaW1lb3V0LGg9cC5zZXRJbnRlcnZhbCx5PXAuY2xlYXJJbnRlcnZhbCxSPXAuX191bmlDb25maWcsRmU9cC5fX3VuaVJvdXRlcyxJdD1wLlZ1ZVNoYXJlZCxWdD1wLlVuaVNoYXJlZDt2YXIgT3Q9ZnVuY3Rpb24oeixKLGhuKXsidXNlIHN0cmljdCI7dmFyIHVuPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix5bj1mdW5jdGlvbigpe2xldCBlPW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKHZhciB0PTA7dDx1bi5sZW5ndGg7dCsrKWVbdW4uY2hhckNvZGVBdCh0KV09dDtyZXR1cm4gZX0oKTtmdW5jdGlvbiBKbihlKXt2YXIgdD1uZXcgVWludDhBcnJheShlKSxuLHI9dC5sZW5ndGgsbz0iIjtmb3Iobj0wO248cjtuKz0zKW8rPXVuW3Rbbl0+PjJdLG8rPXVuWyh0W25dJjMpPDw0fHRbbisxXT4+NF0sbys9dW5bKHRbbisxXSYxNSk8PDJ8dFtuKzJdPj42XSxvKz11blt0W24rMl0mNjNdO3JldHVybiByJTM9PT0yP289by5zdWJzdHJpbmcoMCxvLmxlbmd0aC0xKSsiPSI6ciUzPT09MSYmKG89by5zdWJzdHJpbmcoMCxvLmxlbmd0aC0yKSsiPT0iKSxvfWZ1bmN0aW9uIGdpKGUpe3ZhciB0PWUubGVuZ3RoKi43NSxuPWUubGVuZ3RoLHIsbz0wLGMsZyxiLFY7ZVtlLmxlbmd0aC0xXT09PSI9IiYmKHQtLSxlW2UubGVuZ3RoLTJdPT09Ij0iJiZ0LS0pO3ZhciBUPW5ldyBBcnJheUJ1ZmZlcih0KSxMPW5ldyBVaW50OEFycmF5KFQpO2ZvcihyPTA7cjxuO3IrPTQpYz15bltlLmNoYXJDb2RlQXQocildLGc9eW5bZS5jaGFyQ29kZUF0KHIrMSldLGI9eW5bZS5jaGFyQ29kZUF0KHIrMildLFY9eW5bZS5jaGFyQ29kZUF0KHIrMyldLExbbysrXT1jPDwyfGc+PjQsTFtvKytdPShnJjE1KTw8NHxiPj4yLExbbysrXT0oYiYzKTw8NnxWJjYzO3JldHVybiBUfWxldCBwaT1bIm9yaWdpbmFsIiwiY29tcHJlc3NlZCJdLHFyPVsiYWxidW0iLCJjYW1lcmEiXSxncj1bIkdFVCIsIk9QVElPTlMiLCJIRUFEIiwiUE9TVCIsIlBVVCIsIkRFTEVURSIsIlRSQUNFIiwiQ09OTkVDVCIsIlBBVENIIl07ZnVuY3Rpb24gU24oZSx0KXtyZXR1cm4hZXx8dC5pbmRleE9mKGUpPT09LTE/dFswXTplfWZ1bmN0aW9uIHByKGUsdCl7cmV0dXJuIXouaXNBcnJheShlKXx8ZS5sZW5ndGg9PT0wfHxlLmZpbmQobj0+dC5pbmRleE9mKG4pPT09LTEpP3Q6ZX1mdW5jdGlvbiBMcihlLHQpe2NvbnNvbGUud2FybihgJHtlfTogJHt0fWApfWZ1bmN0aW9uIEpyKGUsdCxuLHIpe3J8fChyPUxyKTtmb3IobGV0IG8gaW4gbil7bGV0IGM9UG4obyx0W29dLG5bb10sIXouaGFzT3duKHQsbykpO3ouaXNTdHJpbmcoYykmJnIoZSxjKX19ZnVuY3Rpb24gdmkoZSx0LG4scil7aWYoIW4pcmV0dXJuO2lmKCF6LmlzQXJyYXkobikpcmV0dXJuIEpyKGUsdFswXXx8T2JqZWN0LmNyZWF0ZShudWxsKSxuLHIpO2xldCBvPW4ubGVuZ3RoLGM9dC5sZW5ndGg7Zm9yKGxldCBnPTA7ZzxvO2crKyl7bGV0IGI9bltnXSxWPU9iamVjdC5jcmVhdGUobnVsbCk7Yz5nJiYoVltiLm5hbWVdPXRbZ10pLEpyKGUsVix7W2IubmFtZV06Yn0scil9fWZ1bmN0aW9uIFBuKGUsdCxuLHIpe3ouaXNQbGFpbk9iamVjdChuKXx8KG49e3R5cGU6bn0pO2xldHt0eXBlOm8scmVxdWlyZWQ6Yyx2YWxpZGF0b3I6Z309bjtpZihjJiZyKXJldHVybidNaXNzaW5nIHJlcXVpcmVkIGFyZ3M6ICInK2UrJyInO2lmKCEodD09bnVsbCYmIWMpKXtpZihvIT1udWxsKXtsZXQgYj0hMSxWPXouaXNBcnJheShvKT9vOltvXSxUPVtdO2ZvcihsZXQgTD0wO0w8Vi5sZW5ndGgmJiFiO0wrKyl7bGV0e3ZhbGlkOl9lLGV4cGVjdGVkVHlwZTp3ZX09bnQodCxWW0xdKTtULnB1c2god2V8fCIiKSxiPV9lfWlmKCFiKXJldHVybiBBdChlLHQsVCl9aWYoZylyZXR1cm4gZyh0KX19bGV0IHplPXoubWFrZU1hcCgiU3RyaW5nLE51bWJlcixCb29sZWFuLEZ1bmN0aW9uLFN5bWJvbCIpO2Z1bmN0aW9uIG50KGUsdCl7bGV0IG4scj1RdCh0KTtpZih6ZShyKSl7bGV0IG89dHlwZW9mIGU7bj1vPT09ci50b0xvd2VyQ2FzZSgpLCFuJiZvPT09Im9iamVjdCImJihuPWUgaW5zdGFuY2VvZiB0KX1lbHNlIHI9PT0iT2JqZWN0Ij9uPXouaXNPYmplY3QoZSk6cj09PSJBcnJheSI/bj16LmlzQXJyYXkoZSk6bj1lIGluc3RhbmNlb2YgdHx8ei50b1Jhd1R5cGUoZSk9PT1RdCh0KTtyZXR1cm57dmFsaWQ6bixleHBlY3RlZFR5cGU6cn19ZnVuY3Rpb24gQXQoZSx0LG4pe2xldCByPWBJbnZhbGlkIGFyZ3M6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBhcmdzICIke2V9Ii4gRXhwZWN0ZWQgJHtuLm1hcCh6LmNhcGl0YWxpemUpLmpvaW4oIiwgIil9YCxvPW5bMF0sYz16LnRvUmF3VHlwZSh0KSxnPVRuKHQsbyksYj1Ubih0LGMpO3JldHVybiBuLmxlbmd0aD09PTEmJnNuKG8pJiYhb3IobyxjKSYmKHIrPWAgd2l0aCB2YWx1ZSAke2d9YCkscis9YCwgZ290ICR7Y30gYCxzbihjKSYmKHIrPWB3aXRoIHZhbHVlICR7Yn0uYCkscn1mdW5jdGlvbiBRdChlKXtsZXQgdD1lJiZlLnRvU3RyaW5nKCkubWF0Y2goL15ccypmdW5jdGlvbiAoXHcrKS8pO3JldHVybiB0P3RbMV06IiJ9ZnVuY3Rpb24gVG4oZSx0KXtyZXR1cm4gdD09PSJTdHJpbmciP2AiJHtlfSJgOnQ9PT0iTnVtYmVyIj9gJHtOdW1iZXIoZSl9YDpgJHtlfWB9ZnVuY3Rpb24gc24oZSl7cmV0dXJuWyJzdHJpbmciLCJudW1iZXIiLCJib29sZWFuIl0uc29tZShuPT5lLnRvTG93ZXJDYXNlKCk9PT1uKX1mdW5jdGlvbiBvciguLi5lKXtyZXR1cm4gZS5zb21lKHQ9PnQudG9Mb3dlckNhc2UoKT09PSJib29sZWFuIil9ZnVuY3Rpb24gV24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBlLmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX19bGV0IEFuPTEsZ249e307ZnVuY3Rpb24gd3IoZSx0LG4scj0hMSl7cmV0dXJuIGduW2VdPXtuYW1lOnQsa2VlcEFsaXZlOnIsY2FsbGJhY2s6bn0sZX1mdW5jdGlvbiBLcihlLHQsbil7aWYodHlwZW9mIGU9PSJudW1iZXIiKXtsZXQgcj1nbltlXTtpZihyKXJldHVybiByLmtlZXBBbGl2ZXx8ZGVsZXRlIGduW2VdLHIuY2FsbGJhY2sodCxuKX1yZXR1cm4gdH1mdW5jdGlvbiB3byhlKXtmb3IobGV0IHQgaW4gZ24paWYoZ25bdF0ubmFtZT09PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZGEoZSx0KXtmb3IobGV0IG4gaW4gZ24pe2xldCByPWduW25dO3IuY2FsbGJhY2s9PT10JiZyLm5hbWU9PT1lJiZkZWxldGUgZ25bbl19fWZ1bmN0aW9uIFVpKGUpe290Lm9mZigiYXBpLiIrZSl9ZnVuY3Rpb24gWm8oZSl7b3Qub24oImFwaS4iK2UsdD0+e2ZvcihsZXQgbiBpbiBnbil7bGV0IHI9Z25bbl07ci5uYW1lPT09ZSYmci5jYWxsYmFjayh0KX19KX1mdW5jdGlvbiBYbyhlLHQpe3JldHVybiB3cihBbisrLGUsdCwhMCl9bGV0ICRpPSJzdWNjZXNzIixyaT0iZmFpbCIsQ289ImNvbXBsZXRlIjtmdW5jdGlvbiBBbyhlKXtsZXQgdD17fTtmb3IobGV0IG4gaW4gZSl7bGV0IHI9ZVtuXTt6LmlzRnVuY3Rpb24ocikmJih0W25dPVduKHIpLGRlbGV0ZSBlW25dKX1yZXR1cm4gdH1mdW5jdGlvbiBPbyhlLHQpe3JldHVybiFlfHxlLmluZGV4T2YoIjpmYWlsIik9PT0tMT90KyI6b2siOnQrZS5zdWJzdHJpbmcoZS5pbmRleE9mKCI6ZmFpbCIpKX1mdW5jdGlvbiBYaShlLHQ9e30se2JlZm9yZUFsbDpuLGJlZm9yZVN1Y2Nlc3M6cn09e30pe3ouaXNQbGFpbk9iamVjdCh0KXx8KHQ9e30pO2xldHtzdWNjZXNzOm8sZmFpbDpjLGNvbXBsZXRlOmd9PUFvKHQpLGI9ei5pc0Z1bmN0aW9uKG8pLFY9ei5pc0Z1bmN0aW9uKGMpLFQ9ei5pc0Z1bmN0aW9uKGcpLEw9QW4rKztyZXR1cm4gd3IoTCxlLF9lPT57X2U9X2V8fHt9LF9lLmVyck1zZz1PbyhfZS5lcnJNc2csZSksei5pc0Z1bmN0aW9uKG4pJiZuKF9lKSxfZS5lcnJNc2c9PT1lKyI6b2siPyh6LmlzRnVuY3Rpb24ocikmJnIoX2UsdCksYiYmbyhfZSkpOlYmJmMoX2UpLFQmJmcoX2UpfSksTH1sZXQgbWk9InN1Y2Nlc3MiLFRvPSJmYWlsIix1bz0iY29tcGxldGUiLGtuPXt9LENyPXt9O2Z1bmN0aW9uIFFpKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKG4sdCl8fG59fWZ1bmN0aW9uIEtuKGUsdCxuKXtsZXQgcj0hMTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IGM9ZVtvXTtpZihyKXI9UHJvbWlzZS5yZXNvbHZlKFFpKGMsbikpO2Vsc2V7bGV0IGc9Yyh0LG4pO2lmKHouaXNQcm9taXNlKGcpJiYocj1Qcm9taXNlLnJlc29sdmUoZykpLGc9PT0hMSlyZXR1cm57dGhlbigpe30sY2F0Y2goKXt9fX19cmV0dXJuIHJ8fHt0aGVuKG8pe3JldHVybiBvKHQpfSxjYXRjaCgpe319fWZ1bmN0aW9uIGVvKGUsdD17fSl7cmV0dXJuW21pLFRvLHVvXS5mb3JFYWNoKG49PntsZXQgcj1lW25dO2lmKCF6LmlzQXJyYXkocikpcmV0dXJuO2xldCBvPXRbbl07dFtuXT1mdW5jdGlvbihnKXtLbihyLGcsdCkudGhlbihiPT56LmlzRnVuY3Rpb24obykmJm8oYil8fGIpfX0pLHR9ZnVuY3Rpb24gUG8oZSx0KXtsZXQgbj1bXTt6LmlzQXJyYXkoa24ucmV0dXJuVmFsdWUpJiZuLnB1c2goLi4ua24ucmV0dXJuVmFsdWUpO2xldCByPUNyW2VdO3JldHVybiByJiZ6LmlzQXJyYXkoci5yZXR1cm5WYWx1ZSkmJm4ucHVzaCguLi5yLnJldHVyblZhbHVlKSxuLmZvckVhY2gobz0+e3Q9byh0KXx8dH0pLHR9ZnVuY3Rpb24gZm8oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtPYmplY3Qua2V5cyhrbikuZm9yRWFjaChyPT57ciE9PSJyZXR1cm5WYWx1ZSImJih0W3JdPWtuW3JdLnNsaWNlKCkpfSk7bGV0IG49Q3JbZV07cmV0dXJuIG4mJk9iamVjdC5rZXlzKG4pLmZvckVhY2gocj0+e3IhPT0icmV0dXJuVmFsdWUiJiYodFtyXT0odFtyXXx8W10pLmNvbmNhdChuW3JdKSl9KSx0fWZ1bmN0aW9uIGlpKGUsdCxuLHIpe2xldCBvPWZvKGUpO3JldHVybiBvJiZPYmplY3Qua2V5cyhvKS5sZW5ndGg/ei5pc0FycmF5KG8uaW52b2tlKT9LbihvLmludm9rZSxuKS50aGVuKGc9PnQoZW8oZm8oZSksZyksLi4ucikpOnQoZW8obyxuKSwuLi5yKTp0KG4sLi4ucil9ZnVuY3Rpb24gYXIoZSl7cmV0dXJuISEoei5pc1BsYWluT2JqZWN0KGUpJiZbJGkscmksQ29dLmZpbmQodD0+ei5pc0Z1bmN0aW9uKGVbdF0pKSl9ZnVuY3Rpb24ga3IoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gTm4oZSx0KXtyZXR1cm4obj17fSwuLi5yKT0+YXIobik/UG8oZSxpaShlLHQsbixyKSk6UG8oZSxuZXcgUHJvbWlzZSgobyxjKT0+e2lpKGUsdCx6LmV4dGVuZChuLHtzdWNjZXNzOm8sZmFpbDpjfSkscil9KSl9ZnVuY3Rpb24gWm4oZSx0KXtsZXQgbj1lWzBdO2lmKCF0fHwhei5pc1BsYWluT2JqZWN0KHQuZm9ybWF0QXJncykmJnouaXNQbGFpbk9iamVjdChuKSlyZXR1cm47bGV0IHI9dC5mb3JtYXRBcmdzLG89T2JqZWN0LmtleXMocik7Zm9yKGxldCBjPTA7YzxvLmxlbmd0aDtjKyspe2xldCBnPW9bY10sYj1yW2ddO2lmKHouaXNGdW5jdGlvbihiKSl7bGV0IFY9YihlWzBdW2ddLG4pO2lmKHouaXNTdHJpbmcoVikpcmV0dXJuIFZ9ZWxzZSB6Lmhhc093bihuLGcpfHwobltnXT1iKX19ZnVuY3Rpb24gTmkoZSx0LG4pe3JldHVybiBLcihlLHouZXh0ZW5kKG58fHt9LHtlcnJNc2c6dCsiOm9rIn0pKX1mdW5jdGlvbiBIaShlLHQsbixyKXtyZXR1cm4gS3IoZSx6LmV4dGVuZCh7ZXJyTXNnOnQrIjpmYWlsIisobj8iICIrbjoiIil9LHIpKX1mdW5jdGlvbiBvaShlLHQsbixyKXtpZihyJiZyLmJlZm9yZUludm9rZSl7bGV0IGM9ci5iZWZvcmVJbnZva2UodCk7aWYoei5pc1N0cmluZyhjKSlyZXR1cm4gY31sZXQgbz1abih0LHIpO2lmKG8pcmV0dXJuIG99ZnVuY3Rpb24gRnIoZSl7aWYoIXouaXNGdW5jdGlvbihlKSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJnczogdHlwZSBjaGVjayBmYWlsZWQgZm9yIGFyZ3MgImNhbGxiYWNrIi4gRXhwZWN0ZWQgRnVuY3Rpb24nKX1mdW5jdGlvbiB2cihlLHQsbil7cmV0dXJuIHI9PntGcihyKTtsZXQgbz1vaShlLFtyXSx2b2lkIDAsbik7aWYobyl0aHJvdyBuZXcgRXJyb3Iobyk7bGV0IGM9IXdvKGUpO1hvKGUsciksYyYmKFpvKGUpLHQoKSl9fWZ1bmN0aW9uIGtpKGUsdCxuKXtyZXR1cm4gcj0+e0ZyKHIpO2xldCBvPW9pKGUsW3JdLHZvaWQgMCxuKTtpZihvKXRocm93IG5ldyBFcnJvcihvKTtlPWUucmVwbGFjZSgib2ZmIiwib24iKSxkYShlLHIpLHdvKGUpfHwoVWkoZSksdCgpKX19ZnVuY3Rpb24gSW8oZSl7cmV0dXJuIWV8fHouaXNTdHJpbmcoZSk/ZTplLnN0YWNrPyhjb25zb2xlLmVycm9yKGUubWVzc2FnZStKLkxJTkVGRUVEK2Uuc3RhY2spLGUubWVzc2FnZSk6ZX1mdW5jdGlvbiBWcihlLHQsbixyKXtyZXR1cm4gbz0+e2xldCBjPVhpKGUsbyxyKSxnPW9pKGUsW29dLG4scik7cmV0dXJuIGc/SGkoYyxlLGcpOnQobyx7cmVzb2x2ZTpiPT5OaShjLGUsYikscmVqZWN0OihiLFYpPT5IaShjLGUsSW8oYiksVil9KX19ZnVuY3Rpb24gWnIoZSx0LG4scil7cmV0dXJuKC4uLm8pPT57bGV0IGM9b2koZSxvLG4scik7aWYoYyl0aHJvdyBuZXcgRXJyb3IoYyk7cmV0dXJuIHQuYXBwbHkobnVsbCxvKX19ZnVuY3Rpb24gQXIoZSx0LG4scil7cmV0dXJuIFZyKGUsdCxuLHIpfWZ1bmN0aW9uIHBuKGUsdCxuKXtyZXR1cm4gdnIoZSx0LG4pfWZ1bmN0aW9uIFhyKGUsdCxuKXtyZXR1cm4ga2koZSx0LG4pfWZ1bmN0aW9uIFVyKGUsdCxuLHIpe3JldHVybiBObihlLFZyKGUsdCx2b2lkIDAscikpfWZ1bmN0aW9uIER0KGUsdCxuLHIpe3JldHVybiBacihlLHQsdm9pZCAwLHIpfWZ1bmN0aW9uIFRlKGUsdCxuLHIpe3JldHVybiBObihlLEFyKGUsdCx2b2lkIDAscikpfWxldCBfaT0iYmFzZTY0VG9BcnJheUJ1ZmZlciIsYmk9W3tuYW1lOiJiYXNlNjQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV0seWk9ImFycmF5QnVmZmVyVG9CYXNlNjQiLE9yPVt7bmFtZToiYXJyYXlCdWZmZXIiLHR5cGU6W0FycmF5QnVmZmVyLFVpbnQ4QXJyYXldLHJlcXVpcmVkOiEwfV0sUmk9RHQoX2ksZT0+Z2koZSksYmkpLFRyPUR0KHlpLGU9PkpuKGUpLE9yKTtmdW5jdGlvbiBScigpe2lmKHR5cGVvZiBfX1NZU1RFTV9JTkZPX18hPSJ1bmRlZmluZWQiKXJldHVybiB3aW5kb3cuX19TWVNURU1fSU5GT19fO2xldHtyZXNvbHV0aW9uV2lkdGg6ZX09cy5zY3JlZW4uZ2V0Q3VycmVudFNpemUoKXx8e3Jlc29sdXRpb25XaWR0aDowfTtyZXR1cm57cGxhdGZvcm06KHMub3MubmFtZXx8IiIpLnRvTG93ZXJDYXNlKCkscGl4ZWxSYXRpbzpzLnNjcmVlbi5zY2FsZSx3aW5kb3dXaWR0aDpNYXRoLnJvdW5kKGUpfX1mdW5jdGlvbiBhaShlLHQsbil7ZS4kcGFnZS5tZXRhLmlzTlZ1ZT9FaShlLHQsbik6UHIoZSx0LG4pfWZ1bmN0aW9uIFByKGUsdCxuKXtvdC5pbnZva2VWaWV3TWV0aG9kKCJyZXF1ZXN0Q29tcG9uZW50SW5mbyIse3JlcXM6dC5tYXAocj0+KHIuY29tcG9uZW50JiYoci5jb21wb25lbnQ9ci5jb21wb25lbnQuJGVsLm5vZGVJZCkscikpfSxlLiRwYWdlLmlkLG4pfWZ1bmN0aW9uIEVpKGUsdCxuKXtsZXQgcj1mbih0KSxvPW5ldyBBcnJheShyLmxlbmd0aCk7amkocixlLiRlbCxvKSwkcihlLiRyZXF1aXJlTmF0aXZlUGx1Z2luKCJkb20iKSxvLDAsW10sYz0+e24oYyl9KX1mdW5jdGlvbiBmbihlKXtsZXQgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXS5zZWxlY3RvcjtyLmluZGV4T2YoIiMiKT09PTAmJnQucHVzaChyLnN1YnN0cmluZygxKSl9cmV0dXJuIHR9ZnVuY3Rpb24gamkoZSx0LG4pe2xldCByPXQuY2hpbGRyZW47aWYoIXouaXNBcnJheShyKSlyZXR1cm4hMTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGM9cltvXTtpZihjLmF0dHIpe2xldCBnPWUuaW5kZXhPZihjLmF0dHIuaWQpO2lmKGc+PTAmJihuW2ddPXtpZDplW2ddLHJlZjpjLnJlZixkYXRhc2V0OkoucGFyc2VOVnVlRGF0YXNldChjLmF0dHIpfSxlLmxlbmd0aD09PTEpKWJyZWFrfWMuY2hpbGRyZW4mJmppKGUsYyxuKX19ZnVuY3Rpb24gJHIoZSx0LG4scixvKXtsZXQgYz10W25dO2UuZ2V0Q29tcG9uZW50UmVjdChjLnJlZixnPT57Zy5zaXplLmlkPWMuaWQsZy5zaXplLmRhdGFzZXQ9Yy5kYXRhc2V0LHIucHVzaChnLnNpemUpLG4rPTEsbjx0Lmxlbmd0aD8kcihlLHQsbixyLG8pOm8ocil9KX1mdW5jdGlvbiB0byhlLHQpe290Lmludm9rZVZpZXdNZXRob2QoInNldFBhZ2VNZXRhIix0LGUuJHBhZ2UuaWQpfWxldCBFbj1lPT5lIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiLEhyPVsieyIsIn0iXTtjbGFzcyBzcntjb25zdHJ1Y3Rvcigpe3RoaXMuX2NhY2hlcz1PYmplY3QuY3JlYXRlKG51bGwpfWludGVycG9sYXRlKHQsbixyPUhyKXtpZighbilyZXR1cm5bdF07bGV0IG89dGhpcy5fY2FjaGVzW3RdO3JldHVybiBvfHwobz1tcih0LHIpLHRoaXMuX2NhY2hlc1t0XT1vKSxRcihvLG4pfX1sZXQgU2k9L14oPzpcZCkrLyx4aT0vXig/Olx3KSsvO2Z1bmN0aW9uIG1yKGUsW3Qsbl0pe2xldCByPVtdLG89MCxjPSIiO2Zvcig7bzxlLmxlbmd0aDspe2xldCBnPWVbbysrXTtpZihnPT09dCl7YyYmci5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpjfSksYz0iIjtsZXQgYj0iIjtmb3IoZz1lW28rK107ZyE9PXZvaWQgMCYmZyE9PW47KWIrPWcsZz1lW28rK107bGV0IFY9Zz09PW4sVD1TaS50ZXN0KGIpPyJsaXN0IjpWJiZ4aS50ZXN0KGIpPyJuYW1lZCI6InVua25vd24iO3IucHVzaCh7dmFsdWU6Yix0eXBlOlR9KX1lbHNlIGMrPWd9cmV0dXJuIGMmJnIucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6Y30pLHJ9ZnVuY3Rpb24gUXIoZSx0KXtsZXQgbj1bXSxyPTAsbz1BcnJheS5pc0FycmF5KHQpPyJsaXN0IjpFbih0KT8ibmFtZWQiOiJ1bmtub3duIjtpZihvPT09InVua25vd24iKXJldHVybiBuO2Zvcig7cjxlLmxlbmd0aDspe2xldCBjPWVbcl07c3dpdGNoKGMudHlwZSl7Y2FzZSJ0ZXh0IjpuLnB1c2goYy52YWx1ZSk7YnJlYWs7Y2FzZSJsaXN0IjpuLnB1c2godFtwYXJzZUludChjLnZhbHVlLDEwKV0pO2JyZWFrO2Nhc2UibmFtZWQiOm89PT0ibmFtZWQiJiZuLnB1c2godFtjLnZhbHVlXSk7YnJlYWs7Y2FzZSJ1bmtub3duIjpicmVha31yKyt9cmV0dXJuIG59bGV0IGVyPSJ6aC1IYW5zIix0cj0iemgtSGFudCIsR249ImVuIixucj0iZnIiLGNyPSJlcyIsaG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxnbz0oZSx0KT0+aG8uY2FsbChlLHQpLE5vPW5ldyBzcjtmdW5jdGlvbiBubyhlLHQpe3JldHVybiEhdC5maW5kKG49PmUuaW5kZXhPZihuKSE9PS0xKX1mdW5jdGlvbiBrbyhlLHQpe3JldHVybiB0LmZpbmQobj0+ZS5pbmRleE9mKG4pPT09MCl9ZnVuY3Rpb24ganIoZSx0KXtpZighZSlyZXR1cm47aWYoZT1lLnRyaW0oKS5yZXBsYWNlKC9fL2csIi0iKSx0JiZ0W2VdKXJldHVybiBlO2lmKGU9ZS50b0xvd2VyQ2FzZSgpLGU9PT0iY2hpbmVzZSIpcmV0dXJuIGVyO2lmKGUuaW5kZXhPZigiemgiKT09PTApcmV0dXJuIGUuaW5kZXhPZigiLWhhbnMiKT4tMT9lcjplLmluZGV4T2YoIi1oYW50Iik+LTF8fG5vKGUsWyItdHciLCItaGsiLCItbW8iLCItY2h0Il0pP3RyOmVyO2xldCBuPVtHbixucixjcl07dCYmT2JqZWN0LmtleXModCkubGVuZ3RoPjAmJihuPU9iamVjdC5rZXlzKHQpKTtsZXQgcj1rbyhlLG4pO2lmKHIpcmV0dXJuIHJ9Y2xhc3MgeHJ7Y29uc3RydWN0b3Ioe2xvY2FsZTp0LGZhbGxiYWNrTG9jYWxlOm4sbWVzc2FnZXM6cix3YXRjaGVyOm8sZm9ybWF0ZXI6Y30pe3RoaXMubG9jYWxlPUduLHRoaXMuZmFsbGJhY2tMb2NhbGU9R24sdGhpcy5tZXNzYWdlPXt9LHRoaXMubWVzc2FnZXM9e30sdGhpcy53YXRjaGVycz1bXSxuJiYodGhpcy5mYWxsYmFja0xvY2FsZT1uKSx0aGlzLmZvcm1hdGVyPWN8fE5vLHRoaXMubWVzc2FnZXM9cnx8e30sdGhpcy5zZXRMb2NhbGUodHx8R24pLG8mJnRoaXMud2F0Y2hMb2NhbGUobyl9c2V0TG9jYWxlKHQpe2xldCBuPXRoaXMubG9jYWxlO3RoaXMubG9jYWxlPWpyKHQsdGhpcy5tZXNzYWdlcyl8fHRoaXMuZmFsbGJhY2tMb2NhbGUsdGhpcy5tZXNzYWdlc1t0aGlzLmxvY2FsZV18fCh0aGlzLm1lc3NhZ2VzW3RoaXMubG9jYWxlXT17fSksdGhpcy5tZXNzYWdlPXRoaXMubWVzc2FnZXNbdGhpcy5sb2NhbGVdLG4hPT10aGlzLmxvY2FsZSYmdGhpcy53YXRjaGVycy5mb3JFYWNoKHI9PntyKHRoaXMubG9jYWxlLG4pfSl9Z2V0TG9jYWxlKCl7cmV0dXJuIHRoaXMubG9jYWxlfXdhdGNoTG9jYWxlKHQpe2xldCBuPXRoaXMud2F0Y2hlcnMucHVzaCh0KS0xO3JldHVybigpPT57dGhpcy53YXRjaGVycy5zcGxpY2UobiwxKX19YWRkKHQsbixyPSEwKXtsZXQgbz10aGlzLm1lc3NhZ2VzW3RdO28/cj9PYmplY3QuYXNzaWduKG8sbik6T2JqZWN0LmtleXMobikuZm9yRWFjaChjPT57Z28obyxjKXx8KG9bY109bltjXSl9KTp0aGlzLm1lc3NhZ2VzW3RdPW59Zih0LG4scil7cmV0dXJuIHRoaXMuZm9ybWF0ZXIuaW50ZXJwb2xhdGUodCxuLHIpLmpvaW4oIiIpfXQodCxuLHIpe2xldCBvPXRoaXMubWVzc2FnZTtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciPyhuPWpyKG4sdGhpcy5tZXNzYWdlcyksbiYmKG89dGhpcy5tZXNzYWdlc1tuXSkpOnI9bixnbyhvLHQpP3RoaXMuZm9ybWF0ZXIuaW50ZXJwb2xhdGUob1t0XSxyKS5qb2luKCIiKTooY29uc29sZS53YXJuKGBDYW5ub3QgdHJhbnNsYXRlIHRoZSB2YWx1ZSBvZiBrZXlwYXRoICR7dH0uIFVzZSB0aGUgdmFsdWUgb2Yga2V5cGF0aCBhcyBkZWZhdWx0LmApLHQpfX1mdW5jdGlvbiBwbyhlLHQpe2UuJHdhdGNoTG9jYWxlP2UuJHdhdGNoTG9jYWxlKG49Pnt0LnNldExvY2FsZShuKX0pOmUuJHdhdGNoKCgpPT5lLiRsb2NhbGUsbj0+e3Quc2V0TG9jYWxlKG4pfSl9ZnVuY3Rpb24gUm8oKXtyZXR1cm4gdHlwZW9mIFAhPSJ1bmRlZmluZWQiJiZQLmdldExvY2FsZT9QLmdldExvY2FsZSgpOnR5cGVvZiBnbG9iYWwhPSJ1bmRlZmluZWQiJiZnbG9iYWwuZ2V0TG9jYWxlP2dsb2JhbC5nZXRMb2NhbGUoKTpHbn1mdW5jdGlvbiBybyhlLHQ9e30sbixyKXt0eXBlb2YgZSE9InN0cmluZyImJihbZSx0XT1bdCxlXSksdHlwZW9mIGUhPSJzdHJpbmciJiYoZT1SbygpKSx0eXBlb2YgbiE9InN0cmluZyImJihuPXR5cGVvZiBSIT0idW5kZWZpbmVkIiYmUi5mYWxsYmFja0xvY2FsZXx8R24pO2xldCBvPW5ldyB4cih7bG9jYWxlOmUsZmFsbGJhY2tMb2NhbGU6bixtZXNzYWdlczp0LHdhdGNoZXI6cn0pLGM9KGcsYik9PntpZih0eXBlb2Ygd3QhPSJmdW5jdGlvbiIpYz1mdW5jdGlvbihWLFQpe3JldHVybiBvLnQoVixUKX07ZWxzZXtsZXQgVj0hMTtjPWZ1bmN0aW9uKFQsTCl7bGV0IF9lPXd0KCkuJHZtO3JldHVybiBfZSYmKF9lLiRsb2NhbGUsVnx8KFY9ITAscG8oX2UsbykpKSxvLnQoVCxMKX19cmV0dXJuIGMoZyxiKX07cmV0dXJue2kxOG46byxmKGcsYixWKXtyZXR1cm4gby5mKGcsYixWKX0sdChnLGIpe3JldHVybiBjKGcsYil9LGFkZChnLGIsVj0hMCl7cmV0dXJuIG8uYWRkKGcsYixWKX0sd2F0Y2goZyl7cmV0dXJuIG8ud2F0Y2hMb2NhbGUoZyl9LGdldExvY2FsZSgpe3JldHVybiBvLmdldExvY2FsZSgpfSxzZXRMb2NhbGUoZyl7cmV0dXJuIG8uc2V0TG9jYWxlKGcpfX19ZnVuY3Rpb24gQmkoZSx0KXtyZXR1cm4gZS5pbmRleE9mKHRbMF0pPi0xfWxldCB2bz1KLm9uY2UoKCk9PnR5cGVvZiBSIT0idW5kZWZpbmVkIiYmUi5sb2NhbGVzJiYhIU9iamVjdC5rZXlzKFIubG9jYWxlcykubGVuZ3RoKSxNaTtmdW5jdGlvbiB6aSgpe2xldCBlPVAuZ2V0TG9jYWxlKCksdD1SLmxvY2FsZXM7cmV0dXJuIHRbZV18fHRbUi5mYWxsYmFja0xvY2FsZV18fHQuZW58fHt9fWZ1bmN0aW9uIFFvKGUpe3JldHVybiBCaShlLEouSTE4Tl9KU09OX0RFTElNSVRFUlMpP2FlKCkuZihlLHppKCksSi5JMThOX0pTT05fREVMSU1JVEVSUyk6ZX1mdW5jdGlvbiBCKGUsdCl7aWYodC5sZW5ndGg9PT0xKXtpZihlKXtsZXQgcj1iPT56LmlzU3RyaW5nKGIpJiZCaShiLEouSTE4Tl9KU09OX0RFTElNSVRFUlMpLG89dFswXSxjPVtdO2lmKHouaXNBcnJheShlKSYmKGM9ZS5maWx0ZXIoYj0+cihiW29dKSkpLmxlbmd0aClyZXR1cm4gYztsZXQgZz1lW3RbMF1dO2lmKHIoZykpcmV0dXJuIGV9cmV0dXJufWxldCBuPXQuc2hpZnQoKTtyZXR1cm4gQihlJiZlW25dLHQpfWZ1bmN0aW9uIFEoZSx0KXtyZXR1cm4gdC5tYXAobj0+aGUoZSxuKSl9ZnVuY3Rpb24gaGUoZSx0KXtsZXQgbj1CKGUsdCk7aWYoIW4pcmV0dXJuITE7bGV0IHI9dFt0Lmxlbmd0aC0xXTtpZih6LmlzQXJyYXkobikpbi5mb3JFYWNoKG89PmhlKG8sW3JdKSk7ZWxzZXtsZXQgbz1uW3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHIse2dldCgpe3JldHVybiBRbyhvKX0sc2V0KGMpe289Y319KX1yZXR1cm4hMH1mdW5jdGlvbiBhZSgpe2lmKCFNaSl7bGV0IGU7aWYodHlwZW9mIHd0PT0iZnVuY3Rpb24iP2U9Zi5yZXF1aXJlTW9kdWxlKCJwbHVzIikuZ2V0TGFuZ3VhZ2UoKTplPXMud2Vidmlldy5jdXJyZW50V2VidmlldygpLmdldFN0eWxlKCkubG9jYWxlLE1pPXJvKGUpLHZvKCkpe2xldCB0PU9iamVjdC5rZXlzKFIubG9jYWxlc3x8e30pO3QubGVuZ3RoJiZ0LmZvckVhY2gobj0+TWkuYWRkKG4sUi5sb2NhbGVzW25dKSksTWkuc2V0TG9jYWxlKGUpfX1yZXR1cm4gTWl9ZnVuY3Rpb24gZGUoZSx0LG4pe3JldHVybiB0LnJlZHVjZSgocixvLGMpPT4ocltlK29dPW5bY10scikse30pfWxldCB2dD1KLm9uY2UoKCk9PntsZXQgZT0idW5pLmFwcC4iLHQ9WyJxdWl0Il07YWUoKS5hZGQoR24sZGUoZSx0LFsiUHJlc3MgYmFjayBidXR0b24gYWdhaW4gdG8gZXhpdCJdKSwhMSksYWUoKS5hZGQoY3IsZGUoZSx0LFsiUHVsc2Ugb3RyYSB2ZXogcGFyYSBzYWxpciJdKSwhMSksYWUoKS5hZGQobnIsZGUoZSx0LFsiQXBwdXlleiBceEUwIG5vdXZlYXUgcG91ciBxdWl0dGVyIGwnYXBwbGljYXRpb24iXSksITEpLGFlKCkuYWRkKGVyLGRlKGUsdCxbIlx1NTE4RFx1NjMwOVx1NEUwMFx1NkIyMVx1OTAwMFx1NTFGQVx1NUU5NFx1NzUyOCJdKSwhMSksYWUoKS5hZGQodHIsZGUoZSx0LFsiXHU1MThEXHU2MzA5XHU0RTAwXHU2QjIxXHU5MDAwXHU1MUZBXHU2MUM5XHU3NTI4Il0pLCExKX0pLGt0PUoub25jZSgoKT0+e2xldCBlPSJ1bmkuc2hvd0FjdGlvblNoZWV0LiIsdD1bImNhbmNlbCJdO2FlKCkuYWRkKEduLGRlKGUsdCxbIkNhbmNlbCJdKSwhMSksYWUoKS5hZGQoY3IsZGUoZSx0LFsiQ2FuY2VsYXIiXSksITEpLGFlKCkuYWRkKG5yLGRlKGUsdCxbIkFubnVsZXIiXSksITEpLGFlKCkuYWRkKGVyLGRlKGUsdCxbIlx1NTNENlx1NkQ4OCJdKSwhMSksYWUoKS5hZGQodHIsZGUoZSx0LFsiXHU1M0Q2XHU2RDg4Il0pLCExKX0pLFg9Si5vbmNlKCgpPT57bGV0IGU9InVuaS5zaG93TW9kYWwuIix0PVsiY2FuY2VsIiwiY29uZmlybSJdO2FlKCkuYWRkKEduLGRlKGUsdCxbIkNhbmNlbCIsIk9LIl0pLCExKSxhZSgpLmFkZChjcixkZShlLHQsWyJDYW5jZWxhciIsIk9LIl0pLCExKSxhZSgpLmFkZChucixkZShlLHQsWyJBbm51bGVyIiwiT0siXSksITEpLGFlKCkuYWRkKGVyLGRlKGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1Nzg2RVx1NUI5QSJdKSwhMSksYWUoKS5hZGQodHIsZGUoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU3OEJBXHU1QjlBIl0pLCExKX0pLEs9Si5vbmNlKCgpPT57bGV0IGU9InVuaS5jaG9vc2VJbWFnZS4iLHQ9WyJjYW5jZWwiLCJzb3VyY2VUeXBlLmFsYnVtIiwic291cmNlVHlwZS5jYW1lcmEiXTthZSgpLmFkZChHbixkZShlLHQsWyJDYW5jZWwiLCJBbGJ1bSIsIkNhbWVyYSJdKSwhMSksYWUoKS5hZGQoY3IsZGUoZSx0LFsiQ2FuY2VsYXIiLCJceEMxbGJ1bSIsIkNceEUxbWFyYSJdKSwhMSksYWUoKS5hZGQobnIsZGUoZSx0LFsiQW5udWxlciIsIkFsYnVtIiwiQ2FtXHhFOXJhIl0pLCExKSxhZSgpLmFkZChlcixkZShlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTRFQ0VcdTc2RjhcdTUxOENcdTkwMDlcdTYyRTkiLCJcdTYyQ0RcdTY0NDQiXSksITEpLGFlKCkuYWRkKHRyLGRlKGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NUY5RVx1NzZGOFx1NTE4QVx1OTA3OFx1NjRDNyIsIlx1NjJDRFx1NjUxRCJdKSwhMSl9KSxpZT1KLm9uY2UoKCk9PntsZXQgZT0idW5pLmNob29zZVZpZGVvLiIsdD1bImNhbmNlbCIsInNvdXJjZVR5cGUuYWxidW0iLCJzb3VyY2VUeXBlLmNhbWVyYSJdO2FlKCkuYWRkKEduLGRlKGUsdCxbIkNhbmNlbCIsIkFsYnVtIiwiQ2FtZXJhIl0pLCExKSxhZSgpLmFkZChjcixkZShlLHQsWyJDYW5jZWxhciIsIlx4QzFsYnVtIiwiQ1x4RTFtYXJhIl0pLCExKSxhZSgpLmFkZChucixkZShlLHQsWyJBbm51bGVyIiwiQWxidW0iLCJDYW1ceEU5cmEiXSksITEpLGFlKCkuYWRkKGVyLGRlKGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NEVDRVx1NzZGOFx1NTE4Q1x1OTAwOVx1NjJFOSIsIlx1NjJDRFx1NjQ0NCJdKSwhMSksYWUoKS5hZGQodHIsZGUoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU1RjlFXHU3NkY4XHU1MThBXHU5MDc4XHU2NEM3IiwiXHU2MkNEXHU2NTFEIl0pLCExKX0pLE5lPUoub25jZSgoKT0+e2xldCBlPSJ1bmkucHJldmlld0ltYWdlLiIsdD1bImNhbmNlbCIsImJ1dHRvbi5zYXZlIiwic2F2ZS5zdWNjZXNzIiwic2F2ZS5mYWlsIl07YWUoKS5hZGQoR24sZGUoZSx0LFsiQ2FuY2VsIiwiU2F2ZSBJbWFnZSIsIlNhdmVkIHN1Y2Nlc3NmdWxseSIsIlNhdmUgZmFpbGVkIl0pLCExKSxhZSgpLmFkZChjcixkZShlLHQsWyJDYW5jZWxhciIsIkd1YXJkYXIgaW1hZ2VuIiwiR3VhcmRhZG8gZXhpdG9zYW1lbnRlIiwiRXJyb3IgYWwgZ3VhcmRhciJdKSwhMSksYWUoKS5hZGQobnIsZGUoZSx0LFsiQW5udWxlciIsIkd1YXJkYXIgaW1hZ2VuIiwiRW5yZWdpc3RyXHhFOSBhdmVjIHN1Y2NceEU4cyIsIlx4QzljaGVjIGRlIGxhIHNhdXZlZ2FyZGUiXSksITEpLGFlKCkuYWRkKGVyLGRlKGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NEZERFx1NUI1OFx1NTZGRVx1NTBDRiIsIlx1NEZERFx1NUI1OFx1NTZGRVx1NTBDRlx1NTIzMFx1NzZGOFx1NTE4Q1x1NjIxMFx1NTI5RiIsIlx1NEZERFx1NUI1OFx1NTZGRVx1NTBDRlx1NTIzMFx1NzZGOFx1NTE4Q1x1NTkzMVx1OEQyNSJdKSwhMSksYWUoKS5hZGQodHIsZGUoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU0RkREXHU1QjU4XHU1NzE2XHU1MENGIiwiXHU0RkREXHU1QjU4XHU1NzE2XHU1MENGXHU1MjMwXHU3NkY4XHU1MThBXHU2MjEwXHU1MjlGIiwiXHU0RkREXHU1QjU4XHU1NzE2XHU1MENGXHU1MjMwXHU3NkY4XHU1MThBXHU1OTMxXHU2NTU3Il0pLCExKX0pLHN0PUoub25jZSgoKT0+e2xldCBlPSJ1bmkuc2V0Q2xpcGJvYXJkRGF0YS4iLHQ9WyJzdWNjZXNzIiwiZmFpbCJdO2FlKCkuYWRkKEduLGRlKGUsdCxbIkNvbnRlbnQgY29waWVkIiwiQ29weSBmYWlsZWQsIHBsZWFzZSBjb3B5IG1hbnVhbGx5Il0pLCExKSxhZSgpLmFkZChjcixkZShlLHQsWyJDb250ZW5pZG8gY29waWFkbyIsIkVycm9yIGFsIGNvcGlhciwgY29waWUgbWFudWFsbWVudGUiXSksITEpLGFlKCkuYWRkKG5yLGRlKGUsdCxbIkNvbnRlbnUgY29waVx4RTkiLCJceEM5Y2hlYyBkZSBsYSBjb3BpZSwgY29waWV6IG1hbnVlbGxlbWVudCJdKSwhMSksYWUoKS5hZGQoZXIsZGUoZSx0LFsiXHU1MTg1XHU1QkI5XHU1REYyXHU1OTBEXHU1MjM2IiwiXHU1OTBEXHU1MjM2XHU1OTMxXHU4RDI1XHVGRjBDXHU4QkY3XHU2MjRCXHU1MkE4XHU1OTBEXHU1MjM2Il0pLCExKSxhZSgpLmFkZCh0cixkZShlLHQsWyJcdTUxNjdcdTVCQjlcdTVERjJcdTVGQTlcdTUyMzYiLCJcdTVGQTlcdTUyMzZcdTU5MzFcdTY1NTdcdUZGMENcdThBQ0JcdTYyNEJcdTUyRDVcdTVGQTlcdTg4RkQiXSksITEpfSksWHQ9Si5vbmNlKCgpPT57bGV0IGU9InVuaS5zY2FuQ29kZS4iLHQ9WyJ0aXRsZSIsImFsYnVtIiwiZmFpbCIsImZsYXNoLm9uIiwiZmxhc2gub2ZmIl07YWUoKS5hZGQoR24sZGUoZSx0LFsiU2NhbiBjb2RlIiwiQWxidW0iLCJSZWNvZ25pdGlvbiBmYWlsdXJlIiwiVGFwIHRvIHR1cm4gbGlnaHQgb24iLCJUYXAgdG8gdHVybiBsaWdodCBvZmYiXSksITEpLGFlKCkuYWRkKGNyLGRlKGUsdCxbIkNceEYzZGlnbyBkZSBlc2NhbmVvIiwiXHhDMWxidW0iLCJceEM5Y2hlYyBkZSBsYSByZWNvbm5haXNzYW5jZSIsIlRvcXVlIHBhcmEgZW5jZW5kZXIgbGEgbHV6IiwiVG9xdWUgcGFyYSBhcGFnYXIgbGEgbHV6Il0pLCExKSxhZSgpLmFkZChucixkZShlLHQsWyJDb2RlIGRcdTIwMTlhbmFseXNlIiwiQWxidW0iLCJGYWxsbyBkZSByZWNvbm9jaW1pZW50byIsIkFwcHV5ZXogcG91ciBhY3RpdmVyIGwnXHhFOWNsYWlyYWdlIiwiQXBwdXlleiBwb3VyIGRceEU5c2FjdGl2ZXIgbCdceEU5Y2xhaXJhZ2UiXSksITEpLGFlKCkuYWRkKGVyLGRlKGUsdCxbIlx1NjI2Qlx1NzgwMSIsIlx1NzZGOFx1NTE4QyIsIlx1OEJDNlx1NTIyQlx1NTkzMVx1OEQyNSIsIlx1OEY3Qlx1ODlFNlx1NzE2N1x1NEVBRSIsIlx1OEY3Qlx1ODlFNlx1NTE3M1x1OTVFRCJdKSwhMSksYWUoKS5hZGQodHIsZGUoZSx0LFsiXHU2MzgzXHU3OEJDIiwiXHU3NkY4XHU1MThBIiwiXHU4QjU4XHU1MjI1XHU1OTMxXHU2NTU3IiwiXHU4RjE1XHU4OUY4XHU3MTY3XHU0RUFFIiwiXHU4RjE1XHU4OUY4XHU5NURDXHU5NTg5Il0pLCExKX0pLHhuPUoub25jZSgoKT0+e2xldCBlPSJ1bmkuc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uLiIsdD1bImF1dGhDb250ZW50Iiwid2FpdGluZ0NvbnRlbnQiXTthZSgpLmFkZChHbixkZShlLHQsWyJGaW5nZXJwcmludCByZWNvZ25pdGlvbiIsIlVucmVjb2duaXphYmxlIl0pLCExKSxhZSgpLmFkZChjcixkZShlLHQsWyJSZWNvbm9jaW1pZW50byBkZSBodWVsbGFzIGRhY3RpbGFyZXMiLCJJcnJlY29ub2NpYmxlIl0pLCExKSxhZSgpLmFkZChucixkZShlLHQsWyJSZWNvbm5haXNzYW5jZSBkZSBsJ2VtcHJlaW50ZSBkaWdpdGFsZSIsIk1ceEU5Y29ubmFpc3NhYmxlIl0pLCExKSxhZSgpLmFkZChlcixkZShlLHQsWyJcdTYzMDdcdTdFQjlcdThCQzZcdTUyMkJcdTRFMkQuLi4iLCJcdTY1RTBcdTZDRDVcdThCQzZcdTUyMkIiXSksITEpLGFlKCkuYWRkKHRyLGRlKGUsdCxbIlx1NjMwN1x1N0QwQlx1OEI1OFx1NTIyNVx1NEUyRC4uLiIsIlx1NzEyMVx1NkNENVx1OEI1OFx1NTIyNSJdKSwhMSl9KTtmdW5jdGlvbiBEbihlKXtpZih2bygpKXJldHVybiBRKGUsW1sidGl0bGVUZXh0Il0sWyJzZWFyY2hJbnB1dCIsInBsYWNlaG9sZGVyIl0sWyJidXR0b25zIiwidGV4dCJdXSl9ZnVuY3Rpb24gX3IoZSl7aWYodm8oKSl7bGV0IHQ9ImNhcHRpb24iO3JldHVybiBRKGUsW1siY29udGVudGRvd24iLHRdLFsiY29udGVudG92ZXIiLHRdLFsiY29udGVudHJlZnJlc2giLHRdXSl9fWZ1bmN0aW9uIEJyKGUpe2xldCB0PW5ldyBKLkVtaXR0ZXI7cmV0dXJue29uKG4scil7cmV0dXJuIHQub24obixyKX0sb25jZShuLHIpe3JldHVybiB0Lm9uY2UobixyKX0sb2ZmKG4scil7cmV0dXJuIHQub2ZmKG4scil9LGVtaXQobiwuLi5yKXtyZXR1cm4gdC5lbWl0KG4sLi4ucil9LHN1YnNjcmliZShuLHIsbz0hMSl7dFtvPyJvbmNlIjoib24iXShgJHtlfS4ke259YCxyKX0sdW5zdWJzY3JpYmUobixyKXt0Lm9mZihgJHtlfS4ke259YCxyKX0sc3Vic2NyaWJlSGFuZGxlcihuLHIsbyl7dC5lbWl0KGAke2V9LiR7bn1gLHIsbyl9fX1sZXQgbW89Imludm9rZVZpZXdBcGkiLHhvPSJpbnZva2VTZXJ2aWNlQXBpIjtmdW5jdGlvbiBCbyhlKXtyZXR1cm4gZT1lKyIiLGUuaW5kZXhPZigicnB4IikhPT0tMXx8ZS5pbmRleE9mKCJ1cHgiKSE9PS0xfWZ1bmN0aW9uIExuKGUsdD0hMSl7aWYodClyZXR1cm4gWW4oZSk7aWYoei5pc1N0cmluZyhlKSl7bGV0IG49cGFyc2VJbnQoZSl8fDA7cmV0dXJuIEJvKGUpP1AudXB4MnB4KG4pOm59cmV0dXJuIGV9ZnVuY3Rpb24gWW4oZSl7cmV0dXJuIEJvKGUpP2UucmVwbGFjZSgvKFxkKyhcLlxkKyk/KVtydV1weC9nLCh0LG4pPT5QLnVweDJweChwYXJzZUZsb2F0KG4pKSsicHgiKTplfWZ1bmN0aW9uIEZuKGUpe2xldCB0PUoucmVzb2x2ZUNvbXBvbmVudEluc3RhbmNlKGUpO2lmKHQuJHBhZ2UpcmV0dXJuIHQuJHBhZ2UuaWQ7aWYoIXQuJClyZXR1cm47bGV0IG49dC4kLnJvb3QucHJveHk7aWYobiYmbi4kcGFnZSlyZXR1cm4gbi4kcGFnZS5pZH1mdW5jdGlvbiB3aSgpe2xldCBlPUluKCksdD1lLmxlbmd0aDtpZih0KXJldHVybiBlW3QtMV19ZnVuY3Rpb24gaXMoKXtsZXQgZT13aSgpO2lmKGUpcmV0dXJuIGUuJHBhZ2UubWV0YX1mdW5jdGlvbiBoYSgpe2xldCBlPWlzKCk7cmV0dXJuIGU/ZS5pZDotMX1mdW5jdGlvbiBicigpe2xldCBlPXdpKCk7aWYoZSlyZXR1cm4gZS4kdm19bGV0IFRhPVsibmF2aWdhdGlvbkJhciIsInB1bGxUb1JlZnJlc2giXTtmdW5jdGlvbiBMYSgpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFIuZ2xvYmFsU3R5bGV8fHt9KSl9ZnVuY3Rpb24gRmEoZSx0KXtsZXQgbj1MYSgpLHI9ei5leHRlbmQoe2lkOnR9LG4sZSk7VGEuZm9yRWFjaChjPT57cltjXT16LmV4dGVuZCh7fSxuW2NdLGVbY10pfSk7bGV0e25hdmlnYXRpb25CYXI6b309cjtyZXR1cm4gby50aXRsZVRleHQmJm8udGl0bGVJbWFnZSYmKG8udGl0bGVUZXh0PSIiKSxyfWZ1bmN0aW9uIFZhKGUpe3JldHVybiBKU09OLnBhcnNlKExuKEpTT04uc3RyaW5naWZ5KGUpLCEwKSl9ZnVuY3Rpb24gVWEoZSl7cmV0dXJuIGUub2Zmc2V0JiYoZS5vZmZzZXQ9TG4oZS5vZmZzZXQpKSxlLmhlaWdodCYmKGUuaGVpZ2h0PUxuKGUuaGVpZ2h0KSksZS5yYW5nZSYmKGUucmFuZ2U9TG4oZS5yYW5nZSkpLGV9ZnVuY3Rpb24gZ2EoZSx0LG4scixvLGMpe2xldHtpZDpnLHJvdXRlOmJ9PXIsVj1KLm5vcm1hbGl6ZVN0eWxlcyhyLm5hdmlnYXRpb25CYXIsUi50aGVtZUNvbmZpZyxjKS50aXRsZUNvbG9yO3JldHVybntpZDpnLHBhdGg6Si5hZGRMZWFkaW5nU2xhc2goYikscm91dGU6YixmdWxsUGF0aDp0LG9wdGlvbnM6bixtZXRhOnIsb3BlblR5cGU6ZSxldmVudENoYW5uZWw6byxzdGF0dXNCYXJTdHlsZTpWPT09IiNmZmZmZmYiPyJsaWdodCI6ImRhcmsifX1mdW5jdGlvbiBQYShlLHQsbil7bGV0IHI9ZS4kW3RdOyF6LmlzQXJyYXkocil8fG4uX193ZWgmJnoucmVtb3ZlKHIsbi5fX3dlaCl9ZnVuY3Rpb24gVm4oZSx0LG4pe2lmKHouaXNTdHJpbmcoZSkpbj10LHQ9ZSxlPWJyKCk7ZWxzZSBpZih0eXBlb2YgZT09Im51bWJlciIpe2xldCBvPUluKCkuZmluZChjPT5jLiRwYWdlLmlkPT09ZSk7bz9lPW8uJHZtOmU9YnIoKX1pZighZSlyZXR1cm47aWYoZS5fX2NhbGxfaG9vaylyZXR1cm4gZS5fX2NhbGxfaG9vayh0LG4pO2xldCByPWUuJFt0XTtyZXR1cm4gciYmSi5pbnZva2VBcnJheUZucyhyLG4pfWZ1bmN0aW9uIE1vKGUpe2lmKGUuaW5kZXhPZigiLyIpPT09MClyZXR1cm4gZTtsZXQgdD0iIixuPUluKCk7cmV0dXJuIG4ubGVuZ3RoJiYodD1uW24ubGVuZ3RoLTFdLiRwYWdlLnJvdXRlKSxlYSh0LGUpfWZ1bmN0aW9uIGVhKGUsdCl7aWYodC5pbmRleE9mKCIvIik9PT0wKXJldHVybiB0O2lmKHQuaW5kZXhPZigiLi8iKT09PTApcmV0dXJuIGVhKGUsdC5zbGljZSgyKSk7bGV0IG49dC5zcGxpdCgiLyIpLHI9bi5sZW5ndGgsbz0wO2Zvcig7bzxyJiZuW29dPT09Ii4uIjtvKyspO24uc3BsaWNlKDAsbyksdD1uLmpvaW4oIi8iKTtsZXQgYz1lLmxlbmd0aD4wP2Uuc3BsaXQoIi8iKTpbXTtyZXR1cm4gYy5zcGxpY2UoYy5sZW5ndGgtby0xLG8rMSksSi5hZGRMZWFkaW5nU2xhc2goYy5jb25jYXQobikuam9pbigiLyIpKX1mdW5jdGlvbiBXaShlLHQ9ITEpe3JldHVybiB0P0ZlLmZpbmQobj0+bi5wYXRoPT09ZXx8bi5hbGlhcz09PWUpOkZlLmZpbmQobj0+bi5wYXRoPT09ZSl9ZnVuY3Rpb24gb3MoZSl7bGV0IHQ9V2koZSk7aWYodClyZXR1cm4gdC5tZXRhfWZ1bmN0aW9uIGFzKGUsdCxuKXtsZXQgcj1XaShKLmFkZExlYWRpbmdTbGFzaCh0KSk7aWYocil7bGV0e21ldGE6Y309cjtkZWxldGUgYy50YWJCYXJJbmRleCxjLmlzUXVpdD1jLmlzVGFiQmFyPSExfWxldCBvPVdpKEouYWRkTGVhZGluZ1NsYXNoKG4pKTtpZihvKXtsZXR7bWV0YTpjfT1vO2MudGFiQmFySW5kZXg9ZSxjLmlzUXVpdD1jLmlzVGFiQmFyPSEwO2xldCBnPVIudGFiQmFyO2cmJmcubGlzdCYmZy5saXN0W2VdJiYoZy5saXN0W2VdLnBhZ2VQYXRoPUoucmVtb3ZlTGVhZGluZ1NsYXNoKG4pKX19bGV0IERvLHNzLGlvO2Z1bmN0aW9uIHNpKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmdHlwZW9mIGRvY3VtZW50PT0ib2JqZWN0Ij8id2VidmlldyI6InY4In1mdW5jdGlvbiBDaSgpe3JldHVybiBEby53ZWJ2aWV3LmN1cnJlbnRXZWJ2aWV3KCkuaWR9bGV0IEdpLGxpLHVyPXt9O2Z1bmN0aW9uIGxyKGUpe2xldCB0PWUuZGF0YSYmZS5kYXRhLl9fbWVzc2FnZTtpZighdHx8IXQuX19wYWdlKXJldHVybjtsZXQgbj10Ll9fcGFnZSxyPXVyW25dO3ImJnIodCksdC5rZWVwfHxkZWxldGUgdXJbbl19ZnVuY3Rpb24gJGEoZSx0KXtzaSgpPT09InY4Ij9pbz8oR2kmJkdpLmNsb3NlKCksR2k9bmV3IGlvKENpKCkpLEdpLm9ubWVzc2FnZT1scik6bGl8fChsaT1zcy5yZXF1aXJlTW9kdWxlKCJnbG9iYWxFdmVudCIpLGxpLmFkZEV2ZW50TGlzdGVuZXIoInBsdXNNZXNzYWdlIixscikpOndpbmRvdy5fX3BsdXNNZXNzYWdlPWxyLHVyW2VdPXR9Y2xhc3MgSGF7Y29uc3RydWN0b3IodCl7dGhpcy53ZWJ2aWV3PXR9c2VuZE1lc3NhZ2UodCl7bGV0IG49SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7X19tZXNzYWdlOntkYXRhOnR9fSkpLHI9dGhpcy53ZWJ2aWV3LmlkO2lvP25ldyBpbyhyKS5wb3N0TWVzc2FnZShuKTpEby53ZWJ2aWV3LnBvc3RNZXNzYWdlVG9VbmlOVmlldyYmRG8ud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcobixyKX1jbG9zZSgpe3RoaXMud2Vidmlldy5jbG9zZSgpfX1mdW5jdGlvbiBZaSh7Y29udGV4dDplPXt9LHVybDp0LGRhdGE6bj17fSxzdHlsZTpyPXt9LG9uTWVzc2FnZTpvLG9uQ2xvc2U6Y30pe2xldCBnPVIuZGFya21vZGU7RG89ZS5wbHVzfHxzLHNzPWUud2VleHx8KHR5cGVvZiBmPT0ib2JqZWN0Ij9mOm51bGwpLGlvPWUuQnJvYWRjYXN0Q2hhbm5lbHx8KHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsPT0ib2JqZWN0Ij9Ccm9hZGNhc3RDaGFubmVsOm51bGwpO2xldCBiPXthdXRvQmFja0J1dHRvbjohMCx0aXRsZVNpemU6IjE3cHgifSxWPWBwYWdlJHtEYXRlLm5vdygpfWA7cj16LmV4dGVuZCh7fSxyKSxyLnRpdGxlTlZpZXchPT0hMSYmci50aXRsZU5WaWV3IT09Im5vbmUiJiYoci50aXRsZU5WaWV3PXouZXh0ZW5kKGIsci50aXRsZU5WaWV3KSk7bGV0IFQ9e3RvcDowLGJvdHRvbTowLHVzaW5nQ29tcG9uZW50czp7fSxwb3BHZXN0dXJlOiJjbG9zZSIsc2Nyb2xsSW5kaWNhdG9yOiJub25lIixhbmltYXRpb25UeXBlOiJwb3AtaW4iLGFuaW1hdGlvbkR1cmF0aW9uOjIwMCx1bmlOVmlldzp7cGF0aDpgLyR7dH0uanNgLGRlZmF1bHRGb250U2l6ZToxNix2aWV3cG9ydDpEby5zY3JlZW4ucmVzb2x1dGlvbldpZHRofX07cj16LmV4dGVuZChULHIpO2xldCBMPURvLndlYnZpZXcuY3JlYXRlKCIiLFYscix7ZXh0cmFzOntmcm9tOkNpKCkscnVudGltZTpzaSgpLGRhdGE6ei5leHRlbmQoe30sbix7ZGFya21vZGU6Z30pLHVzZUdsb2JhbEV2ZW50OiFpb319KTtyZXR1cm4gTC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsYyksJGEoVixfZT0+e3ouaXNGdW5jdGlvbihvKSYmbyhfZS5kYXRhKSxfZS5rZWVwfHxMLmNsb3NlKCJhdXRvIil9KSxMLnNob3coci5hbmltYXRpb25UeXBlLHIuYW5pbWF0aW9uRHVyYXRpb24pLG5ldyBIYShMKX1sZXQgb289KGUsdCk9Pm90LmVtaXQoImFwaS4iK2UsdCksYW89MTtmdW5jdGlvbiBscyhlKXtyZXR1cm4oZXx8aGEoKSkrIi4iK21vfWxldCBwYT0oZSx0LG4scik9PntsZXR7c3Vic2NyaWJlOm8scHVibGlzaEhhbmRsZXI6Y309b3QsZz1yP2FvKys6MDtyJiZvKG1vKyIuIitnLHIsITApLGMobHMobikse2lkOmcsbmFtZTplLGFyZ3M6dH0sbil9LExvPShlLHQsbixyKT0+e2xldHtzdWJzY3JpYmU6byx1bnN1YnNjcmliZTpjLHB1Ymxpc2hIYW5kbGVyOmd9PW90LGI9YW8rKyxWPW1vKyIuIitiO3JldHVybiBvKFYsbiksZyhscyhyKSx7aWQ6YixuYW1lOmUsYXJnczp0fSxyKSwoKT0+e2MoVil9fSx2YT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIHYoKXtvdC5zdWJzY3JpYmUoeG8sJCl9ZnVuY3Rpb24geChlLHQpe3ZhW2VdfHwodmFbZV09dCl9ZnVuY3Rpb24gJCh7aWQ6ZSxuYW1lOnQsYXJnczpufSxyKXtsZXQgbz1nPT57ZSYmb3QucHVibGlzaEhhbmRsZXIoeG8rIi4iK2UsZyxyKX0sYz12YVt0XTtjP2MobixvKTpvKHt9KX1sZXQgVT16LmV4dGVuZChCcigidmlldyIpLHtpbnZva2VPbkNhbGxiYWNrOm9vLGludm9rZVZpZXdNZXRob2Q6cGEsaW52b2tlVmlld01ldGhvZEtlZXBBbGl2ZTpMb30pO2Z1bmN0aW9uIFooKXtsZXR7b246ZX09b3Q7ZShKLk9OX1JFU0laRSxxKSxlKEouT05fQVBQX0VOVEVSX0ZPUkVHUk9VTkQsdGUpLGUoSi5PTl9BUFBfRU5URVJfQkFDS0dST1VORCxjZSl9ZnVuY3Rpb24gcShlKXtWbih3aSgpLEouT05fUkVTSVpFLGUpLG90Lmludm9rZU9uQ2FsbGJhY2soIm9uV2luZG93UmVzaXplIixlKX1mdW5jdGlvbiB0ZShlKXtsZXQgdD13aSgpO1ZuKHd0KCksSi5PTl9TSE9XLGUpLFZuKHQsSi5PTl9TSE9XKX1mdW5jdGlvbiBjZSgpe1ZuKHd0KCksSi5PTl9ISURFKSxWbih3aSgpLEouT05fSElERSl9bGV0IHBlPVtKLk9OX1BBR0VfU0NST0xMLEouT05fUkVBQ0hfQk9UVE9NXTtmdW5jdGlvbiBJZSgpe3BlLmZvckVhY2goZT0+b3Quc3Vic2NyaWJlKGUsZmUoZSkpKX1mdW5jdGlvbiBmZShlKXtyZXR1cm4odCxuKT0+e1ZuKHBhcnNlSW50KG4pLGUsdCl9fWZ1bmN0aW9uIENlKCl7WigpLEllKCl9ZnVuY3Rpb24gY3QoZSl7ZS4kdm09ZSxlLiRtcFR5cGU9ImFwcCI7bGV0IHQ9aG4ucmVmKGFlKCkuZ2V0TG9jYWxlKCkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCIkbG9jYWxlIix7Z2V0KCl7cmV0dXJuIHQudmFsdWV9LHNldChuKXt0LnZhbHVlPW59fSl9ZnVuY3Rpb24gZ3QoZSx0KXtlLnJvdXRlPXQucm91dGUsZS4kdm09ZSxlLiRwYWdlPXQsZS4kbXBUeXBlPSJwYWdlIix0Lm1ldGEuaXNUYWJCYXImJihlLiQuX19pc1RhYkJhcj0hMCxlLiQuX19pc0FjdGl2ZT0hMCl9ZnVuY3Rpb24gSHQoKXtyZXR1cm57cGF0aDoiIixxdWVyeTp7fSxzY2VuZToxMDAxLHJlZmVycmVySW5mbzp7YXBwSWQ6IiIsZXh0cmFEYXRhOnt9fX19ZnVuY3Rpb24geXQoZSx0KXtsZXQgbj1lLiRvcHRpb25zfHx7fTtuLmdsb2JhbERhdGE9ei5leHRlbmQobi5nbG9iYWxEYXRhfHx7fSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2xvYmFsRGF0YSIse2dldCgpe3JldHVybiBuLmdsb2JhbERhdGF9LHNldChyKXtuLmdsb2JhbERhdGE9cn19KX1mdW5jdGlvbiBqZShlKXtpZihlLmluZGV4T2YoIi8vIik9PT0wKXJldHVybiJodHRwczoiK2U7aWYoSi5TQ0hFTUVfUkUudGVzdChlKXx8Si5EQVRBX1JFLnRlc3QoZSkpcmV0dXJuIGU7aWYoZG4oZSkpcmV0dXJuImZpbGU6Ly8iK010KGUpO2xldCB0PSJmaWxlOi8vIitNdCgiX3d3dyIpO2lmKGUuaW5kZXhPZigiLyIpPT09MClyZXR1cm4gZS5zdGFydHNXaXRoKCIvc3RvcmFnZS8iKXx8ZS5zdGFydHNXaXRoKCIvc2RjYXJkLyIpfHxlLmluY2x1ZGVzKCIvQ29udGFpbmVycy9EYXRhL0FwcGxpY2F0aW9uLyIpPyJmaWxlOi8vIitlOnQrZTtpZihlLmluZGV4T2YoIi4uLyIpPT09MHx8ZS5pbmRleE9mKCIuLyIpPT09MCl7aWYodHlwZW9mIF9faWRfXz09InN0cmluZyIpcmV0dXJuIHQrZWEoSi5hZGRMZWFkaW5nU2xhc2goX19pZF9fKSxlKTt7bGV0IG49d2koKTtpZihuKXJldHVybiB0K2VhKEouYWRkTGVhZGluZ1NsYXNoKG4ucm91dGUpLGUpfX1yZXR1cm4gZX1sZXQgTXQ9Si5jYWNoZVN0cmluZ0Z1bmN0aW9uKGU9PnMuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTChlKS5yZXBsYWNlKC9eXC8/YXBwc1wvLywiL2FuZHJvaWRfYXNzZXQvYXBwcy8iKS5yZXBsYWNlKC9cLyQvLCIiKSk7ZnVuY3Rpb24gZG4oZSl7cmV0dXJuIGUuaW5kZXhPZigiX3d3dyIpPT09MHx8ZS5pbmRleE9mKCJfZG9jIik9PT0wfHxlLmluZGV4T2YoIl9kb2N1bWVudHMiKT09PTB8fGUuaW5kZXhPZigiX2Rvd25sb2FkcyIpPT09MH1sZXQgR3Q9InN1Y2Nlc3MiLGR0PSJmYWlsIixCbj1bR3QsZHQsImNvbXBsZXRlIl07ZnVuY3Rpb24gWXQoZSx0LG4scil7aWYoIWUpcmV0dXJuO2lmKHR5cGVvZiBuPT0idW5kZWZpbmVkIilyZXR1cm4gZVt0XSgpO2xldFssb109dGEobixyKTtyZXR1cm4gT2JqZWN0LmtleXMobykubGVuZ3RoP2VbdF0oY2kodCxvKSk6ZVt0XSgpfWZ1bmN0aW9uIGp0KGUsdCxuLHIpe2lmKCFlKXJldHVybjtsZXRbbyxjXT10YShuLHIpO3JldHVybiBPYmplY3Qua2V5cyhjKS5sZW5ndGg/ZVt0XShvLGNpKHQsYykpOmVbdF0obyl9ZnVuY3Rpb24gVXQoZSx0KXtsZXQgbj1xdChlLHQuJGVsKTtyZXR1cm4gbnx8Y29uc29sZS5lcnJvcigiQ2FuIG5vdCBmaW5kIGAiK2UrImAiKX1mdW5jdGlvbiBxdChlLHQpe2lmKCFlfHwhdClyZXR1cm47aWYodC5hdHRyJiZ0LmF0dHIuaWQ9PT1lKXJldHVybiB0O2xldCBuPXQuY2hpbGRyZW47aWYoISFuKWZvcihsZXQgcj0wLG89bi5sZW5ndGg7cjxvO3IrKyl7bGV0IGM9cXQoZSxuW3JdKTtpZihjKXJldHVybiBjfX1mdW5jdGlvbiB0YShlPXt9LHQpe2xldCBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1mdW5jdGlvbihjKXtsZXQgZz1lW2NdO3ouaXNGdW5jdGlvbihnKSYmKG5bY109ZyxkZWxldGUgZVtjXSl9O3JldHVybiBCbi5mb3JFYWNoKHIpLHQmJnQuZm9yRWFjaChyKSxbZSxuXX1mdW5jdGlvbiBjaShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtsZXQgbz1yLnR5cGU7ZGVsZXRlIHIudHlwZTtsZXQgYz10W29dO2lmKG89PT1HdD9yLmVyck1zZz1gJHtlfTpva2A6bz09PWR0JiYoci5lcnJNc2c9ZSsiOmZhaWwgIisoci5tc2c/IiAiK3IubXNnOiIiKSksZGVsZXRlIHIuY29kZSxkZWxldGUgci5tc2csei5pc0Z1bmN0aW9uKGMpJiZjKHIpLG89PT1HdHx8bz09PWR0KXtsZXQgZz10LmNvbXBsZXRlO3ouaXNGdW5jdGlvbihnKSYmZyhyKX19fWxldCBlaTtmdW5jdGlvbiBxaSgpe3JldHVybiBlaX1mdW5jdGlvbiBqYShlKXtsZXQgdD1lLiQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQuY3R4LCIkY2hpbGRyZW4iLHtnZXQoKXtyZXR1cm4gSG4oKS5tYXAocj0+ci4kdm0pfX0pO2xldCBuPXQuYXBwQ29udGV4dDtlaT16LmV4dGVuZChuLmFwcCx7bW91bnRQYWdlKHIsbyxjKXtsZXQgZz1obi5jcmVhdGVWTm9kZShyLG8pO2cuYXBwQ29udGV4dD1uLGcuX19wYWdlX2NvbnRhaW5lcl9fPWMsaG4ucmVuZGVyKGcsYyk7bGV0IGI9Zy5jb21wb25lbnQucHJveHk7cmV0dXJuIGIuX19wYWdlX2NvbnRhaW5lcl9fPWMsYn0sdW5tb3VudFBhZ2U6cj0+e2xldHtfX3BhZ2VfY29udGFpbmVyX186b309cjtvJiYoby5pc1VubW91bnRlZD0hMCxobi5yZW5kZXIobnVsbCxvKSl9fSl9bGV0IFVuPVtdO2Z1bmN0aW9uICRuKGUpe2lmKCFlLiRwYWdlLm1ldGEuaXNOVnVlKXJldHVybiBVbi5wdXNoKGUpO2xldCBuPVVuLmZpbmRJbmRleChyPT5yLiRwYWdlLmlkPT09ZS4kcGFnZS5pZCk7bj4tMT9Vbi5zcGxpY2UobiwxLGUpOlVuLnB1c2goZSl9ZnVuY3Rpb24gSXIoZSl7cmV0dXJuIFVuLmZpbmQodD0+dC4kcGFnZS5pZD09PWUpfWZ1bmN0aW9uIEhuKCl7cmV0dXJuIFVufWZ1bmN0aW9uIHlyKCl7bGV0IGU9W107cmV0dXJuIFVuLmZvckVhY2godD0+e3QuJC5fX2lzVGFiQmFyP3QuJC5fX2lzQWN0aXZlJiZlLnB1c2godCk6ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiB6cigpe2xldCBlPXdpKCk7IWV8fG5hKGUpfWZ1bmN0aW9uIG5hKGUpe2xldCB0PVVuLmZpbmRJbmRleChuPT5uPT09ZSk7dCE9PS0xJiYoZS4kcGFnZS5tZXRhLmlzTlZ1ZXx8cWkoKS51bm1vdW50UGFnZShlKSxVbi5zcGxpY2UodCwxKSl9bGV0IGNzPXtwbGF5KGUpe3JldHVybiBZdChlLCJwbGF5Iil9LHBhdXNlKGUpe3JldHVybiBZdChlLCJwYXVzZSIpfSxzZWVrKGUsdCl7cmV0dXJuIGp0KGUsInNlZWsiLHQucG9zaXRpb24pfSxzdG9wKGUpe3JldHVybiBZdChlLCJzdG9wIil9LHNlbmREYW5tdShlLHQpe3JldHVybiBqdChlLCJzZW5kRGFubXUiLHQpfSxwbGF5YmFja1JhdGUoZSx0KXtyZXR1cm4ganQoZSwicGxheWJhY2tSYXRlIix0LnJhdGUpfSxyZXF1ZXN0RnVsbFNjcmVlbihlLHQ9e30pe3JldHVybiBqdChlLCJyZXF1ZXN0RnVsbFNjcmVlbiIsdCl9LGV4aXRGdWxsU2NyZWVuKGUpe3JldHVybiBZdChlLCJleGl0RnVsbFNjcmVlbiIpfSxzaG93U3RhdHVzQmFyKGUpe3JldHVybiBZdChlLCJzaG93U3RhdHVzQmFyIil9LGhpZGVTdGF0dXNCYXIoZSl7cmV0dXJuIFl0KGUsImhpZGVTdGF0dXNCYXIiKX19O2Z1bmN0aW9uIG9uKGUsdCxuLHIpe2xldCBvPUlyKHQpO2lmKG89PW51bGw/dm9pZCAwOm8uJHBhZ2UubWV0YS5pc05WdWUpe2xldCBjPW8uJHZtO3JldHVybiBjc1tuXShVdChlLGMpLHIpfW90Lmludm9rZVZpZXdNZXRob2QoInZpZGVvLiIrZSx7dmlkZW9JZDplLHR5cGU6bixkYXRhOnJ9LHQpfWxldCBfbj17Z2V0Q2VudGVyTG9jYXRpb24oZSx0KXtyZXR1cm4gWXQoZSwiZ2V0Q2VudGVyTG9jYXRpb24iLHQpfSxtb3ZlVG9Mb2NhdGlvbihlLHQpe3JldHVybiBqdChlLCJtb3ZlVG9Mb2NhdGlvbiIsdCl9LHRyYW5zbGF0ZU1hcmtlcihlLHQpe3JldHVybiBqdChlLCJ0cmFuc2xhdGVNYXJrZXIiLHQsWyJhbmltYXRpb25FbmQiXSl9LGluY2x1ZGVQb2ludHMoZSx0KXtyZXR1cm4ganQoZSwiaW5jbHVkZVBvaW50cyIsdCl9LGdldFJlZ2lvbihlLHQpe3JldHVybiBZdChlLCJnZXRSZWdpb24iLHQpfSxnZXRTY2FsZShlLHQpe3JldHVybiBZdChlLCJnZXRTY2FsZSIsdCl9LGFkZEN1c3RvbUxheWVyKGUsdCl7cmV0dXJuIGp0KGUsImFkZEN1c3RvbUxheWVyIix0KX0scmVtb3ZlQ3VzdG9tTGF5ZXIoZSx0KXtyZXR1cm4ganQoZSwicmVtb3ZlQ3VzdG9tTGF5ZXIiLHQpfSxhZGRHcm91bmRPdmVybGF5KGUsdCl7cmV0dXJuIGp0KGUsImFkZEdyb3VuZE92ZXJsYXkiLHQpfSxyZW1vdmVHcm91bmRPdmVybGF5KGUsdCl7cmV0dXJuIGp0KGUsInJlbW92ZUdyb3VuZE92ZXJsYXkiLHQpfSx1cGRhdGVHcm91bmRPdmVybGF5KGUsdCl7cmV0dXJuIGp0KGUsInVwZGF0ZUdyb3VuZE92ZXJsYXkiLHQpfSxpbml0TWFya2VyQ2x1c3RlcihlLHQpe3JldHVybiBqdChlLCJpbml0TWFya2VyQ2x1c3RlciIsdCl9LGFkZE1hcmtlcnMoZSx0KXtyZXR1cm4ganQoZSwiYWRkTWFya2VycyIsdCl9LHJlbW92ZU1hcmtlcnMoZSx0KXtyZXR1cm4ganQoZSwicmVtb3ZlTWFya2VycyIsdCl9LG1vdmVBbG9uZyhlLHQpe3JldHVybiBqdChlLCJtb3ZlQWxvbmciLHQpfSxzZXRMb2NNYXJrZXJJY29uKGUsdCl7cmV0dXJuIGp0KGUsInNldExvY01hcmtlckljb24iLHQpfSxvcGVuTWFwQXBwKGUsdCl7cmV0dXJuIGp0KGUsIm9wZW5NYXBBcHAiLHQpfSxvbihlLHQpe3JldHVybiBlLm9uKHQubmFtZSx0LmNhbGxiYWNrKX19O2Z1bmN0aW9uIGpuKGUsdCxuLHIsbyl7bGV0IGM9SXIodCk7aWYoYz09bnVsbD92b2lkIDA6Yy4kcGFnZS5tZXRhLmlzTlZ1ZSl7bGV0IGc9Yy4kdm07cmV0dXJuIF9uW25dKFV0KGUsZykscil9b3QuaW52b2tlVmlld01ldGhvZCgibWFwLiIrZSx7dHlwZTpuLGRhdGE6cn0sdCxvKX1mdW5jdGlvbiBxbihlKXtyZXR1cm5gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuJHtlfWB9ZnVuY3Rpb24gQWkoe3JlcUlkOmUsY29tcG9uZW50OnQsb3B0aW9uczpuLGNhbGxiYWNrOnJ9LG8pe2xldCBjPXFuKGUpO290Lmludm9rZVZpZXdNZXRob2QoImFkZEludGVyc2VjdGlvbk9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkLG9wdGlvbnM6bixldmVudE5hbWU6Y30sbyksb3Quc3Vic2NyaWJlKGMscil9ZnVuY3Rpb24gdXMoe3JlcUlkOmUsY29tcG9uZW50OnR9LG4pe290Lmludm9rZVZpZXdNZXRob2QoInJlbW92ZUludGVyc2VjdGlvbk9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkfSxuKSxvdC51bnN1YnNjcmliZShxbihlKSl9ZnVuY3Rpb24gemEoZSl7cmV0dXJuYE1lZGlhUXVlcnlPYnNlcnZlci4ke2V9YH1mdW5jdGlvbiBJYSh7cmVxSWQ6ZSxjb21wb25lbnQ6dCxvcHRpb25zOm4sY2FsbGJhY2s6cn0sbyl7bGV0IGM9emEoZSk7b3QuaW52b2tlVmlld01ldGhvZCgiYWRkTWVkaWFRdWVyeU9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkLG9wdGlvbnM6bixldmVudE5hbWU6Y30sbyksb3Quc3Vic2NyaWJlKGMscil9ZnVuY3Rpb24gcmEoe3JlcUlkOmUsY29tcG9uZW50OnR9LG4pe290Lmludm9rZVZpZXdNZXRob2QoInJlbW92ZU1lZGlhUXVlcnlPYnNlcnZlciIse3JlcUlkOmUsY29tcG9uZW50OnQuJGVsLm5vZGVJZH0sbiksb3QudW5zdWJzY3JpYmUoemEoZSkpfWxldCBzbz0yMDAsV2E9WyJ1bmtub3duIiwibm9uZSIsImV0aGVybmV0Iiwid2lmaSIsIjJnIiwiM2ciLCI0ZyIsIjVnIl0sZnM9Il9kb2MvdW5pYXBwX3RlbXAiLFdyPWAke2ZzfV8ke0RhdGUubm93KCl9YDtmdW5jdGlvbiBHYShlKXtsZXQgdD1lLnNwbGl0KCIvIik7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gWWEoZSl7bGV0IHQ9ZS5zcGxpdCgiLiIpO3JldHVybiB0Lmxlbmd0aD4xPyIuIit0W3QubGVuZ3RoLTFdOiIifWxldCBGbz0iYmFja2J1dHRvbiI7ZnVuY3Rpb24gRGkoKXtQLm5hdmlnYXRlQmFjayh7ZnJvbToiYmFja2J1dHRvbiIsc3VjY2Vzcygpe319KX1sZXQgX289SHQoKSxibz1IdCgpO2Z1bmN0aW9uIGRzKCl7cmV0dXJuIHouZXh0ZW5kKHt9LGJvKX1mdW5jdGlvbiBWbygpe3JldHVybiB6LmV4dGVuZCh7fSxfbyl9ZnVuY3Rpb24geHMoe3BhdGg6ZSxxdWVyeTp0LHJlZmVycmVySW5mbzpufSl7ei5leHRlbmQoX28se3BhdGg6ZSxxdWVyeTp0P0oucGFyc2VRdWVyeSh0KTp7fSxyZWZlcnJlckluZm86bnx8e319KX1mdW5jdGlvbiBocyh7cGF0aDplLHF1ZXJ5OnQscmVmZXJyZXJJbmZvOm59KXtyZXR1cm4gei5leHRlbmQoYm8se3BhdGg6ZSxxdWVyeTp0P0oucGFyc2VRdWVyeSh0KTp7fSxyZWZlcnJlckluZm86bnx8e30sY2hhbm5lbDpzLnJ1bnRpbWUuY2hhbm5lbCxsYXVuY2hlcjpzLnJ1bnRpbWUubGF1bmNoZXJ9KSx6LmV4dGVuZChfbyxibyksei5leHRlbmQoe30sYm8pfWZ1bmN0aW9uIEJzKCl7bGV0IGU9Zi5yZXF1aXJlTW9kdWxlKCJwbHVzIik7aWYoZS5nZXRSZWRpcmVjdEluZm8pe2xldHtwYXRoOnQscXVlcnk6bixleHRyYURhdGE6cix1c2VyQWN0aW9uOm8sZnJvbUFwcGlkOmN9PWUuZ2V0UmVkaXJlY3RJbmZvKCl8fHt9LGc9e2FwcElkOmMsZXh0cmFEYXRhOnt9fTtyZXR1cm4gciYmKGcuZXh0cmFEYXRhPXIpLHtwYXRoOnR8fCIiLHF1ZXJ5Om4/Ij8iK246IiIscmVmZXJyZXJJbmZvOmcsdXNlckFjdGlvbjpvfX19dmFyIHhlPXt9OyhmdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgVWludDhBcnJheSE9InVuZGVmaW5lZCImJnR5cGVvZiBVaW50MTZBcnJheSE9InVuZGVmaW5lZCImJnR5cGVvZiBJbnQzMkFycmF5IT0idW5kZWZpbmVkIjtmdW5jdGlvbiBuKGMsZyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGcpfWUuYXNzaWduPWZ1bmN0aW9uKGMpe2Zvcih2YXIgZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Zy5sZW5ndGg7KXt2YXIgYj1nLnNoaWZ0KCk7aWYoISFiKXtpZih0eXBlb2YgYiE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcihiKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIFYgaW4gYiluKGIsVikmJihjW1ZdPWJbVl0pfX1yZXR1cm4gY30sZS5zaHJpbmtCdWY9ZnVuY3Rpb24oYyxnKXtyZXR1cm4gYy5sZW5ndGg9PT1nP2M6Yy5zdWJhcnJheT9jLnN1YmFycmF5KDAsZyk6KGMubGVuZ3RoPWcsYyl9O3ZhciByPXthcnJheVNldDpmdW5jdGlvbihjLGcsYixWLFQpe2lmKGcuc3ViYXJyYXkmJmMuc3ViYXJyYXkpe2Muc2V0KGcuc3ViYXJyYXkoYixiK1YpLFQpO3JldHVybn1mb3IodmFyIEw9MDtMPFY7TCsrKWNbVCtMXT1nW2IrTF19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oYyl7dmFyIGcsYixWLFQsTCxfZTtmb3IoVj0wLGc9MCxiPWMubGVuZ3RoO2c8YjtnKyspVis9Y1tnXS5sZW5ndGg7Zm9yKF9lPW5ldyBVaW50OEFycmF5KFYpLFQ9MCxnPTAsYj1jLmxlbmd0aDtnPGI7ZysrKUw9Y1tnXSxfZS5zZXQoTCxUKSxUKz1MLmxlbmd0aDtyZXR1cm4gX2V9fSxvPXthcnJheVNldDpmdW5jdGlvbihjLGcsYixWLFQpe2Zvcih2YXIgTD0wO0w8VjtMKyspY1tUK0xdPWdbYitMXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihjKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sYyl9fTtlLnNldFR5cGVkPWZ1bmN0aW9uKGMpe2M/KGUuQnVmOD1VaW50OEFycmF5LGUuQnVmMTY9VWludDE2QXJyYXksZS5CdWYzMj1JbnQzMkFycmF5LGUuYXNzaWduKGUscikpOihlLkJ1Zjg9QXJyYXksZS5CdWYxNj1BcnJheSxlLkJ1ZjMyPUFycmF5LGUuYXNzaWduKGUsbykpfSxlLnNldFR5cGVkKHQpfSkoeGUpO3ZhciBOdD17fSxQdD17fSx3bj17fSxFcj14ZSxPaT00LEppPTAsVW89MSxOYT0yO2Z1bmN0aW9uIGlhKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDstLXQ+PTA7KWVbdF09MH12YXIgZ3M9MCxwcz0xLGRsPTIsJGw9MyxIbD0yNTgsTXM9MjksJG89MjU2LEhvPSRvKzErTXMsb2E9MzAscWE9MTksdnM9MipIbysxLGpvPTE1LERzPTE2LGpsPTcsTHM9MjU2LG1zPTE2LGhsPTE3LEZzPTE4LEphPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLF9zPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxWcz1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN10sVXM9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLGdsPTUxMix6bz1uZXcgQXJyYXkoKEhvKzIpKjIpO2lhKHpvKTt2YXIgS2E9bmV3IEFycmF5KG9hKjIpO2lhKEthKTt2YXIgbWE9bmV3IEFycmF5KGdsKTtpYShtYSk7dmFyIGthPW5ldyBBcnJheShIbC0kbCsxKTtpYShrYSk7dmFyIHlvPW5ldyBBcnJheShNcyk7aWEoeW8pO3ZhciBhYT1uZXcgQXJyYXkob2EpO2lhKGFhKTtmdW5jdGlvbiBaYShlLHQsbixyLG8pe3RoaXMuc3RhdGljX3RyZWU9ZSx0aGlzLmV4dHJhX2JpdHM9dCx0aGlzLmV4dHJhX2Jhc2U9bix0aGlzLmVsZW1zPXIsdGhpcy5tYXhfbGVuZ3RoPW8sdGhpcy5oYXNfc3RyZWU9ZSYmZS5sZW5ndGh9dmFyICRzLHBsLHNhO2Z1bmN0aW9uIFhhKGUsdCl7dGhpcy5keW5fdHJlZT1lLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz10fWZ1bmN0aW9uIEhzKGUpe3JldHVybiBlPDI1Nj9tYVtlXTptYVsyNTYrKGU+Pj43KV19ZnVuY3Rpb24gUWEoZSx0KXtlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10JjI1NSxlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10Pj4+OCYyNTV9ZnVuY3Rpb24gdGkoZSx0LG4pe2UuYmlfdmFsaWQ+RHMtbj8oZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsUWEoZSxlLmJpX2J1ZiksZS5iaV9idWY9dD4+RHMtZS5iaV92YWxpZCxlLmJpX3ZhbGlkKz1uLURzKTooZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsZS5iaV92YWxpZCs9bil9ZnVuY3Rpb24gTXIoZSx0LG4pe3RpKGUsblt0KjJdLG5bdCoyKzFdKX1mdW5jdGlvbiBsYShlLHQpe3ZhciBuPTA7ZG8gbnw9ZSYxLGU+Pj49MSxuPDw9MTt3aGlsZSgtLXQ+MCk7cmV0dXJuIG4+Pj4xfWZ1bmN0aW9uIHZsKGUpe2UuYmlfdmFsaWQ9PT0xNj8oUWEoZSxlLmJpX2J1ZiksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTApOmUuYmlfdmFsaWQ+PTgmJihlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT1lLmJpX2J1ZiYyNTUsZS5iaV9idWY+Pj04LGUuYmlfdmFsaWQtPTgpfWZ1bmN0aW9uIHpsKGUsdCl7dmFyIG49dC5keW5fdHJlZSxyPXQubWF4X2NvZGUsbz10LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxjPXQuc3RhdF9kZXNjLmhhc19zdHJlZSxnPXQuc3RhdF9kZXNjLmV4dHJhX2JpdHMsYj10LnN0YXRfZGVzYy5leHRyYV9iYXNlLFY9dC5zdGF0X2Rlc2MubWF4X2xlbmd0aCxULEwsX2Usd2UsUGUsZnQsaHQ9MDtmb3Iod2U9MDt3ZTw9am87d2UrKyllLmJsX2NvdW50W3dlXT0wO2ZvcihuW2UuaGVhcFtlLmhlYXBfbWF4XSoyKzFdPTAsVD1lLmhlYXBfbWF4KzE7VDx2cztUKyspTD1lLmhlYXBbVF0sd2U9bltuW0wqMisxXSoyKzFdKzEsd2U+ViYmKHdlPVYsaHQrKyksbltMKjIrMV09d2UsIShMPnIpJiYoZS5ibF9jb3VudFt3ZV0rKyxQZT0wLEw+PWImJihQZT1nW0wtYl0pLGZ0PW5bTCoyXSxlLm9wdF9sZW4rPWZ0Kih3ZStQZSksYyYmKGUuc3RhdGljX2xlbis9ZnQqKG9bTCoyKzFdK1BlKSkpO2lmKGh0IT09MCl7ZG97Zm9yKHdlPVYtMTtlLmJsX2NvdW50W3dlXT09PTA7KXdlLS07ZS5ibF9jb3VudFt3ZV0tLSxlLmJsX2NvdW50W3dlKzFdKz0yLGUuYmxfY291bnRbVl0tLSxodC09Mn13aGlsZShodD4wKTtmb3Iod2U9Vjt3ZSE9PTA7d2UtLSlmb3IoTD1lLmJsX2NvdW50W3dlXTtMIT09MDspX2U9ZS5oZWFwWy0tVF0sIShfZT5yKSYmKG5bX2UqMisxXSE9PXdlJiYoZS5vcHRfbGVuKz0od2UtbltfZSoyKzFdKSpuW19lKjJdLG5bX2UqMisxXT13ZSksTC0tKX19ZnVuY3Rpb24ganMoZSx0LG4pe3ZhciByPW5ldyBBcnJheShqbysxKSxvPTAsYyxnO2ZvcihjPTE7Yzw9am87YysrKXJbY109bz1vK25bYy0xXTw8MTtmb3IoZz0wO2c8PXQ7ZysrKXt2YXIgYj1lW2cqMisxXTtiIT09MCYmKGVbZyoyXT1sYShyW2JdKyssYikpfX1mdW5jdGlvbiBicygpe3ZhciBlLHQsbixyLG8sYz1uZXcgQXJyYXkoam8rMSk7Zm9yKG49MCxyPTA7cjxNcy0xO3IrKylmb3IoeW9bcl09bixlPTA7ZTwxPDxKYVtyXTtlKyspa2FbbisrXT1yO2ZvcihrYVtuLTFdPXIsbz0wLHI9MDtyPDE2O3IrKylmb3IoYWFbcl09byxlPTA7ZTwxPDxfc1tyXTtlKyspbWFbbysrXT1yO2ZvcihvPj49NztyPG9hO3IrKylmb3IoYWFbcl09bzw8NyxlPTA7ZTwxPDxfc1tyXS03O2UrKyltYVsyNTYrbysrXT1yO2Zvcih0PTA7dDw9am87dCsrKWNbdF09MDtmb3IoZT0wO2U8PTE0Mzspem9bZSoyKzFdPTgsZSsrLGNbOF0rKztmb3IoO2U8PTI1NTspem9bZSoyKzFdPTksZSsrLGNbOV0rKztmb3IoO2U8PTI3OTspem9bZSoyKzFdPTcsZSsrLGNbN10rKztmb3IoO2U8PTI4Nzspem9bZSoyKzFdPTgsZSsrLGNbOF0rKztmb3IoanMoem8sSG8rMSxjKSxlPTA7ZTxvYTtlKyspS2FbZSoyKzFdPTUsS2FbZSoyXT1sYShlLDUpOyRzPW5ldyBaYSh6byxKYSwkbysxLEhvLGpvKSxwbD1uZXcgWmEoS2EsX3MsMCxvYSxqbyksc2E9bmV3IFphKG5ldyBBcnJheSgwKSxWcywwLHFhLGpsKX1mdW5jdGlvbiB6cyhlKXt2YXIgdDtmb3IodD0wO3Q8SG87dCsrKWUuZHluX2x0cmVlW3QqMl09MDtmb3IodD0wO3Q8b2E7dCsrKWUuZHluX2R0cmVlW3QqMl09MDtmb3IodD0wO3Q8cWE7dCsrKWUuYmxfdHJlZVt0KjJdPTA7ZS5keW5fbHRyZWVbTHMqMl09MSxlLm9wdF9sZW49ZS5zdGF0aWNfbGVuPTAsZS5sYXN0X2xpdD1lLm1hdGNoZXM9MH1mdW5jdGlvbiBXcyhlKXtlLmJpX3ZhbGlkPjg/UWEoZSxlLmJpX2J1Zik6ZS5iaV92YWxpZD4wJiYoZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109ZS5iaV9idWYpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wfWZ1bmN0aW9uIG1sKGUsdCxuLHIpe1dzKGUpLHImJihRYShlLG4pLFFhKGUsfm4pKSxFci5hcnJheVNldChlLnBlbmRpbmdfYnVmLGUud2luZG93LHQsbixlLnBlbmRpbmcpLGUucGVuZGluZys9bn1mdW5jdGlvbiBHcyhlLHQsbixyKXt2YXIgbz10KjIsYz1uKjI7cmV0dXJuIGVbb108ZVtjXXx8ZVtvXT09PWVbY10mJnJbdF08PXJbbl19ZnVuY3Rpb24geXMoZSx0LG4pe2Zvcih2YXIgcj1lLmhlYXBbbl0sbz1uPDwxO288PWUuaGVhcF9sZW4mJihvPGUuaGVhcF9sZW4mJkdzKHQsZS5oZWFwW28rMV0sZS5oZWFwW29dLGUuZGVwdGgpJiZvKyssIUdzKHQscixlLmhlYXBbb10sZS5kZXB0aCkpOyllLmhlYXBbbl09ZS5oZWFwW29dLG49byxvPDw9MTtlLmhlYXBbbl09cn1mdW5jdGlvbiBFcyhlLHQsbil7dmFyIHIsbyxjPTAsZyxiO2lmKGUubGFzdF9saXQhPT0wKWRvIHI9ZS5wZW5kaW5nX2J1ZltlLmRfYnVmK2MqMl08PDh8ZS5wZW5kaW5nX2J1ZltlLmRfYnVmK2MqMisxXSxvPWUucGVuZGluZ19idWZbZS5sX2J1ZitjXSxjKysscj09PTA/TXIoZSxvLHQpOihnPWthW29dLE1yKGUsZyskbysxLHQpLGI9SmFbZ10sYiE9PTAmJihvLT15b1tnXSx0aShlLG8sYikpLHItLSxnPUhzKHIpLE1yKGUsZyxuKSxiPV9zW2ddLGIhPT0wJiYoci09YWFbZ10sdGkoZSxyLGIpKSk7d2hpbGUoYzxlLmxhc3RfbGl0KTtNcihlLExzLHQpfWZ1bmN0aW9uIFNzKGUsdCl7dmFyIG49dC5keW5fdHJlZSxyPXQuc3RhdF9kZXNjLnN0YXRpY190cmVlLG89dC5zdGF0X2Rlc2MuaGFzX3N0cmVlLGM9dC5zdGF0X2Rlc2MuZWxlbXMsZyxiLFY9LTEsVDtmb3IoZS5oZWFwX2xlbj0wLGUuaGVhcF9tYXg9dnMsZz0wO2c8YztnKyspbltnKjJdIT09MD8oZS5oZWFwWysrZS5oZWFwX2xlbl09Vj1nLGUuZGVwdGhbZ109MCk6bltnKjIrMV09MDtmb3IoO2UuaGVhcF9sZW48MjspVD1lLmhlYXBbKytlLmhlYXBfbGVuXT1WPDI/KytWOjAsbltUKjJdPTEsZS5kZXB0aFtUXT0wLGUub3B0X2xlbi0tLG8mJihlLnN0YXRpY19sZW4tPXJbVCoyKzFdKTtmb3IodC5tYXhfY29kZT1WLGc9ZS5oZWFwX2xlbj4+MTtnPj0xO2ctLSl5cyhlLG4sZyk7VD1jO2RvIGc9ZS5oZWFwWzFdLGUuaGVhcFsxXT1lLmhlYXBbZS5oZWFwX2xlbi0tXSx5cyhlLG4sMSksYj1lLmhlYXBbMV0sZS5oZWFwWy0tZS5oZWFwX21heF09ZyxlLmhlYXBbLS1lLmhlYXBfbWF4XT1iLG5bVCoyXT1uW2cqMl0rbltiKjJdLGUuZGVwdGhbVF09KGUuZGVwdGhbZ10+PWUuZGVwdGhbYl0/ZS5kZXB0aFtnXTplLmRlcHRoW2JdKSsxLG5bZyoyKzFdPW5bYioyKzFdPVQsZS5oZWFwWzFdPVQrKyx5cyhlLG4sMSk7d2hpbGUoZS5oZWFwX2xlbj49Mik7ZS5oZWFwWy0tZS5oZWFwX21heF09ZS5oZWFwWzFdLHpsKGUsdCksanMobixWLGUuYmxfY291bnQpfWZ1bmN0aW9uIF9sKGUsdCxuKXt2YXIgcixvPS0xLGMsZz10WzAqMisxXSxiPTAsVj03LFQ9NDtmb3IoZz09PTAmJihWPTEzOCxUPTMpLHRbKG4rMSkqMisxXT02NTUzNSxyPTA7cjw9bjtyKyspYz1nLGc9dFsocisxKSoyKzFdLCEoKytiPFYmJmM9PT1nKSYmKGI8VD9lLmJsX3RyZWVbYyoyXSs9YjpjIT09MD8oYyE9PW8mJmUuYmxfdHJlZVtjKjJdKyssZS5ibF90cmVlW21zKjJdKyspOmI8PTEwP2UuYmxfdHJlZVtobCoyXSsrOmUuYmxfdHJlZVtGcyoyXSsrLGI9MCxvPWMsZz09PTA/KFY9MTM4LFQ9Myk6Yz09PWc/KFY9NixUPTMpOihWPTcsVD00KSl9ZnVuY3Rpb24gYmwoZSx0LG4pe3ZhciByLG89LTEsYyxnPXRbMCoyKzFdLGI9MCxWPTcsVD00O2ZvcihnPT09MCYmKFY9MTM4LFQ9Mykscj0wO3I8PW47cisrKWlmKGM9ZyxnPXRbKHIrMSkqMisxXSwhKCsrYjxWJiZjPT09Zykpe2lmKGI8VClkbyBNcihlLGMsZS5ibF90cmVlKTt3aGlsZSgtLWIhPT0wKTtlbHNlIGMhPT0wPyhjIT09byYmKE1yKGUsYyxlLmJsX3RyZWUpLGItLSksTXIoZSxtcyxlLmJsX3RyZWUpLHRpKGUsYi0zLDIpKTpiPD0xMD8oTXIoZSxobCxlLmJsX3RyZWUpLHRpKGUsYi0zLDMpKTooTXIoZSxGcyxlLmJsX3RyZWUpLHRpKGUsYi0xMSw3KSk7Yj0wLG89YyxnPT09MD8oVj0xMzgsVD0zKTpjPT09Zz8oVj02LFQ9Myk6KFY9NyxUPTQpfX1mdW5jdGlvbiBhKGUpe3ZhciB0O2ZvcihfbChlLGUuZHluX2x0cmVlLGUubF9kZXNjLm1heF9jb2RlKSxfbChlLGUuZHluX2R0cmVlLGUuZF9kZXNjLm1heF9jb2RlKSxTcyhlLGUuYmxfZGVzYyksdD1xYS0xO3Q+PTMmJmUuYmxfdHJlZVtVc1t0XSoyKzFdPT09MDt0LS0pO3JldHVybiBlLm9wdF9sZW4rPTMqKHQrMSkrNSs1KzQsdH1mdW5jdGlvbiB1KGUsdCxuLHIpe3ZhciBvO2Zvcih0aShlLHQtMjU3LDUpLHRpKGUsbi0xLDUpLHRpKGUsci00LDQpLG89MDtvPHI7bysrKXRpKGUsZS5ibF90cmVlW1VzW29dKjIrMV0sMyk7YmwoZSxlLmR5bl9sdHJlZSx0LTEpLGJsKGUsZS5keW5fZHRyZWUsbi0xKX1mdW5jdGlvbiBtKGUpe3ZhciB0PTQwOTM2MjQ0NDcsbjtmb3Iobj0wO248PTMxO24rKyx0Pj4+PTEpaWYodCYxJiZlLmR5bl9sdHJlZVtuKjJdIT09MClyZXR1cm4gSmk7aWYoZS5keW5fbHRyZWVbOSoyXSE9PTB8fGUuZHluX2x0cmVlWzEwKjJdIT09MHx8ZS5keW5fbHRyZWVbMTMqMl0hPT0wKXJldHVybiBVbztmb3Iobj0zMjtuPCRvO24rKylpZihlLmR5bl9sdHJlZVtuKjJdIT09MClyZXR1cm4gVW87cmV0dXJuIEppfXZhciBTPSExO2Z1bmN0aW9uIEkoZSl7U3x8KGJzKCksUz0hMCksZS5sX2Rlc2M9bmV3IFhhKGUuZHluX2x0cmVlLCRzKSxlLmRfZGVzYz1uZXcgWGEoZS5keW5fZHRyZWUscGwpLGUuYmxfZGVzYz1uZXcgWGEoZS5ibF90cmVlLHNhKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MCx6cyhlKX1mdW5jdGlvbiBPKGUsdCxuLHIpe3RpKGUsKGdzPDwxKSsocj8xOjApLDMpLG1sKGUsdCxuLCEwKX1mdW5jdGlvbiBGKGUpe3RpKGUscHM8PDEsMyksTXIoZSxMcyx6byksdmwoZSl9ZnVuY3Rpb24gVyhlLHQsbixyKXt2YXIgbyxjLGc9MDtlLmxldmVsPjA/KGUuc3RybS5kYXRhX3R5cGU9PT1OYSYmKGUuc3RybS5kYXRhX3R5cGU9bShlKSksU3MoZSxlLmxfZGVzYyksU3MoZSxlLmRfZGVzYyksZz1hKGUpLG89ZS5vcHRfbGVuKzMrNz4+PjMsYz1lLnN0YXRpY19sZW4rMys3Pj4+MyxjPD1vJiYobz1jKSk6bz1jPW4rNSxuKzQ8PW8mJnQhPT0tMT9PKGUsdCxuLHIpOmUuc3RyYXRlZ3k9PT1PaXx8Yz09PW8/KHRpKGUsKHBzPDwxKSsocj8xOjApLDMpLEVzKGUsem8sS2EpKToodGkoZSwoZGw8PDEpKyhyPzE6MCksMyksdShlLGUubF9kZXNjLm1heF9jb2RlKzEsZS5kX2Rlc2MubWF4X2NvZGUrMSxnKzEpLEVzKGUsZS5keW5fbHRyZWUsZS5keW5fZHRyZWUpKSx6cyhlKSxyJiZXcyhlKX1mdW5jdGlvbiBHKGUsdCxuKXtyZXR1cm4gZS5wZW5kaW5nX2J1ZltlLmRfYnVmK2UubGFzdF9saXQqMl09dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5kX2J1ZitlLmxhc3RfbGl0KjIrMV09dCYyNTUsZS5wZW5kaW5nX2J1ZltlLmxfYnVmK2UubGFzdF9saXRdPW4mMjU1LGUubGFzdF9saXQrKyx0PT09MD9lLmR5bl9sdHJlZVtuKjJdKys6KGUubWF0Y2hlcysrLHQtLSxlLmR5bl9sdHJlZVsoa2Fbbl0rJG8rMSkqMl0rKyxlLmR5bl9kdHJlZVtIcyh0KSoyXSsrKSxlLmxhc3RfbGl0PT09ZS5saXRfYnVmc2l6ZS0xfXduLl90cl9pbml0PUksd24uX3RyX3N0b3JlZF9ibG9jaz1PLHduLl90cl9mbHVzaF9ibG9jaz1XLHduLl90cl90YWxseT1HLHduLl90cl9hbGlnbj1GO2Z1bmN0aW9uIGxlKGUsdCxuLHIpe2Zvcih2YXIgbz1lJjY1NTM1fDAsYz1lPj4+MTYmNjU1MzV8MCxnPTA7biE9PTA7KXtnPW4+MmUzPzJlMzpuLG4tPWc7ZG8gbz1vK3RbcisrXXwwLGM9YytvfDA7d2hpbGUoLS1nKTtvJT02NTUyMSxjJT02NTUyMX1yZXR1cm4gb3xjPDwxNnwwfXZhciBXZT1sZTtmdW5jdGlvbiBpdCgpe2Zvcih2YXIgZSx0PVtdLG49MDtuPDI1NjtuKyspe2U9bjtmb3IodmFyIHI9MDtyPDg7cisrKWU9ZSYxPzM5ODgyOTIzODReZT4+PjE6ZT4+PjE7dFtuXT1lfXJldHVybiB0fXZhciBnZT1pdCgpO2Z1bmN0aW9uIFllKGUsdCxuLHIpe3ZhciBvPWdlLGM9cituO2VePS0xO2Zvcih2YXIgZz1yO2c8YztnKyspZT1lPj4+OF5vWyhlXnRbZ10pJjI1NV07cmV0dXJuIGVeLTF9dmFyIEplPVllLG10PXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn0sYXQ9eGUsU2U9d24sRWU9V2UsQWU9SmUsbHQ9bXQsVmU9MCxUdD0xLGk9MyxsPTQsZD01LF89MCxBPTEsQz0tMixrPS0zLEQ9LTUsSD0tMSxuZT0xLHZlPTIsQmU9Myx1ZT00LGtlPTAsR2U9Mix1dD04LFFlPTksUmU9MTUsbWU9OCx5ZT0yOSxMZT0yNTYsT2U9TGUrMSt5ZSxidD0zMCxDdD0xOSxLZT0yKk9lKzEsUnQ9MTUsTT0zLGo9MjU4LHNlPWorTSsxLHJlPTMyLG9lPTQyLFVlPTY5LHJ0PTczLHFlPTkxLFplPTEwMywkZT0xMTMsJHQ9NjY2LHB0PTEseHQ9MixCdD0zLE1uPTQsUm49MztmdW5jdGlvbiB2bihlLHQpe3JldHVybiBlLm1zZz1sdFt0XSx0fWZ1bmN0aW9uIGJuKGUpe3JldHVybihlPDwxKS0oZT40Pzk6MCl9ZnVuY3Rpb24gZnIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoOy0tdD49MDspZVt0XT0wfWZ1bmN0aW9uIG5pKGUpe3ZhciB0PWUuc3RhdGUsbj10LnBlbmRpbmc7bj5lLmF2YWlsX291dCYmKG49ZS5hdmFpbF9vdXQpLG4hPT0wJiYoYXQuYXJyYXlTZXQoZS5vdXRwdXQsdC5wZW5kaW5nX2J1Zix0LnBlbmRpbmdfb3V0LG4sZS5uZXh0X291dCksZS5uZXh0X291dCs9bix0LnBlbmRpbmdfb3V0Kz1uLGUudG90YWxfb3V0Kz1uLGUuYXZhaWxfb3V0LT1uLHQucGVuZGluZy09bix0LnBlbmRpbmc9PT0wJiYodC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gSnQoZSx0KXtTZS5fdHJfZmx1c2hfYmxvY2soZSxlLmJsb2NrX3N0YXJ0Pj0wP2UuYmxvY2tfc3RhcnQ6LTEsZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0LHQpLGUuYmxvY2tfc3RhcnQ9ZS5zdHJzdGFydCxuaShlLnN0cm0pfWZ1bmN0aW9uIGFuKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dH1mdW5jdGlvbiBsbyhlLHQpe2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXQ+Pj44JjI1NSxlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10JjI1NX1mdW5jdGlvbiBZKGUsdCxuLHIpe3ZhciBvPWUuYXZhaWxfaW47cmV0dXJuIG8+ciYmKG89ciksbz09PTA/MDooZS5hdmFpbF9pbi09byxhdC5hcnJheVNldCh0LGUuaW5wdXQsZS5uZXh0X2luLG8sbiksZS5zdGF0ZS53cmFwPT09MT9lLmFkbGVyPUVlKGUuYWRsZXIsdCxvLG4pOmUuc3RhdGUud3JhcD09PTImJihlLmFkbGVyPUFlKGUuYWRsZXIsdCxvLG4pKSxlLm5leHRfaW4rPW8sZS50b3RhbF9pbis9byxvKX1mdW5jdGlvbiBlZShlLHQpe3ZhciBuPWUubWF4X2NoYWluX2xlbmd0aCxyPWUuc3Ryc3RhcnQsbyxjLGc9ZS5wcmV2X2xlbmd0aCxiPWUubmljZV9tYXRjaCxWPWUuc3Ryc3RhcnQ+ZS53X3NpemUtc2U/ZS5zdHJzdGFydC0oZS53X3NpemUtc2UpOjAsVD1lLndpbmRvdyxMPWUud19tYXNrLF9lPWUucHJldix3ZT1lLnN0cnN0YXJ0K2osUGU9VFtyK2ctMV0sZnQ9VFtyK2ddO2UucHJldl9sZW5ndGg+PWUuZ29vZF9tYXRjaCYmKG4+Pj0yKSxiPmUubG9va2FoZWFkJiYoYj1lLmxvb2thaGVhZCk7ZG8gaWYobz10LCEoVFtvK2ddIT09ZnR8fFRbbytnLTFdIT09UGV8fFRbb10hPT1UW3JdfHxUWysrb10hPT1UW3IrMV0pKXtyKz0yLG8rKztkbzt3aGlsZShUWysrcl09PT1UWysrb10mJlRbKytyXT09PVRbKytvXSYmVFsrK3JdPT09VFsrK29dJiZUWysrcl09PT1UWysrb10mJlRbKytyXT09PVRbKytvXSYmVFsrK3JdPT09VFsrK29dJiZUWysrcl09PT1UWysrb10mJlRbKytyXT09PVRbKytvXSYmcjx3ZSk7aWYoYz1qLSh3ZS1yKSxyPXdlLWosYz5nKXtpZihlLm1hdGNoX3N0YXJ0PXQsZz1jLGM+PWIpYnJlYWs7UGU9VFtyK2ctMV0sZnQ9VFtyK2ddfX13aGlsZSgodD1fZVt0JkxdKT5WJiYtLW4hPT0wKTtyZXR1cm4gZzw9ZS5sb29rYWhlYWQ/ZzplLmxvb2thaGVhZH1mdW5jdGlvbiBiZShlKXt2YXIgdD1lLndfc2l6ZSxuLHIsbyxjLGc7ZG97aWYoYz1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49dCsodC1zZSkpe2F0LmFycmF5U2V0KGUud2luZG93LGUud2luZG93LHQsdCwwKSxlLm1hdGNoX3N0YXJ0LT10LGUuc3Ryc3RhcnQtPXQsZS5ibG9ja19zdGFydC09dCxyPWUuaGFzaF9zaXplLG49cjtkbyBvPWUuaGVhZFstLW5dLGUuaGVhZFtuXT1vPj10P28tdDowO3doaWxlKC0tcik7cj10LG49cjtkbyBvPWUucHJldlstLW5dLGUucHJldltuXT1vPj10P28tdDowO3doaWxlKC0tcik7Yys9dH1pZihlLnN0cm0uYXZhaWxfaW49PT0wKWJyZWFrO2lmKHI9WShlLnN0cm0sZS53aW5kb3csZS5zdHJzdGFydCtlLmxvb2thaGVhZCxjKSxlLmxvb2thaGVhZCs9cixlLmxvb2thaGVhZCtlLmluc2VydD49TSlmb3IoZz1lLnN0cnN0YXJ0LWUuaW5zZXJ0LGUuaW5zX2g9ZS53aW5kb3dbZ10sZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2crMV0pJmUuaGFzaF9tYXNrO2UuaW5zZXJ0JiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2crTS0xXSkmZS5oYXNoX21hc2ssZS5wcmV2W2cmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZyxnKyssZS5pbnNlcnQtLSwhKGUubG9va2FoZWFkK2UuaW5zZXJ0PE0pKTspO313aGlsZShlLmxvb2thaGVhZDxzZSYmZS5zdHJtLmF2YWlsX2luIT09MCl9ZnVuY3Rpb24gTWUoZSx0KXt2YXIgbj02NTUzNTtmb3Iobj5lLnBlbmRpbmdfYnVmX3NpemUtNSYmKG49ZS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKGUubG9va2FoZWFkPD0xKXtpZihiZShlKSxlLmxvb2thaGVhZD09PTAmJnQ9PT1WZSlyZXR1cm4gcHQ7aWYoZS5sb29rYWhlYWQ9PT0wKWJyZWFrfWUuc3Ryc3RhcnQrPWUubG9va2FoZWFkLGUubG9va2FoZWFkPTA7dmFyIHI9ZS5ibG9ja19zdGFydCtuO2lmKChlLnN0cnN0YXJ0PT09MHx8ZS5zdHJzdGFydD49cikmJihlLmxvb2thaGVhZD1lLnN0cnN0YXJ0LXIsZS5zdHJzdGFydD1yLEp0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKXx8ZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0Pj1lLndfc2l6ZS1zZSYmKEp0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gcHR9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PWw/KEp0KGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP0J0Ok1uKTooZS5zdHJzdGFydD5lLmJsb2NrX3N0YXJ0JiYoSnQoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApLHB0KX1mdW5jdGlvbiBEZShlLHQpe2Zvcih2YXIgbixyOzspe2lmKGUubG9va2FoZWFkPHNlKXtpZihiZShlKSxlLmxvb2thaGVhZDxzZSYmdD09PVZlKXJldHVybiBwdDtpZihlLmxvb2thaGVhZD09PTApYnJlYWt9aWYobj0wLGUubG9va2FoZWFkPj1NJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrTS0xXSkmZS5oYXNoX21hc2ssbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KSxuIT09MCYmZS5zdHJzdGFydC1uPD1lLndfc2l6ZS1zZSYmKGUubWF0Y2hfbGVuZ3RoPWVlKGUsbikpLGUubWF0Y2hfbGVuZ3RoPj1NKWlmKHI9U2UuX3RyX3RhbGx5KGUsZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0LGUubWF0Y2hfbGVuZ3RoLU0pLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aDw9ZS5tYXhfbGF6eV9tYXRjaCYmZS5sb29rYWhlYWQ+PU0pe2UubWF0Y2hfbGVuZ3RoLS07ZG8gZS5zdHJzdGFydCsrLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0K00tMV0pJmUuaGFzaF9tYXNrLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydDt3aGlsZSgtLWUubWF0Y2hfbGVuZ3RoIT09MCk7ZS5zdHJzdGFydCsrfWVsc2UgZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCxlLmluc19oPWUud2luZG93W2Uuc3Ryc3RhcnRdLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzFdKSZlLmhhc2hfbWFzaztlbHNlIHI9U2UuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0Kys7aWYociYmKEp0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gcHR9cmV0dXJuIGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8TS0xP2Uuc3Ryc3RhcnQ6TS0xLHQ9PT1sPyhKdChlLCEwKSxlLnN0cm0uYXZhaWxfb3V0PT09MD9CdDpNbik6ZS5sYXN0X2xpdCYmKEp0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKT9wdDp4dH1mdW5jdGlvbiBYZShlLHQpe2Zvcih2YXIgbixyLG87Oyl7aWYoZS5sb29rYWhlYWQ8c2Upe2lmKGJlKGUpLGUubG9va2FoZWFkPHNlJiZ0PT09VmUpcmV0dXJuIHB0O2lmKGUubG9va2FoZWFkPT09MClicmVha31pZihuPTAsZS5sb29rYWhlYWQ+PU0mJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCtNLTFdKSZlLmhhc2hfbWFzayxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLGUucHJldl9sZW5ndGg9ZS5tYXRjaF9sZW5ndGgsZS5wcmV2X21hdGNoPWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGg9TS0xLG4hPT0wJiZlLnByZXZfbGVuZ3RoPGUubWF4X2xhenlfbWF0Y2gmJmUuc3Ryc3RhcnQtbjw9ZS53X3NpemUtc2UmJihlLm1hdGNoX2xlbmd0aD1lZShlLG4pLGUubWF0Y2hfbGVuZ3RoPD01JiYoZS5zdHJhdGVneT09PW5lfHxlLm1hdGNoX2xlbmd0aD09PU0mJmUuc3Ryc3RhcnQtZS5tYXRjaF9zdGFydD40MDk2KSYmKGUubWF0Y2hfbGVuZ3RoPU0tMSkpLGUucHJldl9sZW5ndGg+PU0mJmUubWF0Y2hfbGVuZ3RoPD1lLnByZXZfbGVuZ3RoKXtvPWUuc3Ryc3RhcnQrZS5sb29rYWhlYWQtTSxyPVNlLl90cl90YWxseShlLGUuc3Ryc3RhcnQtMS1lLnByZXZfbWF0Y2gsZS5wcmV2X2xlbmd0aC1NKSxlLmxvb2thaGVhZC09ZS5wcmV2X2xlbmd0aC0xLGUucHJldl9sZW5ndGgtPTI7ZG8rK2Uuc3Ryc3RhcnQ8PW8mJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCtNLTFdKSZlLmhhc2hfbWFzayxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpO3doaWxlKC0tZS5wcmV2X2xlbmd0aCE9PTApO2lmKGUubWF0Y2hfYXZhaWxhYmxlPTAsZS5tYXRjaF9sZW5ndGg9TS0xLGUuc3Ryc3RhcnQrKyxyJiYoSnQoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBwdH1lbHNlIGlmKGUubWF0Y2hfYXZhaWxhYmxlKXtpZihyPVNlLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSksciYmSnQoZSwhMSksZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS0sZS5zdHJtLmF2YWlsX291dD09PTApcmV0dXJuIHB0fWVsc2UgZS5tYXRjaF9hdmFpbGFibGU9MSxlLnN0cnN0YXJ0KyssZS5sb29rYWhlYWQtLX1yZXR1cm4gZS5tYXRjaF9hdmFpbGFibGUmJihyPVNlLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSksZS5tYXRjaF9hdmFpbGFibGU9MCksZS5pbnNlcnQ9ZS5zdHJzdGFydDxNLTE/ZS5zdHJzdGFydDpNLTEsdD09PWw/KEp0KGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP0J0Ok1uKTplLmxhc3RfbGl0JiYoSnQoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApP3B0Onh0fWZ1bmN0aW9uIF90KGUsdCl7Zm9yKHZhciBuLHIsbyxjLGc9ZS53aW5kb3c7Oyl7aWYoZS5sb29rYWhlYWQ8PWope2lmKGJlKGUpLGUubG9va2FoZWFkPD1qJiZ0PT09VmUpcmV0dXJuIHB0O2lmKGUubG9va2FoZWFkPT09MClicmVha31pZihlLm1hdGNoX2xlbmd0aD0wLGUubG9va2FoZWFkPj1NJiZlLnN0cnN0YXJ0PjAmJihvPWUuc3Ryc3RhcnQtMSxyPWdbb10scj09PWdbKytvXSYmcj09PWdbKytvXSYmcj09PWdbKytvXSkpe2M9ZS5zdHJzdGFydCtqO2RvO3doaWxlKHI9PT1nWysrb10mJnI9PT1nWysrb10mJnI9PT1nWysrb10mJnI9PT1nWysrb10mJnI9PT1nWysrb10mJnI9PT1nWysrb10mJnI9PT1nWysrb10mJnI9PT1nWysrb10mJm88Yyk7ZS5tYXRjaF9sZW5ndGg9ai0oYy1vKSxlLm1hdGNoX2xlbmd0aD5lLmxvb2thaGVhZCYmKGUubWF0Y2hfbGVuZ3RoPWUubG9va2FoZWFkKX1pZihlLm1hdGNoX2xlbmd0aD49TT8obj1TZS5fdHJfdGFsbHkoZSwxLGUubWF0Y2hfbGVuZ3RoLU0pLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wKToobj1TZS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKyksbiYmKEp0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gcHR9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PWw/KEp0KGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP0J0Ok1uKTplLmxhc3RfbGl0JiYoSnQoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApP3B0Onh0fWZ1bmN0aW9uIGV0KGUsdCl7Zm9yKHZhciBuOzspe2lmKGUubG9va2FoZWFkPT09MCYmKGJlKGUpLGUubG9va2FoZWFkPT09MCkpe2lmKHQ9PT1WZSlyZXR1cm4gcHQ7YnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxuPVNlLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydF0pLGUubG9va2FoZWFkLS0sZS5zdHJzdGFydCsrLG4mJihKdChlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIHB0fXJldHVybiBlLmluc2VydD0wLHQ9PT1sPyhKdChlLCEwKSxlLnN0cm0uYXZhaWxfb3V0PT09MD9CdDpNbik6ZS5sYXN0X2xpdCYmKEp0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKT9wdDp4dH1mdW5jdGlvbiB0dChlLHQsbixyLG8pe3RoaXMuZ29vZF9sZW5ndGg9ZSx0aGlzLm1heF9sYXp5PXQsdGhpcy5uaWNlX2xlbmd0aD1uLHRoaXMubWF4X2NoYWluPXIsdGhpcy5mdW5jPW99dmFyIEhlO0hlPVtuZXcgdHQoMCwwLDAsMCxNZSksbmV3IHR0KDQsNCw4LDQsRGUpLG5ldyB0dCg0LDUsMTYsOCxEZSksbmV3IHR0KDQsNiwzMiwzMixEZSksbmV3IHR0KDQsNCwxNiwxNixYZSksbmV3IHR0KDgsMTYsMzIsMzIsWGUpLG5ldyB0dCg4LDE2LDEyOCwxMjgsWGUpLG5ldyB0dCg4LDMyLDEyOCwyNTYsWGUpLG5ldyB0dCgzMiwxMjgsMjU4LDEwMjQsWGUpLG5ldyB0dCgzMiwyNTgsMjU4LDQwOTYsWGUpXTtmdW5jdGlvbiB6dChlKXtlLndpbmRvd19zaXplPTIqZS53X3NpemUsZnIoZS5oZWFkKSxlLm1heF9sYXp5X21hdGNoPUhlW2UubGV2ZWxdLm1heF9sYXp5LGUuZ29vZF9tYXRjaD1IZVtlLmxldmVsXS5nb29kX2xlbmd0aCxlLm5pY2VfbWF0Y2g9SGVbZS5sZXZlbF0ubmljZV9sZW5ndGgsZS5tYXhfY2hhaW5fbGVuZ3RoPUhlW2UubGV2ZWxdLm1heF9jaGFpbixlLnN0cnN0YXJ0PTAsZS5ibG9ja19zdGFydD0wLGUubG9va2FoZWFkPTAsZS5pbnNlcnQ9MCxlLm1hdGNoX2xlbmd0aD1lLnByZXZfbGVuZ3RoPU0tMSxlLm1hdGNoX2F2YWlsYWJsZT0wLGUuaW5zX2g9MH1mdW5jdGlvbiBMdCgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPXV0LHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBhdC5CdWYxNihLZSoyKSx0aGlzLmR5bl9kdHJlZT1uZXcgYXQuQnVmMTYoKDIqYnQrMSkqMiksdGhpcy5ibF90cmVlPW5ldyBhdC5CdWYxNigoMipDdCsxKSoyKSxmcih0aGlzLmR5bl9sdHJlZSksZnIodGhpcy5keW5fZHRyZWUpLGZyKHRoaXMuYmxfdHJlZSksdGhpcy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IGF0LkJ1ZjE2KFJ0KzEpLHRoaXMuaGVhcD1uZXcgYXQuQnVmMTYoMipPZSsxKSxmcih0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgYXQuQnVmMTYoMipPZSsxKSxmcih0aGlzLmRlcHRoKSx0aGlzLmxfYnVmPTAsdGhpcy5saXRfYnVmc2l6ZT0wLHRoaXMubGFzdF9saXQ9MCx0aGlzLmRfYnVmPTAsdGhpcy5vcHRfbGVuPTAsdGhpcy5zdGF0aWNfbGVuPTAsdGhpcy5tYXRjaGVzPTAsdGhpcy5pbnNlcnQ9MCx0aGlzLmJpX2J1Zj0wLHRoaXMuYmlfdmFsaWQ9MH1mdW5jdGlvbiBXdChlKXt2YXIgdDtyZXR1cm4hZXx8IWUuc3RhdGU/dm4oZSxDKTooZS50b3RhbF9pbj1lLnRvdGFsX291dD0wLGUuZGF0YV90eXBlPUdlLHQ9ZS5zdGF0ZSx0LnBlbmRpbmc9MCx0LnBlbmRpbmdfb3V0PTAsdC53cmFwPDAmJih0LndyYXA9LXQud3JhcCksdC5zdGF0dXM9dC53cmFwP29lOiRlLGUuYWRsZXI9dC53cmFwPT09Mj8wOjEsdC5sYXN0X2ZsdXNoPVZlLFNlLl90cl9pbml0KHQpLF8pfWZ1bmN0aW9uIE9uKGUpe3ZhciB0PVd0KGUpO3JldHVybiB0PT09XyYmenQoZS5zdGF0ZSksdH1mdW5jdGlvbiBHcihlLHQpe3JldHVybiFlfHwhZS5zdGF0ZXx8ZS5zdGF0ZS53cmFwIT09Mj9DOihlLnN0YXRlLmd6aGVhZD10LF8pfWZ1bmN0aW9uIFhuKGUsdCxuLHIsbyxjKXtpZighZSlyZXR1cm4gQzt2YXIgZz0xO2lmKHQ9PT1IJiYodD02KSxyPDA/KGc9MCxyPS1yKTpyPjE1JiYoZz0yLHItPTE2KSxvPDF8fG8+UWV8fG4hPT11dHx8cjw4fHxyPjE1fHx0PDB8fHQ+OXx8YzwwfHxjPnVlKXJldHVybiB2bihlLEMpO3I9PT04JiYocj05KTt2YXIgYj1uZXcgTHQ7cmV0dXJuIGUuc3RhdGU9YixiLnN0cm09ZSxiLndyYXA9ZyxiLmd6aGVhZD1udWxsLGIud19iaXRzPXIsYi53X3NpemU9MTw8Yi53X2JpdHMsYi53X21hc2s9Yi53X3NpemUtMSxiLmhhc2hfYml0cz1vKzcsYi5oYXNoX3NpemU9MTw8Yi5oYXNoX2JpdHMsYi5oYXNoX21hc2s9Yi5oYXNoX3NpemUtMSxiLmhhc2hfc2hpZnQ9fn4oKGIuaGFzaF9iaXRzK00tMSkvTSksYi53aW5kb3c9bmV3IGF0LkJ1ZjgoYi53X3NpemUqMiksYi5oZWFkPW5ldyBhdC5CdWYxNihiLmhhc2hfc2l6ZSksYi5wcmV2PW5ldyBhdC5CdWYxNihiLndfc2l6ZSksYi5saXRfYnVmc2l6ZT0xPDxvKzYsYi5wZW5kaW5nX2J1Zl9zaXplPWIubGl0X2J1ZnNpemUqNCxiLnBlbmRpbmdfYnVmPW5ldyBhdC5CdWY4KGIucGVuZGluZ19idWZfc2l6ZSksYi5kX2J1Zj0xKmIubGl0X2J1ZnNpemUsYi5sX2J1Zj0oMSsyKSpiLmxpdF9idWZzaXplLGIubGV2ZWw9dCxiLnN0cmF0ZWd5PWMsYi5tZXRob2Q9bixPbihlKX1mdW5jdGlvbiB1aShlLHQpe3JldHVybiBYbihlLHQsdXQsUmUsbWUsa2UpfWZ1bmN0aW9uIFdvKGUsdCl7dmFyIG4scixvLGM7aWYoIWV8fCFlLnN0YXRlfHx0PmR8fHQ8MClyZXR1cm4gZT92bihlLEMpOkM7aWYocj1lLnN0YXRlLCFlLm91dHB1dHx8IWUuaW5wdXQmJmUuYXZhaWxfaW4hPT0wfHxyLnN0YXR1cz09PSR0JiZ0IT09bClyZXR1cm4gdm4oZSxlLmF2YWlsX291dD09PTA/RDpDKTtpZihyLnN0cm09ZSxuPXIubGFzdF9mbHVzaCxyLmxhc3RfZmx1c2g9dCxyLnN0YXR1cz09PW9lKWlmKHIud3JhcD09PTIpZS5hZGxlcj0wLGFuKHIsMzEpLGFuKHIsMTM5KSxhbihyLDgpLHIuZ3poZWFkPyhhbihyLChyLmd6aGVhZC50ZXh0PzE6MCkrKHIuZ3poZWFkLmhjcmM/MjowKSsoci5nemhlYWQuZXh0cmE/NDowKSsoci5nemhlYWQubmFtZT84OjApKyhyLmd6aGVhZC5jb21tZW50PzE2OjApKSxhbihyLHIuZ3poZWFkLnRpbWUmMjU1KSxhbihyLHIuZ3poZWFkLnRpbWU+PjgmMjU1KSxhbihyLHIuZ3poZWFkLnRpbWU+PjE2JjI1NSksYW4ocixyLmd6aGVhZC50aW1lPj4yNCYyNTUpLGFuKHIsci5sZXZlbD09PTk/MjpyLnN0cmF0ZWd5Pj12ZXx8ci5sZXZlbDwyPzQ6MCksYW4ocixyLmd6aGVhZC5vcyYyNTUpLHIuZ3poZWFkLmV4dHJhJiZyLmd6aGVhZC5leHRyYS5sZW5ndGgmJihhbihyLHIuZ3poZWFkLmV4dHJhLmxlbmd0aCYyNTUpLGFuKHIsci5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLHIuZ3poZWFkLmhjcmMmJihlLmFkbGVyPUFlKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmcsMCkpLHIuZ3ppbmRleD0wLHIuc3RhdHVzPVVlKTooYW4ociwwKSxhbihyLDApLGFuKHIsMCksYW4ociwwKSxhbihyLDApLGFuKHIsci5sZXZlbD09PTk/MjpyLnN0cmF0ZWd5Pj12ZXx8ci5sZXZlbDwyPzQ6MCksYW4ocixSbiksci5zdGF0dXM9JGUpO2Vsc2V7dmFyIGc9dXQrKHIud19iaXRzLTg8PDQpPDw4LGI9LTE7ci5zdHJhdGVneT49dmV8fHIubGV2ZWw8Mj9iPTA6ci5sZXZlbDw2P2I9MTpyLmxldmVsPT09Nj9iPTI6Yj0zLGd8PWI8PDYsci5zdHJzdGFydCE9PTAmJihnfD1yZSksZys9MzEtZyUzMSxyLnN0YXR1cz0kZSxsbyhyLGcpLHIuc3Ryc3RhcnQhPT0wJiYobG8ocixlLmFkbGVyPj4+MTYpLGxvKHIsZS5hZGxlciY2NTUzNSkpLGUuYWRsZXI9MX1pZihyLnN0YXR1cz09PVVlKWlmKHIuZ3poZWFkLmV4dHJhKXtmb3Iobz1yLnBlbmRpbmc7ci5nemluZGV4PChyLmd6aGVhZC5leHRyYS5sZW5ndGgmNjU1MzUpJiYhKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5vJiYoZS5hZGxlcj1BZShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW8sbykpLG5pKGUpLG89ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpOylhbihyLHIuZ3poZWFkLmV4dHJhW3IuZ3ppbmRleF0mMjU1KSxyLmd6aW5kZXgrKztyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+byYmKGUuYWRsZXI9QWUoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1vLG8pKSxyLmd6aW5kZXg9PT1yLmd6aGVhZC5leHRyYS5sZW5ndGgmJihyLmd6aW5kZXg9MCxyLnN0YXR1cz1ydCl9ZWxzZSByLnN0YXR1cz1ydDtpZihyLnN0YXR1cz09PXJ0KWlmKHIuZ3poZWFkLm5hbWUpe289ci5wZW5kaW5nO2Rve2lmKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5vJiYoZS5hZGxlcj1BZShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW8sbykpLG5pKGUpLG89ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpe2M9MTticmVha31yLmd6aW5kZXg8ci5nemhlYWQubmFtZS5sZW5ndGg/Yz1yLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoci5nemluZGV4KyspJjI1NTpjPTAsYW4ocixjKX13aGlsZShjIT09MCk7ci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPm8mJihlLmFkbGVyPUFlKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctbyxvKSksYz09PTAmJihyLmd6aW5kZXg9MCxyLnN0YXR1cz1xZSl9ZWxzZSByLnN0YXR1cz1xZTtpZihyLnN0YXR1cz09PXFlKWlmKHIuZ3poZWFkLmNvbW1lbnQpe289ci5wZW5kaW5nO2Rve2lmKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5vJiYoZS5hZGxlcj1BZShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW8sbykpLG5pKGUpLG89ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpe2M9MTticmVha31yLmd6aW5kZXg8ci5nemhlYWQuY29tbWVudC5sZW5ndGg/Yz1yLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoci5nemluZGV4KyspJjI1NTpjPTAsYW4ocixjKX13aGlsZShjIT09MCk7ci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPm8mJihlLmFkbGVyPUFlKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctbyxvKSksYz09PTAmJihyLnN0YXR1cz1aZSl9ZWxzZSByLnN0YXR1cz1aZTtpZihyLnN0YXR1cz09PVplJiYoci5nemhlYWQuaGNyYz8oci5wZW5kaW5nKzI+ci5wZW5kaW5nX2J1Zl9zaXplJiZuaShlKSxyLnBlbmRpbmcrMjw9ci5wZW5kaW5nX2J1Zl9zaXplJiYoYW4ocixlLmFkbGVyJjI1NSksYW4ocixlLmFkbGVyPj44JjI1NSksZS5hZGxlcj0wLHIuc3RhdHVzPSRlKSk6ci5zdGF0dXM9JGUpLHIucGVuZGluZyE9PTApe2lmKG5pKGUpLGUuYXZhaWxfb3V0PT09MClyZXR1cm4gci5sYXN0X2ZsdXNoPS0xLF99ZWxzZSBpZihlLmF2YWlsX2luPT09MCYmYm4odCk8PWJuKG4pJiZ0IT09bClyZXR1cm4gdm4oZSxEKTtpZihyLnN0YXR1cz09PSR0JiZlLmF2YWlsX2luIT09MClyZXR1cm4gdm4oZSxEKTtpZihlLmF2YWlsX2luIT09MHx8ci5sb29rYWhlYWQhPT0wfHx0IT09VmUmJnIuc3RhdHVzIT09JHQpe3ZhciBWPXIuc3RyYXRlZ3k9PT12ZT9ldChyLHQpOnIuc3RyYXRlZ3k9PT1CZT9fdChyLHQpOkhlW3IubGV2ZWxdLmZ1bmMocix0KTtpZigoVj09PUJ0fHxWPT09TW4pJiYoci5zdGF0dXM9JHQpLFY9PT1wdHx8Vj09PUJ0KXJldHVybiBlLmF2YWlsX291dD09PTAmJihyLmxhc3RfZmx1c2g9LTEpLF87aWYoVj09PXh0JiYodD09PVR0P1NlLl90cl9hbGlnbihyKTp0IT09ZCYmKFNlLl90cl9zdG9yZWRfYmxvY2sociwwLDAsITEpLHQ9PT1pJiYoZnIoci5oZWFkKSxyLmxvb2thaGVhZD09PTAmJihyLnN0cnN0YXJ0PTAsci5ibG9ja19zdGFydD0wLHIuaW5zZXJ0PTApKSksbmkoZSksZS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gci5sYXN0X2ZsdXNoPS0xLF99cmV0dXJuIHQhPT1sP186ci53cmFwPD0wP0E6KHIud3JhcD09PTI/KGFuKHIsZS5hZGxlciYyNTUpLGFuKHIsZS5hZGxlcj4+OCYyNTUpLGFuKHIsZS5hZGxlcj4+MTYmMjU1KSxhbihyLGUuYWRsZXI+PjI0JjI1NSksYW4ocixlLnRvdGFsX2luJjI1NSksYW4ocixlLnRvdGFsX2luPj44JjI1NSksYW4ocixlLnRvdGFsX2luPj4xNiYyNTUpLGFuKHIsZS50b3RhbF9pbj4+MjQmMjU1KSk6KGxvKHIsZS5hZGxlcj4+PjE2KSxsbyhyLGUuYWRsZXImNjU1MzUpKSxuaShlKSxyLndyYXA+MCYmKHIud3JhcD0tci53cmFwKSxyLnBlbmRpbmchPT0wP186QSl9ZnVuY3Rpb24gZXMoZSl7dmFyIHQ7cmV0dXJuIWV8fCFlLnN0YXRlP0M6KHQ9ZS5zdGF0ZS5zdGF0dXMsdCE9PW9lJiZ0IT09VWUmJnQhPT1ydCYmdCE9PXFlJiZ0IT09WmUmJnQhPT0kZSYmdCE9PSR0P3ZuKGUsQyk6KGUuc3RhdGU9bnVsbCx0PT09JGU/dm4oZSxrKTpfKSl9ZnVuY3Rpb24gd3MoZSx0KXt2YXIgbj10Lmxlbmd0aCxyLG8sYyxnLGIsVixULEw7aWYoIWV8fCFlLnN0YXRlfHwocj1lLnN0YXRlLGc9ci53cmFwLGc9PT0yfHxnPT09MSYmci5zdGF0dXMhPT1vZXx8ci5sb29rYWhlYWQpKXJldHVybiBDO2ZvcihnPT09MSYmKGUuYWRsZXI9RWUoZS5hZGxlcix0LG4sMCkpLHIud3JhcD0wLG4+PXIud19zaXplJiYoZz09PTAmJihmcihyLmhlYWQpLHIuc3Ryc3RhcnQ9MCxyLmJsb2NrX3N0YXJ0PTAsci5pbnNlcnQ9MCksTD1uZXcgYXQuQnVmOChyLndfc2l6ZSksYXQuYXJyYXlTZXQoTCx0LG4tci53X3NpemUsci53X3NpemUsMCksdD1MLG49ci53X3NpemUpLGI9ZS5hdmFpbF9pbixWPWUubmV4dF9pbixUPWUuaW5wdXQsZS5hdmFpbF9pbj1uLGUubmV4dF9pbj0wLGUuaW5wdXQ9dCxiZShyKTtyLmxvb2thaGVhZD49TTspe289ci5zdHJzdGFydCxjPXIubG9va2FoZWFkLShNLTEpO2RvIHIuaW5zX2g9KHIuaW5zX2g8PHIuaGFzaF9zaGlmdF5yLndpbmRvd1tvK00tMV0pJnIuaGFzaF9tYXNrLHIucHJldltvJnIud19tYXNrXT1yLmhlYWRbci5pbnNfaF0sci5oZWFkW3IuaW5zX2hdPW8sbysrO3doaWxlKC0tYyk7ci5zdHJzdGFydD1vLHIubG9va2FoZWFkPU0tMSxiZShyKX1yZXR1cm4gci5zdHJzdGFydCs9ci5sb29rYWhlYWQsci5ibG9ja19zdGFydD1yLnN0cnN0YXJ0LHIuaW5zZXJ0PXIubG9va2FoZWFkLHIubG9va2FoZWFkPTAsci5tYXRjaF9sZW5ndGg9ci5wcmV2X2xlbmd0aD1NLTEsci5tYXRjaF9hdmFpbGFibGU9MCxlLm5leHRfaW49VixlLmlucHV0PVQsZS5hdmFpbF9pbj1iLHIud3JhcD1nLF99UHQuZGVmbGF0ZUluaXQ9dWksUHQuZGVmbGF0ZUluaXQyPVhuLFB0LmRlZmxhdGVSZXNldD1PbixQdC5kZWZsYXRlUmVzZXRLZWVwPVd0LFB0LmRlZmxhdGVTZXRIZWFkZXI9R3IsUHQuZGVmbGF0ZT1XbyxQdC5kZWZsYXRlRW5kPWVzLFB0LmRlZmxhdGVTZXREaWN0aW9uYXJ5PXdzLFB0LmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIjt2YXIgcnI9e30sUmE9eGUsQ3M9ITAsS2k9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoKGUpe0NzPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKGUpe0tpPSExfWZvcih2YXIgR289bmV3IFJhLkJ1ZjgoMjU2KSxjbz0wO2NvPDI1NjtjbysrKUdvW2NvXT1jbz49MjUyPzY6Y28+PTI0OD81OmNvPj0yNDA/NDpjbz49MjI0PzM6Y28+PTE5Mj8yOjE7R29bMjU0XT1Hb1syNTRdPTEscnIuc3RyaW5nMmJ1Zj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxjLGc9ZS5sZW5ndGgsYj0wO2ZvcihvPTA7bzxnO28rKyluPWUuY2hhckNvZGVBdChvKSwobiY2NDUxMik9PT01NTI5NiYmbysxPGcmJihyPWUuY2hhckNvZGVBdChvKzEpLChyJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxvKyspKSxiKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2Zvcih0PW5ldyBSYS5CdWY4KGIpLGM9MCxvPTA7YzxiO28rKyluPWUuY2hhckNvZGVBdChvKSwobiY2NDUxMik9PT01NTI5NiYmbysxPGcmJihyPWUuY2hhckNvZGVBdChvKzEpLChyJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxvKyspKSxuPDEyOD90W2MrK109bjpuPDIwNDg/KHRbYysrXT0xOTJ8bj4+PjYsdFtjKytdPTEyOHxuJjYzKTpuPDY1NTM2Pyh0W2MrK109MjI0fG4+Pj4xMix0W2MrK109MTI4fG4+Pj42JjYzLHRbYysrXT0xMjh8biY2Myk6KHRbYysrXT0yNDB8bj4+PjE4LHRbYysrXT0xMjh8bj4+PjEyJjYzLHRbYysrXT0xMjh8bj4+PjYmNjMsdFtjKytdPTEyOHxuJjYzKTtyZXR1cm4gdH07ZnVuY3Rpb24gX2EoZSx0KXtpZih0PDY1NTM0JiYoZS5zdWJhcnJheSYmS2l8fCFlLnN1YmFycmF5JiZDcykpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxSYS5zaHJpbmtCdWYoZSx0KSk7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIG59cnIuYnVmMmJpbnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gX2EoZSxlLmxlbmd0aCl9LHJyLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBSYS5CdWY4KGUubGVuZ3RoKSxuPTAscj10Lmxlbmd0aDtuPHI7bisrKXRbbl09ZS5jaGFyQ29kZUF0KG4pO3JldHVybiB0fSxyci5idWYyc3RyaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGMsZz10fHxlLmxlbmd0aCxiPW5ldyBBcnJheShnKjIpO2ZvcihyPTAsbj0wO248Zzspe2lmKG89ZVtuKytdLG88MTI4KXtiW3IrK109bztjb250aW51ZX1pZihjPUdvW29dLGM+NCl7YltyKytdPTY1NTMzLG4rPWMtMTtjb250aW51ZX1mb3IobyY9Yz09PTI/MzE6Yz09PTM/MTU6NztjPjEmJm48Zzspbz1vPDw2fGVbbisrXSY2MyxjLS07aWYoYz4xKXtiW3IrK109NjU1MzM7Y29udGludWV9bzw2NTUzNj9iW3IrK109bzooby09NjU1MzYsYltyKytdPTU1Mjk2fG8+PjEwJjEwMjMsYltyKytdPTU2MzIwfG8mMTAyMyl9cmV0dXJuIF9hKGIscil9LHJyLnV0Zjhib3JkZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbjtmb3IodD10fHxlLmxlbmd0aCx0PmUubGVuZ3RoJiYodD1lLmxlbmd0aCksbj10LTE7bj49MCYmKGVbbl0mMTkyKT09PTEyODspbi0tO3JldHVybiBuPDB8fG49PT0wP3Q6bitHb1tlW25dXT50P246dH07ZnVuY3Rpb24gdHMoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfXZhciBjYT10cyx1YT1QdCxZbz14ZSx5bD1ycixZcz1tdCxiYz1jYSxXbD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFh2PTAscHU9NCxFbD0wLFVmPTEsJGY9MixRdj0tMSxlbT0wLHRtPTg7ZnVuY3Rpb24gcXMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcXMpKXJldHVybiBuZXcgcXMoZSk7dGhpcy5vcHRpb25zPVlvLmFzc2lnbih7bGV2ZWw6UXYsbWV0aG9kOnRtLGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6ZW0sdG86IiJ9LGV8fHt9KTt2YXIgdD10aGlzLm9wdGlvbnM7dC5yYXcmJnQud2luZG93Qml0cz4wP3Qud2luZG93Qml0cz0tdC53aW5kb3dCaXRzOnQuZ3ppcCYmdC53aW5kb3dCaXRzPjAmJnQud2luZG93Qml0czwxNiYmKHQud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGJjLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj11YS5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLHQubGV2ZWwsdC5tZXRob2QsdC53aW5kb3dCaXRzLHQubWVtTGV2ZWwsdC5zdHJhdGVneSk7aWYobiE9PUVsKXRocm93IG5ldyBFcnJvcihZc1tuXSk7aWYodC5oZWFkZXImJnVhLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLHQuaGVhZGVyKSx0LmRpY3Rpb25hcnkpe3ZhciByO2lmKHR5cGVvZiB0LmRpY3Rpb25hcnk9PSJzdHJpbmciP3I9eWwuc3RyaW5nMmJ1Zih0LmRpY3Rpb25hcnkpOldsLmNhbGwodC5kaWN0aW9uYXJ5KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/cj1uZXcgVWludDhBcnJheSh0LmRpY3Rpb25hcnkpOnI9dC5kaWN0aW9uYXJ5LG49dWEuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLHIpLG4hPT1FbCl0aHJvdyBuZXcgRXJyb3IoWXNbbl0pO3RoaXMuX2RpY3Rfc2V0PSEwfX1xcy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc3RybSxyPXRoaXMub3B0aW9ucy5jaHVua1NpemUsbyxjO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Yz10PT09fn50P3Q6dD09PSEwP3B1Olh2LHR5cGVvZiBlPT0ic3RyaW5nIj9uLmlucHV0PXlsLnN0cmluZzJidWYoZSk6V2wuY2FsbChlKT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/bi5pbnB1dD1uZXcgVWludDhBcnJheShlKTpuLmlucHV0PWUsbi5uZXh0X2luPTAsbi5hdmFpbF9pbj1uLmlucHV0Lmxlbmd0aDtkb3tpZihuLmF2YWlsX291dD09PTAmJihuLm91dHB1dD1uZXcgWW8uQnVmOChyKSxuLm5leHRfb3V0PTAsbi5hdmFpbF9vdXQ9ciksbz11YS5kZWZsYXRlKG4sYyksbyE9PVVmJiZvIT09RWwpcmV0dXJuIHRoaXMub25FbmQobyksdGhpcy5lbmRlZD0hMCwhMTsobi5hdmFpbF9vdXQ9PT0wfHxuLmF2YWlsX2luPT09MCYmKGM9PT1wdXx8Yz09PSRmKSkmJih0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj90aGlzLm9uRGF0YSh5bC5idWYyYmluc3RyaW5nKFlvLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKFlvLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpfXdoaWxlKChuLmF2YWlsX2luPjB8fG4uYXZhaWxfb3V0PT09MCkmJm8hPT1VZik7cmV0dXJuIGM9PT1wdT8obz11YS5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChvKSx0aGlzLmVuZGVkPSEwLG89PT1FbCk6KGM9PT0kZiYmKHRoaXMub25FbmQoRWwpLG4uYXZhaWxfb3V0PTApLCEwKX0scXMucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfSxxcy5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7ZT09PUVsJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9WW8uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ307ZnVuY3Rpb24gdnUoZSx0KXt2YXIgbj1uZXcgcXModCk7aWYobi5wdXNoKGUsITApLG4uZXJyKXRocm93IG4ubXNnfHxZc1tuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIG5tKGUsdCl7cmV0dXJuIHQ9dHx8e30sdC5yYXc9ITAsdnUoZSx0KX1mdW5jdGlvbiBybShlLHQpe3JldHVybiB0PXR8fHt9LHQuZ3ppcD0hMCx2dShlLHQpfU50LkRlZmxhdGU9cXMsTnQuZGVmbGF0ZT12dSxOdC5kZWZsYXRlUmF3PW5tLE50Lmd6aXA9cm07dmFyIEdsPXt9LGJhPXt9LHljPTMwLGltPTEyLG9tPWZ1bmN0aW9uKHQsbil7dmFyIHIsbyxjLGcsYixWLFQsTCxfZSx3ZSxQZSxmdCxodCxGdCxTdCxtbix0bixubixFdCxLdCxjbixadCxDbixocixybjtyPXQuc3RhdGUsbz10Lm5leHRfaW4saHI9dC5pbnB1dCxjPW8rKHQuYXZhaWxfaW4tNSksZz10Lm5leHRfb3V0LHJuPXQub3V0cHV0LGI9Zy0obi10LmF2YWlsX291dCksVj1nKyh0LmF2YWlsX291dC0yNTcpLFQ9ci5kbWF4LEw9ci53c2l6ZSxfZT1yLndoYXZlLHdlPXIud25leHQsUGU9ci53aW5kb3csZnQ9ci5ob2xkLGh0PXIuYml0cyxGdD1yLmxlbmNvZGUsU3Q9ci5kaXN0Y29kZSxtbj0oMTw8ci5sZW5iaXRzKS0xLHRuPSgxPDxyLmRpc3RiaXRzKS0xO2U6ZG97aHQ8MTUmJihmdCs9aHJbbysrXTw8aHQsaHQrPTgsZnQrPWhyW28rK108PGh0LGh0Kz04KSxubj1GdFtmdCZtbl07dDpmb3IoOzspe2lmKEV0PW5uPj4+MjQsZnQ+Pj49RXQsaHQtPUV0LEV0PW5uPj4+MTYmMjU1LEV0PT09MClybltnKytdPW5uJjY1NTM1O2Vsc2UgaWYoRXQmMTYpe0t0PW5uJjY1NTM1LEV0Jj0xNSxFdCYmKGh0PEV0JiYoZnQrPWhyW28rK108PGh0LGh0Kz04KSxLdCs9ZnQmKDE8PEV0KS0xLGZ0Pj4+PUV0LGh0LT1FdCksaHQ8MTUmJihmdCs9aHJbbysrXTw8aHQsaHQrPTgsZnQrPWhyW28rK108PGh0LGh0Kz04KSxubj1TdFtmdCZ0bl07bjpmb3IoOzspe2lmKEV0PW5uPj4+MjQsZnQ+Pj49RXQsaHQtPUV0LEV0PW5uPj4+MTYmMjU1LEV0JjE2KXtpZihjbj1ubiY2NTUzNSxFdCY9MTUsaHQ8RXQmJihmdCs9aHJbbysrXTw8aHQsaHQrPTgsaHQ8RXQmJihmdCs9aHJbbysrXTw8aHQsaHQrPTgpKSxjbis9ZnQmKDE8PEV0KS0xLGNuPlQpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsci5tb2RlPXljO2JyZWFrIGV9aWYoZnQ+Pj49RXQsaHQtPUV0LEV0PWctYixjbj5FdCl7aWYoRXQ9Y24tRXQsRXQ+X2UmJnIuc2FuZSl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixyLm1vZGU9eWM7YnJlYWsgZX1pZihadD0wLENuPVBlLHdlPT09MCl7aWYoWnQrPUwtRXQsRXQ8S3Qpe0t0LT1FdDtkbyBybltnKytdPVBlW1p0KytdO3doaWxlKC0tRXQpO1p0PWctY24sQ249cm59fWVsc2UgaWYod2U8RXQpe2lmKFp0Kz1MK3dlLUV0LEV0LT13ZSxFdDxLdCl7S3QtPUV0O2RvIHJuW2crK109UGVbWnQrK107d2hpbGUoLS1FdCk7aWYoWnQ9MCx3ZTxLdCl7RXQ9d2UsS3QtPUV0O2RvIHJuW2crK109UGVbWnQrK107d2hpbGUoLS1FdCk7WnQ9Zy1jbixDbj1ybn19fWVsc2UgaWYoWnQrPXdlLUV0LEV0PEt0KXtLdC09RXQ7ZG8gcm5bZysrXT1QZVtadCsrXTt3aGlsZSgtLUV0KTtadD1nLWNuLENuPXJufWZvcig7S3Q+Mjspcm5bZysrXT1DbltadCsrXSxybltnKytdPUNuW1p0KytdLHJuW2crK109Q25bWnQrK10sS3QtPTM7S3QmJihybltnKytdPUNuW1p0KytdLEt0PjEmJihybltnKytdPUNuW1p0KytdKSl9ZWxzZXtadD1nLWNuO2RvIHJuW2crK109cm5bWnQrK10scm5bZysrXT1ybltadCsrXSxybltnKytdPXJuW1p0KytdLEt0LT0zO3doaWxlKEt0PjIpO0t0JiYocm5bZysrXT1ybltadCsrXSxLdD4xJiYocm5bZysrXT1ybltadCsrXSkpfX1lbHNlIGlmKChFdCY2NCk9PT0wKXtubj1TdFsobm4mNjU1MzUpKyhmdCYoMTw8RXQpLTEpXTtjb250aW51ZSBufWVsc2V7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsci5tb2RlPXljO2JyZWFrIGV9YnJlYWt9fWVsc2UgaWYoKEV0JjY0KT09PTApe25uPUZ0WyhubiY2NTUzNSkrKGZ0JigxPDxFdCktMSldO2NvbnRpbnVlIHR9ZWxzZSBpZihFdCYzMil7ci5tb2RlPWltO2JyZWFrIGV9ZWxzZXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixyLm1vZGU9eWM7YnJlYWsgZX1icmVha319d2hpbGUobzxjJiZnPFYpO0t0PWh0Pj4zLG8tPUt0LGh0LT1LdDw8MyxmdCY9KDE8PGh0KS0xLHQubmV4dF9pbj1vLHQubmV4dF9vdXQ9Zyx0LmF2YWlsX2luPW88Yz81KyhjLW8pOjUtKG8tYyksdC5hdmFpbF9vdXQ9ZzxWPzI1NysoVi1nKToyNTctKGctViksci5ob2xkPWZ0LHIuYml0cz1odH0sSGY9eGUsU2w9MTUsamY9ODUyLHpmPTU5MixXZj0wLG11PTEsR2Y9MixhbT1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLHNtPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sbG09WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLGNtPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF0sdW09ZnVuY3Rpb24odCxuLHIsbyxjLGcsYixWKXt2YXIgVD1WLmJpdHMsTD0wLF9lPTAsd2U9MCxQZT0wLGZ0PTAsaHQ9MCxGdD0wLFN0PTAsbW49MCx0bj0wLG5uLEV0LEt0LGNuLFp0LENuPW51bGwsaHI9MCxybixBYT1uZXcgSGYuQnVmMTYoU2wrMSksS2M9bmV3IEhmLkJ1ZjE2KFNsKzEpLFpjPW51bGwsQXA9MCxPcCxYYyxRYztmb3IoTD0wO0w8PVNsO0wrKylBYVtMXT0wO2ZvcihfZT0wO19lPG87X2UrKylBYVtuW3IrX2VdXSsrO2ZvcihmdD1ULFBlPVNsO1BlPj0xJiZBYVtQZV09PT0wO1BlLS0pO2lmKGZ0PlBlJiYoZnQ9UGUpLFBlPT09MClyZXR1cm4gY1tnKytdPTE8PDI0fDY0PDwxNnwwLGNbZysrXT0xPDwyNHw2NDw8MTZ8MCxWLmJpdHM9MSwwO2Zvcih3ZT0xO3dlPFBlJiZBYVt3ZV09PT0wO3dlKyspO2ZvcihmdDx3ZSYmKGZ0PXdlKSxTdD0xLEw9MTtMPD1TbDtMKyspaWYoU3Q8PD0xLFN0LT1BYVtMXSxTdDwwKXJldHVybi0xO2lmKFN0PjAmJih0PT09V2Z8fFBlIT09MSkpcmV0dXJuLTE7Zm9yKEtjWzFdPTAsTD0xO0w8U2w7TCsrKUtjW0wrMV09S2NbTF0rQWFbTF07Zm9yKF9lPTA7X2U8bztfZSsrKW5bcitfZV0hPT0wJiYoYltLY1tuW3IrX2VdXSsrXT1fZSk7aWYodD09PVdmPyhDbj1aYz1iLHJuPTE5KTp0PT09bXU/KENuPWFtLGhyLT0yNTcsWmM9c20sQXAtPTI1Nyxybj0yNTYpOihDbj1sbSxaYz1jbSxybj0tMSksdG49MCxfZT0wLEw9d2UsWnQ9ZyxodD1mdCxGdD0wLEt0PS0xLG1uPTE8PGZ0LGNuPW1uLTEsdD09PW11JiZtbj5qZnx8dD09PUdmJiZtbj56ZilyZXR1cm4gMTtmb3IoOzspe09wPUwtRnQsYltfZV08cm4/KFhjPTAsUWM9YltfZV0pOmJbX2VdPnJuPyhYYz1aY1tBcCtiW19lXV0sUWM9Q25baHIrYltfZV1dKTooWGM9MzIrNjQsUWM9MCksbm49MTw8TC1GdCxFdD0xPDxodCx3ZT1FdDtkbyBFdC09bm4sY1tadCsodG4+PkZ0KStFdF09T3A8PDI0fFhjPDwxNnxRY3wwO3doaWxlKEV0IT09MCk7Zm9yKG5uPTE8PEwtMTt0biZubjspbm4+Pj0xO2lmKG5uIT09MD8odG4mPW5uLTEsdG4rPW5uKTp0bj0wLF9lKyssLS1BYVtMXT09PTApe2lmKEw9PT1QZSlicmVhaztMPW5bcitiW19lXV19aWYoTD5mdCYmKHRuJmNuKSE9PUt0KXtmb3IoRnQ9PT0wJiYoRnQ9ZnQpLFp0Kz13ZSxodD1MLUZ0LFN0PTE8PGh0O2h0K0Z0PFBlJiYoU3QtPUFhW2h0K0Z0XSwhKFN0PD0wKSk7KWh0KyssU3Q8PD0xO2lmKG1uKz0xPDxodCx0PT09bXUmJm1uPmpmfHx0PT09R2YmJm1uPnpmKXJldHVybiAxO0t0PXRuJmNuLGNbS3RdPWZ0PDwyNHxodDw8MTZ8WnQtZ3wwfX1yZXR1cm4gdG4hPT0wJiYoY1tadCt0bl09TC1GdDw8MjR8NjQ8PDE2fDApLFYuYml0cz1mdCwwfSxxbz14ZSxfdT1XZSx4YT1KZSxmbT1vbSxZbD11bSxkbT0wLFlmPTEscWY9MixKZj00LGhtPTUsRWM9NixKcz0wLGdtPTEscG09MixmYT0tMixLZj0tMyxaZj0tNCx2bT0tNSxYZj04LFFmPTEsZWQ9Mix0ZD0zLG5kPTQscmQ9NSxpZD02LG9kPTcsYWQ9OCxzZD05LGxkPTEwLFNjPTExLG5zPTEyLGJ1PTEzLGNkPTE0LHl1PTE1LHVkPTE2LGZkPTE3LGRkPTE4LGhkPTE5LHdjPTIwLENjPTIxLGdkPTIyLHBkPTIzLHZkPTI0LG1kPTI1LF9kPTI2LEV1PTI3LGJkPTI4LHlkPTI5LFNyPTMwLEVkPTMxLG1tPTMyLF9tPTg1MixibT01OTIseW09MTUsRW09eW07ZnVuY3Rpb24gU2QoZSl7cmV0dXJuKGU+Pj4yNCYyNTUpKyhlPj4+OCY2NTI4MCkrKChlJjY1MjgwKTw8OCkrKChlJjI1NSk8PDI0KX1mdW5jdGlvbiBTbSgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgcW8uQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHFvLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIHdkKGUpe3ZhciB0O3JldHVybiFlfHwhZS5zdGF0ZT9mYToodD1lLnN0YXRlLGUudG90YWxfaW49ZS50b3RhbF9vdXQ9dC50b3RhbD0wLGUubXNnPSIiLHQud3JhcCYmKGUuYWRsZXI9dC53cmFwJjEpLHQubW9kZT1RZix0Lmxhc3Q9MCx0LmhhdmVkaWN0PTAsdC5kbWF4PTMyNzY4LHQuaGVhZD1udWxsLHQuaG9sZD0wLHQuYml0cz0wLHQubGVuY29kZT10LmxlbmR5bj1uZXcgcW8uQnVmMzIoX20pLHQuZGlzdGNvZGU9dC5kaXN0ZHluPW5ldyBxby5CdWYzMihibSksdC5zYW5lPTEsdC5iYWNrPS0xLEpzKX1mdW5jdGlvbiBDZChlKXt2YXIgdDtyZXR1cm4hZXx8IWUuc3RhdGU/ZmE6KHQ9ZS5zdGF0ZSx0LndzaXplPTAsdC53aGF2ZT0wLHQud25leHQ9MCx3ZChlKSl9ZnVuY3Rpb24gQWQoZSx0KXt2YXIgbixyO3JldHVybiFlfHwhZS5zdGF0ZXx8KHI9ZS5zdGF0ZSx0PDA/KG49MCx0PS10KToobj0odD4+NCkrMSx0PDQ4JiYodCY9MTUpKSx0JiYodDw4fHx0PjE1KSk/ZmE6KHIud2luZG93IT09bnVsbCYmci53Yml0cyE9PXQmJihyLndpbmRvdz1udWxsKSxyLndyYXA9bixyLndiaXRzPXQsQ2QoZSkpfWZ1bmN0aW9uIE9kKGUsdCl7dmFyIG4scjtyZXR1cm4gZT8ocj1uZXcgU20sZS5zdGF0ZT1yLHIud2luZG93PW51bGwsbj1BZChlLHQpLG4hPT1KcyYmKGUuc3RhdGU9bnVsbCksbik6ZmF9ZnVuY3Rpb24gd20oZSl7cmV0dXJuIE9kKGUsRW0pfXZhciBUZD0hMCxTdSx3dTtmdW5jdGlvbiBDbShlKXtpZihUZCl7dmFyIHQ7Zm9yKFN1PW5ldyBxby5CdWYzMig1MTIpLHd1PW5ldyBxby5CdWYzMigzMiksdD0wO3Q8MTQ0OyllLmxlbnNbdCsrXT04O2Zvcig7dDwyNTY7KWUubGVuc1t0KytdPTk7Zm9yKDt0PDI4MDspZS5sZW5zW3QrK109Nztmb3IoO3Q8Mjg4OyllLmxlbnNbdCsrXT04O2ZvcihZbChZZixlLmxlbnMsMCwyODgsU3UsMCxlLndvcmsse2JpdHM6OX0pLHQ9MDt0PDMyOyllLmxlbnNbdCsrXT01O1lsKHFmLGUubGVucywwLDMyLHd1LDAsZS53b3JrLHtiaXRzOjV9KSxUZD0hMX1lLmxlbmNvZGU9U3UsZS5sZW5iaXRzPTksZS5kaXN0Y29kZT13dSxlLmRpc3RiaXRzPTV9ZnVuY3Rpb24gUGQoZSx0LG4scil7dmFyIG8sYz1lLnN0YXRlO3JldHVybiBjLndpbmRvdz09PW51bGwmJihjLndzaXplPTE8PGMud2JpdHMsYy53bmV4dD0wLGMud2hhdmU9MCxjLndpbmRvdz1uZXcgcW8uQnVmOChjLndzaXplKSkscj49Yy53c2l6ZT8ocW8uYXJyYXlTZXQoYy53aW5kb3csdCxuLWMud3NpemUsYy53c2l6ZSwwKSxjLnduZXh0PTAsYy53aGF2ZT1jLndzaXplKToobz1jLndzaXplLWMud25leHQsbz5yJiYobz1yKSxxby5hcnJheVNldChjLndpbmRvdyx0LG4tcixvLGMud25leHQpLHItPW8scj8ocW8uYXJyYXlTZXQoYy53aW5kb3csdCxuLXIsciwwKSxjLnduZXh0PXIsYy53aGF2ZT1jLndzaXplKTooYy53bmV4dCs9byxjLnduZXh0PT09Yy53c2l6ZSYmKGMud25leHQ9MCksYy53aGF2ZTxjLndzaXplJiYoYy53aGF2ZSs9bykpKSwwfWZ1bmN0aW9uIEFtKGUsdCl7dmFyIG4scixvLGMsZyxiLFYsVCxMLF9lLHdlLFBlLGZ0LGh0LEZ0PTAsU3QsbW4sdG4sbm4sRXQsS3QsY24sWnQsQ249bmV3IHFvLkJ1ZjgoNCksaHIscm4sQWE9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFlfHwhZS5zdGF0ZXx8IWUub3V0cHV0fHwhZS5pbnB1dCYmZS5hdmFpbF9pbiE9PTApcmV0dXJuIGZhO249ZS5zdGF0ZSxuLm1vZGU9PT1ucyYmKG4ubW9kZT1idSksZz1lLm5leHRfb3V0LG89ZS5vdXRwdXQsVj1lLmF2YWlsX291dCxjPWUubmV4dF9pbixyPWUuaW5wdXQsYj1lLmF2YWlsX2luLFQ9bi5ob2xkLEw9bi5iaXRzLF9lPWIsd2U9VixadD1KcztlOmZvcig7Oylzd2l0Y2gobi5tb2RlKXtjYXNlIFFmOmlmKG4ud3JhcD09PTApe24ubW9kZT1idTticmVha31mb3IoO0w8MTY7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEwsTCs9OH1pZihuLndyYXAmMiYmVD09PTM1NjE1KXtuLmNoZWNrPTAsQ25bMF09VCYyNTUsQ25bMV09VD4+PjgmMjU1LG4uY2hlY2s9eGEobi5jaGVjayxDbiwyLDApLFQ9MCxMPTAsbi5tb2RlPWVkO2JyZWFrfWlmKG4uZmxhZ3M9MCxuLmhlYWQmJihuLmhlYWQuZG9uZT0hMSksIShuLndyYXAmMSl8fCgoKFQmMjU1KTw8OCkrKFQ+PjgpKSUzMSl7ZS5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLG4ubW9kZT1TcjticmVha31pZigoVCYxNSkhPT1YZil7ZS5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9U3I7YnJlYWt9aWYoVD4+Pj00LEwtPTQsY249KFQmMTUpKzgsbi53Yml0cz09PTApbi53Yml0cz1jbjtlbHNlIGlmKGNuPm4ud2JpdHMpe2UubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixuLm1vZGU9U3I7YnJlYWt9bi5kbWF4PTE8PGNuLGUuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1UJjUxMj9sZDpucyxUPTAsTD0wO2JyZWFrO2Nhc2UgZWQ6Zm9yKDtMPDE2Oyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxMLEwrPTh9aWYobi5mbGFncz1ULChuLmZsYWdzJjI1NSkhPT1YZil7ZS5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9U3I7YnJlYWt9aWYobi5mbGFncyY1NzM0NCl7ZS5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsbi5tb2RlPVNyO2JyZWFrfW4uaGVhZCYmKG4uaGVhZC50ZXh0PVQ+PjgmMSksbi5mbGFncyY1MTImJihDblswXT1UJjI1NSxDblsxXT1UPj4+OCYyNTUsbi5jaGVjaz14YShuLmNoZWNrLENuLDIsMCkpLFQ9MCxMPTAsbi5tb2RlPXRkO2Nhc2UgdGQ6Zm9yKDtMPDMyOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxMLEwrPTh9bi5oZWFkJiYobi5oZWFkLnRpbWU9VCksbi5mbGFncyY1MTImJihDblswXT1UJjI1NSxDblsxXT1UPj4+OCYyNTUsQ25bMl09VD4+PjE2JjI1NSxDblszXT1UPj4+MjQmMjU1LG4uY2hlY2s9eGEobi5jaGVjayxDbiw0LDApKSxUPTAsTD0wLG4ubW9kZT1uZDtjYXNlIG5kOmZvcig7TDwxNjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8TCxMKz04fW4uaGVhZCYmKG4uaGVhZC54ZmxhZ3M9VCYyNTUsbi5oZWFkLm9zPVQ+PjgpLG4uZmxhZ3MmNTEyJiYoQ25bMF09VCYyNTUsQ25bMV09VD4+PjgmMjU1LG4uY2hlY2s9eGEobi5jaGVjayxDbiwyLDApKSxUPTAsTD0wLG4ubW9kZT1yZDtjYXNlIHJkOmlmKG4uZmxhZ3MmMTAyNCl7Zm9yKDtMPDE2Oyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxMLEwrPTh9bi5sZW5ndGg9VCxuLmhlYWQmJihuLmhlYWQuZXh0cmFfbGVuPVQpLG4uZmxhZ3MmNTEyJiYoQ25bMF09VCYyNTUsQ25bMV09VD4+PjgmMjU1LG4uY2hlY2s9eGEobi5jaGVjayxDbiwyLDApKSxUPTAsTD0wfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmV4dHJhPW51bGwpO24ubW9kZT1pZDtjYXNlIGlkOmlmKG4uZmxhZ3MmMTAyNCYmKFBlPW4ubGVuZ3RoLFBlPmImJihQZT1iKSxQZSYmKG4uaGVhZCYmKGNuPW4uaGVhZC5leHRyYV9sZW4tbi5sZW5ndGgsbi5oZWFkLmV4dHJhfHwobi5oZWFkLmV4dHJhPW5ldyBBcnJheShuLmhlYWQuZXh0cmFfbGVuKSkscW8uYXJyYXlTZXQobi5oZWFkLmV4dHJhLHIsYyxQZSxjbikpLG4uZmxhZ3MmNTEyJiYobi5jaGVjaz14YShuLmNoZWNrLHIsUGUsYykpLGItPVBlLGMrPVBlLG4ubGVuZ3RoLT1QZSksbi5sZW5ndGgpKWJyZWFrIGU7bi5sZW5ndGg9MCxuLm1vZGU9b2Q7Y2FzZSBvZDppZihuLmZsYWdzJjIwNDgpe2lmKGI9PT0wKWJyZWFrIGU7UGU9MDtkbyBjbj1yW2MrUGUrK10sbi5oZWFkJiZjbiYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShjbikpO3doaWxlKGNuJiZQZTxiKTtpZihuLmZsYWdzJjUxMiYmKG4uY2hlY2s9eGEobi5jaGVjayxyLFBlLGMpKSxiLT1QZSxjKz1QZSxjbilicmVhayBlfWVsc2Ugbi5oZWFkJiYobi5oZWFkLm5hbWU9bnVsbCk7bi5sZW5ndGg9MCxuLm1vZGU9YWQ7Y2FzZSBhZDppZihuLmZsYWdzJjQwOTYpe2lmKGI9PT0wKWJyZWFrIGU7UGU9MDtkbyBjbj1yW2MrUGUrK10sbi5oZWFkJiZjbiYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShjbikpO3doaWxlKGNuJiZQZTxiKTtpZihuLmZsYWdzJjUxMiYmKG4uY2hlY2s9eGEobi5jaGVjayxyLFBlLGMpKSxiLT1QZSxjKz1QZSxjbilicmVhayBlfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmNvbW1lbnQ9bnVsbCk7bi5tb2RlPXNkO2Nhc2Ugc2Q6aWYobi5mbGFncyY1MTIpe2Zvcig7TDwxNjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8TCxMKz04fWlmKFQhPT0obi5jaGVjayY2NTUzNSkpe2UubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixuLm1vZGU9U3I7YnJlYWt9VD0wLEw9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1uLmZsYWdzPj45JjEsbi5oZWFkLmRvbmU9ITApLGUuYWRsZXI9bi5jaGVjaz0wLG4ubW9kZT1uczticmVhaztjYXNlIGxkOmZvcig7TDwzMjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8TCxMKz04fWUuYWRsZXI9bi5jaGVjaz1TZChUKSxUPTAsTD0wLG4ubW9kZT1TYztjYXNlIFNjOmlmKG4uaGF2ZWRpY3Q9PT0wKXJldHVybiBlLm5leHRfb3V0PWcsZS5hdmFpbF9vdXQ9VixlLm5leHRfaW49YyxlLmF2YWlsX2luPWIsbi5ob2xkPVQsbi5iaXRzPUwscG07ZS5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPW5zO2Nhc2UgbnM6aWYodD09PWhtfHx0PT09RWMpYnJlYWsgZTtjYXNlIGJ1OmlmKG4ubGFzdCl7VD4+Pj1MJjcsTC09TCY3LG4ubW9kZT1FdTticmVha31mb3IoO0w8Mzspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8TCxMKz04fXN3aXRjaChuLmxhc3Q9VCYxLFQ+Pj49MSxMLT0xLFQmMyl7Y2FzZSAwOm4ubW9kZT1jZDticmVhaztjYXNlIDE6aWYoQ20obiksbi5tb2RlPXdjLHQ9PT1FYyl7VD4+Pj0yLEwtPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6bi5tb2RlPWZkO2JyZWFrO2Nhc2UgMzplLm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixuLm1vZGU9U3J9VD4+Pj0yLEwtPTI7YnJlYWs7Y2FzZSBjZDpmb3IoVD4+Pj1MJjcsTC09TCY3O0w8MzI7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEwsTCs9OH1pZigoVCY2NTUzNSkhPT0oVD4+PjE2XjY1NTM1KSl7ZS5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLG4ubW9kZT1TcjticmVha31pZihuLmxlbmd0aD1UJjY1NTM1LFQ9MCxMPTAsbi5tb2RlPXl1LHQ9PT1FYylicmVhayBlO2Nhc2UgeXU6bi5tb2RlPXVkO2Nhc2UgdWQ6aWYoUGU9bi5sZW5ndGgsUGUpe2lmKFBlPmImJihQZT1iKSxQZT5WJiYoUGU9ViksUGU9PT0wKWJyZWFrIGU7cW8uYXJyYXlTZXQobyxyLGMsUGUsZyksYi09UGUsYys9UGUsVi09UGUsZys9UGUsbi5sZW5ndGgtPVBlO2JyZWFrfW4ubW9kZT1uczticmVhaztjYXNlIGZkOmZvcig7TDwxNDspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8TCxMKz04fWlmKG4ubmxlbj0oVCYzMSkrMjU3LFQ+Pj49NSxMLT01LG4ubmRpc3Q9KFQmMzEpKzEsVD4+Pj01LEwtPTUsbi5uY29kZT0oVCYxNSkrNCxUPj4+PTQsTC09NCxuLm5sZW4+Mjg2fHxuLm5kaXN0PjMwKXtlLm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLG4ubW9kZT1TcjticmVha31uLmhhdmU9MCxuLm1vZGU9ZGQ7Y2FzZSBkZDpmb3IoO24uaGF2ZTxuLm5jb2RlOyl7Zm9yKDtMPDM7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEwsTCs9OH1uLmxlbnNbQWFbbi5oYXZlKytdXT1UJjcsVD4+Pj0zLEwtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tBYVtuLmhhdmUrK11dPTA7aWYobi5sZW5jb2RlPW4ubGVuZHluLG4ubGVuYml0cz03LGhyPXtiaXRzOm4ubGVuYml0c30sWnQ9WWwoZG0sbi5sZW5zLDAsMTksbi5sZW5jb2RlLDAsbi53b3JrLGhyKSxuLmxlbmJpdHM9aHIuYml0cyxadCl7ZS5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsbi5tb2RlPVNyO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT1oZDtjYXNlIGhkOmZvcig7bi5oYXZlPG4ubmxlbituLm5kaXN0Oyl7Zm9yKDtGdD1uLmxlbmNvZGVbVCYoMTw8bi5sZW5iaXRzKS0xXSxTdD1GdD4+PjI0LG1uPUZ0Pj4+MTYmMjU1LHRuPUZ0JjY1NTM1LCEoU3Q8PUwpOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxMLEwrPTh9aWYodG48MTYpVD4+Pj1TdCxMLT1TdCxuLmxlbnNbbi5oYXZlKytdPXRuO2Vsc2V7aWYodG49PT0xNil7Zm9yKHJuPVN0KzI7TDxybjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8TCxMKz04fWlmKFQ+Pj49U3QsTC09U3Qsbi5oYXZlPT09MCl7ZS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT1TcjticmVha31jbj1uLmxlbnNbbi5oYXZlLTFdLFBlPTMrKFQmMyksVD4+Pj0yLEwtPTJ9ZWxzZSBpZih0bj09PTE3KXtmb3Iocm49U3QrMztMPHJuOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxMLEwrPTh9VD4+Pj1TdCxMLT1TdCxjbj0wLFBlPTMrKFQmNyksVD4+Pj0zLEwtPTN9ZWxzZXtmb3Iocm49U3QrNztMPHJuOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxMLEwrPTh9VD4+Pj1TdCxMLT1TdCxjbj0wLFBlPTExKyhUJjEyNyksVD4+Pj03LEwtPTd9aWYobi5oYXZlK1BlPm4ubmxlbituLm5kaXN0KXtlLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPVNyO2JyZWFrfWZvcig7UGUtLTspbi5sZW5zW24uaGF2ZSsrXT1jbn19aWYobi5tb2RlPT09U3IpYnJlYWs7aWYobi5sZW5zWzI1Nl09PT0wKXtlLm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixuLm1vZGU9U3I7YnJlYWt9aWYobi5sZW5iaXRzPTksaHI9e2JpdHM6bi5sZW5iaXRzfSxadD1ZbChZZixuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLGhyKSxuLmxlbmJpdHM9aHIuYml0cyxadCl7ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsbi5tb2RlPVNyO2JyZWFrfWlmKG4uZGlzdGJpdHM9NixuLmRpc3Rjb2RlPW4uZGlzdGR5bixocj17Yml0czpuLmRpc3RiaXRzfSxadD1ZbChxZixuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayxociksbi5kaXN0Yml0cz1oci5iaXRzLFp0KXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9U3I7YnJlYWt9aWYobi5tb2RlPXdjLHQ9PT1FYylicmVhayBlO2Nhc2Ugd2M6bi5tb2RlPUNjO2Nhc2UgQ2M6aWYoYj49NiYmVj49MjU4KXtlLm5leHRfb3V0PWcsZS5hdmFpbF9vdXQ9VixlLm5leHRfaW49YyxlLmF2YWlsX2luPWIsbi5ob2xkPVQsbi5iaXRzPUwsZm0oZSx3ZSksZz1lLm5leHRfb3V0LG89ZS5vdXRwdXQsVj1lLmF2YWlsX291dCxjPWUubmV4dF9pbixyPWUuaW5wdXQsYj1lLmF2YWlsX2luLFQ9bi5ob2xkLEw9bi5iaXRzLG4ubW9kZT09PW5zJiYobi5iYWNrPS0xKTticmVha31mb3Iobi5iYWNrPTA7RnQ9bi5sZW5jb2RlW1QmKDE8PG4ubGVuYml0cyktMV0sU3Q9RnQ+Pj4yNCxtbj1GdD4+PjE2JjI1NSx0bj1GdCY2NTUzNSwhKFN0PD1MKTspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8TCxMKz04fWlmKG1uJiYobW4mMjQwKT09PTApe2Zvcihubj1TdCxFdD1tbixLdD10bjtGdD1uLmxlbmNvZGVbS3QrKChUJigxPDxubitFdCktMSk+Pm5uKV0sU3Q9RnQ+Pj4yNCxtbj1GdD4+PjE2JjI1NSx0bj1GdCY2NTUzNSwhKG5uK1N0PD1MKTspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8TCxMKz04fVQ+Pj49bm4sTC09bm4sbi5iYWNrKz1ubn1pZihUPj4+PVN0LEwtPVN0LG4uYmFjays9U3Qsbi5sZW5ndGg9dG4sbW49PT0wKXtuLm1vZGU9X2Q7YnJlYWt9aWYobW4mMzIpe24uYmFjaz0tMSxuLm1vZGU9bnM7YnJlYWt9aWYobW4mNjQpe2UubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLG4ubW9kZT1TcjticmVha31uLmV4dHJhPW1uJjE1LG4ubW9kZT1nZDtjYXNlIGdkOmlmKG4uZXh0cmEpe2Zvcihybj1uLmV4dHJhO0w8cm47KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEwsTCs9OH1uLmxlbmd0aCs9VCYoMTw8bi5leHRyYSktMSxUPj4+PW4uZXh0cmEsTC09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9bi53YXM9bi5sZW5ndGgsbi5tb2RlPXBkO2Nhc2UgcGQ6Zm9yKDtGdD1uLmRpc3Rjb2RlW1QmKDE8PG4uZGlzdGJpdHMpLTFdLFN0PUZ0Pj4+MjQsbW49RnQ+Pj4xNiYyNTUsdG49RnQmNjU1MzUsIShTdDw9TCk7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEwsTCs9OH1pZigobW4mMjQwKT09PTApe2Zvcihubj1TdCxFdD1tbixLdD10bjtGdD1uLmRpc3Rjb2RlW0t0KygoVCYoMTw8bm4rRXQpLTEpPj5ubildLFN0PUZ0Pj4+MjQsbW49RnQ+Pj4xNiYyNTUsdG49RnQmNjU1MzUsIShubitTdDw9TCk7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEwsTCs9OH1UPj4+PW5uLEwtPW5uLG4uYmFjays9bm59aWYoVD4+Pj1TdCxMLT1TdCxuLmJhY2srPVN0LG1uJjY0KXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixuLm1vZGU9U3I7YnJlYWt9bi5vZmZzZXQ9dG4sbi5leHRyYT1tbiYxNSxuLm1vZGU9dmQ7Y2FzZSB2ZDppZihuLmV4dHJhKXtmb3Iocm49bi5leHRyYTtMPHJuOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxMLEwrPTh9bi5vZmZzZXQrPVQmKDE8PG4uZXh0cmEpLTEsVD4+Pj1uLmV4dHJhLEwtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfWlmKG4ub2Zmc2V0Pm4uZG1heCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixuLm1vZGU9U3I7YnJlYWt9bi5tb2RlPW1kO2Nhc2UgbWQ6aWYoVj09PTApYnJlYWsgZTtpZihQZT13ZS1WLG4ub2Zmc2V0PlBlKXtpZihQZT1uLm9mZnNldC1QZSxQZT5uLndoYXZlJiZuLnNhbmUpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPVNyO2JyZWFrfVBlPm4ud25leHQ/KFBlLT1uLnduZXh0LGZ0PW4ud3NpemUtUGUpOmZ0PW4ud25leHQtUGUsUGU+bi5sZW5ndGgmJihQZT1uLmxlbmd0aCksaHQ9bi53aW5kb3d9ZWxzZSBodD1vLGZ0PWctbi5vZmZzZXQsUGU9bi5sZW5ndGg7UGU+ViYmKFBlPVYpLFYtPVBlLG4ubGVuZ3RoLT1QZTtkbyBvW2crK109aHRbZnQrK107d2hpbGUoLS1QZSk7bi5sZW5ndGg9PT0wJiYobi5tb2RlPUNjKTticmVhaztjYXNlIF9kOmlmKFY9PT0wKWJyZWFrIGU7b1tnKytdPW4ubGVuZ3RoLFYtLSxuLm1vZGU9Q2M7YnJlYWs7Y2FzZSBFdTppZihuLndyYXApe2Zvcig7TDwzMjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFR8PXJbYysrXTw8TCxMKz04fWlmKHdlLT1WLGUudG90YWxfb3V0Kz13ZSxuLnRvdGFsKz13ZSx3ZSYmKGUuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP3hhKG4uY2hlY2ssbyx3ZSxnLXdlKTpfdShuLmNoZWNrLG8sd2UsZy13ZSkpLHdlPVYsKG4uZmxhZ3M/VDpTZChUKSkhPT1uLmNoZWNrKXtlLm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLG4ubW9kZT1TcjticmVha31UPTAsTD0wfW4ubW9kZT1iZDtjYXNlIGJkOmlmKG4ud3JhcCYmbi5mbGFncyl7Zm9yKDtMPDMyOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxMLEwrPTh9aWYoVCE9PShuLnRvdGFsJjQyOTQ5NjcyOTUpKXtlLm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsbi5tb2RlPVNyO2JyZWFrfVQ9MCxMPTB9bi5tb2RlPXlkO2Nhc2UgeWQ6WnQ9Z207YnJlYWsgZTtjYXNlIFNyOlp0PUtmO2JyZWFrIGU7Y2FzZSBFZDpyZXR1cm4gWmY7Y2FzZSBtbTpkZWZhdWx0OnJldHVybiBmYX1yZXR1cm4gZS5uZXh0X291dD1nLGUuYXZhaWxfb3V0PVYsZS5uZXh0X2luPWMsZS5hdmFpbF9pbj1iLG4uaG9sZD1ULG4uYml0cz1MLChuLndzaXplfHx3ZSE9PWUuYXZhaWxfb3V0JiZuLm1vZGU8U3ImJihuLm1vZGU8RXV8fHQhPT1KZikpJiZQZChlLGUub3V0cHV0LGUubmV4dF9vdXQsd2UtZS5hdmFpbF9vdXQpLF9lLT1lLmF2YWlsX2luLHdlLT1lLmF2YWlsX291dCxlLnRvdGFsX2luKz1fZSxlLnRvdGFsX291dCs9d2Usbi50b3RhbCs9d2Usbi53cmFwJiZ3ZSYmKGUuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP3hhKG4uY2hlY2ssbyx3ZSxlLm5leHRfb3V0LXdlKTpfdShuLmNoZWNrLG8sd2UsZS5uZXh0X291dC13ZSkpLGUuZGF0YV90eXBlPW4uYml0cysobi5sYXN0PzY0OjApKyhuLm1vZGU9PT1ucz8xMjg6MCkrKG4ubW9kZT09PXdjfHxuLm1vZGU9PT15dT8yNTY6MCksKF9lPT09MCYmd2U9PT0wfHx0PT09SmYpJiZadD09PUpzJiYoWnQ9dm0pLFp0fWZ1bmN0aW9uIE9tKGUpe2lmKCFlfHwhZS5zdGF0ZSlyZXR1cm4gZmE7dmFyIHQ9ZS5zdGF0ZTtyZXR1cm4gdC53aW5kb3cmJih0LndpbmRvdz1udWxsKSxlLnN0YXRlPW51bGwsSnN9ZnVuY3Rpb24gVG0oZSx0KXt2YXIgbjtyZXR1cm4hZXx8IWUuc3RhdGV8fChuPWUuc3RhdGUsKG4ud3JhcCYyKT09PTApP2ZhOihuLmhlYWQ9dCx0LmRvbmU9ITEsSnMpfWZ1bmN0aW9uIFBtKGUsdCl7dmFyIG49dC5sZW5ndGgscixvLGM7cmV0dXJuIWV8fCFlLnN0YXRlfHwocj1lLnN0YXRlLHIud3JhcCE9PTAmJnIubW9kZSE9PVNjKT9mYTpyLm1vZGU9PT1TYyYmKG89MSxvPV91KG8sdCxuLDApLG8hPT1yLmNoZWNrKT9LZjooYz1QZChlLHQsbixuKSxjPyhyLm1vZGU9RWQsWmYpOihyLmhhdmVkaWN0PTEsSnMpKX1iYS5pbmZsYXRlUmVzZXQ9Q2QsYmEuaW5mbGF0ZVJlc2V0Mj1BZCxiYS5pbmZsYXRlUmVzZXRLZWVwPXdkLGJhLmluZmxhdGVJbml0PXdtLGJhLmluZmxhdGVJbml0Mj1PZCxiYS5pbmZsYXRlPUFtLGJhLmluZmxhdGVFbmQ9T20sYmEuaW5mbGF0ZUdldEhlYWRlcj1UbSxiYS5pbmZsYXRlU2V0RGljdGlvbmFyeT1QbSxiYS5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7dmFyIElkPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9O2Z1bmN0aW9uIEltKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9dmFyIE5tPUltLHdsPWJhLHFsPXhlLEFjPXJyLFlyPUlkLEN1PW10LGttPWNhLFJtPU5tLE5kPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gS3MoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgS3MpKXJldHVybiBuZXcgS3MoZSk7dGhpcy5vcHRpb25zPXFsLmFzc2lnbih7Y2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MCx0bzoiIn0sZXx8e30pO3ZhciB0PXRoaXMub3B0aW9uczt0LnJhdyYmdC53aW5kb3dCaXRzPj0wJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHM9LXQud2luZG93Qml0cyx0LndpbmRvd0JpdHM9PT0wJiYodC53aW5kb3dCaXRzPS0xNSkpLHQud2luZG93Qml0cz49MCYmdC53aW5kb3dCaXRzPDE2JiYhKGUmJmUud2luZG93Qml0cykmJih0LndpbmRvd0JpdHMrPTMyKSx0LndpbmRvd0JpdHM+MTUmJnQud2luZG93Qml0czw0OCYmKHQud2luZG93Qml0cyYxNSk9PT0wJiYodC53aW5kb3dCaXRzfD0xNSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcga20sdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBuPXdsLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sdC53aW5kb3dCaXRzKTtpZihuIT09WXIuWl9PSyl0aHJvdyBuZXcgRXJyb3IoQ3Vbbl0pO2lmKHRoaXMuaGVhZGVyPW5ldyBSbSx3bC5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlciksdC5kaWN0aW9uYXJ5JiYodHlwZW9mIHQuZGljdGlvbmFyeT09InN0cmluZyI/dC5kaWN0aW9uYXJ5PUFjLnN0cmluZzJidWYodC5kaWN0aW9uYXJ5KTpOZC5jYWxsKHQuZGljdGlvbmFyeSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iJiYodC5kaWN0aW9uYXJ5PW5ldyBVaW50OEFycmF5KHQuZGljdGlvbmFyeSkpLHQucmF3JiYobj13bC5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sdC5kaWN0aW9uYXJ5KSxuIT09WXIuWl9PSykpKXRocm93IG5ldyBFcnJvcihDdVtuXSl9S3MucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnN0cm0scj10aGlzLm9wdGlvbnMuY2h1bmtTaXplLG89dGhpcy5vcHRpb25zLmRpY3Rpb25hcnksYyxnLGIsVixULEw9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtnPXQ9PT1+fnQ/dDp0PT09ITA/WXIuWl9GSU5JU0g6WXIuWl9OT19GTFVTSCx0eXBlb2YgZT09InN0cmluZyI/bi5pbnB1dD1BYy5iaW5zdHJpbmcyYnVmKGUpOk5kLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP24uaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6bi5pbnB1dD1lLG4ubmV4dF9pbj0wLG4uYXZhaWxfaW49bi5pbnB1dC5sZW5ndGg7ZG97aWYobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IHFsLkJ1Zjgociksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PXIpLGM9d2wuaW5mbGF0ZShuLFlyLlpfTk9fRkxVU0gpLGM9PT1Zci5aX05FRURfRElDVCYmbyYmKGM9d2wuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLG8pKSxjPT09WXIuWl9CVUZfRVJST1ImJkw9PT0hMCYmKGM9WXIuWl9PSyxMPSExKSxjIT09WXIuWl9TVFJFQU1fRU5EJiZjIT09WXIuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChjKSx0aGlzLmVuZGVkPSEwLCExO24ubmV4dF9vdXQmJihuLmF2YWlsX291dD09PTB8fGM9PT1Zci5aX1NUUkVBTV9FTkR8fG4uYXZhaWxfaW49PT0wJiYoZz09PVlyLlpfRklOSVNIfHxnPT09WXIuWl9TWU5DX0ZMVVNIKSkmJih0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj8oYj1BYy51dGY4Ym9yZGVyKG4ub3V0cHV0LG4ubmV4dF9vdXQpLFY9bi5uZXh0X291dC1iLFQ9QWMuYnVmMnN0cmluZyhuLm91dHB1dCxiKSxuLm5leHRfb3V0PVYsbi5hdmFpbF9vdXQ9ci1WLFYmJnFsLmFycmF5U2V0KG4ub3V0cHV0LG4ub3V0cHV0LGIsViwwKSx0aGlzLm9uRGF0YShUKSk6dGhpcy5vbkRhdGEocWwuc2hyaW5rQnVmKG4ub3V0cHV0LG4ubmV4dF9vdXQpKSksbi5hdmFpbF9pbj09PTAmJm4uYXZhaWxfb3V0PT09MCYmKEw9ITApfXdoaWxlKChuLmF2YWlsX2luPjB8fG4uYXZhaWxfb3V0PT09MCkmJmMhPT1Zci5aX1NUUkVBTV9FTkQpO3JldHVybiBjPT09WXIuWl9TVFJFQU1fRU5EJiYoZz1Zci5aX0ZJTklTSCksZz09PVlyLlpfRklOSVNIPyhjPXdsLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGMpLHRoaXMuZW5kZWQ9ITAsYz09PVlyLlpfT0spOihnPT09WXIuWl9TWU5DX0ZMVVNIJiYodGhpcy5vbkVuZChZci5aX09LKSxuLmF2YWlsX291dD0wKSwhMCl9LEtzLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5jaHVua3MucHVzaChlKX0sS3MucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe2U9PT1Zci5aX09LJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9cWwuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ307ZnVuY3Rpb24gQXUoZSx0KXt2YXIgbj1uZXcgS3ModCk7aWYobi5wdXNoKGUsITApLG4uZXJyKXRocm93IG4ubXNnfHxDdVtuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIHhtKGUsdCl7cmV0dXJuIHQ9dHx8e30sdC5yYXc9ITAsQXUoZSx0KX1HbC5JbmZsYXRlPUtzLEdsLmluZmxhdGU9QXUsR2wuaW5mbGF0ZVJhdz14bSxHbC51bmd6aXA9QXU7dmFyIEJtPXhlLmFzc2lnbixNbT1OdCxEbT1HbCxMbT1JZCxrZD17fTtCbShrZCxNbSxEbSxMbSk7dmFyIFJkPWtkO2xldCBGbT0idXB4MnB4IixWbT1be25hbWU6InVweCIsdHlwZTpbTnVtYmVyLFN0cmluZ10scmVxdWlyZWQ6ITB9XSxVbT0xZS00LCRtPTc1MCx4ZD0hMSxPdT0wLEJkPTAsTWQ9OTYwLERkPTM3NSxMZD03NTA7ZnVuY3Rpb24gSG0oKXtsZXR7cGxhdGZvcm06ZSxwaXhlbFJhdGlvOnQsd2luZG93V2lkdGg6bn09UnIoKTtPdT1uLEJkPXQseGQ9ZT09PSJpb3MifWZ1bmN0aW9uIFR1KGUsdCl7bGV0IG49TnVtYmVyKGUpO3JldHVybiBpc05hTihuKT90Om59ZnVuY3Rpb24gam0oKXtsZXQgZT1SLmdsb2JhbFN0eWxlfHx7fTtNZD1UdShlLnJweENhbGNNYXhEZXZpY2VXaWR0aCw5NjApLERkPVR1KGUucnB4Q2FsY0Jhc2VEZXZpY2VXaWR0aCwzNzUpLExkPVR1KGUucnB4Q2FsY0Jhc2VEZXZpY2VXaWR0aCw3NTApfWxldCB6bT1EdChGbSwoZSx0KT0+e2lmKE91PT09MCYmKEhtKCksam0oKSksZT1OdW1iZXIoZSksZT09PTApcmV0dXJuIDA7bGV0IG49dHx8T3U7bj1lPT09TGR8fG48PU1kP246RGQ7bGV0IHI9ZS8kbSpuO3JldHVybiByPDAmJihyPS1yKSxyPU1hdGguZmxvb3IocitVbSkscj09PTAmJihCZD09PTF8fCF4ZD9yPTE6cj0uNSksZTwwPy1yOnJ9LFZtKSxXbT0iYWRkSW50ZXJjZXB0b3IiLEdtPSJyZW1vdmVJbnRlcmNlcHRvciIsRmQ9W3tuYW1lOiJtZXRob2QiLHR5cGU6W1N0cmluZyxPYmplY3RdLHJlcXVpcmVkOiEwfV0sWW09RmQ7ZnVuY3Rpb24gVmQoZSx0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49Pnt6LmlzRnVuY3Rpb24odFtuXSkmJihlW25dPXFtKGVbbl0sdFtuXSkpfSl9ZnVuY3Rpb24gVWQoZSx0KXshZXx8IXR8fE9iamVjdC5rZXlzKHQpLmZvckVhY2gobj0+e2xldCByPWVbbl0sbz10W25dO3ouaXNBcnJheShyKSYmei5pc0Z1bmN0aW9uKG8pJiZ6LnJlbW92ZShyLG8pfSl9ZnVuY3Rpb24gcW0oZSx0KXtsZXQgbj10P2U/ZS5jb25jYXQodCk6ei5pc0FycmF5KHQpP3Q6W3RdOmU7cmV0dXJuIG4mJkptKG4pfWZ1bmN0aW9uIEptKGUpe2xldCB0PVtdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQuaW5kZXhPZihlW25dKT09PS0xJiZ0LnB1c2goZVtuXSk7cmV0dXJuIHR9bGV0IEttPUR0KFdtLChlLHQpPT57ei5pc1N0cmluZyhlKSYmei5pc1BsYWluT2JqZWN0KHQpP1ZkKENyW2VdfHwoQ3JbZV09e30pLHQpOnouaXNQbGFpbk9iamVjdChlKSYmVmQoa24sZSl9LEZkKSxabT1EdChHbSwoZSx0KT0+e3ouaXNTdHJpbmcoZSk/ei5pc1BsYWluT2JqZWN0KHQpP1VkKENyW2VdLHQpOmRlbGV0ZSBDcltlXTp6LmlzUGxhaW5PYmplY3QoZSkmJlVkKGtuLGUpfSxZbSksWG09e30sUW09IiRvbiIsJGQ9W3tuYW1lOiJldmVudCIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHtuYW1lOiJjYWxsYmFjayIsdHlwZTpGdW5jdGlvbixyZXF1aXJlZDohMH1dLGVfPSIkb25jZSIsdF89JGQsbl89IiRvZmYiLHJfPVt7bmFtZToiZXZlbnQiLHR5cGU6W1N0cmluZyxBcnJheV19LHtuYW1lOiJjYWxsYmFjayIsdHlwZTpGdW5jdGlvbn1dLGlfPSIkZW1pdCIsb189W3tuYW1lOiJldmVudCIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxacz1uZXcgSi5FbWl0dGVyLGFfPUR0KFFtLChlLHQpPT4oWnMub24oZSx0KSwoKT0+WnMub2ZmKGUsdCkpLCRkKSxzXz1EdChlXywoZSx0KT0+KFpzLm9uY2UoZSx0KSwoKT0+WnMub2ZmKGUsdCkpLHRfKSxsXz1EdChuXywoZSx0KT0+e2lmKCFlKXtacy5lPXt9O3JldHVybn16LmlzQXJyYXkoZSl8fChlPVtlXSksZS5mb3JFYWNoKG49PlpzLm9mZihuLHQpKX0scl8pLGNfPUR0KGlfLChlLC4uLnQpPT57WnMuZW1pdChlLC4uLnQpfSxvXyksSGQ9W3tuYW1lOiJpZCIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSx1Xz0iY3JlYXRlVmlkZW9Db250ZXh0IixmXz0iY3JlYXRlTWFwQ29udGV4dCIsZF89SGQsaF89ImNyZWF0ZUNhbnZhc0NvbnRleHQiLGdfPVt7bmFtZToiY2FudmFzSWQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx7bmFtZToiY29tcG9uZW50SW5zdGFuY2UiLHR5cGU6T2JqZWN0fV0scF89ImNyZWF0ZUlubmVyQXVkaW9Db250ZXh0Iix2Xz0iY3JlYXRlTGl2ZVB1c2hlckNvbnRleHQiLG1fPUhkLmNvbmNhdCh7bmFtZToiY29tcG9uZW50SW5zdGFuY2UiLHR5cGU6T2JqZWN0fSksX189Wy41LC44LDEsMS4yNSwxLjUsMl07Y2xhc3MgUHV7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1wbGF5KCl7b24odGhpcy5pZCx0aGlzLnBhZ2VJZCwicGxheSIpfXBhdXNlKCl7b24odGhpcy5pZCx0aGlzLnBhZ2VJZCwicGF1c2UiKX1zdG9wKCl7b24odGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RvcCIpfXNlZWsodCl7b24odGhpcy5pZCx0aGlzLnBhZ2VJZCwic2VlayIse3Bvc2l0aW9uOnR9KX1zZW5kRGFubXUodCl7b24odGhpcy5pZCx0aGlzLnBhZ2VJZCwic2VuZERhbm11Iix0KX1wbGF5YmFja1JhdGUodCl7fl9fLmluZGV4T2YodCl8fCh0PTEpLG9uKHRoaXMuaWQsdGhpcy5wYWdlSWQsInBsYXliYWNrUmF0ZSIse3JhdGU6dH0pfXJlcXVlc3RGdWxsU2NyZWVuKHQ9e30pe29uKHRoaXMuaWQsdGhpcy5wYWdlSWQsInJlcXVlc3RGdWxsU2NyZWVuIix0KX1leGl0RnVsbFNjcmVlbigpe29uKHRoaXMuaWQsdGhpcy5wYWdlSWQsImV4aXRGdWxsU2NyZWVuIil9c2hvd1N0YXR1c0Jhcigpe29uKHRoaXMuaWQsdGhpcy5wYWdlSWQsInNob3dTdGF0dXNCYXIiKX1oaWRlU3RhdHVzQmFyKCl7b24odGhpcy5pZCx0aGlzLnBhZ2VJZCwiaGlkZVN0YXR1c0JhciIpfX1sZXQgYl89RHQodV8sKGUsdCk9PnQ/bmV3IFB1KGUsRm4odCkpOm5ldyBQdShlLEZuKGJyKCkpKSkseV89KGUsdCk9PntsZXQgbj10LmVyck1zZ3x8IiI7bmV3IFJlZ0V4cCgiXFw6XFxzKmZhaWwiKS50ZXN0KG4pP2UuZmFpbCYmZS5mYWlsKHQpOmUuc3VjY2VzcyYmZS5zdWNjZXNzKHQpLGUuY29tcGxldGUmJmUuY29tcGxldGUodCl9LFRpPShlLHQsbixyKT0+e2puKGUsdCxuLHIsbz0+e3ImJnlfKHIsbyl9KX07Y2xhc3MgSXV7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1nZXRDZW50ZXJMb2NhdGlvbih0KXtUaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJnZXRDZW50ZXJMb2NhdGlvbiIsdCl9bW92ZVRvTG9jYXRpb24odCl7VGkodGhpcy5pZCx0aGlzLnBhZ2VJZCwibW92ZVRvTG9jYXRpb24iLHQpfWdldFNjYWxlKHQpe1RpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImdldFNjYWxlIix0KX1nZXRSZWdpb24odCl7VGkodGhpcy5pZCx0aGlzLnBhZ2VJZCwiZ2V0UmVnaW9uIix0KX1pbmNsdWRlUG9pbnRzKHQpe1RpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImluY2x1ZGVQb2ludHMiLHQpfXRyYW5zbGF0ZU1hcmtlcih0KXtUaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJ0cmFuc2xhdGVNYXJrZXIiLHQpfSRnZXRBcHBNYXAoKXtyZXR1cm4gcy5tYXBzLmdldE1hcEJ5SWQodGhpcy5wYWdlSWQrIi1tYXAtIit0aGlzLmlkKX1hZGRDdXN0b21MYXllcih0KXtUaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJhZGRDdXN0b21MYXllciIsdCl9cmVtb3ZlQ3VzdG9tTGF5ZXIodCl7VGkodGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVtb3ZlQ3VzdG9tTGF5ZXIiLHQpfWFkZEdyb3VuZE92ZXJsYXkodCl7VGkodGhpcy5pZCx0aGlzLnBhZ2VJZCwiYWRkR3JvdW5kT3ZlcmxheSIsdCl9cmVtb3ZlR3JvdW5kT3ZlcmxheSh0KXtUaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJyZW1vdmVHcm91bmRPdmVybGF5Iix0KX11cGRhdGVHcm91bmRPdmVybGF5KHQpe1RpKHRoaXMuaWQsdGhpcy5wYWdlSWQsInVwZGF0ZUdyb3VuZE92ZXJsYXkiLHQpfWluaXRNYXJrZXJDbHVzdGVyKHQpe1RpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImluaXRNYXJrZXJDbHVzdGVyIix0KX1hZGRNYXJrZXJzKHQpe1RpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImFkZE1hcmtlcnMiLHQpfXJlbW92ZU1hcmtlcnModCl7VGkodGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVtb3ZlTWFya2VycyIsdCl9bW92ZUFsb25nKHQpe1RpKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm1vdmVBbG9uZyIsdCl9c2V0TG9jTWFya2VySWNvbih0KXtUaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJzZXRMb2NNYXJrZXJJY29uIix0KX1vcGVuTWFwQXBwKHQpe1RpKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm9wZW5NYXBBcHAiLHQpfW9uKHQsbil7VGkodGhpcy5pZCx0aGlzLnBhZ2VJZCwib24iLHtuYW1lOnQsY2FsbGJhY2s6bn0pfX1sZXQgRV89RHQoZl8sKGUsdCk9PnQ/bmV3IEl1KGUsRm4odCkpOm5ldyBJdShlLEZuKGJyKCkpKSxkXyk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtuP3JbZV09TWF0aC5yb3VuZChuKTp0eXBlb2YgdCE9InVuZGVmaW5lZCImJihyW2VdPXQpfX1sZXQgamQ9QXMoIndpZHRoIiksemQ9QXMoImhlaWdodCIpLFNfPSJjYW52YXNHZXRJbWFnZURhdGEiLFdkPXtmb3JtYXRBcmdzOnt4OkFzKCJ4IikseTpBcygieSIpLHdpZHRoOmpkLGhlaWdodDp6ZH19LEdkPXtjYW52YXNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSx5Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH0sd2lkdGg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSxoZWlnaHQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfX0sd189ImNhbnZhc1B1dEltYWdlRGF0YSIsQ189V2QsQV89ei5leHRlbmQoe2RhdGE6e3R5cGU6VWludDhDbGFtcGVkQXJyYXkscmVxdWlyZWQ6ITB9fSxHZCx7aGVpZ2h0Ont0eXBlOk51bWJlcn19KSxZZD17UE5HOiJwbmciLEpQRzoianBnIixKUEVHOiJqcGcifSxPXz0iY2FudmFzVG9UZW1wRmlsZVBhdGgiLFRfPXtmb3JtYXRBcmdzOnt4OkFzKCJ4IiwwKSx5OkFzKCJ5IiwwKSx3aWR0aDpqZCxoZWlnaHQ6emQsZGVzdFdpZHRoOkFzKCJkZXN0V2lkdGgiKSxkZXN0SGVpZ2h0OkFzKCJkZXN0SGVpZ2h0IiksZmlsZVR5cGUoZSx0KXtlPShlfHwiIikudG9VcHBlckNhc2UoKTtsZXQgbj1ZZFtlXTtufHwobj1ZZC5QTkcpLHQuZmlsZVR5cGU9bn0scXVhbGl0eShlLHQpe3QucXVhbGl0eT1lJiZlPjAmJmU8MT9lOjF9fX0sUF89e3g6TnVtYmVyLHk6TnVtYmVyLHdpZHRoOk51bWJlcixoZWlnaHQ6TnVtYmVyLGRlc3RXaWR0aDpOdW1iZXIsZGVzdEhlaWdodDpOdW1iZXIsY2FudmFzSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxmaWxlVHlwZTpTdHJpbmcscXVhbGl0eTpOdW1iZXJ9O2Z1bmN0aW9uIE9jKGUsdCxuLHIsbyl7b3QuaW52b2tlVmlld01ldGhvZChgY2FudmFzLiR7ZX1gLHt0eXBlOm4sZGF0YTpyfSx0LGM9PntvJiZvKGMpfSl9dmFyIElfPVsic2NhbGUiLCJyb3RhdGUiLCJ0cmFuc2xhdGUiLCJzZXRUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm0iXSxOXz1bImRyYXdJbWFnZSIsImZpbGxUZXh0IiwiZmlsbCIsInN0cm9rZSIsImZpbGxSZWN0Iiwic3Ryb2tlUmVjdCIsImNsZWFyUmVjdCIsInN0cm9rZVRleHQiXSxrXz1bInNldEZpbGxTdHlsZSIsInNldFRleHRBbGlnbiIsInNldFN0cm9rZVN0eWxlIiwic2V0R2xvYmFsQWxwaGEiLCJzZXRTaGFkb3ciLCJzZXRGb250U2l6ZSIsInNldExpbmVDYXAiLCJzZXRMaW5lSm9pbiIsInNldExpbmVXaWR0aCIsInNldE1pdGVyTGltaXQiLCJzZXRUZXh0QmFzZWxpbmUiLCJzZXRMaW5lRGFzaCJdO2Z1bmN0aW9uIFJfKGUsdCl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gci5mb250PXQsci5tZWFzdXJlVGV4dChlKS53aWR0aHx8MH1sZXQgcWQ9e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbjoiIzAwZmZmZiIsZGFya2JsdWU6IiMwMDAwOGIiLGRhcmtjeWFuOiIjMDA4YjhiIixkYXJrZ29sZGVucm9kOiIjYjg4NjBiIixkYXJrZ3JheToiI2E5YTlhOSIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2toYWtpOiIjYmRiNzZiIixkYXJrbWFnZW50YToiIzhiMDA4YiIsZGFya29saXZlZ3JlZW46IiM1NTZiMmYiLGRhcmtvcmFuZ2U6IiNmZjhjMDAiLGRhcmtvcmNoaWQ6IiM5OTMyY2MiLGRhcmtyZWQ6IiM4YjAwMDAiLGRhcmtzYWxtb246IiNlOTk2N2EiLGRhcmtzZWFncmVlbjoiIzhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiIzQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiIzJmNGY0ZiIsZGFya3NsYXRlZ3JleToiIzJmNGY0ZiIsZGFya3R1cnF1b2lzZToiIzAwY2VkMSIsZGFya3Zpb2xldDoiIzk0MDBkMyIsZGVlcHBpbms6IiNmZjE0OTMiLGRlZXBza3libHVlOiIjMDBiZmZmIixkaW1ncmF5OiIjNjk2OTY5IixkaW1ncmV5OiIjNjk2OTY5Iixkb2RnZXJibHVlOiIjMWU5MGZmIixmaXJlYnJpY2s6IiNiMjIyMjIiLGZsb3JhbHdoaXRlOiIjZmZmYWYwIixmb3Jlc3RncmVlbjoiIzIyOGIyMiIsZnVjaHNpYToiI2ZmMDBmZiIsZ2FpbnNib3JvOiIjZGNkY2RjIixnaG9zdHdoaXRlOiIjZjhmOGZmIixnb2xkOiIjZmZkNzAwIixnb2xkZW5yb2Q6IiNkYWE1MjAiLGdyYXk6IiM4MDgwODAiLGdyZXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixncmVlbnllbGxvdzoiI2FkZmYyZiIsaG9uZXlkZXc6IiNmMGZmZjAiLGhvdHBpbms6IiNmZjY5YjQiLGluZGlhbnJlZDoiI2NkNWM1YyIsaW5kaWdvOiIjNGIwMDgyIixpdm9yeToiI2ZmZmZmMCIsa2hha2k6IiNmMGU2OGMiLGxhdmVuZGVyOiIjZTZlNmZhIixsYXZlbmRlcmJsdXNoOiIjZmZmMGY1IixsYXduZ3JlZW46IiM3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiI2ZmZmFjZCIsbGlnaHRibHVlOiIjYWRkOGU2IixsaWdodGNvcmFsOiIjZjA4MDgwIixsaWdodGN5YW46IiNlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjZmFmYWQyIixsaWdodGdyYXk6IiNkM2QzZDMiLGxpZ2h0Z3JleToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRwaW5rOiIjZmZiNmMxIixsaWdodHNhbG1vbjoiI2ZmYTA3YSIsbGlnaHRzZWFncmVlbjoiIzIwYjJhYSIsbGlnaHRza3libHVlOiIjODdjZWZhIixsaWdodHNsYXRlZ3JheToiIzc3ODg5OSIsbGlnaHRzbGF0ZWdyZXk6IiM3Nzg4OTkiLGxpZ2h0c3RlZWxibHVlOiIjYjBjNGRlIixsaWdodHllbGxvdzoiI2ZmZmZlMCIsbGltZToiIzAwZmYwMCIsbGltZWdyZWVuOiIjMzJjZDMyIixsaW5lbjoiI2ZhZjBlNiIsbWFnZW50YToiI2ZmMDBmZiIsbWFyb29uOiIjODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiIjNjZjZGFhIixtZWRpdW1ibHVlOiIjMDAwMGNkIixtZWRpdW1vcmNoaWQ6IiNiYTU1ZDMiLG1lZGl1bXB1cnBsZToiIzkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IiMzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiIzdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IiMwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiIzQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiIjYzcxNTg1IixtaWRuaWdodGJsdWU6IiMxOTE5NzAiLG1pbnRjcmVhbToiI2Y1ZmZmYSIsbWlzdHlyb3NlOiIjZmZlNGUxIixtb2NjYXNpbjoiI2ZmZTRiNSIsbmF2YWpvd2hpdGU6IiNmZmRlYWQiLG5hdnk6IiMwMDAwODAiLG9sZGxhY2U6IiNmZGY1ZTYiLG9saXZlOiIjODA4MDAwIixvbGl2ZWRyYWI6IiM2YjhlMjMiLG9yYW5nZToiI2ZmYTUwMCIsb3JhbmdlcmVkOiIjZmY0NTAwIixvcmNoaWQ6IiNkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6IiNlZWU4YWEiLHBhbGVncmVlbjoiIzk4ZmI5OCIscGFsZXR1cnF1b2lzZToiI2FmZWVlZSIscGFsZXZpb2xldHJlZDoiI2RiNzA5MyIscGFwYXlhd2hpcDoiI2ZmZWZkNSIscGVhY2hwdWZmOiIjZmZkYWI5IixwZXJ1OiIjY2Q4NTNmIixwaW5rOiIjZmZjMGNiIixwbHVtOiIjZGRhMGRkIixwb3dkZXJibHVlOiIjYjBlMGU2IixwdXJwbGU6IiM4MDAwODAiLHJlYmVjY2FwdXJwbGU6IiM2NjMzOTkiLHJlZDoiI2ZmMDAwMCIscm9zeWJyb3duOiIjYmM4ZjhmIixyb3lhbGJsdWU6IiM0MTY5ZTEiLHNhZGRsZWJyb3duOiIjOGI0NTEzIixzYWxtb246IiNmYTgwNzIiLHNhbmR5YnJvd246IiNmNGE0NjAiLHNlYWdyZWVuOiIjMmU4YjU3IixzZWFzaGVsbDoiI2ZmZjVlZSIsc2llbm5hOiIjYTA1MjJkIixzaWx2ZXI6IiNjMGMwYzAiLHNreWJsdWU6IiM4N2NlZWIiLHNsYXRlYmx1ZToiIzZhNWFjZCIsc2xhdGVncmF5OiIjNzA4MDkwIixzbGF0ZWdyZXk6IiM3MDgwOTAiLHNub3c6IiNmZmZhZmEiLHNwcmluZ2dyZWVuOiIjMDBmZjdmIixzdGVlbGJsdWU6IiM0NjgyYjQiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdG9tYXRvOiIjZmY2MzQ3Iix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIn07ZnVuY3Rpb24gTnUoZSl7ZT1lfHwiIzAwMDAwMCI7dmFyIHQ9bnVsbDtpZigodD0vXiMoWzAtOXxBLUZ8YS1mXXs2fSkkLy5leGVjKGUpKSE9bnVsbCl7bGV0IHI9cGFyc2VJbnQodFsxXS5zbGljZSgwLDIpLDE2KSxvPXBhcnNlSW50KHRbMV0uc2xpY2UoMiw0KSwxNiksYz1wYXJzZUludCh0WzFdLnNsaWNlKDQpLDE2KTtyZXR1cm5bcixvLGMsMjU1XX1pZigodD0vXiMoWzAtOXxBLUZ8YS1mXXszfSkkLy5leGVjKGUpKSE9bnVsbCl7bGV0IHI9dFsxXS5zbGljZSgwLDEpLG89dFsxXS5zbGljZSgxLDIpLGM9dFsxXS5zbGljZSgyLDMpO3JldHVybiByPXBhcnNlSW50KHIrciwxNiksbz1wYXJzZUludChvK28sMTYpLGM9cGFyc2VJbnQoYytjLDE2KSxbcixvLGMsMjU1XX1pZigodD0vXnJnYlwoKC4rKVwpJC8uZXhlYyhlKSkhPW51bGwpcmV0dXJuIHRbMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWluKDI1NSxwYXJzZUludChyLnRyaW0oKSkpfSkuY29uY2F0KDI1NSk7aWYoKHQ9L15yZ2JhXCgoLispXCkkLy5leGVjKGUpKSE9bnVsbClyZXR1cm4gdFsxXS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihyLG8pe3JldHVybiBvPT09Mz9NYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KHIudHJpbSgpKSk6TWF0aC5taW4oMjU1LHBhcnNlSW50KHIudHJpbSgpKSl9KTt2YXIgbj1lLnRvTG93ZXJDYXNlKCk7aWYoei5oYXNPd24ocWQsbikpe3Q9L14jKFswLTl8QS1GfGEtZl17Niw4fSkkLy5leGVjKHFkW25dKTtsZXQgcj1wYXJzZUludCh0WzFdLnNsaWNlKDAsMiksMTYpLG89cGFyc2VJbnQodFsxXS5zbGljZSgyLDQpLDE2KSxjPXBhcnNlSW50KHRbMV0uc2xpY2UoNCw2KSwxNiksZz1wYXJzZUludCh0WzFdLnNsaWNlKDYsOCksMTYpO3JldHVybiBnPWc+PTA/ZzoyNTUsW3IsbyxjLGddfXJldHVybiBjb25zb2xlLmVycm9yKCJ1bnN1cHBvcnRlZCBjb2xvcjoiK2UpLFswLDAsMCwyNTVdfWNsYXNzIEpke2NvbnN0cnVjdG9yKHQsbil7dGhpcy50eXBlPXQsdGhpcy5kYXRhPW4sdGhpcy5jb2xvclN0b3A9W119YWRkQ29sb3JTdG9wKHQsbil7dGhpcy5jb2xvclN0b3AucHVzaChbdCxOdShuKV0pfX1jbGFzcyB4X3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHlwZT0icGF0dGVybiIsdGhpcy5kYXRhPXQsdGhpcy5jb2xvclN0b3A9bn19Y2xhc3MgQl97Y29uc3RydWN0b3IodCl7dGhpcy53aWR0aD10fX1jbGFzcyBKbHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaWQ9dCx0aGlzLnBhZ2VJZD1uLHRoaXMuYWN0aW9ucz1bXSx0aGlzLnBhdGg9W10sdGhpcy5zdWJwYXRoPVtdLHRoaXMuZHJhd2luZ1N0YXRlPVtdLHRoaXMuc3RhdGU9e2xpbmVEYXNoOlswLDBdLHNoYWRvd09mZnNldFg6MCxzaGFkb3dPZmZzZXRZOjAsc2hhZG93Qmx1cjowLHNoYWRvd0NvbG9yOlswLDAsMCwwXSxmb250OiIxMHB4IHNhbnMtc2VyaWYiLGZvbnRTaXplOjEwLGZvbnRXZWlnaHQ6Im5vcm1hbCIsZm9udFN0eWxlOiJub3JtYWwiLGZvbnRGYW1pbHk6InNhbnMtc2VyaWYifX1kcmF3KHQ9ITEsbil7dmFyIHI9Wy4uLnRoaXMuYWN0aW9uc107dGhpcy5hY3Rpb25zPVtdLHRoaXMucGF0aD1bXSxPYyh0aGlzLmlkLHRoaXMucGFnZUlkLCJhY3Rpb25zQ2hhbmdlZCIse2FjdGlvbnM6cixyZXNlcnZlOnR9LG4pfWNyZWF0ZUxpbmVhckdyYWRpZW50KHQsbixyLG8pe3JldHVybiBuZXcgSmQoImxpbmVhciIsW3QsbixyLG9dKX1jcmVhdGVDaXJjdWxhckdyYWRpZW50KHQsbixyKXtyZXR1cm4gbmV3IEpkKCJyYWRpYWwiLFt0LG4scl0pfWNyZWF0ZVBhdHRlcm4odCxuKXtpZihuPT09dm9pZCAwKWNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVQYXR0ZXJuJyBvbiAnQ2FudmFzQ29udGV4dCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAxIHByZXNlbnQuIik7ZWxzZSBpZihbInJlcGVhdCIsInJlcGVhdC14IiwicmVwZWF0LXkiLCJuby1yZXBlYXQiXS5pbmRleE9mKG4pPDApY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZVBhdHRlcm4nIG9uICdDYW52YXNDb250ZXh0JzogVGhlIHByb3ZpZGVkIHR5cGUgKCciK24rIicpIGlzIG5vdCBvbmUgb2YgJ3JlcGVhdCcsICduby1yZXBlYXQnLCAncmVwZWF0LXgnLCBvciAncmVwZWF0LXknLiIpO2Vsc2UgcmV0dXJuIG5ldyB4Xyh0LG4pfW1lYXN1cmVUZXh0KHQpe2xldCBuPXRoaXMuc3RhdGUuZm9udCxyPTA7e2xldCBvPXMud2Vidmlldy5hbGwoKS5maW5kKGM9PmMuZ2V0VVJMKCkuZW5kc1dpdGgoInd3dy9fX3VuaWFwcHZpZXcuaHRtbCIpKTtvJiYocj1OdW1iZXIoby5ldmFsSlNTeW5jKGAoJHtSXy50b1N0cmluZygpfSkoJHtKU09OLnN0cmluZ2lmeSh0KX0sJHtKU09OLnN0cmluZ2lmeShuKX0pYCkpKX1yZXR1cm4gbmV3IEJfKHIpfXNhdmUoKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzYXZlIixkYXRhOltdfSksdGhpcy5kcmF3aW5nU3RhdGUucHVzaCh0aGlzLnN0YXRlKX1yZXN0b3JlKCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoicmVzdG9yZSIsZGF0YTpbXX0pLHRoaXMuc3RhdGU9dGhpcy5kcmF3aW5nU3RhdGUucG9wKCl8fHtsaW5lRGFzaDpbMCwwXSxzaGFkb3dPZmZzZXRYOjAsc2hhZG93T2Zmc2V0WTowLHNoYWRvd0JsdXI6MCxzaGFkb3dDb2xvcjpbMCwwLDAsMF0sZm9udDoiMTBweCBzYW5zLXNlcmlmIixmb250U2l6ZToxMCxmb250V2VpZ2h0OiJub3JtYWwiLGZvbnRTdHlsZToibm9ybWFsIixmb250RmFtaWx5OiJzYW5zLXNlcmlmIn19YmVnaW5QYXRoKCl7dGhpcy5wYXRoPVtdLHRoaXMuc3VicGF0aD1bXSx0aGlzLnBhdGgucHVzaCh7bWV0aG9kOiJiZWdpblBhdGgiLGRhdGE6W119KX1tb3ZlVG8odCxuKXt0aGlzLnBhdGgucHVzaCh7bWV0aG9kOiJtb3ZlVG8iLGRhdGE6W3Qsbl19KSx0aGlzLnN1YnBhdGg9W1t0LG5dXX1saW5lVG8odCxuKXt0aGlzLnBhdGgubGVuZ3RoPT09MCYmdGhpcy5zdWJwYXRoLmxlbmd0aD09PTA/dGhpcy5wYXRoLnB1c2goe21ldGhvZDoibW92ZVRvIixkYXRhOlt0LG5dfSk6dGhpcy5wYXRoLnB1c2goe21ldGhvZDoibGluZVRvIixkYXRhOlt0LG5dfSksdGhpcy5zdWJwYXRoLnB1c2goW3Qsbl0pfXF1YWRyYXRpY0N1cnZlVG8odCxuLHIsbyl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoicXVhZHJhdGljQ3VydmVUbyIsZGF0YTpbdCxuLHIsb119KSx0aGlzLnN1YnBhdGgucHVzaChbcixvXSl9YmV6aWVyQ3VydmVUbyh0LG4scixvLGMsZyl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoiYmV6aWVyQ3VydmVUbyIsZGF0YTpbdCxuLHIsbyxjLGddfSksdGhpcy5zdWJwYXRoLnB1c2goW2MsZ10pfWFyYyh0LG4scixvLGMsZz0hMSl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoiYXJjIixkYXRhOlt0LG4scixvLGMsZ119KSx0aGlzLnN1YnBhdGgucHVzaChbdCxuXSl9cmVjdCh0LG4scixvKXt0aGlzLnBhdGgucHVzaCh7bWV0aG9kOiJyZWN0IixkYXRhOlt0LG4scixvXX0pLHRoaXMuc3VicGF0aD1bW3Qsbl1dfWFyY1RvKHQsbixyLG8sYyl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoiYXJjVG8iLGRhdGE6W3QsbixyLG8sY119KSx0aGlzLnN1YnBhdGgucHVzaChbcixvXSl9Y2xpcCgpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6ImNsaXAiLGRhdGE6Wy4uLnRoaXMucGF0aF19KX1jbG9zZVBhdGgoKXt0aGlzLnBhdGgucHVzaCh7bWV0aG9kOiJjbG9zZVBhdGgiLGRhdGE6W119KSx0aGlzLnN1YnBhdGgubGVuZ3RoJiYodGhpcy5zdWJwYXRoPVt0aGlzLnN1YnBhdGguc2hpZnQoKV0pfWNsZWFyQWN0aW9ucygpe3RoaXMuYWN0aW9ucz1bXSx0aGlzLnBhdGg9W10sdGhpcy5zdWJwYXRoPVtdfWdldEFjdGlvbnMoKXt2YXIgdD1bLi4udGhpcy5hY3Rpb25zXTtyZXR1cm4gdGhpcy5jbGVhckFjdGlvbnMoKSx0fXNldCBsaW5lRGFzaE9mZnNldCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRMaW5lRGFzaE9mZnNldCIsZGF0YTpbdF19KX1zZXQgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsZGF0YTpbdF19KX1zZXQgc2hhZG93Qmx1cih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRTaGFkb3dCbHVyIixkYXRhOlt0XX0pfXNldCBzaGFkb3dDb2xvcih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRTaGFkb3dDb2xvciIsZGF0YTpbdF19KX1zZXQgc2hhZG93T2Zmc2V0WCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRTaGFkb3dPZmZzZXRYIixkYXRhOlt0XX0pfXNldCBzaGFkb3dPZmZzZXRZKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldFNoYWRvd09mZnNldFkiLGRhdGE6W3RdfSl9c2V0IGZvbnQodCl7dmFyIG49dGhpczt0aGlzLnN0YXRlLmZvbnQ9dDt2YXIgcj10Lm1hdGNoKC9eKChbXHdcLV0rXHMpKikoXGQrcj9weCkoXC8oXGQrXC4/XGQqKHI/cHgpPykpP1xzKyguKikvKTtpZihyKXt2YXIgbz1yWzFdLnRyaW0oKS5zcGxpdCgvXHMvKSxjPXBhcnNlRmxvYXQoclszXSksZz1yWzddLGI9W107by5mb3JFYWNoKGZ1bmN0aW9uKFQsTCl7WyJpdGFsaWMiLCJvYmxpcXVlIiwibm9ybWFsIl0uaW5kZXhPZihUKT4tMT8oYi5wdXNoKHttZXRob2Q6InNldEZvbnRTdHlsZSIsZGF0YTpbVF19KSxuLnN0YXRlLmZvbnRTdHlsZT1UKTpbImJvbGQiLCJub3JtYWwiXS5pbmRleE9mKFQpPi0xPyhiLnB1c2goe21ldGhvZDoic2V0Rm9udFdlaWdodCIsZGF0YTpbVF19KSxuLnN0YXRlLmZvbnRXZWlnaHQ9VCk6TD09PTA/KGIucHVzaCh7bWV0aG9kOiJzZXRGb250U3R5bGUiLGRhdGE6WyJub3JtYWwiXX0pLG4uc3RhdGUuZm9udFN0eWxlPSJub3JtYWwiKTpMPT09MSYmVigpfSksby5sZW5ndGg9PT0xJiZWKCksbz1iLm1hcChmdW5jdGlvbihUKXtyZXR1cm4gVC5kYXRhWzBdfSkuam9pbigiICIpLHRoaXMuc3RhdGUuZm9udFNpemU9Yyx0aGlzLnN0YXRlLmZvbnRGYW1pbHk9Zyx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRGb250IixkYXRhOltgJHtvfSAke2N9cHggJHtnfWBdfSl9ZWxzZSBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBzZXQgJ2ZvbnQnIG9uICdDYW52YXNDb250ZXh0JzogaW52YWxpZCBmb3JtYXQuIik7ZnVuY3Rpb24gVigpe2IucHVzaCh7bWV0aG9kOiJzZXRGb250V2VpZ2h0IixkYXRhOlsibm9ybWFsIl19KSxuLnN0YXRlLmZvbnRXZWlnaHQ9Im5vcm1hbCJ9fWdldCBmb250KCl7cmV0dXJuIHRoaXMuc3RhdGUuZm9udH1zZXQgZmlsbFN0eWxlKHQpe3RoaXMuc2V0RmlsbFN0eWxlKHQpfXNldCBzdHJva2VTdHlsZSh0KXt0aGlzLnNldFN0cm9rZVN0eWxlKHQpfXNldCBnbG9iYWxBbHBoYSh0KXt0PU1hdGguZmxvb3IoMjU1KnBhcnNlRmxvYXQodCkpLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldEdsb2JhbEFscGhhIixkYXRhOlt0XX0pfXNldCB0ZXh0QWxpZ24odCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0VGV4dEFsaWduIixkYXRhOlt0XX0pfXNldCBsaW5lQ2FwKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldExpbmVDYXAiLGRhdGE6W3RdfSl9c2V0IGxpbmVKb2luKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldExpbmVKb2luIixkYXRhOlt0XX0pfXNldCBsaW5lV2lkdGgodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0TGluZVdpZHRoIixkYXRhOlt0XX0pfXNldCBtaXRlckxpbWl0KHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldE1pdGVyTGltaXQiLGRhdGE6W3RdfSl9c2V0IHRleHRCYXNlbGluZSh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRUZXh0QmFzZWxpbmUiLGRhdGE6W3RdfSl9fWxldCBNXz1KLm9uY2UoKCk9PntbLi4uSV8sLi4uTl9dLmZvckVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtzd2l0Y2gobil7Y2FzZSJmaWxsIjpjYXNlInN0cm9rZSI6cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuKyJQYXRoIixkYXRhOlsuLi50aGlzLnBhdGhdfSl9O2Nhc2UiZmlsbFJlY3QiOnJldHVybiBmdW5jdGlvbihyLG8sYyxnKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJmaWxsUGF0aCIsZGF0YTpbe21ldGhvZDoicmVjdCIsZGF0YTpbcixvLGMsZ119XX0pfTtjYXNlInN0cm9rZVJlY3QiOnJldHVybiBmdW5jdGlvbihyLG8sYyxnKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzdHJva2VQYXRoIixkYXRhOlt7bWV0aG9kOiJyZWN0IixkYXRhOltyLG8sYyxnXX1dfSl9O2Nhc2UiZmlsbFRleHQiOmNhc2Uic3Ryb2tlVGV4dCI6cmV0dXJuIGZ1bmN0aW9uKHIsbyxjLGcpe3ZhciBiPVtyLnRvU3RyaW5nKCksbyxjXTt0eXBlb2YgZz09Im51bWJlciImJmIucHVzaChnKSx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpifSl9O2Nhc2UiZHJhd0ltYWdlIjpyZXR1cm4gZnVuY3Rpb24ocixvLGMsZyxiLFYsVCxMLF9lKXtfZT09PXZvaWQgMCYmKFY9byxUPWMsTD1nLF9lPWIsbz12b2lkIDAsYz12b2lkIDAsZz12b2lkIDAsYj12b2lkIDApO3ZhciB3ZTtmdW5jdGlvbiBQZShmdCl7cmV0dXJuIHR5cGVvZiBmdD09Im51bWJlciJ9d2U9UGUobykmJlBlKGMpJiZQZShnKSYmUGUoYik/W3IsVixULEwsX2UsbyxjLGcsYl06UGUoTCkmJlBlKF9lKT9bcixWLFQsTCxfZV06W3IsVixUXSx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTp3ZX0pfTtkZWZhdWx0OnJldHVybiBmdW5jdGlvbiguLi5yKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpyfSl9fX1KbC5wcm90b3R5cGVbZV09dChlKX0pLGtfLmZvckVhY2goZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtzd2l0Y2gobil7Y2FzZSJzZXRGaWxsU3R5bGUiOmNhc2Uic2V0U3Ryb2tlU3R5bGUiOnJldHVybiBmdW5jdGlvbihyKXt0eXBlb2YgciE9Im9iamVjdCI/dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6WyJub3JtYWwiLE51KHIpXX0pOnRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOltyLnR5cGUsci5kYXRhLHIuY29sb3JTdG9wXX0pfTtjYXNlInNldEdsb2JhbEFscGhhIjpyZXR1cm4gZnVuY3Rpb24ocil7cj1NYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KHIpKSx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbcl19KX07Y2FzZSJzZXRTaGFkb3ciOnJldHVybiBmdW5jdGlvbihyLG8sYyxnKXtnPU51KGcpLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOltyLG8sYyxnXX0pLHRoaXMuc3RhdGUuc2hhZG93Qmx1cj1jLHRoaXMuc3RhdGUuc2hhZG93Q29sb3I9Zyx0aGlzLnN0YXRlLnNoYWRvd09mZnNldFg9cix0aGlzLnN0YXRlLnNoYWRvd09mZnNldFk9b307Y2FzZSJzZXRMaW5lRGFzaCI6cmV0dXJuIGZ1bmN0aW9uKHIsbyl7cj1yfHxbMCwwXSxvPW98fDAsdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6W3Isb119KSx0aGlzLnN0YXRlLmxpbmVEYXNoPXJ9O2Nhc2Uic2V0Rm9udFNpemUiOnJldHVybiBmdW5jdGlvbihyKXt0aGlzLnN0YXRlLmZvbnQ9dGhpcy5zdGF0ZS5mb250LnJlcGxhY2UoL1xkK1wuP1xkKnB4LyxyKyJweCIpLHRoaXMuc3RhdGUuZm9udFNpemU9cix0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbcl19KX07ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24oLi4ucil7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6cn0pfX19SmwucHJvdG90eXBlW2VdPXQoZSl9KX0pLERfPUR0KGhfLChlLHQpPT57aWYoTV8oKSx0KXJldHVybiBuZXcgSmwoZSxGbih0KSk7bGV0IG49Rm4oYnIoKSk7aWYobilyZXR1cm4gbmV3IEpsKGUsbik7b3QuZW1pdChKLk9OX0VSUk9SLCJjcmVhdGVDYW52YXNDb250ZXh0OmZhaWwiKX0sZ18pLExfPVRlKFNfLCh7Y2FudmFzSWQ6ZSx4OnQseTpuLHdpZHRoOnIsaGVpZ2h0Om99LHtyZXNvbHZlOmMscmVqZWN0Omd9KT0+e2xldCBiPUZuKGJyKCkpO2lmKCFiKXtnKCk7cmV0dXJufWZ1bmN0aW9uIFYoVCl7aWYoVC5lcnJNc2cmJlQuZXJyTXNnLmluZGV4T2YoImZhaWwiKSE9PS0xKXtnKCIiLFQpO3JldHVybn1sZXQgTD1ULmRhdGE7TCYmTC5sZW5ndGgmJihULmNvbXByZXNzZWQmJihMPVJkLmluZmxhdGVSYXcoTCkpLFQuZGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkoTCkpLGRlbGV0ZSBULmNvbXByZXNzZWQsYyhUKX1PYyhlLGIsImdldEltYWdlRGF0YSIse3g6dCx5Om4sd2lkdGg6cixoZWlnaHQ6b30sVil9LEdkLFdkKSxGXz1UZSh3Xywoe2NhbnZhc0lkOmUsZGF0YTp0LHg6bix5OnIsd2lkdGg6byxoZWlnaHQ6Y30se3Jlc29sdmU6ZyxyZWplY3Q6Yn0pPT57dmFyIFY9Rm4oYnIoKSk7aWYoIVYpe2IoKTtyZXR1cm59bGV0IFQsTD0oKT0+e09jKGUsViwicHV0SW1hZ2VEYXRhIix7ZGF0YTp0LHg6bix5OnIsd2lkdGg6byxoZWlnaHQ6Yyxjb21wcmVzc2VkOlR9LF9lPT57aWYoX2UuZXJyTXNnJiZfZS5lcnJNc2cuaW5kZXhPZigiZmFpbCIpIT09LTEpe2IoKTtyZXR1cm59ZyhfZSl9KX07cy5vcy5uYW1lIT09ImlPUyJ8fHR5cGVvZiBfX1dFRVhfREVWVE9PTF9fPT0iYm9vbGVhbiI/KHQ9UmQuZGVmbGF0ZVJhdyh0LHt0bzoic3RyaW5nIn0pLFQ9ITApOnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCksTCgpfSxBXyxDXyksVl89VGUoT18sKHt4OmU9MCx5OnQ9MCx3aWR0aDpuLGhlaWdodDpyLGRlc3RXaWR0aDpvLGRlc3RIZWlnaHQ6YyxjYW52YXNJZDpnLGZpbGVUeXBlOmIscXVhbGl0eTpWfSx7cmVzb2x2ZTpULHJlamVjdDpMfSk9Pnt2YXIgX2U9Rm4oYnIoKSk7aWYoIV9lKXtMKCk7cmV0dXJufWxldCB3ZT1gJHtXcn0vY2FudmFzYDtPYyhnLF9lLCJ0b1RlbXBGaWxlUGF0aCIse3g6ZSx5OnQsd2lkdGg6bixoZWlnaHQ6cixkZXN0V2lkdGg6byxkZXN0SGVpZ2h0OmMsZmlsZVR5cGU6YixxdWFsaXR5OlYsZGlybmFtZTp3ZX0sUGU9PntpZihQZS5lcnJNc2cmJlBlLmVyck1zZy5pbmRleE9mKCJmYWlsIikhPT0tMSl7TCgiIixQZSk7cmV0dXJufVQoUGUpfSl9LFBfLFRfKSxLZD1bIm9uQ2FucGxheSIsIm9uUGxheSIsIm9uUGF1c2UiLCJvblN0b3AiLCJvbkVuZGVkIiwib25UaW1lVXBkYXRlIiwib25FcnJvciIsIm9uV2FpdGluZyIsIm9uU2Vla2luZyIsIm9uU2Vla2VkIl0sVV89WyJvZmZDYW5wbGF5Iiwib2ZmUGxheSIsIm9mZlBhdXNlIiwib2ZmU3RvcCIsIm9mZkVuZGVkIiwib2ZmVGltZVVwZGF0ZSIsIm9mZkVycm9yIiwib2ZmV2FpdGluZyIsIm9mZlNlZWtpbmciLCJvZmZTZWVrZWQiXSwkXz17dGhyZXNob2xkczpbMF0saW5pdGlhbFJhdGlvOjAsb2JzZXJ2ZUFsbDohMX0sSF89WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSxqXz0xO2Z1bmN0aW9uIFpkKGU9e30pe3JldHVybiBIXy5tYXAodD0+YCR7TnVtYmVyKGVbdF0pfHwwfXB4YCkuam9pbigiICIpfWNsYXNzIFhke2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fcGFnZUlkPUZuKHQpLHRoaXMuX2NvbXBvbmVudD10LHRoaXMuX29wdGlvbnM9ei5leHRlbmQoe30sJF8sbil9cmVsYXRpdmVUbyh0LG4pe3JldHVybiB0aGlzLl9vcHRpb25zLnJlbGF0aXZlVG9TZWxlY3Rvcj10LHRoaXMuX29wdGlvbnMucm9vdE1hcmdpbj1aZChuKSx0aGlzfXJlbGF0aXZlVG9WaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5yZWxhdGl2ZVRvU2VsZWN0b3I9dm9pZCAwLHRoaXMuX29wdGlvbnMucm9vdE1hcmdpbj1aZCh0KSx0aGlzfW9ic2VydmUodCxuKXshei5pc0Z1bmN0aW9uKG4pfHwodGhpcy5fb3B0aW9ucy5zZWxlY3Rvcj10LHRoaXMuX3JlcUlkPWpfKyssQWkoe3JlcUlkOnRoaXMuX3JlcUlkLGNvbXBvbmVudDp0aGlzLl9jb21wb25lbnQsb3B0aW9uczp0aGlzLl9vcHRpb25zLGNhbGxiYWNrOm59LHRoaXMuX3BhZ2VJZCkpfWRpc2Nvbm5lY3QoKXt0aGlzLl9yZXFJZCYmdXMoe3JlcUlkOnRoaXMuX3JlcUlkLGNvbXBvbmVudDp0aGlzLl9jb21wb25lbnR9LHRoaXMuX3BhZ2VJZCl9fWxldCB6Xz1EdCgiY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLChlLHQpPT4oZT1KLnJlc29sdmVDb21wb25lbnRJbnN0YW5jZShlKSxlJiYhRm4oZSkmJih0PWUsZT1udWxsKSxlP25ldyBYZChlLHQpOm5ldyBYZChicigpLHQpKSksV189MTtjbGFzcyBRZHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9wYWdlSWQ9dC4kcGFnZSYmdC4kcGFnZS5pZCx0aGlzLl9jb21wb25lbnQ9dH1vYnNlcnZlKHQsbil7IXouaXNGdW5jdGlvbihuKXx8KHRoaXMuX3JlcUlkPVdfKyssSWEoe3JlcUlkOnRoaXMuX3JlcUlkLGNvbXBvbmVudDp0aGlzLl9jb21wb25lbnQsb3B0aW9uczp0LGNhbGxiYWNrOm59LHRoaXMuX3BhZ2VJZCkpfWRpc2Nvbm5lY3QoKXt0aGlzLl9yZXFJZCYmcmEoe3JlcUlkOnRoaXMuX3JlcUlkLGNvbXBvbmVudDp0aGlzLl9jb21wb25lbnR9LHRoaXMuX3BhZ2VJZCl9fWxldCBHXz1EdCgiY3JlYXRlTWVkaWFRdWVyeU9ic2VydmVyIixlPT4oZT1KLnJlc29sdmVDb21wb25lbnRJbnN0YW5jZShlKSxlJiYhRm4oZSkmJihlPW51bGwpLGU/bmV3IFFkKGUpOm5ldyBRZChicigpKSkpLFlfPTAsa3U9e307ZnVuY3Rpb24gcV8oZSx0LG4scil7bGV0IG89e29wdGlvbnM6cn0sYz1yJiYoInN1Y2Nlc3MiaW4gcnx8ImZhaWwiaW4gcnx8ImNvbXBsZXRlImluIHIpO2lmKGMpe2xldCBnPVN0cmluZyhZXysrKTtvLmNhbGxiYWNrSWQ9ZyxrdVtnXT1yfW90Lmludm9rZVZpZXdNZXRob2QoYGVkaXRvci4ke2V9YCx7dHlwZTpuLGRhdGE6b30sdCwoe2NhbGxiYWNrSWQ6ZyxkYXRhOmJ9KT0+e2MmJihKLmNhbGxPcHRpb25zKGt1W2ddLGIpLGRlbGV0ZSBrdVtnXSl9KX1jbGFzcyBKX3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaWQ9dCx0aGlzLnBhZ2VJZD1ufWZvcm1hdCh0LG4pe3RoaXMuX2V4ZWMoImZvcm1hdCIse25hbWU6dCx2YWx1ZTpufSl9aW5zZXJ0RGl2aWRlcigpe3RoaXMuX2V4ZWMoImluc2VydERpdmlkZXIiKX1pbnNlcnRJbWFnZSh0KXt0aGlzLl9leGVjKCJpbnNlcnRJbWFnZSIsdCl9aW5zZXJ0VGV4dCh0KXt0aGlzLl9leGVjKCJpbnNlcnRUZXh0Iix0KX1zZXRDb250ZW50cyh0KXt0aGlzLl9leGVjKCJzZXRDb250ZW50cyIsdCl9Z2V0Q29udGVudHModCl7dGhpcy5fZXhlYygiZ2V0Q29udGVudHMiLHQpfWNsZWFyKHQpe3RoaXMuX2V4ZWMoImNsZWFyIix0KX1yZW1vdmVGb3JtYXQodCl7dGhpcy5fZXhlYygicmVtb3ZlRm9ybWF0Iix0KX11bmRvKHQpe3RoaXMuX2V4ZWMoInVuZG8iLHQpfXJlZG8odCl7dGhpcy5fZXhlYygicmVkbyIsdCl9Ymx1cih0KXt0aGlzLl9leGVjKCJibHVyIix0KX1nZXRTZWxlY3Rpb25UZXh0KHQpe3RoaXMuX2V4ZWMoImdldFNlbGVjdGlvblRleHQiLHQpfXNjcm9sbEludG9WaWV3KHQpe3RoaXMuX2V4ZWMoInNjcm9sbEludG9WaWV3Iix0KX1fZXhlYyh0LG4pe3FfKHRoaXMuaWQsdGhpcy5wYWdlSWQsdCxuKX19bGV0IEtfPXtjYW52YXM6SmwsbWFwOkl1LHZpZGVvOlB1LGVkaXRvcjpKX307ZnVuY3Rpb24gZWgoZSl7aWYoZSYmZS5jb250ZXh0SW5mbyl7bGV0e2lkOnQsdHlwZTpuLHBhZ2U6cn09ZS5jb250ZXh0SW5mbyxvPUtfW25dO2UuY29udGV4dD1uZXcgbyh0LHIpLGRlbGV0ZSBlLmNvbnRleHRJbmZvfX1jbGFzcyBSdXtjb25zdHJ1Y3Rvcih0LG4scixvKXt0aGlzLl9zZWxlY3RvclF1ZXJ5PXQsdGhpcy5fY29tcG9uZW50PW4sdGhpcy5fc2VsZWN0b3I9cix0aGlzLl9zaW5nbGU9b31ib3VuZGluZ0NsaWVudFJlY3QodCl7cmV0dXJuIHRoaXMuX3NlbGVjdG9yUXVlcnkuX3B1c2godGhpcy5fc2VsZWN0b3IsdGhpcy5fY29tcG9uZW50LHRoaXMuX3NpbmdsZSx7aWQ6ITAsZGF0YXNldDohMCxyZWN0OiEwLHNpemU6ITB9LHQpLHRoaXMuX3NlbGVjdG9yUXVlcnl9ZmllbGRzKHQsbil7cmV0dXJuIHRoaXMuX3NlbGVjdG9yUXVlcnkuX3B1c2godGhpcy5fc2VsZWN0b3IsdGhpcy5fY29tcG9uZW50LHRoaXMuX3NpbmdsZSx0LG4pLHRoaXMuX3NlbGVjdG9yUXVlcnl9c2Nyb2xsT2Zmc2V0KHQpe3JldHVybiB0aGlzLl9zZWxlY3RvclF1ZXJ5Ll9wdXNoKHRoaXMuX3NlbGVjdG9yLHRoaXMuX2NvbXBvbmVudCx0aGlzLl9zaW5nbGUse2lkOiEwLGRhdGFzZXQ6ITAsc2Nyb2xsT2Zmc2V0OiEwfSx0KSx0aGlzLl9zZWxlY3RvclF1ZXJ5fWNvbnRleHQodCl7cmV0dXJuIHRoaXMuX3NlbGVjdG9yUXVlcnkuX3B1c2godGhpcy5fc2VsZWN0b3IsdGhpcy5fY29tcG9uZW50LHRoaXMuX3NpbmdsZSx7Y29udGV4dDohMH0sdCksdGhpcy5fc2VsZWN0b3JRdWVyeX1ub2RlKHQpe3JldHVybiB0aGlzLl9zZWxlY3RvclF1ZXJ5fX1jbGFzcyBaX3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jb21wb25lbnQ9dm9pZCAwLHRoaXMuX3BhZ2U9dCx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9xdWV1ZUNiPVtdfWV4ZWModCl7cmV0dXJuIGFpKHRoaXMuX3BhZ2UsdGhpcy5fcXVldWUsbj0+e2xldCByPXRoaXMuX3F1ZXVlQ2I7bi5mb3JFYWNoKChvLGMpPT57ei5pc0FycmF5KG8pP28uZm9yRWFjaChlaCk6ZWgobyk7bGV0IGc9cltjXTt6LmlzRnVuY3Rpb24oZykmJmcuY2FsbCh0aGlzLG8pfSksei5pc0Z1bmN0aW9uKHQpJiZ0LmNhbGwodGhpcyxuKX0pLHRoaXMuX25vZGVzUmVmfWluKHQpe3JldHVybiB0aGlzLl9jb21wb25lbnQ9Si5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UodCksdGhpc31zZWxlY3QodCl7cmV0dXJuIHRoaXMuX25vZGVzUmVmPW5ldyBSdSh0aGlzLHRoaXMuX2NvbXBvbmVudCx0LCEwKX1zZWxlY3RBbGwodCl7cmV0dXJuIHRoaXMuX25vZGVzUmVmPW5ldyBSdSh0aGlzLHRoaXMuX2NvbXBvbmVudCx0LCExKX1zZWxlY3RWaWV3cG9ydCgpe3JldHVybiB0aGlzLl9ub2Rlc1JlZj1uZXcgUnUodGhpcyxudWxsLCIiLCEwKX1fcHVzaCh0LG4scixvLGMpe3RoaXMuX3F1ZXVlLnB1c2goe2NvbXBvbmVudDpuLHNlbGVjdG9yOnQsc2luZ2xlOnIsZmllbGRzOm99KSx0aGlzLl9xdWV1ZUNiLnB1c2goYyl9fWxldCBYXz1EdCgiY3JlYXRlU2VsZWN0b3JRdWVyeSIsZT0+KGU9Si5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIUZuKGUpJiYoZT1udWxsKSxuZXcgWl8oZXx8YnIoKSkpKSxRXz0iY3JlYXRlQW5pbWF0aW9uIixlYj17Zm9ybWF0QXJnczp7fX0sdGI9e2R1cmF0aW9uOk51bWJlcix0aW1pbmdGdW5jdGlvbjpTdHJpbmcsZGVsYXk6TnVtYmVyLHRyYW5zZm9ybU9yaWdpbjpTdHJpbmd9LG5iPXtkdXJhdGlvbjo0MDAsdGltaW5nRnVuY3Rpb246ImxpbmVhciIsZGVsYXk6MCx0cmFuc2Zvcm1PcmlnaW46IjUwJSA1MCUgMCJ9O2NsYXNzIHRoe2NvbnN0cnVjdG9yKHQpe3RoaXMuYWN0aW9ucz1bXSx0aGlzLmN1cnJlbnRUcmFuc2Zvcm09e30sdGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzPVtdLHRoaXMub3B0aW9uPXouZXh0ZW5kKHt9LG5iLHQpfV9nZXRPcHRpb24odCl7bGV0IG49e3RyYW5zaXRpb246ei5leHRlbmQoe30sdGhpcy5vcHRpb24sdCksdHJhbnNmb3JtT3JpZ2luOiIifTtyZXR1cm4gbi50cmFuc2Zvcm1PcmlnaW49bi50cmFuc2l0aW9uLnRyYW5zZm9ybU9yaWdpbixkZWxldGUgbi50cmFuc2l0aW9uLnRyYW5zZm9ybU9yaWdpbixufV9wdXNoQW5pbWF0ZXModCxuKXt0aGlzLmN1cnJlbnRTdGVwQW5pbWF0ZXMucHVzaCh7dHlwZTp0LGFyZ3M6bn0pfV9jb252ZXJUeXBlKHQpe3JldHVybiB0LnJlcGxhY2UoL1tBLVpdL2csbj0+YC0ke24udG9Mb3dlckNhc2UoKX1gKX1fZ2V0VmFsdWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIj9gJHt0fXB4YDp0fWV4cG9ydCgpe2xldCB0PXRoaXMuYWN0aW9ucztyZXR1cm4gdGhpcy5hY3Rpb25zPVtdLHthY3Rpb25zOnR9fXN0ZXAodCl7cmV0dXJuIHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcy5mb3JFYWNoKG49PntuLnR5cGUhPT0ic3R5bGUiP3RoaXMuY3VycmVudFRyYW5zZm9ybVtuLnR5cGVdPW46dGhpcy5jdXJyZW50VHJhbnNmb3JtW2Ake24udHlwZX0uJHtuLmFyZ3NbMF19YF09bn0pLHRoaXMuYWN0aW9ucy5wdXNoKHthbmltYXRlczpPYmplY3QudmFsdWVzKHRoaXMuY3VycmVudFRyYW5zZm9ybSksb3B0aW9uOnRoaXMuX2dldE9wdGlvbih0KX0pLHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcz1bXSx0aGlzfX1sZXQgcmI9Si5vbmNlKCgpPT57bGV0IGU9WyJtYXRyaXgiLCJtYXRyaXgzZCIsInJvdGF0ZSIsInJvdGF0ZTNkIiwicm90YXRlWCIsInJvdGF0ZVkiLCJyb3RhdGVaIiwic2NhbGUiLCJzY2FsZTNkIiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVaIiwic2tldyIsInNrZXdYIiwic2tld1kiLCJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGUzZCIsInRyYW5zbGF0ZVgiLCJ0cmFuc2xhdGVZIiwidHJhbnNsYXRlWiJdLHQ9WyJvcGFjaXR5IiwiYmFja2dyb3VuZENvbG9yIl0sbj1bIndpZHRoIiwiaGVpZ2h0IiwibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl07ZS5jb25jYXQodCxuKS5mb3JFYWNoKHI9Pnt0aC5wcm90b3R5cGVbcl09ZnVuY3Rpb24oLi4ubyl7cmV0dXJuIHQuY29uY2F0KG4pLmluY2x1ZGVzKHIpP3RoaXMuX3B1c2hBbmltYXRlcygic3R5bGUiLFt0aGlzLl9jb252ZXJUeXBlKHIpLG4uaW5jbHVkZXMocik/dGhpcy5fZ2V0VmFsdWUob1swXSk6b1swXV0pOnRoaXMuX3B1c2hBbmltYXRlcyhyLG8pLHRoaXN9fSl9KSxpYj1EdChRXyxlPT4ocmIoKSxuZXcgdGgoZSkpLHRiLGViKSxuaD0ib25UYWJCYXJNaWRCdXR0b25UYXAiLG9iPXBuKG5oLCgpPT57fSksYWI9Im9uV2luZG93UmVzaXplIixzYj0ib2ZmV2luZG93UmVzaXplIixsYj1wbihhYiwoKT0+e30pLGNiPVhyKHNiLCgpPT57fSkscmg9InNldExvY2FsZSIsdWI9ImdldExvY2FsZSIsaWg9Im9uTG9jYWxlQ2hhbmdlIixLbD1EdCh1YiwoKT0+e2xldCBlPXd0KHthbGxvd0RlZmF1bHQ6ITB9KTtyZXR1cm4gZSYmZS4kdm0/ZS4kdm0uJGxvY2FsZTphZSgpLmdldExvY2FsZSgpfSksZmI9cG4oaWgsKCk9Pnt9KSxkYj1EdChyaCxlPT57bGV0IHQ9d3QoKTtyZXR1cm4gdCYmdC4kdm0uJGxvY2FsZSE9PWU/KHQuJHZtLiRsb2NhbGU9ZSxJbigpLmZvckVhY2gobz0+e290LnB1Ymxpc2hIYW5kbGVyKHJoLGUsby4kcGFnZS5pZCl9KSxmLnJlcXVpcmVNb2R1bGUoInBsdXMiKS5zZXRMYW5ndWFnZShlKSxvdC5pbnZva2VPbkNhbGxiYWNrKGloLHtsb2NhbGU6ZX0pLCEwKTohMX0pLGhiPVRlKCJzZXRQYWdlTWV0YSIsKGUse3Jlc29sdmU6dH0pPT57dCh0byhicigpLGUpKX0pLG9oPSJnZXRTZWxlY3RlZFRleHRSYW5nZSIsZ2I9VGUob2gsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57b3QuaW52b2tlVmlld01ldGhvZChvaCx7fSxoYSgpLHI9Pnt0eXBlb2Ygci5lbmQ9PSJ1bmRlZmluZWQiJiZ0eXBlb2Ygci5zdGFydD09InVuZGVmaW5lZCI/bigibm8gZm9jdXNlZCIpOnQocil9KX0pLFRjPXtbSi5PTl9VTkhBTkRMRV9SRUpFQ1RJT05dOltdLFtKLk9OX1BBR0VfTk9UX0ZPVU5EXTpbXSxbSi5PTl9FUlJPUl06W10sW0ouT05fU0hPV106W10sW0ouT05fSElERV06W119O2Z1bmN0aW9uIFpsKGUsdCl7bGV0IG49d3Qoe2FsbG93RGVmYXVsdDohMH0pO2lmKG4mJm4uJHZtKXJldHVybiBobi5pbmplY3RIb29rKGUsdCxuLiR2bS4kKTtUY1tlXS5wdXNoKHQpfWZ1bmN0aW9uIHBiKGUpe09iamVjdC5rZXlzKFRjKS5mb3JFYWNoKHQ9PntUY1t0XS5mb3JFYWNoKG49Pntobi5pbmplY3RIb29rKHQsbixlKX0pfSl9ZnVuY3Rpb24gWGwoZSx0KXtsZXQgbj13dCh7YWxsb3dEZWZhdWx0OiEwfSk7aWYobiYmbi4kdm0pcmV0dXJuIFBhKG4uJHZtLGUsdCk7ei5yZW1vdmUoVGNbZV0sdCl9ZnVuY3Rpb24gdmIoZSl7WmwoSi5PTl9VTkhBTkRMRV9SRUpFQ1RJT04sZSl9ZnVuY3Rpb24gbWIoZSl7WGwoSi5PTl9VTkhBTkRMRV9SRUpFQ1RJT04sZSl9ZnVuY3Rpb24gX2IoZSl7WmwoSi5PTl9QQUdFX05PVF9GT1VORCxlKX1mdW5jdGlvbiBiYihlKXtYbChKLk9OX1BBR0VfTk9UX0ZPVU5ELGUpfWZ1bmN0aW9uIHliKGUpe1psKEouT05fRVJST1IsZSl9ZnVuY3Rpb24gRWIoZSl7WGwoSi5PTl9FUlJPUixlKX1mdW5jdGlvbiBTYihlKXtabChKLk9OX1NIT1csZSl9ZnVuY3Rpb24gd2IoZSl7WGwoSi5PTl9TSE9XLGUpfWZ1bmN0aW9uIENiKGUpe1psKEouT05fSElERSxlKX1mdW5jdGlvbiBBYihlKXtYbChKLk9OX0hJREUsZSl9bGV0IE9iPUR0KCJnZXRFbnRlck9wdGlvbnNTeW5jIiwoKT0+Vm8oKSksVGI9RHQoImdldExhdW5jaE9wdGlvbnNTeW5jIiwoKT0+ZHMoKSksUWwseHUsQnUsYWg7ZnVuY3Rpb24gc2goZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKHQpe31yZXR1cm4gZX1mdW5jdGlvbiBNdShlKXtpZihlLnR5cGU9PT0iZW5hYmxlZCIpQnU9ITAsYWg9ZS5vZmZsaW5lO2Vsc2UgaWYoZS50eXBlPT09ImNsaWVudElkIilRbD1lLmNpZCx4dT1lLmVyck1zZyxsaChRbCxlLmVyck1zZyk7ZWxzZSBpZihlLnR5cGU9PT0icHVzaE1zZyIpe2xldCB0PXt0eXBlOiJyZWNlaXZlIixkYXRhOnNoKGUubWVzc2FnZSl9O2ZvcihsZXQgbj0wO248T3MubGVuZ3RoJiYoT3Nbbl0odCksIXQuc3RvcHBlZCk7bisrKTt9ZWxzZSBlLnR5cGU9PT0iY2xpY2siJiZPcy5mb3JFYWNoKHQ9Pnt0KHt0eXBlOiJjbGljayIsZGF0YTpzaChlLm1lc3NhZ2UpfSl9KX1sZXQgRHU9W107ZnVuY3Rpb24gbGgoZSx0KXtEdS5mb3JFYWNoKG49PntuKGUsdCl9KSxEdS5sZW5ndGg9MH1sZXQgUGI9VGUoImdldFB1c2hDbGllbnRJZCIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57aWYoYWgpe3MucHVzaC5nZXRDbGllbnRJbmZvQXN5bmMocj0+e3Qoe2NpZDpyLmNsaWVudGlkfSl9LHI9PntuKHIuY29kZSsiOiAiK3IubWVzc2FnZSl9KTtyZXR1cm59UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3R5cGVvZiBCdT09InVuZGVmaW5lZCImJihCdT0hMSxRbD0iIix4dT0idW5pUHVzaCBpcyBub3QgZW5hYmxlZCIpLER1LnB1c2goKHIsbyk9PntyP3Qoe2NpZDpyfSk6bihvKX0pLHR5cGVvZiBRbCE9InVuZGVmaW5lZCImJmxoKFFsLHh1KX0pfSksT3M9W10sY2g9ITEsSWI9ZT0+e09zLmluZGV4T2YoZSk9PT0tMSYmT3MucHVzaChlKSxjaHx8KGNoPSEwLHMucHVzaC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdD0+e011KHt0eXBlOiJjbGljayIsbWVzc2FnZTp0fSl9KSxzLnB1c2guYWRkRXZlbnRMaXN0ZW5lcigicmVjZWl2ZSIsdD0+e011KHt0eXBlOiJwdXNoTXNnIixtZXNzYWdlOnR9KX0pKX0sTmI9ZT0+e2lmKCFlKU9zLmxlbmd0aD0wO2Vsc2V7bGV0IHQ9T3MuaW5kZXhPZihlKTt0Pi0xJiZPcy5zcGxpY2UodCwxKX19LGtiPSJjYW5JVXNlIixSYj1be25hbWU6InNjaGVtYSIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSx4Yj0iZ2V0QmFja2dyb3VuZEF1ZGlvTWFuYWdlciIsQmI9Im1ha2VQaG9uZUNhbGwiLE1iPXtwaG9uZU51bWJlcjpTdHJpbmd9LERiPSJhZGRQaG9uZUNvbnRhY3QiLExiPXtmb3JtYXRBcmdzOntmaXJzdE5hbWUoZSl7aWYoIWUpcmV0dXJuImFkZFBob25lQ29udGFjdDpmYWlsIHBhcmFtZXRlciBlcnJvcjogcGFyYW1ldGVyLmZpcnN0TmFtZSBzaG91bGQgbm90IGJlIGVtcHR5OyJ9fX0sRmI9e2ZpcnN0TmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHBob3RvRmlsZVBhdGg6U3RyaW5nLG5pY2tOYW1lOlN0cmluZyxsYXN0TmFtZTpTdHJpbmcsbWlkZGxlTmFtZTpTdHJpbmcscmVtYXJrOlN0cmluZyxtb2JpbGVQaG9uZU51bWJlcjpTdHJpbmcsd2VDaGF0TnVtYmVyOlN0cmluZyxhZGRyZXNzQ291bnRyeTpTdHJpbmcsYWRkcmVzc1N0YXRlOlN0cmluZyxhZGRyZXNzQ2l0eTpTdHJpbmcsYWRkcmVzc1N0cmVldDpTdHJpbmcsYWRkcmVzc1Bvc3RhbENvZGU6U3RyaW5nLG9yZ2FuaXphdGlvbjpTdHJpbmcsdGl0bGU6U3RyaW5nLHdvcmtGYXhOdW1iZXI6U3RyaW5nLHdvcmtQaG9uZU51bWJlcjpTdHJpbmcsaG9zdE51bWJlcjpTdHJpbmcsZW1haWw6U3RyaW5nLHVybDpTdHJpbmcsd29ya0FkZHJlc3NDb3VudHJ5OlN0cmluZyx3b3JrQWRkcmVzc1N0YXRlOlN0cmluZyx3b3JrQWRkcmVzc0NpdHk6U3RyaW5nLHdvcmtBZGRyZXNzU3RyZWV0OlN0cmluZyx3b3JrQWRkcmVzc1Bvc3RhbENvZGU6U3RyaW5nLGhvbWVGYXhOdW1iZXI6U3RyaW5nLGhvbWVQaG9uZU51bWJlcjpTdHJpbmcsaG9tZUFkZHJlc3NDb3VudHJ5OlN0cmluZyxob21lQWRkcmVzc1N0YXRlOlN0cmluZyxob21lQWRkcmVzc0NpdHk6U3RyaW5nLGhvbWVBZGRyZXNzU3RyZWV0OlN0cmluZyxob21lQWRkcmVzc1Bvc3RhbENvZGU6U3RyaW5nfSxWYj0iZ2V0Q2xpcGJvYXJkRGF0YSIsVWI9InNldENsaXBib2FyZERhdGEiLCRiPXtmb3JtYXRBcmdzOntzaG93VG9hc3Q6ITB9LGJlZm9yZUludm9rZSgpe3N0KCl9LGJlZm9yZVN1Y2Nlc3MoZSx0KXtpZighdC5zaG93VG9hc3QpcmV0dXJuO2xldHt0Om59PWFlKCkscj1uKCJ1bmkuc2V0Q2xpcGJvYXJkRGF0YS5zdWNjZXNzIik7ciYmUC5zaG93VG9hc3Qoe3RpdGxlOnIsaWNvbjoic3VjY2VzcyIsbWFzazohMX0pfX0sSGI9e2RhdGE6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxzaG93VG9hc3Q6e3R5cGU6Qm9vbGVhbn19LHVoPSJvbkFjY2VsZXJvbWV0ZXIiLGpiPSJvZmZBY2NlbGVyb21ldGVyIix6Yj0ic3RhcnRBY2NlbGVyb21ldGVyIixXYj0ic3RvcEFjY2VsZXJvbWV0ZXIiLGZoPSJvbkNvbXBhc3MiLEdiPSJvZmZDb21wYXNzIixZYj0ic3RhcnRDb21wYXNzIixxYj0ic3RvcENvbXBhc3MiLEpiPSJ2aWJyYXRlU2hvcnQiLEtiPSJ2aWJyYXRlTG9uZyIsZGg9Im9uQmx1ZXRvb3RoRGV2aWNlRm91bmQiLGhoPSJvbkJsdWV0b290aEFkYXB0ZXJTdGF0ZUNoYW5nZSIsZ2g9Im9uQkxFQ29ubmVjdGlvblN0YXRlQ2hhbmdlIixwaD0ib25CTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlIixaYj0ic3RhcnRCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5IixYYj17c2VydmljZXM6QXJyYXksYWxsb3dEdXBsaWNhdGVzS2V5OkJvb2xlYW4saW50ZXJ2YWw6TnVtYmVyfSxRYj0iZ2V0Q29ubmVjdGVkQmx1ZXRvb3RoRGV2aWNlcyIsZTA9e3NlcnZpY2VzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfX0sdDA9ImNyZWF0ZUJMRUNvbm5lY3Rpb24iLG4wPXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxyMD0iY2xvc2VCTEVDb25uZWN0aW9uIixpMD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sbzA9ImdldEJMRURldmljZVNlcnZpY2VzIixhMD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sczA9ImdldEJMRURldmljZUNoYXJhY3RlcmlzdGljcyIsbDA9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGMwPSJub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlIix1MD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxzZXJ2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxjaGFyYWN0ZXJpc3RpY0lkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc3RhdGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMH19LGYwPSJyZWFkQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSIsZDA9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sY2hhcmFjdGVyaXN0aWNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxoMD0id3JpdGVCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlIixnMD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxzZXJ2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxjaGFyYWN0ZXJpc3RpY0lkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sdmFsdWU6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9fSxwMD0ic2V0QkxFTVRVIix2MD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxtdHU6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfX0sbTA9ImdldEJMRURldmljZVJTU0kiLF8wPXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSx2aD0ib25CZWFjb25VcGRhdGUiLG1oPSJvbkJlYWNvblNlcnZpY2VDaGFuZ2UiLGIwPSJnZXRCZWFjb25zIix5MD0ic3RhcnRCZWFjb25EaXNjb3ZlcnkiLEUwPXt1dWlkczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH19LFMwPSJzdG9wQmVhY29uRGlzY292ZXJ5Iix3MD0iZ2V0U2NyZWVuQnJpZ2h0bmVzcyIsQzA9InNldFNjcmVlbkJyaWdodG5lc3MiLEEwPSJzZXRLZWVwU2NyZWVuT24iLE8wPSJjaGVja0lzU3VwcG9ydFNvdGVyQXV0aGVudGljYXRpb24iLFQwPSJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlIixQMD1bImZpbmdlclByaW50IiwiZmFjaWFsIiwic3BlZWNoIl0sSTA9e2Zvcm1hdEFyZ3M6e2NoZWNrQXV0aE1vZGUoZSx0KXtpZighZXx8IVAwLmluY2x1ZGVzKGUpKXJldHVybiJjaGVja0F1dGhNb2RlIFx1NTg2Qlx1NTE5OVx1OTUxOVx1OEJFRiJ9fX0sTjA9e2NoZWNrQXV0aE1vZGU6U3RyaW5nfSxrMD0ic3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uIixSMD17Zm9ybWF0QXJnczp7cmVxdWVzdEF1dGhNb2RlcyhlLHQpe2lmKCFlLmluY2x1ZGVzKCJmaW5nZXJQcmludCIpJiYhZS5pbmNsdWRlcygiZmFjaWFsIikpcmV0dXJuInJlcXVlc3RBdXRoTW9kZXMgXHU1ODZCXHU1MTk5XHU5NTE5XHU4QkVGIn19fSx4MD17cmVxdWVzdEF1dGhNb2Rlczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH0sY2hhbGxlbmdlOlN0cmluZyxhdXRoQ29udGVudDpTdHJpbmd9LEIwPSJzY2FuQ29kZSIsTTA9e29ubHlGcm9tQ2FtZXJhOkJvb2xlYW4sc2NhblR5cGU6QXJyYXksYXV0b0RlY29kZUNoYXJTZXQ6Qm9vbGVhbixzb3VuZDpTdHJpbmcsYXV0b1pvb206Qm9vbGVhbn0sRDA9WyJkZWZhdWx0Iiwibm9uZSJdLEwwPXtmb3JtYXRBcmdzOntzb3VuZChlLHQpe0QwLmluY2x1ZGVzKGUpfHwodC5zb3VuZD0ibm9uZSIpfSxhdXRvWm9vbShlLHQpe3R5cGVvZiBlPT0idW5kZWZpbmVkIiYmKHQuYXV0b1pvb209ITApfX19LEYwPSJnZXRTeXN0ZW1TZXR0aW5nIixWMD0iZ2V0QXBwQXV0aG9yaXplU2V0dGluZyIsVTA9Im9wZW5BcHBBdXRob3JpemVTZXR0aW5nIiwkMD0iZ2V0U3RvcmFnZSIsX2g9e2tleTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxIMD0iZ2V0U3RvcmFnZVN5bmMiLGJoPVt7bmFtZToia2V5Iix0eXBlOlN0cmluZyxyZXF1aXJlZDohMH1dLGowPSJzZXRTdG9yYWdlIix6MD17a2V5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZGF0YTp7cmVxdWlyZWQ6ITB9fSxXMD0ic2V0U3RvcmFnZVN5bmMiLEcwPVt7bmFtZToia2V5Iix0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0se25hbWU6ImRhdGEiLHJlcXVpcmVkOiEwfV0seWg9InJlbW92ZVN0b3JhZ2UiLFkwPV9oLHEwPWJoLEowPSJzYXZlRmlsZSIsSzA9e2Zvcm1hdEFyZ3M6e3RlbXBGaWxlUGF0aChlLHQpe3QudGVtcEZpbGVQYXRoPWplKGUpfX19LFowPXt0ZW1wRmlsZVBhdGg6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sWDA9ImdldFNhdmVkRmlsZUxpc3QiLFEwPSJyZW1vdmVTYXZlZEZpbGUiLGV5PXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9amUoZSl9fX0sdHk9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LG55PSJnZXRGaWxlSW5mbyIscnk9e2Zvcm1hdEFyZ3M6e2ZpbGVQYXRoKGUsdCl7dC5maWxlUGF0aD1qZShlKX19fSxpeT17ZmlsZVBhdGg6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sb3k9ImdldFNhdmVkRmlsZUluZm8iLGF5PXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9amUoZSl9fX0sc3k9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGx5PSJvcGVuRG9jdW1lbnQiLGN5PXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9amUoZSl9fX0sdXk9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZmlsZVR5cGU6U3RyaW5nfSxmeT0iaGlkZUtleWJvYXJkIixkeT0ic2hvd0tleWJvYXJkIixoeT0iY2hvb3NlTG9jYXRpb24iLGd5PXtrZXl3b3JkOlN0cmluZyxsYXRpdHVkZTpOdW1iZXIsbG9uZ2l0dWRlOk51bWJlcn0scHk9ImdldExvY2F0aW9uIixFaD1bIndnczg0IiwiZ2NqMDIiXSx2eT17Zm9ybWF0QXJnczp7dHlwZShlLHQpe2U9KGV8fCIiKS50b0xvd2VyQ2FzZSgpLEVoLmluZGV4T2YoZSk9PT0tMT90LnR5cGU9RWhbMF06dC50eXBlPWV9LGFsdGl0dWRlKGUsdCl7dC5hbHRpdHVkZT1lfHwhMX19fSxteT17dHlwZTpTdHJpbmcsYWx0aXR1ZGU6Qm9vbGVhbn0sX3k9Im9wZW5Mb2NhdGlvbiIsU2g9KGUsdCk9PntpZih0PT09dm9pZCAwKXJldHVybmAke2V9IHNob3VsZCBub3QgYmUgZW1wdHkuYDtpZih0eXBlb2YgdCE9Im51bWJlciIpe2xldCBuPXR5cGVvZiB0O3JldHVybiBuPW5bMF0udG9VcHBlckNhc2UoKStuLnN1YnN0cmluZygxKSxgRXhwZWN0ZWQgTnVtYmVyLCBnb3QgJHtufSB3aXRoIHZhbHVlICR7SlNPTi5zdHJpbmdpZnkodCl9LmB9fSxieT17Zm9ybWF0QXJnczp7bGF0aXR1ZGUoZSx0KXtsZXQgbj1TaCgibGF0aXR1ZGUiLGUpO2lmKG4pcmV0dXJuIG47dC5sYXRpdHVkZT1lfSxsb25naXR1ZGUoZSx0KXtsZXQgbj1TaCgibG9uZ2l0dWRlIixlKTtpZihuKXJldHVybiBuO3QubG9uZ2l0dWRlPWV9LHNjYWxlKGUsdCl7ZT1NYXRoLmZsb29yKGUpLHQuc2NhbGU9ZT49NSYmZTw9MTg/ZToxOH19fSx5eT17bGF0aXR1ZGU6TnVtYmVyLGxvbmdpdHVkZTpOdW1iZXIsc2NhbGU6TnVtYmVyLG5hbWU6U3RyaW5nLGFkZHJlc3M6U3RyaW5nfSxFeT0iY2hvb3NlSW1hZ2UiLFN5PXtmb3JtYXRBcmdzOntjb3VudChlLHQpeyghZXx8ZTw9MCkmJih0LmNvdW50PTkpfSxzaXplVHlwZShlLHQpe3Quc2l6ZVR5cGU9cHIoZSxwaSl9LHNvdXJjZVR5cGUoZSx0KXt0LnNvdXJjZVR5cGU9cHIoZSxxcil9LGV4dGVuc2lvbihlLHQpe2lmKGUgaW5zdGFuY2VvZiBBcnJheSYmZS5sZW5ndGg9PT0wKXJldHVybiJwYXJhbSBleHRlbnNpb24gc2hvdWxkIG5vdCBiZSBlbXB0eS4iO2V8fCh0LmV4dGVuc2lvbj1bIioiXSl9fX0sd3k9e2NvdW50Ok51bWJlcixzaXplVHlwZTpbQXJyYXksU3RyaW5nXSxzb3VyY2VUeXBlOkFycmF5LGV4dGVuc2lvbjpBcnJheX0sQ3k9ImNob29zZVZpZGVvIixBeT17Zm9ybWF0QXJnczp7c291cmNlVHlwZShlLHQpe3Quc291cmNlVHlwZT1wcihlLHFyKX0sY29tcHJlc3NlZDohMCxtYXhEdXJhdGlvbjo2MCxjYW1lcmE6ImJhY2siLGV4dGVuc2lvbihlLHQpe2lmKGUgaW5zdGFuY2VvZiBBcnJheSYmZS5sZW5ndGg9PT0wKXJldHVybiJwYXJhbSBleHRlbnNpb24gc2hvdWxkIG5vdCBiZSBlbXB0eS4iO2V8fCh0LmV4dGVuc2lvbj1bIioiXSl9fX0sT3k9e3NvdXJjZVR5cGU6QXJyYXksY29tcHJlc3NlZDpCb29sZWFuLG1heER1cmF0aW9uOk51bWJlcixjYW1lcmE6U3RyaW5nLGV4dGVuc2lvbjpBcnJheX0sVHk9ImdldEltYWdlSW5mbyIsUHk9e2Zvcm1hdEFyZ3M6e3NyYyhlLHQpe3Quc3JjPWplKGUpfX19LEl5PXtzcmM6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sTnk9InByZXZpZXdJbWFnZSIsa3k9e2Zvcm1hdEFyZ3M6e3VybHMoZSx0KXt0LnVybHM9ZS5tYXAobj0+ei5pc1N0cmluZyhuKSYmbj9qZShuKToiIil9LGN1cnJlbnQoZSx0KXt0eXBlb2YgZT09Im51bWJlciI/dC5jdXJyZW50PWU+MCYmZTx0LnVybHMubGVuZ3RoP2U6MDp6LmlzU3RyaW5nKGUpJiZlJiYodC5jdXJyZW50PWplKGUpKX19fSxSeT17dXJsczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH0sY3VycmVudDp7dHlwZTpbTnVtYmVyLFN0cmluZ119fSx4eT0iY2xvc2VQcmV2aWV3SW1hZ2UiLEJ5PSJnZXRWaWRlb0luZm8iLE15PXtmb3JtYXRBcmdzOntzcmMoZSx0KXt0LnNyYz1qZShlKX19fSxEeT17c3JjOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LEx5PSJzYXZlSW1hZ2VUb1Bob3Rvc0FsYnVtIixGeT17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPWplKGUpfX19LFZ5PXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxVeT0ic2F2ZVZpZGVvVG9QaG90b3NBbGJ1bSIsJHk9e2Zvcm1hdEFyZ3M6e2ZpbGVQYXRoKGUsdCl7dC5maWxlUGF0aD1qZShlKX19fSxIeT17ZmlsZVBhdGg6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sank9ImdldFJlY29yZGVyTWFuYWdlciIsenk9ImNvbXByZXNzSW1hZ2UiLFd5PXtmb3JtYXRBcmdzOntzcmMoZSx0KXt0LnNyYz1qZShlKX19fSxHeT17c3JjOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LFl5PSJjb21wcmVzc1ZpZGVvIixxeT17Zm9ybWF0QXJnczp7c3JjKGUsdCl7dC5zcmM9amUoZSl9fX0sSnk9e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHF1YWxpdHk6U3RyaW5nLGJpdHJhdGU6TnVtYmVyLGZwczpOdW1iZXIscmVzb2x1dGlvbjpOdW1iZXJ9LEt5PSJyZXF1ZXN0IixaeT17SlNPTjoianNvbiJ9LFh5PVsidGV4dCIsImFycmF5YnVmZmVyIl0sUXk9InRleHQiLHdoPWVuY29kZVVSSUNvbXBvbmVudDtmdW5jdGlvbiBlRShlLHQpe2xldCBuPWUuc3BsaXQoIiMiKSxyPW5bMV18fCIiO249blswXS5zcGxpdCgiPyIpO2xldCBvPW5bMV18fCIiO2U9blswXTtsZXQgYz1vLnNwbGl0KCImIikuZmlsdGVyKGI9PmIpLGc9e307Yy5mb3JFYWNoKGI9PntsZXQgVj1iLnNwbGl0KCI9Iik7Z1tWWzBdXT1WWzFdfSk7Zm9yKGxldCBiIGluIHQpaWYoei5oYXNPd24odCxiKSl7bGV0IFY9dFtiXTt0eXBlb2YgVj09InVuZGVmaW5lZCJ8fFY9PT1udWxsP1Y9IiI6ei5pc1BsYWluT2JqZWN0KFYpJiYoVj1KU09OLnN0cmluZ2lmeShWKSksZ1t3aChiKV09d2goVil9cmV0dXJuIG89T2JqZWN0LmtleXMoZykubWFwKGI9PmAke2J9PSR7Z1tiXX1gKS5qb2luKCImIiksZSsobz8iPyIrbzoiIikrKHI/IiMiK3I6IiIpfWxldCB0RT17bWV0aG9kOlN0cmluZyxkYXRhOltPYmplY3QsU3RyaW5nLEFycmF5LEFycmF5QnVmZmVyXSx1cmw6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxoZWFkZXI6T2JqZWN0LGRhdGFUeXBlOlN0cmluZyxyZXNwb25zZVR5cGU6U3RyaW5nLHdpdGhDcmVkZW50aWFsczpCb29sZWFufSxuRT17Zm9ybWF0QXJnczp7bWV0aG9kKGUsdCl7dC5tZXRob2Q9U24oKGV8fCIiKS50b1VwcGVyQ2FzZSgpLGdyKX0sZGF0YShlLHQpe3QuZGF0YT1lfHwiIn0sdXJsKGUsdCl7dC5tZXRob2Q9PT1nclswXSYmei5pc1BsYWluT2JqZWN0KHQuZGF0YSkmJk9iamVjdC5rZXlzKHQuZGF0YSkubGVuZ3RoJiYodC51cmw9ZUUoZSx0LmRhdGEpKX0saGVhZGVyKGUsdCl7bGV0IG49dC5oZWFkZXI9ZXx8e307dC5tZXRob2QhPT1nclswXSYmKE9iamVjdC5rZXlzKG4pLmZpbmQocj0+ci50b0xvd2VyQ2FzZSgpPT09ImNvbnRlbnQtdHlwZSIpfHwoblsiQ29udGVudC1UeXBlIl09ImFwcGxpY2F0aW9uL2pzb24iKSl9LGRhdGFUeXBlKGUsdCl7dC5kYXRhVHlwZT0oZXx8WnkuSlNPTikudG9Mb3dlckNhc2UoKX0scmVzcG9uc2VUeXBlKGUsdCl7dC5yZXNwb25zZVR5cGU9KGV8fCIiKS50b0xvd2VyQ2FzZSgpLFh5LmluZGV4T2YodC5yZXNwb25zZVR5cGUpPT09LTEmJih0LnJlc3BvbnNlVHlwZT1ReSl9fX0sckU9ImNvbmZpZ01UTFMiLGlFPXtjZXJ0aWZpY2F0ZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9fSxvRT17Zm9ybWF0QXJnczp7Y2VydGlmaWNhdGVzKGUpe2lmKGUuc29tZSh0PT56LnRvUmF3VHlwZSh0Lmhvc3QpIT09IlN0cmluZyIpKXJldHVybiJcdTUzQzJcdTY1NzBcdTkxNERcdTdGNkVcdTk1MTlcdThCRUZcdUZGMENcdThCRjdcdTc4NkVcdThCQTRcdTU0MEVcdTkxQ0RcdThCRDUifX19LGFFPSJkb3dubG9hZEZpbGUiLHNFPXtmb3JtYXRBcmdzOntoZWFkZXIoZSx0KXt0LmhlYWRlcj1lfHx7fX19fSxsRT17dXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0saGVhZGVyOk9iamVjdCx0aW1lb3V0Ok51bWJlcn0sY0U9InVwbG9hZEZpbGUiLHVFPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe2UmJih0LmZpbGVQYXRoPWplKGUpKX0saGVhZGVyKGUsdCl7dC5oZWFkZXI9ZXx8e319LGZvcm1EYXRhKGUsdCl7dC5mb3JtRGF0YT1lfHx7fX19fSxmRT17dXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZmlsZXM6QXJyYXksZmlsZVBhdGg6U3RyaW5nLG5hbWU6U3RyaW5nLGhlYWRlcjpPYmplY3QsZm9ybURhdGE6T2JqZWN0LHRpbWVvdXQ6TnVtYmVyfSxkRT0iY29ubmVjdFNvY2tldCIsaEU9e2Zvcm1hdEFyZ3M6e2hlYWRlcihlLHQpe3QuaGVhZGVyPWV8fHt9fSxtZXRob2QoZSx0KXt0Lm1ldGhvZD1TbigoZXx8IiIpLnRvVXBwZXJDYXNlKCksZ3IpfSxwcm90b2NvbHMoZSx0KXt6LmlzU3RyaW5nKGUpJiYodC5wcm90b2NvbHM9W2VdKX19fSxnRT17dXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0saGVhZGVyOnt0eXBlOk9iamVjdH0sbWV0aG9kOlN0cmluZyxwcm90b2NvbHM6W0FycmF5LFN0cmluZ119LHBFPSJzZW5kU29ja2V0TWVzc2FnZSIsdkU9e2RhdGE6W1N0cmluZyxBcnJheUJ1ZmZlcl19LG1FPSJjbG9zZVNvY2tldCIsX0U9e2NvZGU6TnVtYmVyLHJlYXNvbjpTdHJpbmd9LGJFPSJzdGFydExvY2F0aW9uVXBkYXRlIixDaD0ib25Mb2NhdGlvbkNoYW5nZSIseUU9InN0b3BMb2NhdGlvblVwZGF0ZSIsRUU9Im9mZkxvY2F0aW9uQ2hhbmdlIixTRT0ib2ZmTG9jYXRpb25DaGFuZ2VFcnJvciIsQWg9Im9uTG9jYXRpb25DaGFuZ2VFcnJvciIsT2g9WyJ3Z3M4NCIsImdjajAyIl0sd0U9e3R5cGU6U3RyaW5nfSxDRT17Zm9ybWF0QXJnczp7dHlwZShlLHQpe2U9KGV8fCIiKS50b0xvd2VyQ2FzZSgpLE9oLmluZGV4T2YoZSk9PT0tMT90LnR5cGU9T2hbMV06dC50eXBlPWV9fX07ZnVuY3Rpb24gQUUoZSl7aWYoIXouaXNTdHJpbmcoZSkpcmV0dXJuIGU7bGV0IHQ9ZS5pbmRleE9mKCI/Iik7aWYodD09PS0xKXJldHVybiBlO2xldCBuPWUuc2xpY2UodCsxKS50cmltKCkucmVwbGFjZSgvXihcP3wjfCYpLywiIik7aWYoIW4pcmV0dXJuIGU7ZT1lLnNsaWNlKDAsdCk7bGV0IHI9W107cmV0dXJuIG4uc3BsaXQoIiYiKS5mb3JFYWNoKG89PntsZXQgYz1vLnJlcGxhY2UoL1wrL2csIiAiKS5zcGxpdCgiPSIpLGc9Yy5zaGlmdCgpLGI9Yy5sZW5ndGg+MD9jLmpvaW4oIj0iKToiIjtyLnB1c2goZysiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpKX0pLHIubGVuZ3RoP2UrIj8iK3Iuam9pbigiJiIpOmV9bGV0IE9FPVsic2xpZGUtaW4tcmlnaHQiLCJzbGlkZS1pbi1sZWZ0Iiwic2xpZGUtaW4tdG9wIiwic2xpZGUtaW4tYm90dG9tIiwiZmFkZS1pbiIsInpvb20tb3V0Iiwiem9vbS1mYWRlLW91dCIsInBvcC1pbiIsIm5vbmUiXSxURT1bInNsaWRlLW91dC1yaWdodCIsInNsaWRlLW91dC1sZWZ0Iiwic2xpZGUtb3V0LXRvcCIsInNsaWRlLW91dC1ib3R0b20iLCJmYWRlLW91dCIsInpvb20taW4iLCJ6b29tLWZhZGUtaW4iLCJwb3Atb3V0Iiwibm9uZSJdLENsPXt1cmw6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sTHU9Im5hdmlnYXRlVG8iLEZ1PSJyZWRpcmVjdFRvIixUaD0icmVMYXVuY2giLFBjPSJzd2l0Y2hUYWIiLFBFPSJuYXZpZ2F0ZUJhY2siLFZ1PSJwcmVsb2FkUGFnZSIsUGg9InVuUHJlbG9hZFBhZ2UiLElFPXouZXh0ZW5kKHt9LENsLEloKE9FKSksTkU9ei5leHRlbmQoe2RlbHRhOnt0eXBlOk51bWJlcn19LEloKFRFKSksa0U9Q2wsUkU9Q2wseEU9Q2wsQkU9Q2wsTUU9Q2wsREU9TmMoTHUpLExFPU5jKEZ1KSxGRT1OYyhUaCksVkU9TmMoUGMpLFVFPXtmb3JtYXRBcmdzOntkZWx0YShlLHQpe2U9cGFyc2VJbnQoZSsiIil8fDEsdC5kZWx0YT1NYXRoLm1pbihJbigpLmxlbmd0aC0xLGUpfX19O2Z1bmN0aW9uIEloKGUpe3JldHVybnthbmltYXRpb25UeXBlOnt0eXBlOlN0cmluZyx2YWxpZGF0b3IodCl7aWYodCYmZS5pbmRleE9mKHQpPT09LTEpcmV0dXJuImAiK3QrImAgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGFuaW1hdGlvblR5cGVgIChzdXBwb3J0ZWQgdmFsdWVzIGFyZTogYCIrZS5qb2luKCJgfGAiKSsiYCkifX0sYW5pbWF0aW9uRHVyYXRpb246e3R5cGU6TnVtYmVyfX19bGV0IEljO2Z1bmN0aW9uICRFKCl7SWM9IiJ9ZnVuY3Rpb24gTmMoZSl7cmV0dXJue2Zvcm1hdEFyZ3M6e3VybDpIRShlKX0sYmVmb3JlQWxsOiRFfX1mdW5jdGlvbiBIRShlKXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZighbilyZXR1cm4nTWlzc2luZyByZXF1aXJlZCBhcmdzOiAidXJsIic7bj1NbyhuKTtsZXQgbz1uLnNwbGl0KCI/IilbMF0sYz1XaShvLCEwKTtpZighYylyZXR1cm4icGFnZSBgIituKyJgIGlzIG5vdCBmb3VuZCI7aWYoZT09PUx1fHxlPT09RnUpe2lmKGMubWV0YS5pc1RhYkJhcilyZXR1cm5gY2FuIG5vdCAke2V9IGEgdGFiYmFyIHBhZ2VgfWVsc2UgaWYoZT09PVBjJiYhYy5tZXRhLmlzVGFiQmFyKXJldHVybiJjYW4gbm90IHN3aXRjaCB0byBuby10YWJCYXIgcGFnZSI7aWYoKGU9PT1QY3x8ZT09PVZ1KSYmYy5tZXRhLmlzVGFiQmFyJiZyLm9wZW5UeXBlIT09ImFwcExhdW5jaCImJihuPW8pLGMubWV0YS5pc0VudHJ5JiYobj1uLnJlcGxhY2UoYy5hbGlhcywiLyIpKSxyLnVybD1BRShuKSxlIT09UGgpe2lmKGU9PT1WdSl7aWYoIWMubWV0YS5pc05WdWUpcmV0dXJuImNhbiBub3QgcHJlbG9hZCB2dWUgcGFnZSI7aWYoYy5tZXRhLmlzVGFiQmFyKXtsZXQgZz1JbigpLGI9Yy5wYXRoLnNsaWNlKDEpO2lmKGcuZmluZChWPT5WLnJvdXRlPT09YikpcmV0dXJuInRhYkJhciBwYWdlIGAiK2IrImAgYWxyZWFkeSBleGlzdHMifXJldHVybn1pZihJYz09PW4mJnIub3BlblR5cGUhPT0iYXBwTGF1bmNoIilyZXR1cm5gJHtJY30gbG9ja2VkYDtSLnJlYWR5JiYoSWM9bil9fX1sZXQgakU9ImhpZGVMb2FkaW5nIix6RT0iaGlkZVRvYXN0IixOaD0ibG9hZEZvbnRGYWNlIixXRT17ZmFtaWx5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc291cmNlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZGVzYzpPYmplY3R9LEdFPVsiI2ZmZmZmZiIsIiMwMDAwMDAiXSxZRT0ic2V0TmF2aWdhdGlvbkJhckNvbG9yIixxRT17Zm9ybWF0QXJnczp7YW5pbWF0aW9uKGUsdCl7ZXx8KGU9e2R1cmF0aW9uOjAsdGltaW5nRnVuYzoibGluZWFyIn0pLHQuYW5pbWF0aW9uPXtkdXJhdGlvbjplLmR1cmF0aW9ufHwwLHRpbWluZ0Z1bmM6ZS50aW1pbmdGdW5jfHwibGluZWFyIn19fX0sSkU9e2Zyb250Q29sb3I6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwLHZhbGlkYXRvcihlKXtpZihHRS5pbmRleE9mKGUpPT09LTEpcmV0dXJuYGludmFsaWQgZnJvbnRDb2xvciAiJHtlfSJgfX0sYmFja2dyb3VuZENvbG9yOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sYW5pbWF0aW9uOk9iamVjdH0sS0U9InNldE5hdmlnYXRpb25CYXJUaXRsZSIsWkU9e3RpdGxlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LFhFPSJzaG93TmF2aWdhdGlvbkJhckxvYWRpbmciLFFFPSJoaWRlTmF2aWdhdGlvbkJhckxvYWRpbmciLGtoPSJwYWdlU2Nyb2xsVG8iLGVTPXtzY3JvbGxUb3A6TnVtYmVyLHNlbGVjdG9yOlN0cmluZyxkdXJhdGlvbjpOdW1iZXJ9LHRTPXtmb3JtYXRBcmdzOntkdXJhdGlvbjozMDB9fSxuUz0ic2hvd0FjdGlvblNoZWV0IixyUz17aXRlbUxpc3Q6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LHRpdGxlOlN0cmluZyxpdGVtQ29sb3I6U3RyaW5nLHBvcG92ZXI6T2JqZWN0fSxpUz17Zm9ybWF0QXJnczp7aXRlbUNvbG9yOiIjMDAwIn19LG9TPSJzaG93TG9hZGluZyIsYVM9e3RpdGxlOlN0cmluZyxtYXNrOkJvb2xlYW59LHNTPXtmb3JtYXRBcmdzOnt0aXRsZToiIixtYXNrOiExfX0sbFM9InNob3dNb2RhbCIsY1M9e3RpdGxlOlN0cmluZyxjb250ZW50OlN0cmluZyxzaG93Q2FuY2VsOkJvb2xlYW4sY2FuY2VsVGV4dDpTdHJpbmcsY2FuY2VsQ29sb3I6U3RyaW5nLGNvbmZpcm1UZXh0OlN0cmluZyxjb25maXJtQ29sb3I6U3RyaW5nfSx1Uz17YmVmb3JlSW52b2tlKCl7WCgpfSxmb3JtYXRBcmdzOnt0aXRsZToiIixjb250ZW50OiIiLHBsYWNlaG9sZGVyVGV4dDoiIixzaG93Q2FuY2VsOiEwLGVkaXRhYmxlOiExLGNhbmNlbFRleHQoZSx0KXtpZighei5oYXNPd24odCwiY2FuY2VsVGV4dCIpKXtsZXR7dDpufT1hZSgpO3QuY2FuY2VsVGV4dD1uKCJ1bmkuc2hvd01vZGFsLmNhbmNlbCIpfX0sY2FuY2VsQ29sb3I6IiMwMDAiLGNvbmZpcm1UZXh0KGUsdCl7aWYoIXouaGFzT3duKHQsImNvbmZpcm1UZXh0Iikpe2xldHt0Om59PWFlKCk7dC5jb25maXJtVGV4dD1uKCJ1bmkuc2hvd01vZGFsLmNvbmZpcm0iKX19LGNvbmZpcm1Db2xvcjpKLlBSSU1BUllfQ09MT1J9fSxmUz0ic2hvd1RvYXN0IixkUz1bInN1Y2Nlc3MiLCJsb2FkaW5nIiwibm9uZSIsImVycm9yIl0saFM9e3RpdGxlOlN0cmluZyxpY29uOlN0cmluZyxpbWFnZTpTdHJpbmcsZHVyYXRpb246TnVtYmVyLG1hc2s6Qm9vbGVhbn0sZ1M9e2Zvcm1hdEFyZ3M6e3RpdGxlOiIiLGljb24oZSx0KXt0Lmljb249U24oZSxkUyl9LGltYWdlKGUsdCl7ZT90LmltYWdlPWplKGUpOnQuaW1hZ2U9IiJ9LGR1cmF0aW9uOjE1MDAsbWFzazohMX19LHBTPSJzdGFydFB1bGxEb3duUmVmcmVzaCIsdlM9InN0b3BQdWxsRG93blJlZnJlc2giLGVjPXtpbmRleDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITB9fSxUcz17YmVmb3JlSW52b2tlKCl7bGV0IGU9aXMoKTtpZihlJiYhZS5pc1RhYkJhcilyZXR1cm4ibm90IFRhYkJhciBwYWdlIn0sZm9ybWF0QXJnczp7aW5kZXgoZSl7aWYoIVIudGFiQmFyLmxpc3RbZV0pcmV0dXJuInRhYmJhciBpdGVtIG5vdCBmb3VuZCJ9fX0sbVM9InNldFRhYkJhckl0ZW0iLF9TPXouZXh0ZW5kKHt0ZXh0OlN0cmluZyxpY29uUGF0aDpTdHJpbmcsc2VsZWN0ZWRJY29uUGF0aDpTdHJpbmcscGFnZVBhdGg6U3RyaW5nfSxlYyksYlM9e2JlZm9yZUludm9rZTpUcy5iZWZvcmVJbnZva2UsZm9ybWF0QXJnczp6LmV4dGVuZCh7cGFnZVBhdGgoZSx0KXtlJiYodC5wYWdlUGF0aD1KLnJlbW92ZUxlYWRpbmdTbGFzaChlKSl9fSxUcy5mb3JtYXRBcmdzKX0seVM9InNldFRhYkJhclN0eWxlIixFUz17Y29sb3I6U3RyaW5nLHNlbGVjdGVkQ29sb3I6U3RyaW5nLGJhY2tncm91bmRDb2xvcjpTdHJpbmcsYmFja2dyb3VuZEltYWdlOlN0cmluZyxiYWNrZ3JvdW5kUmVwZWF0OlN0cmluZyxib3JkZXJTdHlsZTpTdHJpbmd9LFNTPS9eKGxpbmVhcnxyYWRpYWwpLWdyYWRpZW50XCguKz9cKTs/JC8sd1M9e2JlZm9yZUludm9rZTpUcy5iZWZvcmVJbnZva2UsZm9ybWF0QXJnczp7YmFja2dyb3VuZEltYWdlKGUsdCl7ZSYmIVNTLnRlc3QoZSkmJih0LmJhY2tncm91bmRJbWFnZT1qZShlKSl9LGJvcmRlclN0eWxlKGUsdCl7ZSYmKHQuYm9yZGVyU3R5bGU9ZT09PSJ3aGl0ZSI/IndoaXRlIjoiYmxhY2siKX19fSxDUz0iaGlkZVRhYkJhciIsUmg9e2FuaW1hdGlvbjpCb29sZWFufSxBUz0ic2hvd1RhYkJhciIsT1M9UmgsVFM9ImhpZGVUYWJCYXJSZWREb3QiLFBTPWVjLElTPVRzLE5TPSJzaG93VGFiQmFyUmVkRG90IixrUz1lYyxSUz1Ucyx4Uz0icmVtb3ZlVGFiQmFyQmFkZ2UiLEJTPWVjLE1TPVRzLERTPSJzZXRUYWJCYXJCYWRnZSIsTFM9ei5leHRlbmQoe3RleHQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sZWMpLEZTPXtiZWZvcmVJbnZva2U6VHMuYmVmb3JlSW52b2tlLGZvcm1hdEFyZ3M6ei5leHRlbmQoe3RleHQoZSx0KXtKLmdldExlbihlKT49NCYmKHQudGV4dD0iLi4uIil9fSxUcy5mb3JtYXRBcmdzKX0sVlM9ImdldFByb3ZpZGVyIixVUz17c2VydmljZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSwkUz0ibG9naW4iLEhTPXtwcm92aWRlcjpTdHJpbmcsc2NvcGVzOltTdHJpbmcsQXJyYXldLHRpbWVvdXQ6TnVtYmVyLHVuaXZlcmlmeVN0eWxlOk9iamVjdCxvbmx5QXV0aG9yaXplOkJvb2xlYW59LGpTPSJnZXRVc2VySW5mbyIselM9e3Byb3ZpZGVyOlN0cmluZyx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbix0aW1lb3V0Ok51bWJlcixsYW5nOlN0cmluZ30sV1M9ImdnZXRVc2VyUHJvZmlsZWdldFVzZXJQcm9maWxlIixHUz17cHJvdmlkZXI6U3RyaW5nLHdpdGhDcmVkZW50aWFsczpCb29sZWFuLHRpbWVvdXQ6TnVtYmVyLGxhbmc6U3RyaW5nfSxZUz0icHJlTG9naW4iLHFTPXtVTklWRVJJRlk6InVuaXZlcmlmeSJ9LEpTPXtmb3JtYXRBcmdzOntwcm92aWRlcihlLHQpe2lmKE9iamVjdC52YWx1ZXMocVMpLmluZGV4T2YoU3RyaW5nKGUpKTwwKXJldHVybiJwcm92aWRlciBlcnJvciJ9fX0sS1M9e3Byb3ZpZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LFpTPSJjbG9zZUF1dGhWaWV3IixYUz0iZ2V0Q2hlY2tCb3hTdGF0ZSIsUVM9ImdldFVuaXZlcmlmeU1hbmFnZXIiLGV3PSJzaGFyZSIseGg9WyJXWFNjZW5lU2Vzc2lvbiIsIldYU2NlbmVUaW1lbGluZSIsIldYU2NlbmVGYXZvcml0ZSJdLHR3PXtmb3JtYXRBcmdzOntzY2VuZShlLHQpe2xldHtwcm92aWRlcjpuLG9wZW5DdXN0b21lclNlcnZpY2VDaGF0OnJ9PXQ7aWYobj09PSJ3ZWl4aW4iJiYhciYmKCFlfHwheGguaW5jbHVkZXMoZSkpKXJldHVybmBcdTUyMDZcdTRFQUJcdTUyMzBcdTVGQUVcdTRGRTFcdTY1RjZcdUZGMENzY2VuZVx1NUZDNVx1OTg3Qlx1NEUzQVx1NEVFNVx1NEUwQlx1NTE3Nlx1NEUyRFx1NEUwMFx1NEUyQVx1RkYxQSR7eGguam9pbigiXHUzMDAxIil9YH0sc3VtbWFyeShlLHQpe2lmKHQudHlwZT09PTEmJiFlKXJldHVybiJcdTUyMDZcdTRFQUJcdTdFQUZcdTY1ODdcdTY3MkNcdTY1RjZcdUZGMENzdW1tYXJ5XHU1RkM1XHU1ODZCIn0saHJlZihlLHQpe2lmKHQudHlwZT09PTAmJiFlKXJldHVybiJcdTUyMDZcdTRFQUJcdTU2RkVcdTY1ODdcdTY1RjZcdUZGMENocmVmXHU1RkM1XHU1ODZCIn0saW1hZ2VVcmwoZSx0KXtpZihbMCwyLDVdLmluY2x1ZGVzKE51bWJlcih0LnR5cGUpKSYmIWUpcmV0dXJuIlx1NTIwNlx1NEVBQlx1NTZGRVx1NjU4N1x1MzAwMVx1N0VBRlx1NTZGRVx1NzI0N1x1MzAwMVx1NUMwRlx1N0EwQlx1NUU4Rlx1NjVGNlx1RkYwQ2ltYWdlVXJsXHU1RkM1XHU1ODZCXHVGRjBDXHU2M0E4XHU4MzUwXHU0RjdGXHU3NTI4XHU1QzBGXHU0RThFMjBLYlx1NzY4NFx1NTZGRVx1NzI0NyJ9LG1lZGlhVXJsKGUsdCl7aWYoWzMsNF0uaW5jbHVkZXMoTnVtYmVyKHQudHlwZSkpJiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU5N0YzXHU0RTUwXHUzMDAxXHU4OUM2XHU5ODkxXHU2NUY2XHVGRjBDbWVkaWFVcmxcdTVGQzVcdTU4NkIifSxtaW5pUHJvZ3JhbShlLHQpe2lmKHQudHlwZT09PTUmJiFlKXJldHVybiJcdTUyMDZcdTRFQUJcdTVDMEZcdTdBMEJcdTVFOEZcdTY1RjZcdUZGMENtaW5pUHJvZ3JhbVx1NUZDNVx1NTg2QiJ9LGNvcnBpZChlLHQpe2lmKHQub3BlbkN1c3RvbWVyU2VydmljZUNoYXQmJiFlKXJldHVybiJcdTRGN0ZcdTc1MjhcdTYyNTNcdTVGMDBcdTVCQTJcdTY3MERcdTUyOUZcdTgwRkRcdTY1RjYgY29ycGlkIFx1NUZDNVx1NTg2QiJ9LGN1c3RvbWVyVXJsKGUsdCl7aWYodC5vcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdCYmIWUpcmV0dXJuIlx1NEY3Rlx1NzUyOFx1NjI1M1x1NUYwMFx1NUJBMlx1NjcwRFx1NTI5Rlx1ODBGRFx1NjVGNiBjdXN0b21lclVybCBcdTVGQzVcdTU4NkIifX19LG53PXtwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHR5cGU6TnVtYmVyLHRpdGxlOlN0cmluZyxzY2VuZTpTdHJpbmcsc3VtbWFyeTpTdHJpbmcsaHJlZjpTdHJpbmcsaW1hZ2VVcmw6U3RyaW5nLG1lZGlhVXJsOlN0cmluZyxtaW5pUHJvZ3JhbTpPYmplY3R9LHJ3PSJzaGFyZVdpdGhTeXN0ZW0iLEJoPVsidGV4dCIsImltYWdlIl0saXc9e2Zvcm1hdEFyZ3M6e3R5cGUoZSx0KXtpZihlJiYhQmguaW5jbHVkZXMoZSkpcmV0dXJuIlx1NTIwNlx1NEVBQlx1NTNDMlx1NjU3MCB0eXBlIFx1NEUwRFx1NkI2M1x1Nzg2RVx1MzAwMlx1NTNFQVx1NjUyRlx1NjMwMXRleHRcdTMwMDFpbWFnZSI7dC50eXBlPVNuKGUsQmgpfX19LG93PXt0eXBlOlN0cmluZyxzdW1tYXJ5OlN0cmluZyxocmVmOlN0cmluZyxpbWFnZVVybDpTdHJpbmd9LGF3PSJyZXF1ZXN0UGF5bWVudCIsc3c9e3Byb3ZpZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sb3JkZXJJbmZvOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxyZXF1aXJlZDohMH0sdGltZVN0YW1wOlN0cmluZyxub25jZVN0cjpTdHJpbmcscGFja2FnZTpTdHJpbmcsc2lnblR5cGU6U3RyaW5nLHBheVNpZ246U3RyaW5nfSxsdz0iY3JlYXRlUHVzaE1lc3NhZ2UiLGN3PXtmb3JtYXRBcmdzOntjb250ZW50KGUpe2lmKCFlKXJldHVybiJjb250ZW50IGlzIHJlcXVpcmVkIn19fSx1dz0iY3JlYXRlUmV3YXJkZWRWaWRlb0FkIixmdz17Zm9ybWF0QXJnczp7YWRwaWQ6IiIsYWRVbml0SWQ6IiJ9fSxkdz17YWRwaWQ6U3RyaW5nLGFkVW5pdElkOlN0cmluZ30saHc9ImNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0FkIixndz17Zm9ybWF0QXJnczp7YWRwaWQ6IiJ9fSxwdz17YWRwaWQ6U3RyaW5nfSx2dz0iY3JlYXRlSW50ZXJzdGl0aWFsQWQiLG13PXtmb3JtYXRBcmdzOnthZHBpZDoiIixhZFVuaXRJZDoiIn19LF93PXthZHBpZDpTdHJpbmcsYWRVbml0SWQ6U3RyaW5nfSxidz0iY3JlYXRlSW50ZXJhY3RpdmVBZCIseXc9e2Zvcm1hdEFyZ3M6e2FkcGlkKGUsdCl7aWYoIWUpcmV0dXJuImFkcGlkIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlJiYodC5hZHBpZD1lKX0scHJvdmlkZXIoZSx0KXtpZighZSlyZXR1cm4icHJvdmlkZXIgc2hvdWxkIG5vdCBiZSBlbXB0eS4iO2UmJih0LnByb3ZpZGVyPWUpfX19LEV3PXthZHBpZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHByb3ZpZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19O2Z1bmN0aW9uIFhzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2RlbGV0ZSByLmNvZGUsZGVsZXRlIHIubWVzc2FnZSx6LmlzRnVuY3Rpb24odCkmJihyPXQocikpLGUocil9fWZ1bmN0aW9uIGRyKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3I9cnx8e30sdD1yLm1lc3NhZ2V8fHR8fCIiLGRlbGV0ZSByLm1lc3NhZ2UsZSh0LHouZXh0ZW5kKHtjb2RlOjB9LHIpKX19ZnVuY3Rpb24gQWwoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtlKCkoZnVuY3Rpb24ocil7ciYmKGRlbGV0ZSByLmNvZGUsZGVsZXRlIHIubWVzc2FnZSksb3QuaW52b2tlT25DYWxsYmFjayh0LHIpfSl9fWZ1bmN0aW9uIGZpKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocix7cmVzb2x2ZTpvLHJlamVjdDpjfSl7ZSgpKHouZXh0ZW5kKHt9LHouaXNGdW5jdGlvbih0KT90KHIpOnIse3N1Y2Nlc3M6WHMobyxuKSxmYWlsOmRyKGMpfSkpfX1mdW5jdGlvbiB0YyhlPSIiKXtpZighKFIudGFiQmFyJiZ6LmlzQXJyYXkoUi50YWJCYXIubGlzdCkpKXJldHVybiExO3RyeXtpZighZSl7bGV0IG49SW4oKTtpZighbi5sZW5ndGgpcmV0dXJuITE7bGV0IHI9bltuLmxlbmd0aC0xXTtyZXR1cm4gcj9yLiRwYWdlLm1ldGEuaXNUYWJCYXI6ITF9L15cLy8udGVzdChlKXx8KGU9Si5hZGRMZWFkaW5nU2xhc2goZSkpO2xldCB0PVdpKGUpO3JldHVybiB0JiZ0Lm1ldGEuaXNUYWJCYXJ9Y2F0Y2godCl7fXJldHVybiExfWxldCB5YT0iX19UWVBFIixTdz0idW5pLXN0b3JhZ2Uta2V5cyI7ZnVuY3Rpb24gVXUoZSl7bGV0IHQ9WyJvYmplY3QiLCJzdHJpbmciLCJudW1iZXIiLCJib29sZWFuIiwidW5kZWZpbmVkIl07dHJ5e2xldCBuPXouaXNTdHJpbmcoZSk/SlNPTi5wYXJzZShlKTplLHI9bi50eXBlO2lmKHQuaW5kZXhPZihyKT49MCl7bGV0IG89T2JqZWN0LmtleXMobik7aWYoby5sZW5ndGg9PT0yJiYiZGF0YSJpbiBuKXtpZih0eXBlb2Ygbi5kYXRhPT09cilyZXR1cm4gbi5kYXRhO2lmKHI9PT0ib2JqZWN0IiYmL15cZHs0fS1cZHsyfS1cZHsyfVRcZHsyfVw6XGR7Mn1cOlxkezJ9XC5cZHszfVokLy50ZXN0KG4uZGF0YSkpcmV0dXJuIG5ldyBEYXRlKG4uZGF0YSl9ZWxzZSBpZihvLmxlbmd0aD09PTEpcmV0dXJuIiJ9fWNhdGNoKG4pe319bGV0IHd3PUR0KFcwLChlLHQpPT57bGV0IG49dHlwZW9mIHQscj1uPT09InN0cmluZyI/dDpKU09OLnN0cmluZ2lmeSh7dHlwZTpuLGRhdGE6dH0pO3RyeXtuPT09InN0cmluZyImJlV1KHIpIT09dm9pZCAwP3Muc3RvcmFnZS5zZXRJdGVtKGUreWEsbik6cy5zdG9yYWdlLnJlbW92ZUl0ZW0oZSt5YSkscy5zdG9yYWdlLnNldEl0ZW0oZSxyKX1jYXRjaChvKXt9fSxHMCksQ3c9VGUoajAsKHtrZXk6ZSxkYXRhOnR9LHtyZXNvbHZlOm4scmVqZWN0OnJ9KT0+e2xldCBvPXR5cGVvZiB0LGM9bz09PSJzdHJpbmciP3Q6SlNPTi5zdHJpbmdpZnkoe3R5cGU6byxkYXRhOnR9KTt0cnl7bGV0IGc9cy5zdG9yYWdlO289PT0ic3RyaW5nIiYmVXUoYykhPT12b2lkIDA/Zy5zZXRJdGVtQXN5bmMoZSt5YSxvLCgpPT57fSk6Zy5yZW1vdmVJdGVtQXN5bmMoZSt5YSwoKT0+e30pLGcuc2V0SXRlbUFzeW5jKGUsYyxuLGRyKHIpKX1jYXRjaChnKXtyKGcubWVzc2FnZSl9fSx6MCk7ZnVuY3Rpb24gJHUoZSx0KXtsZXQgbj10O2lmKGUhPT0ic3RyaW5nInx8ZT09PSJzdHJpbmciJiZ0PT09J3sidHlwZSI6InVuZGVmaW5lZCJ9Jyl0cnl7bGV0IHI9SlNPTi5wYXJzZSh0KSxvPVV1KHIpO2lmKG8hPT12b2lkIDApbj1vO2Vsc2UgaWYoZSYmKG49cix6LmlzU3RyaW5nKHIpKSl7cj1KU09OLnBhcnNlKHIpO2xldCBjPXR5cGVvZiByO2M9PT0ibnVtYmVyIiYmZT09PSJkYXRlIj9uPW5ldyBEYXRlKHIpOmM9PT0oWyJudWxsIiwiYXJyYXkiXS5pbmRleE9mKGUpPDA/ZToib2JqZWN0IikmJihuPXIpfX1jYXRjaChyKXt9cmV0dXJuIG59bGV0IEF3PUR0KEgwLGU9PntsZXQgdD1zLnN0b3JhZ2UuZ2V0SXRlbShlKSxyPShzLnN0b3JhZ2UuZ2V0SXRlbShlK3lhKXx8IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHouaXNTdHJpbmcodCk/JHUocix0KToiIn0sYmgpLE93PVRlKCQwLCh7a2V5OmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPXMuc3RvcmFnZTtyLmdldEl0ZW1Bc3luYyhlLGZ1bmN0aW9uKG8pe3IuZ2V0SXRlbUFzeW5jKGUreWEsZnVuY3Rpb24oYyl7bGV0IGI9KGMuZGF0YXx8IiIpLnRvTG93ZXJDYXNlKCk7dCh7ZGF0YTokdShiLG8uZGF0YSl9KX0sZnVuY3Rpb24oKXt0KHtkYXRhOiR1KCIiLG8uZGF0YSl9KX0pfSxkcihuKSl9LF9oKSxUdz1EdCh5aCxlPT57cy5zdG9yYWdlLnJlbW92ZUl0ZW0oZSt5YSkscy5zdG9yYWdlLnJlbW92ZUl0ZW0oZSl9LHEwKSxQdz1UZSh5aCwoe2tleTplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLnN0b3JhZ2UucmVtb3ZlSXRlbUFzeW5jKGUreWEsKCk9Pnt9KSxzLnN0b3JhZ2UucmVtb3ZlSXRlbUFzeW5jKGUsdCxkcihuKSl9LFkwKSxJdz1EdCgiY2xlYXJTdG9yYWdlU3luYyIsKCk9PntzLnN0b3JhZ2UuY2xlYXIoKX0pLE53PVRlKCJjbGVhclN0b3JhZ2UiLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3Muc3RvcmFnZS5jbGVhckFzeW5jKHQsZHIobikpfSksTWg9RHQoImdldFN0b3JhZ2VJbmZvU3luYyIsKCk9PntsZXQgZT1zLnN0b3JhZ2UuZ2V0TGVuZ3RoKCl8fDAsdD1bXSxuPTA7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IG89cy5zdG9yYWdlLmtleShyKTtpZihvIT09U3cmJihvLmluZGV4T2YoeWEpPDB8fG8uaW5kZXhPZih5YSkreWEubGVuZ3RoIT09by5sZW5ndGgpKXtsZXQgYz1zLnN0b3JhZ2UuZ2V0SXRlbShvKTtuKz1vLmxlbmd0aCtjLmxlbmd0aCx0LnB1c2gobyl9fXJldHVybntrZXlzOnQsY3VycmVudFNpemU6TWF0aC5jZWlsKG4qMi8xMDI0KSxsaW1pdFNpemU6TnVtYmVyLk1BWF9WQUxVRX19KSxrdz1UZSgiZ2V0U3RvcmFnZUluZm8iLChlLHtyZXNvbHZlOnR9KT0+e3QoTWgoKSl9KSxSdz1UZShueSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLmlvLmdldEZpbGVJbmZvKHouZXh0ZW5kKGUse3N1Y2Nlc3M6WHModCksZmFpbDpkcihuKX0pKX0saXkscnkpLHh3PTAsRGg9InVuaWFwcF9zYXZlIixCdz1gX2RvYy8ke0RofWA7ZnVuY3Rpb24gTXcoZSx0KXt0PXR8fGZ1bmN0aW9uKCl7fSxzLmlvLnJlcXVlc3RGaWxlU3lzdGVtKHMuaW8uUFJJVkFURV9ET0Msbj0+e24ucm9vdC5nZXREaXJlY3RvcnkoRGgse2NyZWF0ZTohMH0sZSx0KX0sdCl9bGV0IER3PVRlKEowLCh7dGVtcEZpbGVQYXRoOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWRyKG4pLG89YCR7RGF0ZS5ub3coKX0ke3h3Kyt9JHtZYShlKX1gO3MuaW8ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChlLGM9PntNdyhnPT57Yy5jb3B5VG8oZyxvLCgpPT57bGV0IGI9QncrIi8iK287dCh7c2F2ZWRGaWxlUGF0aDpifSl9LHIpfSxyKX0scil9LFowLEswKSxMdz0idW5pYXBwX3NhdmUiO2Z1bmN0aW9uIEZ3KGUsdCl7dD10fHxmdW5jdGlvbigpe30scy5pby5yZXF1ZXN0RmlsZVN5c3RlbShzLmlvLlBSSVZBVEVfRE9DLG49PntuLnJvb3QuZ2V0RGlyZWN0b3J5KEx3LHtjcmVhdGU6ITB9LGUsdCl9LHQpfWxldCBWdz1UZShYMCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1kcihuKTtGdyhvPT57dmFyIGM9by5jcmVhdGVSZWFkZXIoKSxnPVtdO2MucmVhZEVudHJpZXMoYj0+e2ImJmIubGVuZ3RoP2IuZm9yRWFjaChWPT57Vi5nZXRNZXRhZGF0YShUPT57Zy5wdXNoKHtmaWxlUGF0aDpzLmlvLmNvbnZlcnRBYnNvbHV0ZUZpbGVTeXN0ZW0oVi5mdWxsUGF0aCksY3JlYXRlVGltZTpULm1vZGlmaWNhdGlvblRpbWUuZ2V0VGltZSgpLHNpemU6VC5zaXplfSksZy5sZW5ndGg9PT1iLmxlbmd0aCYmdCh7ZmlsZUxpc3Q6Z30pfSxyLCExKX0pOnQoe2ZpbGVMaXN0Omd9KX0scil9LHIpfSksVXc9VGUob3ksKHtmaWxlUGF0aDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1kcihuKTtzLmlvLnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoZSxvPT57by5nZXRNZXRhZGF0YShjPT57dCh7Y3JlYXRlVGltZTpjLm1vZGlmaWNhdGlvblRpbWUuZ2V0VGltZSgpLHNpemU6Yy5zaXplfSl9LHIsITEpfSxyKX0sc3ksYXkpLCR3PVRlKFEwLCh7ZmlsZVBhdGg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9ZHIobik7cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGUsbz0+e28ucmVtb3ZlKCgpPT57dCgpfSxyKX0scil9LHR5LGV5KSxIdz1UZShseSwoe2ZpbGVQYXRoOmUsZmlsZVR5cGU6dH0se3Jlc29sdmU6bixyZWplY3Q6cn0pPT57bGV0IG89ZHIocik7cy5ydW50aW1lLm9wZW5Eb2N1bWVudChqZShlKSx2b2lkIDAsbixvKX0sdXksY3kpLGp3PUR0KGtiLGU9PiEhei5oYXNPd24oUCxlKSxSYiksbmMsTGg9cy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGU7ZnVuY3Rpb24gencoZSl7TGg9ZX1mdW5jdGlvbiBGaChlKXtuYz1lLExoKGUpfXMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlPUZoO2Z1bmN0aW9uIEJhKGUpe2lmKCFlKXtsZXQgdD13aSgpO2lmKCF0fHwoZT10LiRwYWdlLnN0YXR1c0JhclN0eWxlLCFlfHxlPT09bmMpKXJldHVybn1lIT09bmMmJihuYz1lLHMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKGUpKX1mdW5jdGlvbiBWaChlKXtvdC5vbihKLk9OX1RIRU1FX0NIQU5HRSxlKX1mdW5jdGlvbiBXdyhlKXtvdC5vZmYoSi5PTl9USEVNRV9DSEFOR0UsZSl9ZnVuY3Rpb24gR3coKXtyZXR1cm4gVWgoKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIn1mdW5jdGlvbiBVaCgpe3JldHVybiBzLm5hdmlnYXRvci5nZXRVSVN0eWxlKCl9ZnVuY3Rpb24gWXcoKXtpZihSLmRhcmttb2RlKXtsZXQgZT1HdygpO0JhKGUpLEhuKCkuZm9yRWFjaChuPT57bi4kcGFnZS5zdGF0dXNCYXJTdHlsZT1lfSl9fWZ1bmN0aW9uIEh1KGUpe2lmKFIuZGFya21vZGUpe2xldCB0PXt9LG49cy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpLHI9aWMoKTtyZXR1cm4gciYmci5ob3N0VGhlbWUmJihuPXIuaG9zdFRoZW1lKSx0PUoubm9ybWFsaXplU3R5bGVzKGUsUi50aGVtZUNvbmZpZyxuKSx0fXJldHVybiBlfWZ1bmN0aW9uIHF3KGUsdCl7aWYoUi5kYXJrbW9kZSl7bGV0IG49KCk9PntsZXR7bGlzdDpyPVtdLGNvbG9yOm8sc2VsZWN0ZWRDb2xvcjpjLGJhY2tncm91bmRDb2xvcjpnLGJvcmRlclN0eWxlOmJ9PUh1KHQpO2UmJmUuc2V0VGFiQmFyU3R5bGUoe2NvbG9yOm8sc2VsZWN0ZWRDb2xvcjpjLGJhY2tncm91bmRDb2xvcjpnLGJvcmRlclN0eWxlOmJ9KSxlJiZlLnNldFRhYkJhckl0ZW1zKHtsaXN0OnIubWFwKFY9Pih7aWNvblBhdGg6Vi5pY29uUGF0aCxzZWxlY3RlZEljb25QYXRoOlYuc2VsZWN0ZWRJY29uUGF0aCx2aXNpYmxlOlYudmlzaWJsZX0pKX0pfTtuKCksVmgobil9fWZ1bmN0aW9uICRoKGUsdCl7aWYoUi5kYXJrbW9kZSl7bGV0IG49KCk9PntsZXQgcj10KCk7ci5hbmltYXRpb25BbHBoYUJHQ29sb3Isci5iYWNrZ3JvdW5kLHIuYmFja2dyb3VuZENvbG9yQm90dG9tLHIuYmFja2dyb3VuZENvbG9yVG9wO3ZhciBvPXIudGl0bGVOVmlldzt0eXBlb2YgbyE9InVuZGVmaW5lZCImJnR5cGVvZiBvPT0ib2JqZWN0IiYmKG8uYmFja2dyb3VuZENvbG9yLG8udGl0bGVDb2xvciksZSYmZS5zZXRTdHlsZShyKX07VmgobiksZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9Pld3KG4pKX19bGV0IHJjLGp1PSEwLGlyO2Z1bmN0aW9uIEp3KGUsdCxuKXshaXJ8fChlPT09Im5vbmUiPyhpci5oaWRlVGFiQmFyUmVkRG90KHtpbmRleDp0fSksaXIucmVtb3ZlVGFiQmFyQmFkZ2Uoe2luZGV4OnR9KSk6ZT09PSJ0ZXh0Ij9pci5zZXRUYWJCYXJCYWRnZSh7aW5kZXg6dCx0ZXh0Om59KTplPT09InJlZERvdCImJmlyLnNob3dUYWJCYXJSZWREb3Qoe2luZGV4OnR9KSl9ZnVuY3Rpb24gS3coZSl7aXImJmlyLnNldFRhYkJhckl0ZW1zKGUpfWZ1bmN0aW9uIFp3KGUsdCxuLHIsbyxjKXtsZXQgZz17aW5kZXg6ZX07aWYodCE9PXZvaWQgMCYmKGcudGV4dD10KSxuJiYoZy5pY29uUGF0aD1qZShuKSksciYmKGcuc2VsZWN0ZWRJY29uUGF0aD1qZShyKSksYyE9PXZvaWQgMCYmKGcuaWNvbmZvbnQ9YyksbyE9PXZvaWQgMCl7Zy52aXNpYmxlPXJjLmxpc3RbZV0udmlzaWJsZT1vLGRlbGV0ZSBnLmluZGV4O2xldCBiPXJjLmxpc3QubWFwKFY9Pih7dmlzaWJsZTpWLnZpc2libGV9KSk7YltlXT1nLEt3KHtsaXN0OmJ9KX1lbHNlIGlyJiZpci5zZXRUYWJCYXJJdGVtKGcpfWZ1bmN0aW9uIFh3KGUpe2lyJiZpci5zZXRUYWJCYXJTdHlsZShlKX1mdW5jdGlvbiBRdyhlKXtqdT0hMSxpciYmaXIuaGlkZVRhYkJhcih7YW5pbWF0aW9uOmV9KX1mdW5jdGlvbiBlQyhlKXtqdT0hMCxpciYmaXIuc2hvd1RhYkJhcih7YW5pbWF0aW9uOmV9KX1sZXQga2M9W107dmFyIGRpPXtpZDoiMCIsaW5pdChlLHQpe2UmJmUubGlzdC5sZW5ndGgmJihyYz1lKTt0cnl7aXI9Zi5yZXF1aXJlTW9kdWxlKCJ1bmktdGFidmlldyIpfWNhdGNoKG4pe2NvbnNvbGUubG9nKGB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbigidW5pLXRhYnZpZXciKSBlcnJvciAke259YCl9aXIub25NYXNrQ2xpY2soKCk9PntrYy5mb3JFYWNoKG49PntuKCl9KX0pLGlyJiZpci5vbkNsaWNrKCh7aW5kZXg6bn0pPT57dChyYy5saXN0W25dLG4pfSksaXImJmlyLm9uTWlkQnV0dG9uQ2xpY2soKCk9Pm90Lmludm9rZU9uQ2FsbGJhY2sobmgpKSxxdyhpcixlKX0saW5kZXhPZihlKXtsZXQgdD10aGlzLmNvbmZpZyxuPXQmJnQubGlzdCYmdC5saXN0Lmxlbmd0aDtpZihuKXtmb3IobGV0IHI9MDtyPG47cisrKWlmKHQubGlzdFtyXS5wYWdlUGF0aD09PWV8fHQubGlzdFtyXS5wYWdlUGF0aD09PWAke2V9Lmh0bWxgKXJldHVybiByfXJldHVybi0xfSxzd2l0Y2hUYWIoZSl7bGV0IHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0Pj0wPyhpciYmaXIuc3dpdGNoU2VsZWN0KHtpbmRleDp0fSksITApOiExfSxzZXRUYWJCYXJCYWRnZTpKdyxzZXRUYWJCYXJJdGVtOlp3LHNldFRhYkJhclN0eWxlOlh3LGhpZGVUYWJCYXI6UXcsc2hvd1RhYkJhcjplQyxhcHBlbmQoZSl7aXImJmlyLmFwcGVuZCh7aWQ6ZS5pZH0sKHtjb2RlOnR9KT0+e3QhPT0wJiZOKCgpPT57dGhpcy5hcHBlbmQoZSl9LDIwKX0pfSxnZXQgY29uZmlnKCl7cmV0dXJuIHJjfHxSLnRhYkJhcn0sZ2V0IHZpc2libGUoKXtyZXR1cm4ganV9LGdldCBoZWlnaHQoKXtsZXQgZT10aGlzLmNvbmZpZztyZXR1cm4oZSYmZS5oZWlnaHQ/cGFyc2VGbG9hdChlLmhlaWdodCk6Si5UQUJCQVJfSEVJR0hUKStzLm5hdmlnYXRvci5nZXRTYWZlQXJlYUluc2V0cygpLmRldmljZUJvdHRvbX0sZ2V0IGNvdmVyKCl7bGV0IGU9dGhpcy5jb25maWc7cmV0dXJuIGUmJlsiZXh0cmFsaWdodCIsImxpZ2h0IiwiZGFyayJdLmluZGV4T2YoZS5ibHVyRWZmZWN0KT49MH0sc2V0U3R5bGUoe21hc2s6ZX0pe2lyLnNldE1hc2soe2NvbG9yOmV9KX0sYWRkRXZlbnRMaXN0ZW5lcihlLHQpe2tjLnB1c2godCl9LHJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0KXtsZXQgbj1rYy5pbmRleE9mKHQpO2tjLnNwbGljZShuLDEpfX07ZnVuY3Rpb24gUmMoKXtsZXQgZT13aSgpO3JldHVybiBlP2UuJGdldEFwcFdlYnZpZXcoKTpudWxsfWZ1bmN0aW9uIEhoKGUpe3JldHVybiBlP2UuJGdldEFwcFdlYnZpZXcoKTpSYygpfWxldCBqaD1udWxsO2Z1bmN0aW9uIHpoKCl7cmV0dXJuIGpofWZ1bmN0aW9uIHp1KGUpe2poPWV9ZnVuY3Rpb24gV3UoKXtyZXR1cm4gcy5uYXZpZ2F0b3IuaXNJbW1lcnNlZFN0YXR1c2JhcigpP01hdGgucm91bmQocy5vcy5uYW1lPT09ImlPUyI/cy5uYXZpZ2F0b3IuZ2V0U2FmZUFyZWFJbnNldHMoKS50b3A6cy5uYXZpZ2F0b3IuZ2V0U3RhdHVzYmFySGVpZ2h0KCkpOjB9ZnVuY3Rpb24gV2goKXtsZXQgZT1zLm5hdmlnYXRvci5nZXRTdGF0dXNCYXJTdHlsZSgpO3JldHVybiBlPT09IlVJU3RhdHVzQmFyU3R5bGVCbGFja1RyYW5zbHVjZW50Inx8ZT09PSJVSVN0YXR1c0JhclN0eWxlQmxhY2tPcGFxdWUifHxlPT09Im51bGwiP2U9ImxpZ2h0IjplPT09IlVJU3RhdHVzQmFyU3R5bGVEZWZhdWx0IiYmKGU9ImRhcmsiKSxlfWZ1bmN0aW9uIHRDKCl7bGV0e3Jlc29sdXRpb25XaWR0aDplLHJlc29sdXRpb25IZWlnaHQ6dH09cy5zY3JlZW4uZ2V0Q3VycmVudFNpemUoKXx8e3Jlc29sdXRpb25XaWR0aDowLHJlc29sdXRpb25IZWlnaHQ6MH07cmV0dXJue3NjcmVlbldpZHRoOk1hdGgucm91bmQoZSksc2NyZWVuSGVpZ2h0Ok1hdGgucm91bmQodCl9fWxldCBHaD1EdCgiZ2V0V2luZG93SW5mbyIsKCk9PntsZXQgZT1zLm9zLm5hbWUudG9Mb3dlckNhc2UoKT09PSJpb3MiLHtzY3JlZW5XaWR0aDp0LHNjcmVlbkhlaWdodDpufT10QygpLHI9V3UoKSxvLGM9e2hlaWdodDowLGNvdmVyOiExfSxnPVJjKCk7aWYoZyl7bGV0IGZ0PWcuZ2V0U3R5bGUoKSxodD1mdCYmZnQudGl0bGVOVmlldztodCYmaHQudHlwZSYmaHQudHlwZSE9PSJub25lIiYmKGMuaGVpZ2h0PWh0LnR5cGU9PT0idHJhbnNwYXJlbnQiPzA6citKLk5BVkJBUl9IRUlHSFQsYy5jb3Zlcj1odC50eXBlPT09InRyYW5zcGFyZW50Inx8aHQudHlwZT09PSJmbG9hdCIpLG89Zy5nZXRTYWZlQXJlYUluc2V0cygpfWVsc2Ugbz1zLm5hdmlnYXRvci5nZXRTYWZlQXJlYUluc2V0cygpO2xldCBiPXtoZWlnaHQ6MCxjb3ZlcjohMX07dGMoKSYmKGIuaGVpZ2h0PWRpLnZpc2libGU/ZGkuaGVpZ2h0OjAsYi5jb3Zlcj1kaS5jb3Zlcik7bGV0IFY9Yy5jb3Zlcj9jLmhlaWdodDowLFQ9Yi5jb3Zlcj9iLmhlaWdodDowLEw9bi1jLmhlaWdodC1iLmhlaWdodCxfZT1uLShjLmNvdmVyPzA6Yy5oZWlnaHQpLShiLmNvdmVyPzA6Yi5oZWlnaHQpLHdlPXQ7KCFiLmhlaWdodHx8Yi5jb3ZlcikmJiFvLmJvdHRvbSYmby5kZXZpY2VCb3R0b20mJihMLT1vLmRldmljZUJvdHRvbSxfZS09by5kZXZpY2VCb3R0b20pLG89ZT9vOntsZWZ0OjAscmlnaHQ6MCx0b3A6Yy5oZWlnaHQmJiFjLmNvdmVyPzA6cixib3R0b206MH07bGV0IFBlPXtsZWZ0Om8ubGVmdCxyaWdodDp3ZS1vLnJpZ2h0LHRvcDpvLnRvcCxib3R0b206X2Utby5ib3R0b20sd2lkdGg6d2Utby5sZWZ0LW8ucmlnaHQsaGVpZ2h0Ol9lLW8udG9wLW8uYm90dG9tfTtyZXR1cm57cGl4ZWxSYXRpbzpzLnNjcmVlbi5zY2FsZSxzY3JlZW5XaWR0aDp0LHNjcmVlbkhlaWdodDpuLHdpbmRvd1dpZHRoOndlLHdpbmRvd0hlaWdodDpMLHN0YXR1c0JhckhlaWdodDpyLHNhZmVBcmVhOlBlLHNhZmVBcmVhSW5zZXRzOnt0b3A6by50b3AscmlnaHQ6by5yaWdodCxib3R0b206by5ib3R0b20sbGVmdDpvLmxlZnR9LHdpbmRvd1RvcDpWLHdpbmRvd0JvdHRvbTpULHNjcmVlblRvcDpuLUx9fSksRWEseGM9ITA7ZnVuY3Rpb24gaWMoKXtpZigheGMpcmV0dXJuO2xldHtnZXRTeXN0ZW1JbmZvU3luYzplfT1mLnJlcXVpcmVNb2R1bGUoInBsdXMiKTtpZihFYT1lKCksei5pc1N0cmluZyhFYSkpdHJ5e0VhPUpTT04ucGFyc2UoRWEpfWNhdGNoKHQpe31yZXR1cm4gRWF9bGV0IFloPUR0KCJnZXREZXZpY2VJbmZvIiwoKT0+e2ljKCk7bGV0e2RldmljZUJyYW5kOmU9IiIsZGV2aWNlTW9kZWw6dCxvc05hbWU6bixvc1ZlcnNpb246cixkZXZpY2VPcmllbnRhdGlvbjpvLGRldmljZVR5cGU6YyxkZXZpY2VJZDpnfT1FYSxiPWUudG9Mb3dlckNhc2UoKSxWPW4udG9Mb3dlckNhc2UoKTtyZXR1cm57YnJhbmQ6YixkZXZpY2VCcmFuZDpiLGRldmljZU1vZGVsOnQsZGV2aWNlUGl4ZWxSYXRpbzpzLnNjcmVlbi5zY2FsZSxkZXZpY2VJZDpnLGRldmljZU9yaWVudGF0aW9uOm8sZGV2aWNlVHlwZTpjLG1vZGVsOnQscGxhdGZvcm06VixzeXN0ZW06YCR7Vj09PSJpb3MiPyJpT1MiOiJBbmRyb2lkIn0gJHtyfWB9fSkscWg9RHQoImdldEFwcEJhc2VJbmZvIiwoKT0+e2ljKCk7bGV0e2hvc3RQYWNrYWdlTmFtZTplLGhvc3ROYW1lOnQsaG9zdFZlcnNpb246bixob3N0TGFuZ3VhZ2U6cixvc0xhbmd1YWdlOm8saG9zdFRoZW1lOmMsYXBwSWQ6ZyxhcHBOYW1lOmIsYXBwVmVyc2lvbjpWLGFwcFZlcnNpb25Db2RlOlQsYXBwV2d0VmVyc2lvbjpMfT1FYTtyZXR1cm57YXBwSWQ6ZyxhcHBOYW1lOmIsYXBwVmVyc2lvbjpWLGFwcFZlcnNpb25Db2RlOlQsYXBwV2d0VmVyc2lvbjpMLGFwcExhbmd1YWdlOktsP0tsKCk6byxlbmFibGVEZWJ1ZzohMSxob3N0UGFja2FnZU5hbWU6ZSxob3N0TmFtZTp0LGhvc3RWZXJzaW9uOm4saG9zdExhbmd1YWdlOnIsaG9zdFRoZW1lOmMsaG9zdEZvbnRTaXplU2V0dGluZzp2b2lkIDAsaG9zdFNES1ZlcnNpb246dm9pZCAwLGxhbmd1YWdlOm8sU0RLVmVyc2lvbjoiIix0aGVtZTpVaCgpLHZlcnNpb246cy5ydW50aW1lLmlubmVyVmVyc2lvbn19KSxKaD1EdCgiZ2V0U3lzdGVtSW5mb1N5bmMiLCgpPT57eGM9ITAsaWMoKSx4Yz0hMTtsZXQgZT1HaCgpLHQ9WWgoKSxuPXFoKCk7eGM9ITA7bGV0IHI9e2ZvbnRTaXplU2V0dGluZzpuLmhvc3RGb250U2l6ZVNldHRpbmcsb3NOYW1lOkVhLm9zTmFtZS50b0xvd2VyQ2FzZSgpfTtFYS5ob3N0TmFtZSYmKHIuaG9zdFNES1ZlcnNpb249RWEudW5pUnVudGltZVZlcnNpb24pO2xldCBvPXouZXh0ZW5kKEVhLGUsdCxuLHIpO3JldHVybiBkZWxldGUgby5zY3JlZW5Ub3AsZGVsZXRlIG8uZW5hYmxlRGVidWcsUi5kYXJrbW9kZXx8ZGVsZXRlIG8udGhlbWUsSi5zb3J0T2JqZWN0KG8pfSksbkM9VGUoImdldFN5c3RlbUluZm8iLChlLHtyZXNvbHZlOnR9KT0+dChKaCgpKSksT2w9bnVsbCxyQz1wbihmaCwoKT0+e0toKCl9KSxpQz1YcihHYiwoKT0+e1poKCl9KSxLaD1UZShZYiwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntPbHx8KE9sPXMub3JpZW50YXRpb24ud2F0Y2hPcmllbnRhdGlvbihyPT57b3QuaW52b2tlT25DYWxsYmFjayhmaCx7ZGlyZWN0aW9uOnIubWFnbmV0aWNIZWFkaW5nfSl9LHI9PntuKHIubWVzc2FnZSksT2w9bnVsbH0se2ZyZXF1ZW5jeTpzb30pKSxOKHQsc28pfSksWmg9VGUocWIsKGUse3Jlc29sdmU6dH0pPT57T2wmJihzLm9yaWVudGF0aW9uLmNsZWFyV2F0Y2goT2wpLE9sPW51bGwpLHQoKX0pLG9DPVRlKEpiLChlLHtyZXNvbHZlOnR9KT0+e3MuZGV2aWNlLnZpYnJhdGUoMTUpLHQoKX0pLGFDPVRlKEtiLChlLHtyZXNvbHZlOnR9KT0+e3MuZGV2aWNlLnZpYnJhdGUoNDAwKSx0KCl9KSxUbD1udWxsLHNDPXBuKHVoLCgpPT57WGgoKX0pLGxDPVhyKGpiLCgpPT57UWgoKX0pLFhoPVRlKHpiLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e1RsfHwoVGw9cy5hY2NlbGVyb21ldGVyLndhdGNoQWNjZWxlcmF0aW9uKHI9PntvdC5pbnZva2VPbkNhbGxiYWNrKHVoLHt4OnImJnIueEF4aXN8fDAseTpyJiZyLnlBeGlzfHwwLHo6ciYmci56QXhpc3x8MH0pfSxyPT57VGw9bnVsbCxuKGBzdGFydEFjY2VsZXJvbWV0ZXI6ZmFpbCAke3IubWVzc2FnZX1gKX0se2ZyZXF1ZW5jeTpzb30pKSxOKHQsc28pfSksUWg9VGUoV2IsKGUse3Jlc29sdmU6dH0pPT57VGwmJihzLmFjY2VsZXJvbWV0ZXIuY2xlYXJXYXRjaChUbCksVGw9bnVsbCksdCgpfSksY0M9cG4oZGgsQWwoKCk9PnMuYmx1ZXRvb3RoLm9uQmx1ZXRvb3RoRGV2aWNlRm91bmQuYmluZChzLmJsdWV0b290aCksZGgpKSx1Qz1wbihoaCxBbCgoKT0+cy5ibHVldG9vdGgub25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2UuYmluZChzLmJsdWV0b290aCksaGgpKSxmQz1wbihnaCxBbCgoKT0+cy5ibHVldG9vdGgub25CTEVDb25uZWN0aW9uU3RhdGVDaGFuZ2UuYmluZChzLmJsdWV0b290aCksZ2gpKSxkQz1wbihwaCxBbCgoKT0+cy5ibHVldG9vdGgub25CTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlLmJpbmQocy5ibHVldG9vdGgpLHBoKSksaEM9VGUoIm9wZW5CbHVldG9vdGhBZGFwdGVyIixmaSgoKT0+cy5ibHVldG9vdGgub3BlbkJsdWV0b290aEFkYXB0ZXIuYmluZChzLmJsdWV0b290aCkpKSxnQz1UZSgiY2xvc2VCbHVldG9vdGhBZGFwdGVyIixmaSgoKT0+cy5ibHVldG9vdGguY2xvc2VCbHVldG9vdGhBZGFwdGVyLmJpbmQocy5ibHVldG9vdGgpKSkscEM9VGUoImdldEJsdWV0b290aEFkYXB0ZXJTdGF0ZSIsZmkoKCk9PnMuYmx1ZXRvb3RoLmdldEJsdWV0b290aEFkYXB0ZXJTdGF0ZS5iaW5kKHMuYmx1ZXRvb3RoKSkpLHZDPVRlKFpiLGZpKCgpPT5zLmJsdWV0b290aC5zdGFydEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkuYmluZChzLmJsdWV0b290aCkpLFhiKSxtQz1UZSgic3RvcEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkiLGZpKCgpPT5zLmJsdWV0b290aC5zdG9wQmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeS5iaW5kKHMuYmx1ZXRvb3RoKSkpLF9DPVRlKCJnZXRCbHVldG9vdGhEZXZpY2VzIixmaSgoKT0+cy5ibHVldG9vdGguZ2V0Qmx1ZXRvb3RoRGV2aWNlcy5iaW5kKHMuYmx1ZXRvb3RoKSkpLGJDPVRlKFFiLGZpKCgpPT5zLmJsdWV0b290aC5nZXRDb25uZWN0ZWRCbHVldG9vdGhEZXZpY2VzLmJpbmQocy5ibHVldG9vdGgpKSxlMCkseUM9VGUodDAsZmkoKCk9PnMuYmx1ZXRvb3RoLmNyZWF0ZUJMRUNvbm5lY3Rpb24uYmluZChzLmJsdWV0b290aCkpLG4wKSxFQz1UZShyMCxmaSgoKT0+cy5ibHVldG9vdGguY2xvc2VCTEVDb25uZWN0aW9uLmJpbmQocy5ibHVldG9vdGgpKSxpMCksU0M9VGUobzAsZmkoKCk9PnMuYmx1ZXRvb3RoLmdldEJMRURldmljZVNlcnZpY2VzLmJpbmQocy5ibHVldG9vdGgpKSxhMCksd0M9VGUoczAsZmkoKCk9PnMuYmx1ZXRvb3RoLmdldEJMRURldmljZUNoYXJhY3RlcmlzdGljcy5iaW5kKHMuYmx1ZXRvb3RoKSksbDApLENDPVRlKGMwLGZpKCgpPT5zLmJsdWV0b290aC5ub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlLmJpbmQocy5ibHVldG9vdGgpKSx1MCksQUM9VGUoZjAsZmkoKCk9PnMuYmx1ZXRvb3RoLnJlYWRCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlLmJpbmQocy5ibHVldG9vdGgpKSxkMCksT0M9VGUoaDAsZmkoKCk9PnMuYmx1ZXRvb3RoLndyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZS5iaW5kKHMuYmx1ZXRvb3RoKSksZzApLFRDPVRlKHAwLGZpKCgpPT5zLmJsdWV0b290aC5zZXRCTEVNVFUuYmluZChzLmJsdWV0b290aCkpLHYwKSxQQz1UZShtMCxmaSgoKT0+cy5ibHVldG9vdGguZ2V0QkxFRGV2aWNlUlNTSS5iaW5kKHMuYmx1ZXRvb3RoKSksXzApLElDPXBuKHZoLEFsKCgpPT5zLmliZWFjb24ub25CZWFjb25VcGRhdGUuYmluZChzLmliZWFjb24pLHZoKSksTkM9cG4obWgsQWwoKCk9PnMuaWJlYWNvbi5vbkJlYWNvblNlcnZpY2VDaGFuZ2UuYmluZChzLmliZWFjb24pLG1oKSksa0M9VGUoYjAsZmkoKCk9PnMuaWJlYWNvbi5nZXRCZWFjb25zLmJpbmQocy5pYmVhY29uKSkpLFJDPVRlKHkwLGZpKCgpPT5zLmliZWFjb24uc3RhcnRCZWFjb25EaXNjb3ZlcnkuYmluZChzLmliZWFjb24pKSxFMCkseEM9VGUoUzAsZmkoKCk9PnMuaWJlYWNvbi5zdG9wQmVhY29uRGlzY292ZXJ5LmJpbmQocy5pYmVhY29uKSkpLEJDPVRlKEJiLCh7cGhvbmVOdW1iZXI6ZX0se3Jlc29sdmU6dH0pPT4ocy5kZXZpY2UuZGlhbChlKSx0KCkpLE1iKSxNQz17bmFtZTp7Z2l2ZW5OYW1lOiJmaXJzdE5hbWUiLG1pZGRsZU5hbWU6Im1pZGRsZU5hbWUiLGZhbWlseU5hbWU6Imxhc3ROYW1lIn0sbmlja25hbWU6Im5pY2tOYW1lIixwaG90b3M6e3R5cGU6InVybCIsdmFsdWU6InBob3RvRmlsZVBhdGgifSxub3RlOiJyZW1hcmsiLHBob25lTnVtYmVyczpbe3R5cGU6Im1vYmlsZSIsdmFsdWU6Im1vYmlsZVBob25lTnVtYmVyIn0se3R5cGU6IndvcmsiLHZhbHVlOiJ3b3JrUGhvbmVOdW1iZXIifSx7dHlwZToiY29tcGFueSIsdmFsdWU6Imhvc3ROdW1iZXIifSx7dHlwZToiaG9tZSBmYXgiLHZhbHVlOiJob21lRmF4TnVtYmVyIn0se3R5cGU6IndvcmsgZmF4Iix2YWx1ZToid29ya0ZheE51bWJlciJ9XSxlbWFpbHM6W3t0eXBlOiJob21lIix2YWx1ZToiZW1haWwifV0sdXJsczpbe3R5cGU6Im90aGVyIix2YWx1ZToidXJsIn1dLG9yZ2FuaXphdGlvbnM6W3t0eXBlOiJjb21wYW55IixuYW1lOiJvcmdhbml6YXRpb24iLHRpdGxlOiJ0aXRsZSJ9XSxpbXM6W3t0eXBlOiJvdGhlciIsdmFsdWU6IndlQ2hhdE51bWJlciJ9XSxhZGRyZXNzZXM6W3t0eXBlOiJvdGhlciIscHJlZmVycmVkOiEwLGNvdW50cnk6ImFkZHJlc3NDb3VudHJ5IixyZWdpb246ImFkZHJlc3NTdGF0ZSIsbG9jYWxpdHk6ImFkZHJlc3NDaXR5IixzdHJlZXRBZGRyZXNzOiJhZGRyZXNzU3RyZWV0Iixwb3N0YWxDb2RlOiJhZGRyZXNzUG9zdGFsQ29kZSJ9LHt0eXBlOiJob21lIixjb3VudHJ5OiJob21lQWRkcmVzc0NvdW50cnkiLHJlZ2lvbjoiaG9tZUFkZHJlc3NTdGF0ZSIsbG9jYWxpdHk6ImhvbWVBZGRyZXNzQ2l0eSIsc3RyZWV0QWRkcmVzczoiaG9tZUFkZHJlc3NTdHJlZXQiLHBvc3RhbENvZGU6ImhvbWVBZGRyZXNzUG9zdGFsQ29kZSJ9LHt0eXBlOiJjb21wYW55Iixjb3VudHJ5OiJ3b3JrQWRkcmVzc0NvdW50cnkiLHJlZ2lvbjoid29ya0FkZHJlc3NTdGF0ZSIsbG9jYWxpdHk6IndvcmtBZGRyZXNzQ2l0eSIsc3RyZWV0QWRkcmVzczoid29ya0FkZHJlc3NTdHJlZXQiLHBvc3RhbENvZGU6IndvcmtBZGRyZXNzUG9zdGFsQ29kZSJ9XX0sREM9WyJ0eXBlIiwicHJlZmVycmVkIl07ZnVuY3Rpb24gR3UoZSx0LG4pe2xldCByPTA7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2gobz0+e2xldCBjPW5bb107dHlwZW9mIGMhPT0ib2JqZWN0Ij9EQy5pbmRleE9mKG8pIT09LTE/ZVtvXT1uW29dOnR5cGVvZiB0W2NdIT0idW5kZWZpbmVkIj8ocisrLGVbb109dFtjXSk6ZGVsZXRlIGVbb106YyBpbnN0YW5jZW9mIEFycmF5PyhlW29dPVtdLGMuZm9yRWFjaChiPT57bGV0IFY9e307R3UoVix0LGIpJiZlW29dLnB1c2goVil9KSxlW29dLmxlbmd0aD9yKys6ZGVsZXRlIGVbb10pOihlW29dPXt9LEd1KGVbb10sdCxjKT9yKys6ZGVsZXRlIGVbb10pfSkscn1sZXQgTEM9VGUoRGIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57IWUucGhvdG9GaWxlUGF0aCYmKGUucGhvdG9GaWxlUGF0aD0iIikscy5jb250YWN0cy5nZXRBZGRyZXNzQm9vayhzLmNvbnRhY3RzLkFERFJFU1NCT09LX1BIT05FLHI9PntsZXQgbz1yLmNyZWF0ZSgpO0d1KG8sZSxNQyksby5zYXZlKCgpPT50KCksYz0+bigpKX0scj0+bigpKX0sRmIsTGIpO2Z1bmN0aW9uIEpvKGUpe3JldHVybiB0eXBlb2YgZiE9InVuZGVmaW5lZCI/Zi5yZXF1aXJlTW9kdWxlKGUpOl9fcmVxdWlyZU5hdGl2ZVBsdWdpbl9fKGUpfWZ1bmN0aW9uIGVnKGUsdCxuKXtyZXR1cm4gSm8oInBsdXMiKS5zZW5kTmF0aXZlRXZlbnQoZSx0LG4pfWxldCBGQz1UZShWYiwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntKbygiY2xpcGJvYXJkIikuZ2V0U3RyaW5nKG89PntvLnJlc3VsdD09PSJzdWNjZXNzIj90KHtkYXRhOm8uZGF0YX0pOm4oImdldENsaXBib2FyZERhdGE6ZmFpbCIpfSl9KSxWQz1UZShVYiwoZSx7cmVzb2x2ZTp0fSk9PntKbygiY2xpcGJvYXJkIikuc2V0U3RyaW5nKGUuZGF0YSksdCgpfSxIYiwkYiksdGc9Im9uTmV0d29ya1N0YXR1c0NoYW5nZSI7ZnVuY3Rpb24gbmcoKXtyZygpLnRoZW4oKHtuZXR3b3JrVHlwZTplfSk9PntvdC5pbnZva2VPbkNhbGxiYWNrKHRnLHtpc0Nvbm5lY3RlZDplIT09Im5vbmUiLG5ldHdvcmtUeXBlOmV9KX0pfWxldCBVQz1wbih0ZywoKT0+e3MuZ2xvYmFsRXZlbnQuYWRkRXZlbnRMaXN0ZW5lcigibmV0Y2hhbmdlIixuZyl9KSwkQz1Ycigib2ZmTmV0d29ya1N0YXR1c0NoYW5nZSIsKCk9PntzLmdsb2JhbEV2ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm5ldGNoYW5nZSIsbmcpfSkscmc9VGUoImdldE5ldHdvcmtUeXBlIiwoZSx7cmVzb2x2ZTp0fSk9PntsZXQgbj1XYVtzLm5ldHdvcmtpbmZvLmdldEN1cnJlbnRUeXBlKCldfHwidW5rbm93biI7cmV0dXJuIHQoe25ldHdvcmtUeXBlOm59KX0pO2Z1bmN0aW9uIGlnKCl7aWYocy5vcy5uYW1lLnRvTG93ZXJDYXNlKCkhPT0iaW9zIilyZXR1cm4hMTtsZXQgdD1KbygiZmFjZUlEIik7cmV0dXJuISEodCYmdC5pc1N1cHBvcnQoKSl9ZnVuY3Rpb24gb2coKXtyZXR1cm4hIShzLmZpbmdlcnByaW50JiZzLmZpbmdlcnByaW50LmlzU3VwcG9ydCgpKX1sZXQgYWc9ZT0+e2xldCB0PVtdO3JldHVybiBvZygpJiZ0LnB1c2goImZpbmdlclByaW50IiksaWcoKSYmdC5wdXNoKCJmYWNpYWwiKSxlJiZlKHtzdXBwb3J0TW9kZTp0fSkse3N1cHBvcnRNb2RlOnQsZXJyTXNnOiJjaGVja0lzU3VwcG9ydFNvdGVyQXV0aGVudGljYXRpb246b2sifX0sSEM9VGUoTzAsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57YWcodCl9KSxzZz0oe2NoZWNrQXV0aE1vZGU6ZSxyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPShjLGcpPT5uJiZuKGMsZyksbz1jPT50JiZ0KGMpO2lmKGU9PT0iZmluZ2VyUHJpbnQiKXtpZihvZygpKXtsZXQgYz1zLmZpbmdlcnByaW50LmlzS2V5Z3VhcmRTZWN1cmUoKSYmcy5maW5nZXJwcmludC5pc0Vucm9sbGVkRmluZ2VycHJpbnRzKCk7cmV0dXJuIG8oe2lzRW5yb2xsZWQ6Y30pLHtpc0Vucm9sbGVkOmMsZXJyTXNnOiJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlOm9rIn19cmV0dXJuIHIoIm5vdCBzdXBwb3J0Iix7aXNFbnJvbGxlZDohMX0pLHtpc0Vucm9sbGVkOiExLGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpmYWlsIG5vdCBzdXBwb3J0In19ZWxzZSBpZihlPT09ImZhY2lhbCIpe2lmKGlnKCkpe2xldCBjPUpvKCJmYWNlSUQiKSxnPWMmJmMuaXNLZXlndWFyZFNlY3VyZSgpJiZjLmlzRW5yb2xsZWRGYWNlSUQoKTtyZXR1cm4gbyh7aXNFbnJvbGxlZDpnfSkse2lzRW5yb2xsZWQ6ZyxlcnJNc2c6ImNoZWNrSXNTb3RlckVucm9sbGVkSW5EZXZpY2U6b2sifX1yZXR1cm4gcigibm90IHN1cHBvcnQiLHtpc0Vucm9sbGVkOiExfSkse2lzRW5yb2xsZWQ6ITEsZXJyTXNnOiJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlOmZhaWwgbm90IHN1cHBvcnQifX1yZXR1cm4gcigibm90IHN1cHBvcnQiLHtpc0Vucm9sbGVkOiExfSkse2lzRW5yb2xsZWQ6ITEsZXJyTXNnOiJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlOmZhaWwgbm90IHN1cHBvcnQifX0sakM9VGUoVDAsKHtjaGVja0F1dGhNb2RlOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3NnKHtjaGVja0F1dGhNb2RlOmUscmVzb2x2ZTp0LHJlamVjdDpufSl9LE4wLEkwKSx6Qz1UZShrMCwoe3JlcXVlc3RBdXRoTW9kZXM6ZSxjaGFsbGVuZ2U6dD0hMSxhdXRoQ29udGVudDpufSx7cmVzb2x2ZTpyLHJlamVjdDpvfSk9Pnt4bigpO2xldHt0OmN9PWFlKCkse3N1cHBvcnRNb2RlOmd9PWFnKCk7aWYoIWcubGVuZ3RoKXJldHVybiBvKCJub3Qgc3VwcG9ydCIse2F1dGhNb2RlOiJmaW5nZXJQcmludCIsZXJyQ29kZTo5MDAwMX0pO2xldCBiPVtdO2lmKGUuZm9yRWFjaChmdD0+e2cuaW5kZXhPZihmdCk+LTEmJmIucHVzaChmdCl9KSwhYi5sZW5ndGgpcmV0dXJuIG8oInN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbjpmYWlsIG5vIGNvcnJlc3BvbmRpbmcgbW9kZSIse2F1dGhNb2RlOiJmaW5nZXJQcmludCIsZXJyQ29kZTo5MDAwM30pO2xldCBWPVtdO2lmKGIuZm9yRWFjaChmdD0+e3NnKHtjaGVja0F1dGhNb2RlOmZ0fSkuaXNFbnJvbGxlZCYmVi5wdXNoKGZ0KX0pLCFWLmxlbmd0aClyZXR1cm4gbyhgc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uOmZhaWwgbm8gJHtiWzBdfSBlbnJvbGxlZGAse2F1dGhNb2RlOmJbMF0sZXJyQ29kZTo5MDAxMX0pO2xldCBUPVZbMF0sTD1udWxsLF9lLHdlPW58fGMoInVuaS5zdGFydFNvdGVyQXV0aGVudGljYXRpb24uYXV0aENvbnRlbnQiKSxQZT1mdD0+e2xldHtjb2RlOmh0fT1mdCxGdD17YXV0aE1vZGU6VH0sU3Q9ezQ6KCk9PntMPyhFKF9lKSxMLnNldFRpdGxlKGMoInVuaS5zdGFydFNvdGVyQXV0aGVudGljYXRpb24ud2FpdGluZ0NvbnRlbnQiKSksX2U9TigoKT0+e0wmJkwuc2V0VGl0bGUod2UpfSwxZTMpKTpvKCIiLHouZXh0ZW5kKEZ0LHtlcnJDb2RlOjkwMDA5fSkpfSw1OigpPT57cy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKSxvKCJhdXRoZW50aWNhdGUgZnJlZXplLiBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIix6LmV4dGVuZChGdCx7ZXJyQ29kZTo5MDAxMH0pKX0sNjooKT0+e3MubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCksbygiY2FuY2VsIix6LmV4dGVuZChGdCx7ZXJyQ29kZTo5MDAwOH0pKX19O2h0JiZTdFtodF0/U3RbaHRdKCk6KHMubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCksbygiIix6LmV4dGVuZChGdCx7ZXJyQ29kZTo5MDAwN30pKSl9O1Q9PT0iZmluZ2VyUHJpbnQiPyhzLm9zLm5hbWUudG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIiYmKEw9cy5uYXRpdmVVSS5zaG93V2FpdGluZyh3ZSksTC5vbmNsb3NlPWZ1bmN0aW9uKCl7cy5maW5nZXJwcmludC5jYW5jZWwoKX0pLHMuZmluZ2VycHJpbnQuYXV0aGVudGljYXRlKCgpPT57cy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKSxyKHthdXRoTW9kZTpULGVyckNvZGU6MH0pfSxQZSx7bWVzc2FnZTp3ZX0pKTpUPT09ImZhY2lhbCImJkpvKCJmYWNlSUQiKS5hdXRoZW50aWNhdGUoe21lc3NhZ2U6d2V9LGh0PT57aHQudHlwZT09PSJzdWNjZXNzIiYmaHQuY29kZT09PTA/cih7YXV0aE1vZGU6VCxlcnJDb2RlOjB9KTpQZShodCl9KX0seDAsUjApLFdDPVRlKEIwLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e1h0KCk7bGV0e3Q6cn09YWUoKSxjPVdoKCkhPT0ibGlnaHQiLGcsYj0hMSxWPVlpKHt1cmw6Il9fdW5pYXBwc2NhbiIsZGF0YTpPYmplY3QuYXNzaWduKHt9LGUse21lc3NhZ2VzOntmYWlsOnIoInVuaS5zY2FuQ29kZS5mYWlsIiksImZsYXNoLm9uIjpyKCJ1bmkuc2NhbkNvZGUuZmxhc2gub24iKSwiZmxhc2gub2ZmIjpyKCJ1bmkuc2NhbkNvZGUuZmxhc2gub2ZmIil9fSksc3R5bGU6e2FuaW1hdGlvblR5cGU6ZS5hbmltYXRpb25UeXBlfHwicG9wLWluIix0aXRsZU5WaWV3OnthdXRvQmFja0J1dHRvbjohMCx0eXBlOiJmbG9hdCIsdGl0bGVUZXh0OmUudGl0bGVUZXh0fHxyKCJ1bmkuc2NhbkNvZGUudGl0bGUiKSx0aXRsZUNvbG9yOiIjZmZmZmZmIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkiLGJ1dHRvbnM6ZS5vbmx5RnJvbUNhbWVyYT9bXTpbe3RleHQ6ZS5hbGJ1bVRleHR8fHIoInVuaS5zY2FuQ29kZS5hbGJ1bSIpLGZvbnRTaXplOiIxN3B4Iix3aWR0aDoiNjBweCIsb25jbGljazooKT0+e1Yuc2VuZE1lc3NhZ2Uoe3R5cGU6ImdhbGxlcnkifSl9fV19LHBvcEdlc3R1cmU6ImNsb3NlIixiYWNrZ3JvdW5kOiIjMDAwMDAwIixiYWNrQnV0dG9uQXV0b0NvbnRyb2w6ImNsb3NlIn0sb25NZXNzYWdlKHtldmVudDpULGRldGFpbDpMfSl7Zz1MLGI9VD09PSJtYXJrZWQifSxvbkNsb3NlKCl7YyYmcy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImRhcmsiKSxnP2I/KGRlbGV0ZSBnLm1lc3NhZ2UsdChnKSk6bihnLm1lc3NhZ2UpOm4oImNhbmNlbCIpfX0pO2MmJihzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgibGlnaHQiKSxWLndlYnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigicG9wR2VzdHVyZSIsKHt0eXBlOlQscmVzdWx0Okx9KT0+e1Q9PT0ic3RhcnQiP3MubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIik6VD09PSJlbmQiJiYhTCYmcy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImxpZ2h0Iil9KSl9LE0wLEwwKSxsZz1lPT57b3QuaW52b2tlT25DYWxsYmFjayhKLk9OX1RIRU1FX0NIQU5HRSxlKX0sR0M9cG4oSi5PTl9USEVNRV9DSEFOR0UsKCk9PntvdC5vbihKLk9OX1RIRU1FX0NIQU5HRSxsZyl9KSxZQz1YcihKLk9GRl9USEVNRV9DSEFOR0UsKCk9PntvdC5vZmYoSi5PTl9USEVNRV9DSEFOR0UsbGcpfSkscUM9VGUodzAsKGUse3Jlc29sdmU6dH0pPT57bGV0IG49cy5zY3JlZW4uZ2V0QnJpZ2h0bmVzcyghMSk7dCh7dmFsdWU6bn0pfSksSkM9VGUoQzAsKGUse3Jlc29sdmU6dH0pPT57cy5zY3JlZW4uc2V0QnJpZ2h0bmVzcyhlLnZhbHVlLCExKSx0KCl9KSxLQz1UZShBMCwoZSx7cmVzb2x2ZTp0fSk9PntzLmRldmljZS5zZXRXYWtlbG9jayghIWUua2VlcFNjcmVlbk9uKSx0KCl9KSxaQz1EdChGMCwoKT0+e2xldHtnZXRTeXN0ZW1TZXR0aW5nOmV9PWYucmVxdWlyZU1vZHVsZSgicGx1cyIpLHQ9ZSgpO3RyeXt0eXBlb2YgdD09InN0cmluZyImJih0PUpTT04ucGFyc2UodCkpfWNhdGNoKG4pe31yZXR1cm4gdH0pLGNnPUR0KFYwLCgpPT57bGV0e2dldEFwcEF1dGhvcml6ZVNldHRpbmc6ZX09Zi5yZXF1aXJlTW9kdWxlKCJwbHVzIiksdD1lKCk7dHJ5e3R5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9SlNPTi5wYXJzZSh0KSl9Y2F0Y2gobil7fWZvcihsZXQgbiBpbiB0KXouaGFzT3duKHQsbikmJnRbbl09PT0idW5kZWZpbmVkIiYmKHRbbl09dm9pZCAwKTtyZXR1cm4gdH0pLFhDPVRlKFUwLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtvcGVuQXBwQXV0aG9yaXplU2V0dGluZzpyfT1mLnJlcXVpcmVNb2R1bGUoInBsdXMiKTtyKGM9PntjLnR5cGU9PT0ic3VjY2VzcyI/dCgpOm4oKX0pfSksUUM9VGUoVHksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9V3IrIi9kb3dubG9hZC8iO3MuaW8uZ2V0SW1hZ2VJbmZvKHouZXh0ZW5kKGUse3NhdmVQYXRoOnIsZmlsZW5hbWU6cixzdWNjZXNzOlhzKHQpLGZhaWw6ZHIobil9KSl9LEl5LFB5KSxlQT1UZShCeSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLmlvLmdldFZpZGVvSW5mbyh7ZmlsZVBhdGg6ZS5zcmMsc3VjY2VzczpyPT57dCh7b3JpZW50YXRpb246ci5vcmllbnRhdGlvbix0eXBlOnIudHlwZSxkdXJhdGlvbjpyLmR1cmF0aW9uLHNpemU6ci5zaXplLGhlaWdodDpyLmhlaWdodCx3aWR0aDpyLndpZHRoLGZwczpyLmZwc3x8MzAsYml0cmF0ZTpyLmJpdHJhdGV9KX0sZmFpbDpkcihuKX0pfSxEeSxNeSksdEE9VGUoTnksKHtjdXJyZW50OmU9MCxpbmRpY2F0b3I6dD0ibnVtYmVyIixsb29wOm49ITEsdXJsczpyLGxvbmdQcmVzc0FjdGlvbnM6b30se3Jlc29sdmU6YyxyZWplY3Q6Z30pPT57TmUoKTtsZXR7dDpifT1hZSgpO3I9ci5tYXAoVD0+amUoVCkpO2xldCBWPU51bWJlcihlKTtpc05hTihWKT8oZT1yLmluZGV4T2YoamUoZSkpLGU9ZTwwPzA6ZSk6ZT1WLHMubmF0aXZlVUkucHJldmlld0ltYWdlKHIse2N1cnJlbnQ6ZSxpbmRpY2F0b3I6dCxsb29wOm4sb25Mb25nUHJlc3M6ZnVuY3Rpb24oVCl7bGV0IEw9W10sX2U9IiIsd2U9byYmei5pc1BsYWluT2JqZWN0KG8pO3dlPyhMPW8uaXRlbUxpc3Q/by5pdGVtTGlzdDpbXSxfZT1vLml0ZW1Db2xvcj9vLml0ZW1Db2xvcjoiIzAwMDAwMCIpOihMPVtiKCJ1bmkucHJldmlld0ltYWdlLmJ1dHRvbi5zYXZlIildLF9lPSIjMDAwMDAwIik7bGV0IFBlPXtidXR0b25zOkwubWFwKGZ0PT4oe3RpdGxlOmZ0LGNvbG9yOl9lfSkpLGNhbmNlbDpiKCJ1bmkucHJldmlld0ltYWdlLmNhbmNlbCIpfTtzLm5hdGl2ZVVJLmFjdGlvblNoZWV0KFBlLGZ0PT57aWYoZnQuaW5kZXg+MCl7aWYod2Upe3ouaXNGdW5jdGlvbihvLnN1Y2Nlc3MpJiZvLnN1Y2Nlc3Moe3RhcEluZGV4OmZ0LmluZGV4LTEsaW5kZXg6VC5pbmRleH0pO3JldHVybn1zLmdhbGxlcnkuc2F2ZShULnVybCwoKT0+e3MubmF0aXZlVUkudG9hc3QoYigidW5pLnByZXZpZXdJbWFnZS5zYXZlLnN1Y2Nlc3MiKSl9LGZ1bmN0aW9uKCl7cy5uYXRpdmVVSS50b2FzdChiKCJ1bmkucHJldmlld0ltYWdlLnNhdmUuZmFpbCIpKX0pfWVsc2Ugd2UmJnouaXNGdW5jdGlvbihvLmZhaWwpJiZvLmZhaWwoe2Vyck1zZzoic2hvd0FjdGlvblNoZWV0OmZhaWwgY2FuY2VsIn0pfSl9fSksYygpfSxSeSxreSksbkE9VGUoeHksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57dHJ5e3MubmF0aXZlVUkuY2xvc2VQcmV2aWV3SW1hZ2UoKSx0KCl9Y2F0Y2gocil7bigpfX0pLFl1LFBsPSExLHF1LElsPShlLHQ9e30pPT57ckEoei5leHRlbmQoe3N0YXRlOmV9LHQpKX0sb2M9e3N0YXJ0KHtkdXJhdGlvbjplPTZlNCxzYW1wbGVSYXRlOnQsbnVtYmVyT2ZDaGFubmVsczpuLGVuY29kZUJpdFJhdGU6cixmb3JtYXQ6bz0ibXAzIixmcmFtZVNpemU6Y309e30pe2lmKFBsKXJldHVybiBJbCgic3RhcnQiKTtZdT1zLmF1ZGlvLmdldFJlY29yZGVyKCksWXUucmVjb3JkKHtmb3JtYXQ6byxzYW1wbGVyYXRlOnQ/U3RyaW5nKHQpOnZvaWQgMCxmaWxlbmFtZTpXcisiL3JlY29yZGVyLyJ9LGc9PklsKCJzdG9wIix7dGVtcEZpbGVQYXRoOmd9KSxnPT5JbCgiZXJyb3IiLHtlcnJNc2c6Zy5tZXNzYWdlfSkpLHF1PU4oKCk9PntvYy5zdG9wKCl9LGUpLElsKCJzdGFydCIpLFBsPSEwfSxzdG9wKCl7UGwmJihZdS5zdG9wKCksUGw9ITEscXUmJkUocXUpKX0scGF1c2UoKXtQbCYmSWwoImVycm9yIix7ZXJyTXNnOiJVbnN1cHBvcnRlZCBvcGVyYXRpb246IHBhdXNlIn0pfSxyZXN1bWUoKXtQbCYmSWwoImVycm9yIix7ZXJyTXNnOiJVbnN1cHBvcnRlZCBvcGVyYXRpb246IHJlc3VtZSJ9KX19LFFzPXtwYXVzZTpudWxsLHJlc3VtZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsLGVycm9yOm51bGx9O2Z1bmN0aW9uIHJBKGUpe2xldCB0PWUuc3RhdGU7ZGVsZXRlIGUuc3RhdGUsZGVsZXRlIGUuZXJyTXNnLHQmJnouaXNGdW5jdGlvbihRc1t0XSkmJlFzW3RdKGUpfWNsYXNzIGlBe2NvbnN0cnVjdG9yKCl7fW9uRXJyb3IodCl7UXMuZXJyb3I9dH1vbkZyYW1lUmVjb3JkZWQodCl7fW9uSW50ZXJydXB0aW9uQmVnaW4odCl7fW9uSW50ZXJydXB0aW9uRW5kKHQpe31vblBhdXNlKHQpe1FzLnBhdXNlPXR9b25SZXN1bWUodCl7UXMucmVzdW1lPXR9b25TdGFydCh0KXtRcy5zdGFydD10fW9uU3RvcCh0KXtRcy5zdG9wPXR9cGF1c2UoKXtvYy5wYXVzZSgpfXJlc3VtZSgpe29jLnJlc3VtZSgpfXN0YXJ0KHQ9e30pe29jLnN0YXJ0KHQpfXN0b3AoKXtvYy5zdG9wKCl9fWxldCB1ZyxvQT1EdChqeSwoKT0+dWd8fCh1Zz1uZXcgaUEpKSxhQT1UZShVeSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLmdhbGxlcnkuc2F2ZShlLmZpbGVQYXRoLFhzKHQpLGRyKG4pKX0sSHksJHkpLHNBPVRlKEx5LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3MuZ2FsbGVyeS5zYXZlKGUuZmlsZVBhdGgsWHModCksZHIobikpfSxWeSxGeSksbEE9VGUoenksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9YCR7V3J9L2NvbXByZXNzZWQvJHtEYXRlLm5vdygpfV8ke0dhKGUuc3JjKX1gLHtjb21wcmVzc2VkV2lkdGg6byxjb21wcmVzc2VkSGVpZ2h0OmN9PWU7dHlwZW9mIG89PSJudW1iZXIiJiYoZS53aWR0aD1vKyJweCIpLHR5cGVvZiBjPT0ibnVtYmVyIiYmKGUuaGVpZ2h0PWMrInB4Iikscy56aXAuY29tcHJlc3NJbWFnZSh6LmV4dGVuZCh7fSxlLHtkc3Q6cn0pLCgpPT57dCh7dGVtcEZpbGVQYXRoOnJ9KX0sbil9LEd5LFd5KSxjQT1UZShZeSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1gJHtXcn0vY29tcHJlc3NlZC8ke0RhdGUubm93KCl9XyR7R2EoZS5zcmMpfWA7cy56aXAuY29tcHJlc3NWaWRlbyh6LmV4dGVuZCh7fSxlLHtmaWxlbmFtZTpyfSksbz0+e3Qoe3RlbXBGaWxlUGF0aDpyLHNpemU6by5zaXplfSl9LG4pfSxKeSxxeSk7ZnVuY3Rpb24gdUEoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGUsZnVuY3Rpb24ocil7ci5nZXRNZXRhZGF0YSh0LG4sITEpfSxuKX0pfWxldCBmQT1UZShFeSwoe2NvdW50OmUsc2l6ZVR5cGU6dCxzb3VyY2VUeXBlOm4sY3JvcDpyfT17fSx7cmVzb2x2ZTpvLHJlamVjdDpjfSk9PntLKCk7bGV0e3Q6Z309YWUoKSxiPWRyKGMpO2Z1bmN0aW9uIFYoX2Upe2xldCB3ZT1bXSxQZT1bXTtQcm9taXNlLmFsbChfZS5tYXAoZnQ9PnVBKGZ0KSkpLnRoZW4oZnQ9PntmdC5mb3JFYWNoKChodCxGdCk9PntsZXQgU3Q9X2VbRnRdO1BlLnB1c2goU3QpLHdlLnB1c2goe3BhdGg6U3Qsc2l6ZTpodC5zaXplfSl9KSxvKHt0ZW1wRmlsZVBhdGhzOlBlLHRlbXBGaWxlczp3ZX0pfSkuY2F0Y2goYil9ZnVuY3Rpb24gVCgpe3MuY2FtZXJhLmdldENhbWVyYSgpLmNhcHR1cmVJbWFnZSh3ZT0+Vihbd2VdKSxiLHtmaWxlbmFtZTpXcisiL2NhbWVyYS8iLHJlc29sdXRpb246ImhpZ2giLGNyb3A6cixzaXplVHlwZTp0fSl9ZnVuY3Rpb24gTCgpe3MuZ2FsbGVyeS5waWNrKCh7ZmlsZXM6X2V9KT0+VihfZSksYix7bWF4aW11bTplLG11bHRpcGxlOiEwLHN5c3RlbTohMSxmaWxlbmFtZTpXcisiL2dhbGxlcnkvIixwZXJtaXNzaW9uQWxlcnQ6ITAsY3JvcDpyLHNpemVUeXBlOnR9KX1pZihuLmxlbmd0aD09PTEpe2lmKG4uaW5jbHVkZXMoImFsYnVtIikpe0woKTtyZXR1cm59ZWxzZSBpZihuLmluY2x1ZGVzKCJjYW1lcmEiKSl7VCgpO3JldHVybn19cy5uYXRpdmVVSS5hY3Rpb25TaGVldCh7Y2FuY2VsOmcoInVuaS5jaG9vc2VJbWFnZS5jYW5jZWwiKSxidXR0b25zOlt7dGl0bGU6ZygidW5pLmNob29zZUltYWdlLnNvdXJjZVR5cGUuY2FtZXJhIil9LHt0aXRsZTpnKCJ1bmkuY2hvb3NlSW1hZ2Uuc291cmNlVHlwZS5hbGJ1bSIpfV19LF9lPT57c3dpdGNoKF9lLmluZGV4KXtjYXNlIDE6VCgpO2JyZWFrO2Nhc2UgMjpMKCk7YnJlYWs7ZGVmYXVsdDpiKCk7YnJlYWt9fSl9LHd5LFN5KSxkQT1UZShDeSwoe3NvdXJjZVR5cGU6ZSxjb21wcmVzc2VkOnQsbWF4RHVyYXRpb246bixjYW1lcmE6cn0se3Jlc29sdmU6byxyZWplY3Q6Y30pPT57aWUoKTtsZXR7dDpnfT1hZSgpLGI9ZHIoYyk7ZnVuY3Rpb24gVihfZSl7cy5pby5nZXRWaWRlb0luZm8oe2ZpbGVQYXRoOl9lLHN1Y2Nlc3Mod2Upe2xldCBQZT17ZXJyTXNnOiJjaG9vc2VWaWRlbzpvayIsdGVtcEZpbGVQYXRoOl9lLHNpemU6d2Uuc2l6ZSxkdXJhdGlvbjp3ZS5kdXJhdGlvbix3aWR0aDp3ZS53aWR0aCxoZWlnaHQ6d2UuaGVpZ2h0fTtvKFBlKX0sZmFpbDpifSl9ZnVuY3Rpb24gVCgpe3MuZ2FsbGVyeS5waWNrKCh7ZmlsZXM6X2V9KT0+VihfZVswXSksYix7ZmlsdGVyOiJ2aWRlbyIsc3lzdGVtOiExLG11bHRpcGxlOiEwLG1heGltdW06MSxmaWxlbmFtZTpXcisiL2dhbGxlcnkvIixwZXJtaXNzaW9uQWxlcnQ6ITAsdmlkZW9Db21wcmVzczp0fSl9ZnVuY3Rpb24gTCgpe3MuY2FtZXJhLmdldENhbWVyYSgpLnN0YXJ0VmlkZW9DYXB0dXJlKFYsYix7aW5kZXg6cj09PSJmcm9udCI/IjIiOiIxIix2aWRlb01heGltdW1EdXJhdGlvbjpuLGZpbGVuYW1lOldyKyIvY2FtZXJhLyIsdmlkZW9Db21wcmVzczp0fSl9aWYoZS5sZW5ndGg9PT0xKXtpZihlLmluY2x1ZGVzKCJhbGJ1bSIpKXtUKCk7cmV0dXJufWVsc2UgaWYoZS5pbmNsdWRlcygiY2FtZXJhIikpe0woKTtyZXR1cm59fXMubmF0aXZlVUkuYWN0aW9uU2hlZXQoe2NhbmNlbDpnKCJ1bmkuY2hvb3NlVmlkZW8uY2FuY2VsIiksYnV0dG9uczpbe3RpdGxlOmcoInVuaS5jaG9vc2VWaWRlby5zb3VyY2VUeXBlLmNhbWVyYSIpfSx7dGl0bGU6ZygidW5pLmNob29zZVZpZGVvLnNvdXJjZVR5cGUuYWxidW0iKX1dfSxfZT0+e3N3aXRjaChfZS5pbmRleCl7Y2FzZSAxOkwoKTticmVhaztjYXNlIDI6VCgpO2JyZWFrO2RlZmF1bHQ6YigpO2JyZWFrfX0pfSxPeSxBeSksaEE9VGUoZHksKGUse3Jlc29sdmU6dH0pPT57cy5rZXkuc2hvd1NvZnRLZXlib3JkKCksdCgpfSksZ0E9VGUoZnksKGUse3Jlc29sdmU6dH0pPT57cy5rZXkuaGlkZVNvZnRLZXlib3JkKCksdCgpfSk7ZnVuY3Rpb24gZmcoZSl7b3QuaW52b2tlT25DYWxsYmFjayhKLk9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0UsZSl9bGV0IHBBPXBuKEouT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSwoKT0+e290Lm9uKEouT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSxmZyl9KSx2QT1YcihKLk9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0UsKCk9PntvdC5vZmYoSi5PTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFLGZnKX0pO2NsYXNzIG1Be2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl9kb3dubG9hZGVyPXQsdC5hZGRFdmVudExpc3RlbmVyKCJzdGF0ZWNoYW5nZWQiLChuLHIpPT57bi5kb3dubG9hZGVkU2l6ZSYmbi50b3RhbFNpemUmJnRoaXMuX2NhbGxiYWNrcy5mb3JFYWNoKG89PntvKHtwcm9ncmVzczpNYXRoLnJvdW5kKG4uZG93bmxvYWRlZFNpemUvbi50b3RhbFNpemUqMTAwKSx0b3RhbEJ5dGVzV3JpdHRlbjpuLmRvd25sb2FkZWRTaXplLHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6bi50b3RhbFNpemV9KX0pfSl9YWJvcnQoKXt0aGlzLl9kb3dubG9hZGVyLmFib3J0KCl9b25Qcm9ncmVzc1VwZGF0ZSh0KXshei5pc0Z1bmN0aW9uKHQpfHx0aGlzLl9jYWxsYmFja3MucHVzaCh0KX1vZmZQcm9ncmVzc1VwZGF0ZSh0KXtsZXQgbj10aGlzLl9jYWxsYmFja3MuaW5kZXhPZih0KTtuPj0wJiZ0aGlzLl9jYWxsYmFja3Muc3BsaWNlKG4sMSl9b25IZWFkZXJzUmVjZWl2ZWQodCl7dGhyb3cgbmV3IEVycm9yKCJNZXRob2Qgbm90IGltcGxlbWVudGVkLiIpfW9mZkhlYWRlcnNSZWNlaXZlZCh0KXt0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuIil9fWxldCBfQT1VcihhRSwoe3VybDplLGhlYWRlcjp0LHRpbWVvdXQ6bn0se3Jlc29sdmU6cixyZWplY3Q6b30pPT57bj0obnx8Ui5uZXR3b3JrVGltZW91dCYmUi5uZXR3b3JrVGltZW91dC5yZXF1ZXN0fHw2MCoxZTMpLzFlMztsZXQgYz1zLmRvd25sb2FkZXIuY3JlYXRlRG93bmxvYWQoZSx7dGltZW91dDpuLGZpbGVuYW1lOldyKyIvZG93bmxvYWQvIixyZXRyeTowLHJldHJ5SW50ZXJ2YWw6MH0sKGIsVik9PntWP3Ioe3RlbXBGaWxlUGF0aDpiLmZpbGVuYW1lLHN0YXR1c0NvZGU6Vn0pOm8oYHN0YXR1c0NvZGU6ICR7Vn1gKX0pLGc9bmV3IG1BKGMpO2ZvcihsZXQgYiBpbiB0KXouaGFzT3duKHQsYikmJmMuc2V0UmVxdWVzdEhlYWRlcihiLHRbYl0pO3JldHVybiBjLnN0YXJ0KCksZ30sbEUsc0UpLGJBPWU9PntsZXQgdD1lWyJTZXQtQ29va2llIl18fGVbInNldC1jb29raWUiXSxuPVtdO2lmKCF0KXJldHVybltdO3RbMF09PT0iWyImJnRbdC5sZW5ndGgtMV09PT0iXSImJih0PXQuc2xpY2UoMSwtMSkpO2xldCByPXQuc3BsaXQoIjsiKTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKylyW29dLmluZGV4T2YoIkV4cGlyZXM9IikhPT0tMXx8cltvXS5pbmRleE9mKCJleHBpcmVzPSIpIT09LTE/bi5wdXNoKHJbb10ucmVwbGFjZSgiLCIsIiIpKTpuLnB1c2gocltvXSk7cmV0dXJuIG49bi5qb2luKCI7Iikuc3BsaXQoIiwiKSxufTtmdW5jdGlvbiB5QShlLHQpe2lmKHouaXNTdHJpbmcoZS5kYXRhKSYmZS5kYXRhLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGUuZGF0YT1lLmRhdGEuc2xpY2UoMSkpLGUuc3RhdHVzQ29kZT1wYXJzZUludChTdHJpbmcoZS5zdGF0dXNDb2RlKSwxMCksei5pc1BsYWluT2JqZWN0KGUuaGVhZGVyKSYmKGUuaGVhZGVyPU9iamVjdC5rZXlzKGUuaGVhZGVyKS5yZWR1Y2UoZnVuY3Rpb24obixyKXtsZXQgbz1lLmhlYWRlcltyXTtyZXR1cm4gei5pc0FycmF5KG8pP25bcl09by5qb2luKCIsIik6ei5pc1N0cmluZyhvKSYmKG5bcl09byksbn0se30pKSx0LmRhdGFUeXBlJiZ0LmRhdGFUeXBlLnRvTG93ZXJDYXNlKCk9PT0ianNvbiIpdHJ5e2UuZGF0YT1KU09OLnBhcnNlKGUuZGF0YSl9Y2F0Y2gobil7fXJldHVybiBlfWNsYXNzIEVBe2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlcXVlc3RUYXNrPXR9YWJvcnQoKXt0aGlzLl9yZXF1ZXN0VGFzay5hYm9ydCgpfW9mZkhlYWRlcnNSZWNlaXZlZCgpe31vbkhlYWRlcnNSZWNlaXZlZCgpe319bGV0IFNBPVVyKEt5LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtoZWFkZXI6cixtZXRob2Q6byxkYXRhOmMsdGltZW91dDpnLHVybDpiLHJlc3BvbnNlVHlwZTpWLHNzbFZlcmlmeTpULGZpcnN0SXB2NDpMLHRsczpfZX09ZSx3ZTtmb3IobGV0IEV0IGluIHIpaWYoRXQudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiKXt3ZT1yW0V0XTticmVha31vIT09IkdFVCImJndlLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT09PTAmJnouaXNQbGFpbk9iamVjdChjKSYmKGM9SlNPTi5zdHJpbmdpZnkoYykpO2xldCBQZT1Kbygic3RyZWFtIiksZnQ9e30saHQsRnQsU3Q9ITE7Zm9yKGxldCBFdCBpbiByKWlmKCFTdCYmRXQudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiKXtpZihTdD0hMCxmdFsiQ29udGVudC1UeXBlIl09cltFdF0sbyE9PSJHRVQiJiZyW0V0XS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT09PTAmJiF6LmlzU3RyaW5nKGMpJiYhKGMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpe2xldCBLdD1bXTtmb3IobGV0IGNuIGluIGMpei5oYXNPd24oYyxjbikmJkt0LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGNuKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGNbY25dKSk7Yz1LdC5qb2luKCImIil9fWVsc2UgZnRbRXRdPXJbRXRdOyFTdCYmbz09PSJQT1NUIiYmKGZ0WyJDb250ZW50LVR5cGUiXT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IiksZyYmKGh0PU4oKCk9PntGdD0hMCxuKCJ0aW1lb3V0Iil9LGcrMjAwKSk7bGV0IG1uPXttZXRob2Q6byx1cmw6Yi50cmltKCksaGVhZGVyczpmdCx0eXBlOlY9PT0iYXJyYXlidWZmZXIiPyJiYXNlNjQiOiJ0ZXh0Iix0aW1lb3V0Omd8fDZlNSxzc2xWZXJpZnk6IVQsZmlyc3RJcHY0OkwsdGxzOl9lfSx0bj0hMTtvIT09IkdFVCImJih0b1N0cmluZy5jYWxsKGMpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj90bj0hMDptbi5ib2R5PXouaXNTdHJpbmcoYyk/YzpKU09OLnN0cmluZ2lmeShjKSk7bGV0IG5uPSh7b2s6RXQsc3RhdHVzOkt0LGRhdGE6Y24saGVhZGVyczpadCxlcnJvck1zZzpDbn0pPT57aWYoRnQpcmV0dXJuO2h0JiZFKGh0KTtsZXQgaHI9S3Q7aWYoaHI+MCl0KHlBKHtkYXRhOkV0JiZWPT09ImFycmF5YnVmZmVyIj9SaShjbik6Y24sc3RhdHVzQ29kZTpocixoZWFkZXI6WnQsY29va2llczpiQShadCl9LGUpKTtlbHNle2xldCBybj0iYWJvcnQgc3RhdHVzQ29kZToiK2hyO0NuJiYocm49cm4rIiAiK0NuKSxuKHJuKX19O3JldHVybiB0bj9QZS5mZXRjaFdpdGhBcnJheUJ1ZmZlcih7IkB0eXBlIjoiYmluYXJ5IixiYXNlNjQ6VHIoYyl9LG1uLG5uKTpQZS5mZXRjaChtbixubiksbmV3IEVBKHthYm9ydCgpe0Z0PSEwLGh0JiZFKGh0KSxuKCJhYm9ydCIpfX0pfSx0RSxuRSksd0E9VGUockUsKHtjZXJ0aWZpY2F0ZXM6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57Sm8oInN0cmVhbSIpLmNvbmZpZ01UTFMoZSwoe3R5cGU6byxjb2RlOmMsbWVzc2FnZTpnfSk9Pntzd2l0Y2gobyl7Y2FzZSJzdWNjZXNzIjp0KHtjb2RlOmN9KTticmVhaztjYXNlImZhaWwiOm4oZyx7Y29kZTpjfSk7YnJlYWt9fSl9LGlFLG9FKSxObD1bXSxrbD17fSxKdT17b3BlbjoiIixjbG9zZToiIixlcnJvcjoiIixtZXNzYWdlOiIifSxhYztmdW5jdGlvbiBDQShlKXtsZXQgdD1TdHJpbmcoRGF0ZS5ub3coKSksbjt0cnl7YWN8fChhYz1KbygidW5pLXdlYlNvY2tldCIpLEFBKGFjKSksYWMuV2ViU29ja2V0KHtpZDp0LHVybDplLnVybCxwcm90b2NvbDp6LmlzQXJyYXkoZS5wcm90b2NvbHMpP2UucHJvdG9jb2xzLmpvaW4oIiwiKTplLnByb3RvY29scyxoZWFkZXI6ZS5oZWFkZXJ9KX1jYXRjaChyKXtuPXJ9cmV0dXJue3NvY2tldDphYyxzb2NrZXRJZDp0LGVyck1zZzpufX1mdW5jdGlvbiBBQShlKXtlLm9ub3Blbih0PT57bGV0IG49a2xbdC5pZF07IW58fG4uX3NvY2tldE9uT3BlbigpfSksZS5vbm1lc3NhZ2UodD0+e2xldCBuPWtsW3QuaWRdOyFufHxuLl9zb2NrZXRPbk1lc3NhZ2UodCl9KSxlLm9uZXJyb3IodD0+e2xldCBuPWtsW3QuaWRdOyFufHxuLl9zb2NrZXRPbkVycm9yKCl9KSxlLm9uY2xvc2UodD0+e2xldHtpZDpuLGNvZGU6cixyZWFzb246b309dCxjPWtsW25dOyFjfHxjLl9zb2NrZXRPbkNsb3NlKHtjb2RlOnIscmVhc29uOm99KX0pfWNsYXNzIE9Be2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pZD1uLHRoaXMuX3NvY2tldD10LHRoaXMuX2NhbGxiYWNrcz17b3BlbjpbXSxjbG9zZTpbXSxlcnJvcjpbXSxtZXNzYWdlOltdfSx0aGlzLkNMT1NFRD0zLHRoaXMuQ0xPU0lORz0yLHRoaXMuQ09OTkVDVElORz0wLHRoaXMuT1BFTj0xLHRoaXMucmVhZHlTdGF0ZT10aGlzLkNMT1NFRCwhIXRoaXMuX3NvY2tldH1fc29ja2V0T25PcGVuKCl7dGhpcy5yZWFkeVN0YXRlPXRoaXMuT1BFTix0aGlzLnNvY2tldFN0YXRlQ2hhbmdlKCJvcGVuIil9X3NvY2tldE9uTWVzc2FnZSh0KXt0aGlzLnNvY2tldFN0YXRlQ2hhbmdlKCJtZXNzYWdlIix7ZGF0YTp0eXBlb2YgdC5kYXRhPT0ib2JqZWN0Ij9SaSh0LmRhdGEuYmFzZTY0KTp0LmRhdGF9KX1fc29ja2V0T25FcnJvcigpe3RoaXMuc29ja2V0U3RhdGVDaGFuZ2UoImVycm9yIiksdGhpcy5vbkVycm9yT3JDbG9zZSgpfV9zb2NrZXRPbkNsb3NlKHQpe3RoaXMuc29ja2V0U3RhdGVDaGFuZ2UoImNsb3NlIix0KSx0aGlzLm9uRXJyb3JPckNsb3NlKCl9b25FcnJvck9yQ2xvc2UoKXt0aGlzLnJlYWR5U3RhdGU9dGhpcy5DTE9TRUQsZGVsZXRlIGtsW3RoaXMuaWRdO2xldCB0PU5sLmluZGV4T2YodGhpcyk7dD49MCYmTmwuc3BsaWNlKHQsMSl9c29ja2V0U3RhdGVDaGFuZ2UodCxuPXt9KXtsZXR7Y29kZTpyLHJlYXNvbjpvfT1uLGM9dD09PSJtZXNzYWdlIj97ZGF0YTpuLmRhdGF9OnQ9PT0iY2xvc2UiP3tjb2RlOnIscmVhc29uOm99Ont9O3RoaXM9PT1ObFswXSYmSnVbdF0mJm90Lmludm9rZU9uQ2FsbGJhY2soSnVbdF0sYyksdGhpcy5fY2FsbGJhY2tzW3RdLmZvckVhY2goZz0+e3ouaXNGdW5jdGlvbihnKSYmZyhjKX0pfXNlbmQodCxuPSEwKXt0aGlzLnJlYWR5U3RhdGUhPT10aGlzLk9QRU4mJkouY2FsbE9wdGlvbnModCwic2VuZFNvY2tldE1lc3NhZ2U6ZmFpbCBXZWJTb2NrZXQgaXMgbm90IGNvbm5lY3RlZCIpO3RyeXt0aGlzLl9zb2NrZXQuc2VuZCh7aWQ6dGhpcy5pZCxkYXRhOnR5cGVvZiB0LmRhdGE9PSJvYmplY3QiP3siQHR5cGUiOiJiaW5hcnkiLGJhc2U2NDpUcih0LmRhdGEpfTp0LmRhdGF9KSxuJiZKLmNhbGxPcHRpb25zKHQsInNlbmRTb2NrZXRNZXNzYWdlOm9rIil9Y2F0Y2gocil7biYmSi5jYWxsT3B0aW9ucyh0LGBzZW5kU29ja2V0TWVzc2FnZTpmYWlsICR7cn1gKX19Y2xvc2UodCxuPSEwKXt0aGlzLnJlYWR5U3RhdGU9dGhpcy5DTE9TSU5HO3RyeXt0aGlzLl9zb2NrZXQuY2xvc2Uoei5leHRlbmQoe2lkOnRoaXMuaWQsYXJnczp0fSkpLG4mJkouY2FsbE9wdGlvbnModCwiY2xvc2VTb2NrZXQ6b2siKX1jYXRjaChyKXtuJiZKLmNhbGxPcHRpb25zKHQsYGNsb3NlU29ja2V0OmZhaWwgJHtyfWApfX1vbk9wZW4odCl7dGhpcy5fY2FsbGJhY2tzLm9wZW4ucHVzaCh0KX1vbkNsb3NlKHQpe3RoaXMuX2NhbGxiYWNrcy5jbG9zZS5wdXNoKHQpfW9uRXJyb3IodCl7dGhpcy5fY2FsbGJhY2tzLmVycm9yLnB1c2godCl9b25NZXNzYWdlKHQpe3RoaXMuX2NhbGxiYWNrcy5tZXNzYWdlLnB1c2godCl9fWxldCBUQT1VcihkRSwoe3VybDplLHByb3RvY29sczp0LGhlYWRlcjpuLG1ldGhvZDpyfSx7cmVzb2x2ZTpvLHJlamVjdDpjfSk9PntsZXR7c29ja2V0Omcsc29ja2V0SWQ6YixlcnJNc2c6Vn09Q0Eoe3VybDplLHByb3RvY29sczp0LGhlYWRlcjpuLG1ldGhvZDpyfSksVD1uZXcgT0EoZyxiKTtyZXR1cm4gVj9OKCgpPT57YyhWKX0sMCk6KE5sLnB1c2goVCksa2xbYl09VCksTigoKT0+e28oKX0sMCksVH0sZ0UsaEUpLFBBPVRlKHBFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPU5sWzBdO2lmKCFyfHxyLnJlYWR5U3RhdGUhPT1yLk9QRU4pe24oIldlYlNvY2tldCBpcyBub3QgY29ubmVjdGVkIik7cmV0dXJufXIuc2VuZCh7ZGF0YTplLmRhdGF9LCExKSx0KCl9LHZFKSxJQT1UZShtRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1ObFswXTtpZighcil7bigiV2ViU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQiKTtyZXR1cm59ci5yZWFkeVN0YXRlPXIuQ0xPU0lORyxyLmNsb3NlKGUsITEpLHQoKX0sX0UpO2Z1bmN0aW9uIEJjKGUpe2xldCB0PWBvblNvY2tldCR7ei5jYXBpdGFsaXplKGUpfWA7cmV0dXJuIHBuKHQsKCk9PntKdVtlXT10fSl9bGV0IE5BPUJjKCJvcGVuIiksa0E9QmMoImVycm9yIiksUkE9QmMoIm1lc3NhZ2UiKSx4QT1CYygiY2xvc2UiKTtjbGFzcyBCQXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fdXBsb2FkZXI9dCx0LmFkZEV2ZW50TGlzdGVuZXIoInN0YXRlY2hhbmdlZCIsKG4scik9PntuLnVwbG9hZGVkU2l6ZSYmbi50b3RhbFNpemUmJnRoaXMuX2NhbGxiYWNrcy5mb3JFYWNoKG89PntvKHtwcm9ncmVzczpwYXJzZUludChTdHJpbmcobi51cGxvYWRlZFNpemUvbi50b3RhbFNpemUqMTAwKSksdG90YWxCeXRlc1NlbnQ6bi51cGxvYWRlZFNpemUsdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kOm4udG90YWxTaXplfSl9KX0pfWFib3J0KCl7dGhpcy5fdXBsb2FkZXIuYWJvcnQoKX1vblByb2dyZXNzVXBkYXRlKHQpeyF6LmlzRnVuY3Rpb24odCl8fHRoaXMuX2NhbGxiYWNrcy5wdXNoKHQpfW9uSGVhZGVyc1JlY2VpdmVkKCl7fW9mZlByb2dyZXNzVXBkYXRlKHQpe2xldCBuPXRoaXMuX2NhbGxiYWNrcy5pbmRleE9mKHQpO24+PTAmJnRoaXMuX2NhbGxiYWNrcy5zcGxpY2UobiwxKX1vZmZIZWFkZXJzUmVjZWl2ZWQoKXt9fWxldCBNQT1VcihjRSwoe3VybDplLHRpbWVvdXQ6dCxoZWFkZXI6bixmb3JtRGF0YTpyLGZpbGVzOm8sZmlsZVBhdGg6YyxuYW1lOmd9LHtyZXNvbHZlOmIscmVqZWN0OlZ9KT0+e3Q9KHR8fFIubmV0d29ya1RpbWVvdXQmJlIubmV0d29ya1RpbWVvdXQudXBsb2FkRmlsZXx8NjAqMWUzKS8xZTM7bGV0IFQ9cy51cGxvYWRlci5jcmVhdGVVcGxvYWQoZSx7dGltZW91dDp0LHJldHJ5OjAscmV0cnlJbnRlcnZhbDowfSwoX2Usd2UpPT57d2U/Yih7ZGF0YTpfZS5yZXNwb25zZVRleHQsc3RhdHVzQ29kZTp3ZX0pOlYoYHN0YXR1c0NvZGU6ICR7d2V9YCl9KTtmb3IobGV0IF9lIGluIG4pei5oYXNPd24obixfZSkmJlQuc2V0UmVxdWVzdEhlYWRlcihfZSxTdHJpbmcobltfZV0pKTtmb3IobGV0IF9lIGluIHIpei5oYXNPd24ocixfZSkmJlQuYWRkRGF0YShfZSxTdHJpbmcocltfZV0pKTtvJiZvLmxlbmd0aD9vLmZvckVhY2goX2U9PntULmFkZEZpbGUoamUoX2UudXJpKSx7a2V5Ol9lLm5hbWV8fCJmaWxlIn0pfSk6VC5hZGRGaWxlKGplKGMpLHtrZXk6Z30pO2xldCBMPW5ldyBCQShUKTtyZXR1cm4gVC5zdGFydCgpLEx9LGZFLHVFKSxQcz17fSxEQT1bInBsYXkiLCJjYW5wbGF5IiwiZW5kZWQiLCJzdG9wIiwid2FpdGluZyIsInNlZWtpbmciLCJzZWVrZWQiLCJwYXVzZSJdLGRnPSJwbGF5YmFjayIsTEE9MjAwLEZBPWU9PntsZXQgdD1Qc1tlXTshdHx8dC5pbml0U3RhdGVDaGFnZXx8KHQuaW5pdFN0YXRlQ2hhZ2U9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsbj0+e2hnKHtzdGF0ZToiZXJyb3IiLGF1ZGlvSWQ6ZSxlcnJNc2c6Ik1lZGlhRXJyb3IiLGVyckNvZGU6bi5jb2RlfSl9KSxEQS5mb3JFYWNoKG49Pnt0LmFkZEV2ZW50TGlzdGVuZXIobiwoKT0+e249PT0icGxheSI/dC5pc1N0b3BwZWQ9ITE6bj09PSJzdG9wIiYmKHQuaXNTdG9wcGVkPSEwKSxoZyh7c3RhdGU6bixhdWRpb0lkOmV9KX0pfSkpfTtmdW5jdGlvbiBWQSgpe2xldCBlPWAke0RhdGUubm93KCl9JHtNYXRoLnJhbmRvbSgpfWAsdD1Qc1tlXT1zLmF1ZGlvLmNyZWF0ZVBsYXllcigiIik7cmV0dXJuIHQuc3JjPSIiLHQudm9sdW1lPTEsdC5zdGFydFRpbWU9MCx0LnNldFNlc3Npb25DYXRlZ29yeShkZykse2Vyck1zZzoiY3JlYXRlQXVkaW9JbnN0YW5jZTpvayIsYXVkaW9JZDplfX1mdW5jdGlvbiBVQSh7YXVkaW9JZDplLHNyYzp0LHN0YXJ0VGltZTpuLGF1dG9wbGF5OnI9ITEsbG9vcDpvPSExLG9iZXlNdXRlU3dpdGNoOmMsdm9sdW1lOmcsc2Vzc2lvbkNhdGVnb3J5OmI9ZGcscGxheWJhY2tSYXRlOlZ9KXtsZXQgVD1Qc1tlXTtpZihUKXtsZXQgTD17bG9vcDpvLGF1dG9wbGF5OnJ9O2lmKHQpe2xldCBfZT1qZSh0KTtULnNyYyE9PV9lJiYoVC5zcmM9TC5zcmM9X2UpfW4mJihULnN0YXJ0VGltZT1MLnN0YXJ0VGltZT1uKSx0eXBlb2YgZz09Im51bWJlciImJihULnZvbHVtZT1MLnZvbHVtZT1nKSxULnNldFN0eWxlcyhMKSxiJiZULnNldFNlc3Npb25DYXRlZ29yeShiKSxWJiZULnBsYXliYWNrUmF0ZSYmVC5wbGF5YmFja1JhdGUoViksRkEoZSl9cmV0dXJue2Vyck1zZzoic2V0QXVkaW9TdGF0ZTpvayJ9fWZ1bmN0aW9uICRBKHthdWRpb0lkOmV9KXtsZXQgdD1Qc1tlXTtpZighdClyZXR1cm57ZXJyTXNnOiJnZXRBdWRpb1N0YXRlOmZhaWwifTtsZXR7c3JjOm4sc3RhcnRUaW1lOnIsdm9sdW1lOm99PXQ7cmV0dXJue2Vyck1zZzoiZ2V0QXVkaW9TdGF0ZTpvayIsZHVyYXRpb246MWUzKih0LmdldER1cmF0aW9uKCl8fDApLGN1cnJlbnRUaW1lOnQuaXNTdG9wcGVkPzA6MWUzKnQuZ2V0UG9zaXRpb24oKSxwYXVzZWQ6dC5pc1BhdXNlZCgpLHNyYzpuLHZvbHVtZTpvLHN0YXJ0VGltZToxZTMqcixidWZmZXJlZDoxZTMqdC5nZXRCdWZmZXJlZCgpfX1mdW5jdGlvbiBIQSh7b3BlcmF0aW9uVHlwZTplLGF1ZGlvSWQ6dCxjdXJyZW50VGltZTpufSl7bGV0IHI9UHNbdF07c3dpdGNoKGUpe2Nhc2UicGxheSI6Y2FzZSJwYXVzZSI6Y2FzZSJzdG9wIjpyW2U9PT0icGxheSImJnIuaXNQYXVzZWQoKT8icmVzdW1lIjplXSgpO2JyZWFrO2Nhc2Uic2VlayI6dHlwZW9mIG4hPSJ1bmRlZmluZWQiJiZyLnNlZWtUbyhuLzFlMyk7YnJlYWt9cmV0dXJue2Vyck1zZzoib3BlcmF0ZUF1ZGlvOm9rIn19bGV0IEt1PU9iamVjdC5jcmVhdGUobnVsbCksaGc9KHtzdGF0ZTplLGF1ZGlvSWQ6dCxlcnJNc2c6bixlcnJDb2RlOnJ9KT0+e2xldCBvPUt1W3RdO2lmKG8paWYoWHUobyxlLG4sciksZT09PSJwbGF5Iil7bGV0IGM9by5jdXJyZW50VGltZTtYdShvLCJ0aW1lVXBkYXRlIiksby5fX3RpbWluZz1oKCgpPT57by5jdXJyZW50VGltZSE9PWMmJlh1KG8sInRpbWVVcGRhdGUiKX0sTEEpfWVsc2UoZT09PSJwYXVzZSJ8fGU9PT0ic3RvcCJ8fGU9PT0iZXJyb3IiKSYmeShvLl9fdGltaW5nKX0sakE9W3tuYW1lOiJzcmMiLGNhY2hlOiEwfSx7bmFtZToic3RhcnRUaW1lIixkZWZhdWx0OjAsY2FjaGU6ITB9LHtuYW1lOiJhdXRvcGxheSIsZGVmYXVsdDohMSxjYWNoZTohMH0se25hbWU6Imxvb3AiLGRlZmF1bHQ6ITEsY2FjaGU6ITB9LHtuYW1lOiJvYmV5TXV0ZVN3aXRjaCIsZGVmYXVsdDohMCxyZWFkb25seTohMCxjYWNoZTohMH0se25hbWU6ImR1cmF0aW9uIixyZWFkb25seTohMH0se25hbWU6ImN1cnJlbnRUaW1lIixyZWFkb25seTohMH0se25hbWU6InBhdXNlZCIscmVhZG9ubHk6ITB9LHtuYW1lOiJidWZmZXJlZCIscmVhZG9ubHk6ITB9LHtuYW1lOiJ2b2x1bWUifSx7bmFtZToicGxheWJhY2tSYXRlIixjYWNoZTohMH1dO2NsYXNzIFp1e2NvbnN0cnVjdG9yKHQpe3RoaXMuaWQ9dCx0aGlzLl9jYWxsYmFja3M9e30sdGhpcy5fb3B0aW9ucz17fSxLZC5mb3JFYWNoKG49Pnt0aGlzLl9jYWxsYmFja3Nbbl09W119KSxqQS5mb3JFYWNoKG49PntsZXQgcj1uLm5hbWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMscix7Z2V0OigpPT57bGV0IG89bi5jYWNoZT90aGlzLl9vcHRpb25zOiRBKHthdWRpb0lkOnRoaXMuaWR9KSxjPXIgaW4gbz9vW3JdOm4uZGVmYXVsdDtyZXR1cm4gdHlwZW9mIGM9PSJudW1iZXIiJiZyIT09InZvbHVtZSI/Yy8xZTM6Y30sc2V0Om4ucmVhZG9ubHk/dm9pZCAwOm89Pnt0aGlzLl9vcHRpb25zW3JdPW8sVUEoei5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyx7YXVkaW9JZDp0aGlzLmlkfSkpfX0pfSksekEoKX1wbGF5KCl7dGhpcy5fb3BlcmF0ZSgicGxheSIpfXBhdXNlKCl7dGhpcy5fb3BlcmF0ZSgicGF1c2UiKX1zdG9wKCl7dGhpcy5fb3BlcmF0ZSgic3RvcCIpfXNlZWsodCl7dGhpcy5fb3BlcmF0ZSgic2VlayIse2N1cnJlbnRUaW1lOnQqMWUzfSl9ZGVzdHJveSgpe3kodGhpcy5fX3RpbWluZyksUHNbdGhpcy5pZF0mJihQc1t0aGlzLmlkXS5jbG9zZSgpLGRlbGV0ZSBQc1t0aGlzLmlkXSksZGVsZXRlIEt1W3RoaXMuaWRdfV9vcGVyYXRlKHQsbil7SEEoei5leHRlbmQoe30sbix7YXVkaW9JZDp0aGlzLmlkLG9wZXJhdGlvblR5cGU6dH0pKX19bGV0IHpBPUoub25jZSgoKT0+e0tkLmZvckVhY2goZT0+e1p1LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0KXt6LmlzRnVuY3Rpb24odCkmJnRoaXMuX2NhbGxiYWNrc1tlXS5wdXNoKHQpfX0pLFVfLmZvckVhY2goZT0+e1p1LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0KXtsZXQgbj10aGlzLl9jYWxsYmFja3NbZV0scj1uLmluZGV4T2YodCk7cj49MCYmbi5zcGxpY2UociwxKX19KX0pO2Z1bmN0aW9uIFh1KGUsdCxuLHIpe2xldCBvPWBvbiR7ei5jYXBpdGFsaXplKHQpfWA7ZS5fY2FsbGJhY2tzW29dLmZvckVhY2goYz0+e3ouaXNGdW5jdGlvbihjKSYmYyh0PT09ImVycm9yIj97ZXJyTXNnOm4sZXJyQ29kZTpyfTp7fSl9KX1sZXQgV0E9RHQocF8sKCk9PntsZXR7YXVkaW9JZDplfT1WQSgpLHQ9bmV3IFp1KGUpO3JldHVybiBLdVtlXT10LHR9KSxHQT1bImNhbnBsYXkiLCJwbGF5IiwicGF1c2UiLCJzdG9wIiwiZW5kZWQiLCJ0aW1lVXBkYXRlIiwicHJldiIsIm5leHQiLCJlcnJvciIsIndhaXRpbmciXSxnZz17Y2FucGxheTpbXSxwbGF5OltdLHBhdXNlOltdLHN0b3A6W10sZW5kZWQ6W10sdGltZVVwZGF0ZTpbXSxwcmV2OltdLG5leHQ6W10sZXJyb3I6W10sd2FpdGluZzpbXX0sbG4sUXU9bnVsbCxZQT0yNTAscUE9WyJwbGF5IiwicGF1c2UiLCJlbmRlZCIsInN0b3AiLCJjYW5wbGF5Il07ZnVuY3Rpb24gSkEoKXtNYygpLGVsKHtzdGF0ZToidGltZVVwZGF0ZSJ9KSxRdT1oKCgpPT57ZWwoe3N0YXRlOiJ0aW1lVXBkYXRlIn0pfSxZQSl9ZnVuY3Rpb24gTWMoKXtRdSE9PW51bGwmJnkoUXUpfWZ1bmN0aW9uIEtBKCl7aWYobG4pcmV0dXJuO2xldCBlPW90Lmludm9rZU9uQ2FsbGJhY2s7bG49cy5hdWRpby5jcmVhdGVQbGF5ZXIoe2F1dG9wbGF5OiEwLGJhY2tncm91bmRDb250cm9sOiEwfSksbG4uc3JjPWxuLnRpdGxlPWxuLmVwbmFtZT1sbi5zaW5nZXI9bG4uY292ZXJJbWdVcmw9bG4ud2ViVXJsPSIiLGxuLnN0YXJ0VGltZT0wLHFBLmZvckVhY2godD0+e2xuLmFkZEV2ZW50TGlzdGVuZXIodCwoKT0+e3Q9PT0icGxheSI/KGxuLmlzU3RvcHBlZD0hMSxKQSgpKTp0PT09InN0b3AiJiYobG4uaXNTdG9wcGVkPSEwKSwodD09PSJwYXVzZSJ8fHQ9PT0iZW5kZWQifHx0PT09InN0b3AiKSYmTWMoKTtsZXQgbj1gb25NdXNpYyR7dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSl9YDtlKG4se2RhdGFVcmw6bG4uc3JjLGVyck1zZzpgJHtufTpva2B9KSxlbCh7c3RhdGU6dCxkYXRhVXJsOmxuLnNyY30pfSl9KSxsbi5hZGRFdmVudExpc3RlbmVyKCJ3YWl0aW5nIiwoKT0+e01jKCksZWwoe3N0YXRlOiJ3YWl0aW5nIixkYXRhVXJsOmxuLnNyY30pfSksbG4uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHQ9PntNYygpLGUoIm9uTXVzaWNFcnJvciIse2RhdGFVcmw6bG4uc3JjLGVyck1zZzoiRXJyb3I6Iit0Lm1lc3NhZ2V9KSxlbCh7c3RhdGU6ImVycm9yIixkYXRhVXJsOmxuLnNyYyxlcnJNc2c6dC5tZXNzYWdlLGVyckNvZGU6dC5jb2RlfSl9KSxsbi5hZGRFdmVudExpc3RlbmVyKCJwcmV2IiwoKT0+e2VsKHtzdGF0ZToicHJldiJ9KX0pLGxuLmFkZEV2ZW50TGlzdGVuZXIoIm5leHQiLCgpPT57ZWwoe3N0YXRlOiJuZXh0In0pfSl9ZnVuY3Rpb24gWkEoKXtsZXQgZT17ZHVyYXRpb246MCxjdXJyZW50VGltZTowLHBhdXNlZDohMSxzcmM6IiIsYnVmZmVyZWQ6MCx0aXRsZToiIixlcG5hbWU6IiIsc2luZ2VyOiIiLGNvdmVySW1nVXJsOiIiLHdlYlVybDoiIixzdGFydFRpbWU6MCxlcnJNc2c6ImdldEJhY2tncm91bmRBdWRpb1N0YXRlOm9rIn07aWYobG4pe2xldCB0PXtkdXJhdGlvbjpsbi5nZXREdXJhdGlvbigpfHwwLGN1cnJlbnRUaW1lOmxuLmlzU3RvcHBlZD8wOmxuLmdldFBvc2l0aW9uKCkscGF1c2VkOmxuLmlzUGF1c2VkKCksc3JjOmxuLnNyYyxidWZmZXJlZDpsbi5nZXRCdWZmZXJlZCgpLHRpdGxlOmxuLnRpdGxlLGVwbmFtZTpsbi5lcG5hbWUsc2luZ2VyOmxuLnNpbmdlcixjb3ZlckltZ1VybDpsbi5jb3ZlckltZ1VybCx3ZWJVcmw6bG4ud2ViVXJsLHN0YXJ0VGltZTpsbi5zdGFydFRpbWV9O2U9ei5leHRlbmQoZSx0KX1yZXR1cm4gZX1mdW5jdGlvbiBwZyhlLHQpe0tBKCk7bGV0IG49WyJzcmMiLCJzdGFydFRpbWUiLCJjb3ZlckltZ1VybCIsIndlYlVybCIsInNpbmdlciIsImVwbmFtZSIsInRpdGxlIl07aWYodD09PSJwbGF5YmFja1JhdGUiKXtsZXQgbz1lW3RdO2xuLnBsYXliYWNrUmF0ZSYmbG4ucGxheWJhY2tSYXRlKHBhcnNlRmxvYXQobykpO3JldHVybn1sZXQgcj17fTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKG89PntpZihuLmluZGV4T2Yobyk+PTApe2xldCBjPWVbb107bz09PW5bMF0mJmMmJihjPWplKGMpKSxsbltvXT1yW29dPWN9fSksbG4uc2V0U3R5bGVzKHIpfWZ1bmN0aW9uIFhBKHtvcGVyYXRpb25UeXBlOmUsc3JjOnQscG9zaXRpb246bixhcGk6cj0ib3BlcmF0ZU11c2ljUGxheWVyIix0aXRsZTpvLGNvdmVySW1nVXJsOmN9KXt2YXIgZz1bInJlc3VtZSIsInBhdXNlIiwic3RvcCJdO3JldHVybiBnLmluZGV4T2YoZSk+MD9sbiYmbG5bZV0oKTplPT09InBsYXkiPyhwZyh7c3JjOnQsc3RhcnRUaW1lOm4sdGl0bGU6byxjb3ZlckltZ1VybDpjfSksbG4ucGxheSgpKTplPT09InNlZWsiJiZsbiYmbG4uc2Vla1RvKG4pLHtlcnJNc2c6YCR7cn06b2tgfX1mdW5jdGlvbiBRQSh7b3BlcmF0aW9uVHlwZTplLHNyYzp0LHN0YXJ0VGltZTpuLGN1cnJlbnRUaW1lOnJ9KXtyZXR1cm4gWEEoe29wZXJhdGlvblR5cGU6ZSxzcmM6dCxwb3NpdGlvbjpufHxyfHwwLGFwaToib3BlcmF0ZUJhY2tncm91bmRBdWRpbyJ9KX1mdW5jdGlvbiBlbCh7c3RhdGU6ZSxlcnJNc2c6dCxlcnJDb2RlOm4sZGF0YVVybDpyfSl7Z2dbZV0uZm9yRWFjaChvPT57ei5pc0Z1bmN0aW9uKG8pJiZvKGU9PT0iZXJyb3IiP3tlcnJNc2c6dCxlcnJDb2RlOm59Ont9KX0pfWxldCBlTz1KLm9uY2UoKCk9PntHQS5mb3JFYWNoKGU9Pnt2Zy5wcm90b3R5cGVbYG9uJHt6LmNhcGl0YWxpemUoZSl9YF09ZnVuY3Rpb24odCl7Z2dbZV0ucHVzaCh0KX19KX0pLHRPPVt7bmFtZToiZHVyYXRpb24iLHJlYWRvbmx5OiEwfSx7bmFtZToiY3VycmVudFRpbWUiLHJlYWRvbmx5OiEwfSx7bmFtZToicGF1c2VkIixyZWFkb25seTohMH0se25hbWU6InNyYyIsY2FjaGU6ITB9LHtuYW1lOiJzdGFydFRpbWUiLGRlZmF1bHQ6MCxjYWNoZTohMH0se25hbWU6ImJ1ZmZlcmVkIixyZWFkb25seTohMH0se25hbWU6InRpdGxlIixjYWNoZTohMH0se25hbWU6ImVwbmFtZSIsY2FjaGU6ITB9LHtuYW1lOiJzaW5nZXIiLGNhY2hlOiEwfSx7bmFtZToiY292ZXJJbWdVcmwiLGNhY2hlOiEwfSx7bmFtZToid2ViVXJsIixjYWNoZTohMH0se25hbWU6InByb3RvY29sIixyZWFkb25seTohMCxkZWZhdWx0OiJodHRwIn0se25hbWU6InBsYXliYWNrUmF0ZSIsZGVmYXVsdDoxLGNhY2hlOiEwfV07Y2xhc3Mgdmd7Y29uc3RydWN0b3IoKXt0aGlzLl9vcHRpb25zPXt9LHRPLmZvckVhY2godD0+e2xldCBuPXQubmFtZTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxuLHtnZXQ6KCk9PntsZXQgcj10LmNhY2hlP3RoaXMuX29wdGlvbnM6WkEoKTtyZXR1cm4gbiBpbiByP3Jbbl06dC5kZWZhdWx0fSxzZXQ6dC5yZWFkb25seT92b2lkIDA6cj0+e3RoaXMuX29wdGlvbnNbbl09cixwZyh0aGlzLl9vcHRpb25zLG4pfX0pfSksZU8oKX1wbGF5KCl7dGhpcy5fb3BlcmF0ZSgicGxheSIpfXBhdXNlKCl7dGhpcy5fb3BlcmF0ZSgicGF1c2UiKX1zdG9wKCl7dGhpcy5fb3BlcmF0ZSgic3RvcCIpfXNlZWsodCl7dGhpcy5fb3BlcmF0ZSgic2VlayIse2N1cnJlbnRUaW1lOnR9KX1fb3BlcmF0ZSh0LG4pe1FBKHouZXh0ZW5kKHt9LG4se29wZXJhdGlvblR5cGU6dH0pKX19bGV0IG1nLG5PPUR0KHhiLCgpPT5tZ3x8KG1nPW5ldyB2ZykpO2NsYXNzIHJPe2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pZD10LHRoaXMuY3R4PW59c3RhcnQodCl7cmV0dXJuIFl0KHRoaXMuY3R4LCJzdGFydCIsdCl9c3RvcCh0KXtyZXR1cm4gWXQodGhpcy5jdHgsInN0b3AiLHQpfXBhdXNlKHQpe3JldHVybiBZdCh0aGlzLmN0eCwicGF1c2UiLHQpfXJlc3VtZSh0KXtyZXR1cm4gWXQodGhpcy5jdHgsInJlc3VtZSIsdCl9c3dpdGNoQ2FtZXJhKHQpe3JldHVybiBZdCh0aGlzLmN0eCwic3dpdGNoQ2FtZXJhIix0KX1zbmFwc2hvdCh0KXtyZXR1cm4gWXQodGhpcy5jdHgsInNuYXBzaG90Iix0KX10b2dnbGVUb3JjaCh0KXtyZXR1cm4gWXQodGhpcy5jdHgsInRvZ2dsZVRvcmNoIix0KX1wbGF5QkdNKHQpe3JldHVybiBqdCh0aGlzLmN0eCwicGxheUJHTSIsdCl9c3RvcEJHTSh0KXtyZXR1cm4gWXQodGhpcy5jdHgsInN0b3BCR00iLHQpfXBhdXNlQkdNKHQpe3JldHVybiBZdCh0aGlzLmN0eCwicGF1c2VCR00iLHQpfXJlc3VtZUJHTSh0KXtyZXR1cm4gWXQodGhpcy5jdHgsInJlc3VtZUJHTSIsdCl9c2V0QkdNVm9sdW1lKHQpe3JldHVybiBqdCh0aGlzLmN0eCwic2V0QkdNVm9sdW1lIix0KX1zdGFydFByZXZpZXcodCl7cmV0dXJuIFl0KHRoaXMuY3R4LCJzdGFydFByZXZpZXciLHQpfXN0b3BQcmV2aWV3KHQpe3JldHVybiBZdCh0aGlzLmN0eCwic3RvcFByZXZpZXciLHQpfX1mdW5jdGlvbiBJcyhlLHQsbixyKXtvdC5pbnZva2VWaWV3TWV0aG9kKCJsaXZlcHVzaGVyLiIrZSx7bGl2ZVB1c2hlcklkOmUsdHlwZTpuLGRhdGE6cn0sdCl9Y2xhc3MgaU97Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1zdGFydCgpe0lzKHRoaXMuaWQsdGhpcy5wYWdlSWQsInN0YXJ0Iil9c3RvcCgpe0lzKHRoaXMuaWQsdGhpcy5wYWdlSWQsInN0b3AiKX1wYXVzZSgpe0lzKHRoaXMuaWQsdGhpcy5wYWdlSWQsInBhdXNlIil9cmVzdW1lKCl7SXModGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVzdW1lIil9c3dpdGNoQ2FtZXJhKCl7SXModGhpcy5pZCx0aGlzLnBhZ2VJZCwic3dpdGNoQ2FtZXJhIil9c3RhcnRQcmV2aWV3KCl7SXModGhpcy5pZCx0aGlzLnBhZ2VJZCwicHJldmlldyIpfXN0b3BQcmV2aWV3KCl7SXModGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RvcCIpfXNuYXBzaG90KCl7SXModGhpcy5pZCx0aGlzLnBhZ2VJZCwic25hcHNob3QiKX19bGV0IG9PPUR0KHZfLChlLHQpPT57aWYodC4kcGFnZS5tZXRhLmlzTlZ1ZSl7aWYoIXQpcmV0dXJuIGNvbnNvbGUud2FybigidW5pLmNyZWF0ZUxpdmVQdXNoZXJDb250ZXh0OiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgMSBwcmVzZW50Iik7bGV0IG49VXQoZSx0KTtyZXR1cm4gbj9uZXcgck8oZSxuKTpjb25zb2xlLndhcm4oIkNhbiBub3QgZmluZCBgIitlKyJgIil9cmV0dXJuIG5ldyBpTyhlLHQuJHBhZ2UuaWQpfSxtXyksUGk9My4xNDE1OTI2NTM1ODk3OTMsRGM9NjM3ODI0NSxMYz0uMDA2NjkzNDIxNjIyOTY1OTQzO2Z1bmN0aW9uIGFPKGUsdCl7aWYodD0rdCxlPStlLF9nKGUsdCkpcmV0dXJuW2UsdF07bGV0IG49YmcoZS0xMDUsdC0zNSkscj15ZyhlLTEwNSx0LTM1KSxvPXQvMTgwKlBpLGM9TWF0aC5zaW4obyk7Yz0xLUxjKmMqYztsZXQgZz1NYXRoLnNxcnQoYyk7bj1uKjE4MC8oRGMqKDEtTGMpLyhjKmcpKlBpKSxyPXIqMTgwLyhEYy9nKk1hdGguY29zKG8pKlBpKTtsZXQgYj10K24sVj1lK3I7cmV0dXJuW2UqMi1WLHQqMi1iXX1mdW5jdGlvbiBzTyhlLHQpe2lmKHQ9K3QsZT0rZSxfZyhlLHQpKXJldHVybltlLHRdO2xldCBuPWJnKGUtMTA1LHQtMzUpLHI9eWcoZS0xMDUsdC0zNSksbz10LzE4MCpQaSxjPU1hdGguc2luKG8pO2M9MS1MYypjKmM7bGV0IGc9TWF0aC5zcXJ0KGMpO249bioxODAvKERjKigxLUxjKS8oYypnKSpQaSkscj1yKjE4MC8oRGMvZypNYXRoLmNvcyhvKSpQaSk7bGV0IGI9dCtuO3JldHVybltlK3IsYl19bGV0IF9nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8NzIuMDA0fHxlPjEzNy44MzQ3fHx0PC44MjkzfHx0PjU1LjgyNzF8fCExfSxiZz1mdW5jdGlvbihlLHQpe2xldCBuPS0xMDArMiplKzMqdCsuMip0KnQrLjEqZSp0Ky4yKk1hdGguc3FydChNYXRoLmFicyhlKSk7cmV0dXJuIG4rPSgyMCpNYXRoLnNpbig2KmUqUGkpKzIwKk1hdGguc2luKDIqZSpQaSkpKjIvMyxuKz0oMjAqTWF0aC5zaW4odCpQaSkrNDAqTWF0aC5zaW4odC8zKlBpKSkqMi8zLG4rPSgxNjAqTWF0aC5zaW4odC8xMipQaSkrMzIwKk1hdGguc2luKHQqUGkvMzApKSoyLzMsbn0seWc9ZnVuY3Rpb24oZSx0KXtsZXQgbj0zMDArZSsyKnQrLjEqZSplKy4xKmUqdCsuMSpNYXRoLnNxcnQoTWF0aC5hYnMoZSkpO3JldHVybiBuKz0oMjAqTWF0aC5zaW4oNiplKlBpKSsyMCpNYXRoLnNpbigyKmUqUGkpKSoyLzMsbis9KDIwKk1hdGguc2luKGUqUGkpKzQwKk1hdGguc2luKGUvMypQaSkpKjIvMyxuKz0oMTUwKk1hdGguc2luKGUvMTIqUGkpKzMwMCpNYXRoLnNpbihlLzMwKlBpKSkqMi8zLG59O2Z1bmN0aW9uIEVnKGUsdCxuKXtsZXQgcj10LmNvb3JkcztpZihlIT09dC5jb29yZHNUeXBlKXtsZXQgbztlPT09Indnczg0Ij9vPWFPKHIubG9uZ2l0dWRlLHIubGF0aXR1ZGUpOmU9PT0iZ2NqMDIiJiYobz1zTyhyLmxvbmdpdHVkZSxyLmxhdGl0dWRlKSksbyYmKHIubG9uZ2l0dWRlPW9bMF0sci5sYXRpdHVkZT1vWzFdKX1uKHt0eXBlOmUsYWx0aXR1ZGU6ci5hbHRpdHVkZXx8MCxsYXRpdHVkZTpyLmxhdGl0dWRlLGxvbmdpdHVkZTpyLmxvbmdpdHVkZSxzcGVlZDpyLnNwZWVkLGFjY3VyYWN5OnIuYWNjdXJhY3ksYWRkcmVzczp0LmFkZHJlc3MsZXJyTXNnOiJnZXRMb2NhdGlvbjpvayJ9KX1sZXQgbE89VGUocHksKHt0eXBlOmU9Indnczg0IixnZW9jb2RlOnQ9ITEsYWx0aXR1ZGU6bj0hMSxoaWdoQWNjdXJhY3lFeHBpcmVUaW1lOnIsaXNIaWdoQWNjdXJhY3k6bz0hMX0se3Jlc29sdmU6YyxyZWplY3Q6Z30pPT57cy5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oYj0+e0VnKGUsYixjKX0sYj0+e2lmKGIuY29kZT09PTE1MDEpe0VnKGUsYixjKTtyZXR1cm59ZygiZ2V0TG9jYXRpb246ZmFpbCAiK2IubWVzc2FnZSl9LHtnZW9jb2RlOnQsZW5hYmxlSGlnaEFjY3VyYWN5Om98fG4sdGltZW91dDpyLGNvb3Jkc1R5cGU6ZX0pfSxteSx2eSksY089VGUoaHksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IG89V2goKSE9PSJsaWdodCIsYyxnPVlpKHt1cmw6Il9fdW5pYXBwY2hvb3NlbG9jYXRpb24iLGRhdGE6ei5leHRlbmQoe30sZSx7bG9jYWxlOktsKCl9KSxzdHlsZTp7YW5pbWF0aW9uVHlwZTplLmFuaW1hdGlvblR5cGV8fCJzbGlkZS1pbi1ib3R0b20iLHRpdGxlTlZpZXc6ITEscG9wR2VzdHVyZToiY2xvc2UiLHNjcm9sbEluZGljYXRvcjoibm9uZSJ9LG9uTWVzc2FnZSh7ZXZlbnQ6YixkZXRhaWw6Vn0pe2I9PT0ic2VsZWN0ZWQiJiYoYz1WKX0sb25DbG9zZSgpe28mJnMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIiksYz90KGMpOm4oImNhbmNlbCIpfX0pO28mJihzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgibGlnaHQiKSxnLndlYnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigicG9wR2VzdHVyZSIsKHt0eXBlOmIscmVzdWx0OlZ9KT0+e2I9PT0ic3RhcnQiP3MubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIik6Yj09PSJlbmQiJiYhViYmcy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImxpZ2h0Iil9KSl9LGd5KSx1Tz1UZShfeSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PihZaSh7dXJsOiJfX3VuaWFwcG9wZW5sb2NhdGlvbiIsZGF0YTp6LmV4dGVuZCh7fSxlLHtsb2NhbGU6S2woKX0pLHN0eWxlOnt0aXRsZU5WaWV3Ont0eXBlOiJ0cmFuc3BhcmVudCJ9LHBvcEdlc3R1cmU6ImNsb3NlIixiYWNrQnV0dG9uQXV0b0NvbnRyb2w6ImNsb3NlIn0sb25DbG9zZSgpe24oImNhbmNlbCIpfX0pLHQoKSkseXksYnkpLEZjPSExLHNjPTAsZk89VGUoYkUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57c2M9c2N8fHMuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihyPT57RmM9ITAsb3QuaW52b2tlT25DYWxsYmFjayhDaCxyLmNvb3Jkcyl9LHI9PntGY3x8KG4oci5tZXNzYWdlKSxGYz0hMCksb3QuaW52b2tlT25DYWxsYmFjayhBaCx7ZXJyTXNnOmBvbkxvY2F0aW9uQ2hhbmdlOmZhaWwgJHtyLm1lc3NhZ2V9YH0pfSx7Y29vcmRzVHlwZTplPT1udWxsP3ZvaWQgMDplLnR5cGV9KSxOKHQsMTAwKX0sd0UsQ0UpLGRPPVRlKHlFLChlLHtyZXNvbHZlOnR9KT0+e3NjJiYocy5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHNjKSxGYz0hMSxzYz0wKSx0KCl9KSxoTz1wbihDaCwoKT0+e30pLGdPPVhyKEVFLCgpPT57fSkscE89cG4oQWgsKCk9Pnt9KSx2Tz1YcihTRSwoKT0+e30pLG1PPVRlKGxTLCh7dGl0bGU6ZT0iIixjb250ZW50OnQ9IiIsc2hvd0NhbmNlbDpuPSEwLGNhbmNlbFRleHQ6cixjYW5jZWxDb2xvcjpvLGNvbmZpcm1UZXh0OmMsY29uZmlybUNvbG9yOmcsZWRpdGFibGU6Yj0hMSxwbGFjZWhvbGRlclRleHQ6Vj0iIn09e30se3Jlc29sdmU6VH0pPT57bGV0IEw9bj9bcixjXTpbY10sX2U9Yj9WOkw7dD10fHwiICIscy5uYXRpdmVVSVtiPyJwcm9tcHQiOiJjb25maXJtIl0odCx3ZT0+e2lmKG4pe2xldCBQZT13ZS5pbmRleD09PTEsZnQ9e2NvbmZpcm06UGUsY2FuY2VsOndlLmluZGV4PT09MHx8d2UuaW5kZXg9PT0tMX07UGUmJmImJihmdC5jb250ZW50PXdlLnZhbHVlKSxUKGZ0KX1lbHNle2xldCBQZT17Y29uZmlybTp3ZS5pbmRleD09PTAsY2FuY2VsOiExfTtiJiYoUGUuY29udGVudD13ZS52YWx1ZSksVChQZSl9fSxlLF9lLEwpfSxjUyx1UyksX089e2xpZ2h0OntpdGVtQ29sb3I6IiMwMDAwMDAifSxkYXJrOntpdGVtQ29sb3I6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSJ9fSxiTz1UZShuUywoe2l0ZW1MaXN0OmU9W10saXRlbUNvbG9yOnQsdGl0bGU6bj0iIixwb3BvdmVyOnJ9LHtyZXNvbHZlOm8scmVqZWN0OmN9KT0+e3Q9PT0iIzAwMCImJlIuZGFya21vZGUmJih0PV9PW3MubmF2aWdhdG9yLmdldFVJU3R5bGUoKV0uaXRlbUNvbG9yKSxrdCgpO2xldHt0Omd9PWFlKCksYj17dGl0bGU6bixjYW5jZWw6ZygidW5pLnNob3dBY3Rpb25TaGVldC5jYW5jZWwiKSxidXR0b25zOmUubWFwKFY9Pih7dGl0bGU6Vixjb2xvcjp0fSkpfTtzLm5hdGl2ZVVJLmFjdGlvblNoZWV0KHouZXh0ZW5kKGIse3BvcG92ZXI6cn0pLFY9PntWLmluZGV4PjA/byh7dGFwSW5kZXg6Vi5pbmRleC0xfSk6Yygic2hvd0FjdGlvblNoZWV0OmZhaWwgY2FuY2VsIil9KX0sclMsaVMpLGxjLGVmPSExLFZjPSIiLFVjLHlPPVRlKG9TLChlLHQpPT5TZyh6LmV4dGVuZCh7fSxlLHt0eXBlOiJsb2FkaW5nIixpY29uOiJsb2FkaW5nIn0pLHQpLGFTLHNTKSxTZz0oe3RpdGxlOmU9IiIsaWNvbjp0PSJzdWNjZXNzIixpbWFnZTpuPSIiLGR1cmF0aW9uOnI9MTUwMCxtYXNrOm89ITEscG9zaXRpb246Yyx0eXBlOmc9InRvYXN0IixzdHlsZTpifSx7cmVzb2x2ZTpWLHJlamVjdDpUfSk9PntpZigkYygiIiksVmM9ZyxbInRvcCIsImNlbnRlciIsImJvdHRvbSJdLmluY2x1ZGVzKFN0cmluZyhjKSkpcy5uYXRpdmVVSS50b2FzdChlLHt2ZXJ0aWNhbEFsaWduOmN9KSxlZj0hMDtlbHNle3QmJiF+WyJzdWNjZXNzIiwibG9hZGluZyIsImVycm9yIiwibm9uZSJdLmluZGV4T2YodCkmJih0PSJzdWNjZXNzIik7bGV0IEw9e21vZGFsOm8sYmFjazoidHJhbnNtaXQiLHBhZGRpbmc6IjEwcHgiLHNpemU6IjE2cHgifTshbiYmKCF0fHx0PT09Im5vbmUiKT9MLmxvYWRpbmc9e2Rpc3BsYXk6Im5vbmUifTooTC53aWR0aD0iMTQwcHgiLEwuaGVpZ2h0PSIxMTJweCIpLG4/TC5sb2FkaW5nPXtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OiI1NXB4IixpY29uOm4saW50ZXJ2YWw6cn06WyJzdWNjZXNzIiwiZXJyb3IiXS5pbmRleE9mKHQpIT09LTEmJihMLmxvYWRpbmc9e2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6IjU1cHgiLGljb246dD09PSJzdWNjZXNzIj8iX191bmlhcHBzdWNjZXNzLnBuZyI6Il9fdW5pYXBwZXJyb3IucG5nIixpbnRlcnZhbDpyfSk7dHJ5e2xjPXMubmF0aXZlVUkuc2hvd1dhaXRpbmcoZSx6LmV4dGVuZChMLGIpKX1jYXRjaChfZSl7VChgJHtfZX1gKX19cmV0dXJuIFZjPT09InRvYXN0IiYmKFVjPU4oKCk9PnskYygiIil9LHIpKSxWKCl9LEVPPVRlKGZTLFNnLGhTLGdTKSxTTz1UZSh6RSwoZSx0KT0+JGMoInRvYXN0Iix0KSksd089VGUoakUsKGUsdCk9PiRjKCJsb2FkaW5nIix0KSk7ZnVuY3Rpb24gJGMoZT0idG9hc3QiLHQpe3JldHVybiBlJiZlIT09VmN8fChVYyYmKEUoVWMpLFVjPW51bGwpLGVmP3MubmF0aXZlVUkuY2xvc2VUb2FzdCgpOmxjJiZsYy5jbG9zZSYmbGMuY2xvc2UoKSxsYz1udWxsLGVmPSExLFZjPSIiKSx0JiZ0LnJlc29sdmUoKX1sZXQgQ089VGUocFMsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9emgoKTtpZihyJiZyLmVuZFB1bGxUb1JlZnJlc2goKSxyPVJjKCksIXIpcmV0dXJuIG4oKTtyLmJlZ2luUHVsbFRvUmVmcmVzaCgpLHp1KHIpLHQoKX0pLEFPPVRlKHZTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPXpoKCl8fFJjKCk7aWYoIXIpcmV0dXJuIG4oKTtyLmVuZFB1bGxUb1JlZnJlc2goKSx6dShudWxsKSx0KCl9KSxPTz1UZShOaCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1GbihicigpKTtvdC5pbnZva2VWaWV3TWV0aG9kKE5oLGUscixvPT57bz9uKG8pOnQoKX0pfSxXRSksVE89VGUoa2gsKGUse3Jlc29sdmU6dH0pPT57bGV0IG49Rm4oYnIoKSk7b3QuaW52b2tlVmlld01ldGhvZChraCxlLG4sdCl9LGVTLHRTKSxQTz1UZShLRSwoe19fcGFnZV9fOmUsdGl0bGU6dH0se3Jlc29sdmU6bixyZWplY3Q6cn0pPT57bGV0IG89SGgoZSk7aWYobyl7bGV0IGM9by5nZXRTdHlsZSgpO2MmJmMudGl0bGVOVmlldyYmby5zZXRTdHlsZSh7dGl0bGVOVmlldzp7dGl0bGVUZXh0OnR9fSksbigpfWVsc2UgcigpfSxaRSksSU89VGUoWEUsKGUse3Jlc29sdmU6dH0pPT57cy5uYXRpdmVVSS5zaG93V2FpdGluZygiIix7bW9kYWw6ITF9KSx0KCl9KSxOTz1UZShRRSwoZSx7cmVzb2x2ZTp0fSk9PntzLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpLHQoKX0pO2Z1bmN0aW9uIGtPKGUpe2xldCB0PUluKCk7IXQubGVuZ3RofHwodFt0Lmxlbmd0aC0xXS4kcGFnZS5zdGF0dXNCYXJTdHlsZT1lKX1sZXQgUk89VGUoWUUsKHtfX3BhZ2VfXzplLGZyb250Q29sb3I6dCxiYWNrZ3JvdW5kQ29sb3I6bn0se3Jlc29sdmU6cixyZWplY3Q6b30pPT57bGV0IGM9SGgoZSk7aWYoYyl7bGV0IGc9e307dCYmKGcudGl0bGVDb2xvcj10KSxuJiYoZy5iYWNrZ3JvdW5kQ29sb3I9bik7bGV0IGI9dD09PSIjMDAwMDAwIj8iZGFyayI6ImxpZ2h0IjtzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZShiKSxrTyhiKTtsZXQgVj1jLmdldFN0eWxlKCk7ViYmVi50aXRsZU5WaWV3JiYoVi50aXRsZU5WaWV3LmF1dG9CYWNrQnV0dG9uJiYoZy5iYWNrQnV0dG9uPWcuYmFja0J1dHRvbnx8e30sZy5iYWNrQnV0dG9uLmNvbG9yPXQpLGMuc2V0U3R5bGUoe3RpdGxlTlZpZXc6Z30pKSxyKCl9ZWxzZSBvKCl9LEpFLHFFKSx4Tz1UZShEUywoe2luZGV4OmUsdGV4dDp0fSx7cmVzb2x2ZTpuLHJlamVjdDpyfSk9PntkaS5zZXRUYWJCYXJCYWRnZSgidGV4dCIsZSx0KSxuKCl9LExTLEZTKSxCTz1UZShtUywoe2luZGV4OmUsdGV4dDp0LGljb25QYXRoOm4sc2VsZWN0ZWRJY29uUGF0aDpyLHBhZ2VQYXRoOm8sdmlzaWJsZTpjLGljb25mb250Omd9LHtyZXNvbHZlOmJ9KT0+e2lmKGRpLnNldFRhYkJhckl0ZW0oZSx0LG4scixjLGcpLG8pe2xldCBWPVIudGFiQmFyLmxpc3RbZV07aWYoVil7bGV0IFQ9Vi5wYWdlUGF0aCxMPUoucmVtb3ZlTGVhZGluZ1NsYXNoKG8pO0whPT1UJiZhcyhlLFQsTCl9fWIoKX0sX1MsYlMpLE1PPVRlKHlTLChlPXt9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2lmKCF0YygpKXJldHVybiBuKCJub3QgVGFiQmFyIHBhZ2UiKTtlLmJvcmRlclN0eWxlPUoubm9ybWFsaXplVGFiQmFyU3R5bGVzKGUuYm9yZGVyU3R5bGUpLGRpLnNldFRhYkJhclN0eWxlKGUpLHQoKX0sRVMsd1MpLERPPVRlKENTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWUmJmUuYW5pbWF0aW9uO2lmKCF0YygpKXJldHVybiBuKCJub3QgVGFiQmFyIHBhZ2UiKTtkaS5oaWRlVGFiQmFyKEJvb2xlYW4ocikpLHQoKX0sUmgpLExPPVRlKEFTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWUmJmUuYW5pbWF0aW9uO2lmKCF0YygpKXJldHVybiBuKCJub3QgVGFiQmFyIHBhZ2UiKTtkaS5zaG93VGFiQmFyKEJvb2xlYW4ocikpLHQoKX0sT1MpLEZPPVRlKE5TLCh7aW5kZXg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57ZGkuc2V0VGFiQmFyQmFkZ2UoInJlZERvdCIsZSksdCgpfSxrUyxSUyksd2c9ZT0+ZGkuc2V0VGFiQmFyQmFkZ2UoIm5vbmUiLGUpLFZPPVRlKHhTLCh7aW5kZXg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57d2coZSksdCgpfSxCUyxNUyksVU89VGUoVFMsKHtpbmRleDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9Pnt3ZyhlKSx0KCl9LFBTLElTKSxDZz0idmRTeW5jIiwkTz0iX191bmlhcHBfX3NlcnZpY2UiLFJsPSJvbldlYnZpZXdSZWFkeSIsSE89MCxqTz0id2Vidmlld0luc2VydGVkIix6Tz0id2Vidmlld1JlbW92ZWQiLEFnPSJVbmlBcHBTdWJOVnVlIjtjbGFzcyBXT3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuY2FsbGJhY2tzPVtdO2xldCByPXRoaXMud2Vidmlldz1zLndlYnZpZXcuZ2V0V2Vidmlld0J5SWQodCk7aWYodGhpcy5pc1N1Yj1ufHwhMSxyLl9fdW5pYXBwX21hc2tfaWQpe2xldCBvPXRoaXMubWFza1dlYnZpZXc9ci5fX3VuaWFwcF9tYXNrX2lkPT09IjAiP3tzZXRTdHlsZSh7bWFzazpnfSl7Sm8oInVuaS10YWJ2aWV3Iikuc2V0TWFzayh7Y29sb3I6Z30pfX06cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHIuX191bmlhcHBfbWFza19pZCksYz1mdW5jdGlvbigpe28uc2V0U3R5bGUoe21hc2s6Im5vbmUifSl9O3IuYWRkRXZlbnRMaXN0ZW5lcigiaGlkZSIsYyksci5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsYyl9fXNob3coLi4udCl7aWYodGhpcy5tYXNrV2Vidmlldyl7bGV0IG49dGhpcy53ZWJ2aWV3Ll9fdW5pYXBwX21hc2s7dGhpcy5tYXNrV2Vidmlldy5zZXRTdHlsZSh7bWFzazpufSl9dGhpcy53ZWJ2aWV3LnNob3coLi4udCl9aGlkZSguLi50KXt0aGlzLndlYnZpZXcuaGlkZSguLi50KX1zZXRTdHlsZSh0KXt0aGlzLndlYnZpZXcuc2V0U3R5bGUodCl9aW5pdE1lc3NhZ2UoKXtpZih0aGlzLm1lc3NhZ2VSZWFkeSlyZXR1cm47dGhpcy5tZXNzYWdlUmVhZHk9ITA7bGV0IHQ9cj0+e2lmKHIuZGF0YSYmci5kYXRhLnR5cGU9PT1BZyl7bGV0IG89ci5kYXRhLnRhcmdldDtvLmlkPT09dGhpcy53ZWJ2aWV3LmlkJiZvLmlzU3ViPT09dGhpcy5pc1N1YiYmdGhpcy5jYWxsYmFja3MuZm9yRWFjaChjPT57Yyh7b3JpZ2luOnRoaXMud2Vidmlldy5fX3VuaWFwcF9ob3N0LGRhdGE6ci5kYXRhLmRhdGF9KX0pfX07Sm8oImdsb2JhbEV2ZW50IikuYWRkRXZlbnRMaXN0ZW5lcigicGx1c01lc3NhZ2UiLHQpLHRoaXMud2Vidmlldy5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9Pnt0aGlzLmNhbGxiYWNrcy5sZW5ndGg9MH0pfXBvc3RNZXNzYWdlKHQpe3Mud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcoe3R5cGU6QWcsZGF0YTp0LHRhcmdldDp7aWQ6dGhpcy53ZWJ2aWV3LmlkLGlzU3ViOiF0aGlzLmlzU3VifX0sJE8pfW9uTWVzc2FnZSh0KXt0aGlzLmluaXRNZXNzYWdlKCksdGhpcy5jYWxsYmFja3MucHVzaCh0KX19bGV0IEdPPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBXTyhlLHQpfTtmdW5jdGlvbiBZTyhlLHQsbixyLG8sYyxnKXtzIT09biYmKHc9aG49ZSxmPXQscz1uLHp3KHMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKSxzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZT1GaCxOPXIsRT1vLGg9Yyx5PWcpLFIuc2VydmljZVJlYWR5PSEwfWZ1bmN0aW9uIHFPKCl7bGV0IGU9WyJBcnJheUJ1ZmZlciIsIkludDhBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIkludDE2QXJyYXkiLCJVaW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkJpZ0ludDY0QXJyYXkiLCJCaWdVaW50NjRBcnJheSJdLHQ9e307Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCByPWVbbl07dFtyXT1nbG9iYWxbcl19cmV0dXJuIHR9ZnVuY3Rpb24gSk8oZSl7ei5leHRlbmQoZ2xvYmFsLGUpfWxldCBPZz17b2F1dGgoZSl7cy5vYXV0aC5nZXRTZXJ2aWNlcyh0PT57dD10O2xldCBuPVtdO3QuZm9yRWFjaCgoe2lkOnJ9KT0+e24ucHVzaChyKX0pLGUobnVsbCxuLHQpfSx0PT57dD10LGUodCl9KX0sc2hhcmUoZSl7cy5zaGFyZS5nZXRTZXJ2aWNlcyh0PT57dD10O2xldCBuPVtdO3QuZm9yRWFjaCgoe2lkOnJ9KT0+e24ucHVzaChyKX0pLGUobnVsbCxuLHQpfSx0PT57ZSh0KX0pfSxwYXltZW50KGUpe3MucGF5bWVudC5nZXRDaGFubmVscyh0PT57bGV0IG49W107dC5mb3JFYWNoKCh7aWQ6cn0pPT57bi5wdXNoKHIpfSksZShudWxsLG4sdCl9LHQ9PntlKHQpfSl9LHB1c2goZSl7aWYodHlwZW9mIGYhPSJ1bmRlZmluZWQifHx0eXBlb2YgcyE9InVuZGVmaW5lZCIpe2xldCB0PXMucHVzaC5nZXRDbGllbnRJbmZvKCk7ZShudWxsLFt0LmlkXSxbdF0pfWVsc2UgZShudWxsLFtdKX19LEtPPVRlKFZTLCh7c2VydmljZTplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntPZ1tlXT9PZ1tlXSgocixvPVtdLGM9W10pPT57cj9uKHIubWVzc2FnZSk6dCh7c2VydmljZTplLHByb3ZpZGVyOm8scHJvdmlkZXJzOmMubWFwKGc9Pih0eXBlb2YgZy5zZXJ2aWNlUmVhZHk9PSJib29sZWFuIiYmKGcuaXNBcHBFeGlzdD1nLnNlcnZpY2VSZWFkeSksdHlwZW9mIGcubmF0aXZlQ2xpZW50PT0iYm9vbGVhbiImJihnLmlzQXBwRXhpc3Q9Zy5uYXRpdmVDbGllbnQpLGcpKX0pfSk6bigic2VydmljZSBub3QgZm91bmQiKX0sVVMpLEhjO2Z1bmN0aW9uIGNjKGUpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e3Mub2F1dGguZ2V0U2VydmljZXMocj0+e2xldCBvPXIuZmluZCgoe2lkOmN9KT0+Yz09PWUpO28/dChvKTpuKG5ldyBFcnJvcigicHJvdmlkZXIgbm90IGZpbmQiKSl9LG4pfSl9bGV0IFRnPVRlKCRTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWUucHJvdmlkZXJ8fCJ3ZWl4aW4iLG89ZHIobiksYz1yPT09ImFwcGxlIixnPWM/e3Njb3BlOiJlbWFpbCJ9OmUudW5pdmVyaWZ5U3R5bGU/e3VuaXZlcmlmeVN0eWxlOlFPKGUudW5pdmVyaWZ5U3R5bGUsbyl9Ont9O2NjKHIpLnRoZW4oYj0+e2Z1bmN0aW9uIFYoKXtpZihlLm9ubHlBdXRob3JpemUmJnI9PT0id2VpeGluIil7Yi5hdXRob3JpemUoKHtjb2RlOlR9KT0+e3Qoe2NvZGU6VCxhdXRoUmVzdWx0OiIifSl9LG8pO3JldHVybn1iLmxvZ2luKFQ9PntsZXQgTD1ULnRhcmdldC5hdXRoUmVzdWx0LF9lPVQudGFyZ2V0LmFwcGxlSW5mbzt0KHtjb2RlOkwuY29kZSxhdXRoUmVzdWx0OkwsYXBwbGVJbmZvOl9lfSl9LG8sZyl9Y3x8cj09PSJ1bml2ZXJpZnkiP1YoKTpiLmxvZ291dChWLFYpfSkuY2F0Y2gobyl9LEhTKSxQZz0oZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lLnByb3ZpZGVyfHwid2VpeGluIixvPWRyKG4pO2NjKHIpLnRoZW4oYz0+e2MuZ2V0VXNlckluZm8oZz0+e2xldCBiPXtuaWNrTmFtZToiIn07aWYocj09PSJ3ZWl4aW4iKXtsZXQgVD1jLnVzZXJJbmZvO1QmJihiPXtvcGVuSWQ6VC5vcGVuaWQsbmlja05hbWU6VC5uaWNrbmFtZSxnZW5kZXI6VC5zZXgsY2l0eTpULmNpdHkscHJvdmluY2U6VC5wcm92aW5jZSxjb3VudHJ5OlQuY291bnRyeSxhdmF0YXJVcmw6VC5oZWFkaW1ndXJsLHVuaW9uSWQ6VC51bmlvbmlkfSl9ZWxzZSBpZihyPT09ImFwcGxlIil7bGV0IFQ9Yy5hcHBsZUluZm87VCYmKGI9e29wZW5JZDpULnVzZXIsZnVsbE5hbWU6VC5mdWxsTmFtZSxlbWFpbDpULmVtYWlsLGF1dGhvcml6YXRpb25Db2RlOlQuYXV0aG9yaXphdGlvbkNvZGUsaWRlbnRpdHlUb2tlbjpULmlkZW50aXR5VG9rZW4scmVhbFVzZXJTdGF0dXM6VC5yZWFsVXNlclN0YXR1c30pfWVsc2UgYj1jLnVzZXJJbmZvLGImJihiLm9wZW5JZD1iLm9wZW5JZHx8Yi5vcGVuaWR8fGMuYXV0aFJlc3VsdC5vcGVuaWQsYi5uaWNrTmFtZT1iLm5pY2tOYW1lfHxiLm5pY2tuYW1lLGIuYXZhdGFyVXJsPWIuYXZhdGFyVXJsfHxiLmhlYWRpbWd1cmwpO2xldCBWPXt9O2UuZGF0YSYmZS5kYXRhLmFwaV9uYW1lPT09IndlYmFwaV9nZXR1c2VyaW5mbyI/Vi5kYXRhPXtkYXRhOkpTT04uc3RyaW5naWZ5KGIpLHJhd0RhdGE6IiIsc2lnbmF0dXJlOiIiLGVuY3J5cHRlZERhdGE6IiIsaXY6IiJ9OlYudXNlckluZm89Yix0KFYpfSxvKX0pLmNhdGNoKCgpPT57bigiXHU4QkY3XHU1MTQ4XHU4QzAzXHU3NTI4IHVuaS5sb2dpbiIpfSl9LFpPPVRlKGpTLFBnLHpTKSxYTz1UZShXUyxQZyxHUyksSWc9VGUoWVMsKHtwcm92aWRlcjplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1Ycyh0KSxvPWRyKG4pO2NjKGUpLnRoZW4oYz0+Yy5wcmVMb2dpbihyLG8pKS5jYXRjaChvKX0sS1MsSlMpLE5nPSgpPT5jYygidW5pdmVyaWZ5IikudGhlbihlPT5lLmNsb3NlQXV0aFZpZXcoKSksa2c9RHQoWlMsTmcpLFJnPVRlKFhTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPVhzKHQpLG89ZHIobik7dHJ5e2NjKCJ1bml2ZXJpZnkiKS50aGVuKGM9PntsZXQgZz1jLmdldENoZWNrQm94U3RhdGUoKTtyKHtzdGF0ZTpnfSl9KX1jYXRjaChjKXtvKGMpfX0pO2Z1bmN0aW9uIFFPKGUsdCl7cmV0dXJuIHouaXNQbGFpbk9iamVjdChlKSYmei5pc1BsYWluT2JqZWN0KGUuYnV0dG9ucykmJnoudG9UeXBlU3RyaW5nKGUuYnV0dG9ucy5saXN0KT09PSJbb2JqZWN0IEFycmF5XSImJmUuYnV0dG9ucy5saXN0LmZvckVhY2goKG4scik9PntlLmJ1dHRvbnMubGlzdFtyXS5vbmNsaWNrPWZ1bmN0aW9uKCl7bGV0IG89e2NvZGU6IjMwMDA4IixtZXNzYWdlOiJcdTc1MjhcdTYyMzdcdTcwQjlcdTUxRkJcdTRFODZcdTgxRUFcdTVCOUFcdTRFNDlcdTYzMDlcdTk0QUUiLGluZGV4OnIscHJvdmlkZXI6bi5wcm92aWRlcn07ei5pc1BsYWluT2JqZWN0KEhjKT9IYy5fdHJpZ2dlclVuaXZlcmlmeUJ1dHRvbnNDbGljayhvKTpOZygpLnRoZW4oKCk9Pnt0KG8pfSl9fSksZX1jbGFzcyBlVHtjb25zdHJ1Y3Rvcigpe3RoaXMucHJvdmlkZXI9InVuaXZlcmlmeSIsdGhpcy5ldmVudE5hbWU9ImFwaS51bml2ZXJpZnlCdXR0b25zQ2xpY2sifWNsb3NlKCl7cmV0dXJuIGtnKCl9bG9naW4odCl7cmV0dXJuIFRnKHRoaXMuX2dldE9wdGlvbnModCkpfWdldENoZWNrQm94U3RhdGUodCl7cmV0dXJuIFJnKHQpfXByZUxvZ2luKHQpe3JldHVybiBJZyh0aGlzLl9nZXRPcHRpb25zKHQpKX1vbkJ1dHRvbnNDbGljayh0KXtvdC5vbih0aGlzLmV2ZW50TmFtZSx0KX1vZmZCdXR0b25zQ2xpY2sodCl7b3Qub2ZmKHRoaXMuZXZlbnROYW1lLHQpfV90cmlnZ2VyVW5pdmVyaWZ5QnV0dG9uc0NsaWNrKHQpe290LmVtaXQodGhpcy5ldmVudE5hbWUsdCl9X2dldE9wdGlvbnModD17fSl7cmV0dXJuIHouZXh0ZW5kKHt9LHQse3Byb3ZpZGVyOnRoaXMucHJvdmlkZXJ9KX19bGV0IHRUPUR0KFFTLCgpPT5IY3x8KEhjPW5ldyBlVCkpLG5UPVRlKGx3LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWNnKCk7aWYoci5ub3RpZmljYXRpb25BdXRob3JpemVkIT09ImF1dGhvcml6ZWQiKXJldHVybiBuKCJub3RpZmljYXRpb25BdXRob3JpemVkOiAiK3Iubm90aWZpY2F0aW9uQXV0aG9yaXplZCk7bGV0IG89ei5leHRlbmQoe30sZSk7ZGVsZXRlIG8uY29udGVudCxkZWxldGUgby5wYXlsb2FkLHMucHVzaC5jcmVhdGVNZXNzYWdlKGUuY29udGVudCxlLnBheWxvYWQsbyksdCgpfSx2b2lkIDAsY3cpLHJUPUR0KCJyZWdpc3RlclJ1bnRpbWUiLGU9Pnt6LmV4dGVuZChqc1J1bnRpbWUsZSl9KSxpVD17MDp7bmFtZToid2ViIix0aXRsZToiXHU1NkZFXHU2NTg3In0sMTp7bmFtZToidGV4dCIsdGl0bGU6Ilx1N0VBRlx1NjU4N1x1NUI1NyJ9LDI6e25hbWU6ImltYWdlIix0aXRsZToiXHU3RUFGXHU1NkZFXHU3MjQ3In0sMzp7bmFtZToibXVzaWMiLHRpdGxlOiJcdTk3RjNcdTRFNTAifSw0OntuYW1lOiJ2aWRlbyIsdGl0bGU6Ilx1ODlDNlx1OTg5MSJ9LDU6e25hbWU6Im1pbmlQcm9ncmFtIix0aXRsZToiXHU1QzBGXHU3QTBCXHU1RThGIn19LG9UPWU9PntlLnR5cGU9ZS50eXBlfHwwO2xldHtwcm92aWRlcjp0LHR5cGU6bix0aXRsZTpyLHN1bW1hcnk6byxocmVmOmMsaW1hZ2VVcmw6ZyxtZWRpYVVybDpiLHNjZW5lOlYsbWluaVByb2dyYW06VCxvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdDpMLGNvcnBpZDpfZSxjdXN0b21lclVybDp3ZX09ZTt6LmlzU3RyaW5nKGcpJiZnJiYoZz1qZShnKSk7bGV0IFBlPWlUW25dO2lmKFBlKXtsZXQgZnQ9e3Byb3ZpZGVyOnQsdHlwZTpQZS5uYW1lLHRpdGxlOnIsY29udGVudDpvLGhyZWY6YyxwaWN0dXJlczpbZ10sdGh1bWJzOmc/W2ddOnZvaWQgMCxtZWRpYTpiLG1pbmlQcm9ncmFtOlQsZXh0cmE6e3NjZW5lOlZ9LG9wZW5DdXN0b21lclNlcnZpY2VDaGF0OkwsY29ycGlkOl9lLHVybDp3ZX07cmV0dXJuIHQ9PT0id2VpeGluIiYmKG49PT0xfHxuPT09MikmJmRlbGV0ZSBmdC50aHVtYnMsZnR9cmV0dXJuIlx1NTIwNlx1NEVBQlx1NTNDMlx1NjU3MCB0eXBlIFx1NEUwRFx1NkI2M1x1Nzg2RSJ9LHhnPWZ1bmN0aW9uKGUsdCxuLHIsbz0ic2hhcmUiKXtsZXQgYz1kcihyKSxnPXQub3BlbkN1c3RvbWVyU2VydmljZUNoYXQ/Im9wZW5DdXN0b21lclNlcnZpY2VDaGF0Ijoic2VuZCI7dHJ5e2VbZ10odCwoKT0+e24oKX0sYyl9Y2F0Y2goYil7Yyh7bWVzc2FnZTpgJHt0LnByb3ZpZGVyfSAke2d9IFx1NjVCOVx1NkNENVx1OEMwM1x1NzUyOFx1NTkzMVx1OEQyNWB9KX19LGFUPVRlKGV3LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPW9UKGUpLG89ZHIobik7aWYoei5pc1N0cmluZyhyKSlyZXR1cm4gbihyKTtzLnNoYXJlLmdldFNlcnZpY2VzKGM9PntsZXQgZz1jLmZpbmQoKHtpZDpifSk9PmI9PT1yLnByb3ZpZGVyKTtnP2cuYXV0aGVudGljYXRlZD94ZyhnLHIsdCxuKTpnLmF1dGhvcml6ZSgoKT0+eGcoZyxyLHQsbiksbyk6bigic2VydmljZSBub3QgZm91bmQiKX0sbyl9LG53LHR3KSxzVD1UZShydywoe3R5cGU6ZSxpbWFnZVVybDp0LHN1bW1hcnk6bixocmVmOnJ9LHtyZXNvbHZlOm8scmVqZWN0OmN9KT0+e2xldCBnPWRyKGMpO3ouaXNTdHJpbmcodCkmJnQmJih0PWplKHQpKSxzLnNoYXJlLnNlbmRXaXRoU3lzdGVtKHt0eXBlOmUscGljdHVyZXM6dD9bdF06dm9pZCAwLGNvbnRlbnQ6bixocmVmOnJ9LCgpPT5vKCksZyl9LG93LGl3KSxsVD1UZShhdywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lLnByb3ZpZGVyLG89ZHIobik7cy5wYXltZW50LmdldENoYW5uZWxzKGM9PntsZXQgZz1jLmZpbmQoKHtpZDpifSk9PmI9PT1yKTtnP3MucGF5bWVudC5yZXF1ZXN0KGcsZS5vcmRlckluZm8sYj0+e3QoYil9LG8pOm4oInNlcnZpY2Ugbm90IGZvdW5kIil9LG8pfSxzdyksQmc9ZWcsY1Q9VGUoIm5hdmlnYXRlVG9NaW5pUHJvZ3JhbSIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57QmcoIm5hdmlnYXRlVG9VbmlNUCIsZSxyPT57aWYoci5lcnJNc2cmJnIuZXJyTXNnLmluZGV4T2YoIjpvayIpPT09LTEpcmV0dXJuIG4oci5lcnJNc2cuc3BsaXQoIiAiKVsxXSk7dCgpfSl9KSxNZz1bXTtmdW5jdGlvbiBEZyhlKXtNZy5wdXNoKGUpfWxldCB1VD1EZztmdW5jdGlvbiBmVChlLHQpe01nLmZvckVhY2gobj0+bihlLHQpKX1mdW5jdGlvbiBkVChlLHQsLi4ubil7bGV0IHI9cFQoZSx0LG4pO3ImJmNvbnNvbGVbZV0ocil9ZnVuY3Rpb24gaFQoKXtyZXR1cm4gdHlwZW9mIF9fY2hhbm5lbElkX189PSJzdHJpbmciJiZfX2NoYW5uZWxJZF9ffWZ1bmN0aW9uIGdUKGUsdCl7c3dpdGNoKHoudG9SYXdUeXBlKHQpKXtjYXNlIkZ1bmN0aW9uIjpyZXR1cm4iZnVuY3Rpb24oKSB7IFtuYXRpdmUgY29kZV0gfSI7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gcFQoZSx0LG4pe3JldHVybiBoVCgpPyhuLnB1c2godC5yZXBsYWNlKCJhdCAiLCJ1bmktYXBwOi8vLyIpKSxjb25zb2xlW2VdLmFwcGx5KGNvbnNvbGUsbikpOm4ubWFwKGZ1bmN0aW9uKG8pe2xldCBjPXoudG9UeXBlU3RyaW5nKG8pLnRvTG93ZXJDYXNlKCk7aWYoWyJbb2JqZWN0IG9iamVjdF0iLCJbb2JqZWN0IGFycmF5XSIsIltvYmplY3QgbW9kdWxlXSJdLmluZGV4T2YoYykhPT0tMSl0cnl7bz0iLS0tQkVHSU46SlNPTi0tLSIrSlNPTi5zdHJpbmdpZnkobyxnVCkrIi0tLUVORDpKU09OLS0tIn1jYXRjaChnKXtvPWN9ZWxzZSBpZihvPT09bnVsbClvPSItLS1OVUxMLS0tIjtlbHNlIGlmKG89PT12b2lkIDApbz0iLS0tVU5ERUZJTkVELS0tIjtlbHNle2xldCBnPXoudG9SYXdUeXBlKG8pLnRvVXBwZXJDYXNlKCk7Zz09PSJOVU1CRVIifHxnPT09IkJPT0xFQU4iP289Ii0tLUJFR0lOOiIrZysiLS0tIitvKyItLS1FTkQ6IitnKyItLS0iOm89U3RyaW5nKG8pfXJldHVybiBvfSkuam9pbigiLS0tQ09NTUEtLS0iKSsiICIrdH1sZXQgdlQ9MSx0Zix1Yz17fTtmdW5jdGlvbiBMZyhlKXtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIil7bGV0IHQ9T2JqZWN0LmtleXModWMpLmZpbmQocj0+dWNbcl09PT1lKSxuPXQ/cGFyc2VJbnQodCk6dlQrKztyZXR1cm4gdWNbbl09ZSxufWVsc2Ugei5pc1BsYWluT2JqZWN0KGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHQ9PntlW3RdPUxnKGVbdF0pfSk7cmV0dXJuIGV9ZnVuY3Rpb24gbVQoZSx0LG4scil7cmV0dXJuIHJmKGUsdCxuLHIpfWZ1bmN0aW9uIG5mKCl7cmV0dXJuIHRmfHwodGY9UC5yZXF1aXJlTmF0aXZlUGx1Z2luKCJVVFMtUHJveHkiKSksdGZ9ZnVuY3Rpb24gRmcoZSx0LG4scixvKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlx1OEZENFx1NTZERVx1NTAzQ1x1NEUzQVx1RkYxQSIrSlNPTi5zdHJpbmdpZnkodCkrIlx1RkYxQlx1OEJGN1x1NkM0Mlx1NTNDMlx1NjU3MFx1NEUzQVx1RkYxQSIrSlNPTi5zdHJpbmdpZnkoZSkpO2lmKHouaXNTdHJpbmcodCkpdHJ5e3Q9SlNPTi5wYXJzZSh0KX1jYXRjaChjKXt0aHJvdyBuZXcgRXJyb3IoYEpTT04ucGFyc2UoJHt0fSk6IGArYyl9aWYodC5lcnJNc2cpdGhyb3cgbmV3IEVycm9yKHQuZXJyTXNnKTtpZihuJiZuLnR5cGU9PT0iaW50ZXJmYWNlIiYmdHlwZW9mIHQucGFyYW1zPT0ibnVtYmVyIil7aWYoIXQucGFyYW1zKXJldHVybiBudWxsO2lmKHQucGFyYW1zPT09ciYmbylyZXR1cm4gbztpZihvZltuLm9wdGlvbnNdKXtsZXQgYz1IZyh6LmV4dGVuZCh7aW5zdGFuY2VJZDp0LnBhcmFtc30sb2Zbbi5vcHRpb25zXSkpO3JldHVybiBuZXcgY319cmV0dXJuIHQucGFyYW1zfWZ1bmN0aW9uIFZnKGUpe2lmKGUuZXJyTXNnKXRocm93IG5ldyBFcnJvcihlLmVyck1zZyk7cmV0dXJuIGRlbGV0ZSBlLmVyck1zZyxGZyhlLG5mKCkuaW52b2tlU3luYyhlLCgpPT57fSkpfWZ1bmN0aW9uIHJmKGUse21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOm8sbmFtZTpjLG1ldGhvZDpnLGNvbXBhbmlvbjpiLHBhcmFtczpWLHJldHVybjpULGVyck1zZzpMfSxfZSx3ZSl7bGV0IFBlPSh7aWQ6aHQsbmFtZTpGdCxwYXJhbXM6U3Qsa2VlcEFsaXZlOm1ufSk9PntsZXQgdG49dWNbaHRdO3RuPyh0biguLi5TdCksbW58fGRlbGV0ZSB1Y1todF0pOmNvbnNvbGUuZXJyb3IoYCR7cn0ke299LiR7Y30gJHtGdH0gaXMgbm90IGZvdW5kYCl9LGZ0PV9lP3ttb2R1bGVOYW1lOnQsbW9kdWxlVHlwZTpuLGlkOl9lLG5hbWU6YyxtZXRob2Q6Vn06e21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOm8sbmFtZTpnfHxjLGNvbXBhbmlvbjpiLG1ldGhvZDpWfTtyZXR1cm4oLi4uaHQpPT57aWYoTCl0aHJvdyBuZXcgRXJyb3IoTCk7bGV0IEZ0PXouZXh0ZW5kKHt9LGZ0LHtwYXJhbXM6aHQubWFwKFN0PT5MZyhTdCkpfSk7cmV0dXJuIGU/bmV3IFByb21pc2UoKFN0LG1uKT0+e25mKCkuaW52b2tlQXN5bmMoRnQsdG49Pnt0bi50eXBlIT09InJldHVybiI/UGUodG4pOnRuLmVyck1zZz9tbih0bi5lcnJNc2cpOlN0KHRuLnBhcmFtcyl9KX0pOkZnKEZ0LG5mKCkuaW52b2tlU3luYyhGdCxQZSksVCxfZSx3ZSl9fWZ1bmN0aW9uIFVnKGUsdCl7cmV0dXJuIHQubWFpbiYmIXQubWV0aG9kJiZ0eXBlb2YgcyE9InVuZGVmaW5lZCImJnMub3MubmFtZT09PSJpT1MiJiYodC5tZXRob2Q9InNfIit0Lm5hbWUpLHJmKGUsdCwwKX1sZXQgX1Q9VWc7ZnVuY3Rpb24gJGcoZSx0KXtyZXR1cm4gei5oYXNPd24odCxlKyJCeUpzIik/ZSsiQnlKcyI6ZX1mdW5jdGlvbiBiVChlKXtyZXR1cm4gdHlwZW9mIGU9PSJ1bmRlZmluZWQifWZ1bmN0aW9uIHlUKGUpe3JldHVybiFiVChlLmluc3RhbmNlSWQpfWZ1bmN0aW9uIEhnKGUpe2xldHttb2R1bGVOYW1lOnQsbW9kdWxlVHlwZTpuLHBhY2thZ2U6cixjbGFzczpvLG1ldGhvZHM6Yyxwcm9wczpnLGVyck1zZzpifT1lLFY9e21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOm8sZXJyTXNnOmJ9LFQsTD1bXSxfZT17fSx3ZT1bXSxQZT0hMTt5VChlKT8oUGU9ITAsVD1lLmluc3RhbmNlSWQpOihMPWUuY29uc3RydWN0b3IucGFyYW1zLF9lPWUuc3RhdGljTWV0aG9kcyx3ZT1lLnN0YXRpY1Byb3BzKSx0eXBlb2YgcyE9InVuZGVmaW5lZCImJnMub3MubmFtZT09PSJpT1MiJiZMLmZpbmQoRnQ9PkZ0LnR5cGU9PT0iVVRTQ2FsbGJhY2sifHxGdC50eXBlLmluZGV4T2YoIkpTT05PYmplY3QiKT4wKSYmTC5wdXNoKHtuYW1lOiJfYnlKcyIsdHlwZToiYm9vbGVhbiJ9KTtsZXQgZnQ9Y2xhc3N7Y29uc3RydWN0b3IoLi4uU3Qpe2lmKHRoaXMuX19pbnN0YW5jZUlkPTAsYil0aHJvdyBuZXcgRXJyb3IoYik7bGV0IG1uPXt9O2lmKFBlP3R5cGVvZiBUPT0ibnVtYmVyIiYmKHRoaXMuX19pbnN0YW5jZUlkPVQpOnRoaXMuX19pbnN0YW5jZUlkPXJmKCExLHouZXh0ZW5kKHtuYW1lOiJjb25zdHJ1Y3RvciIscGFyYW1zOkx9LFYpLDApLmFwcGx5KG51bGwsU3QpLCF0aGlzLl9faW5zdGFuY2VJZCl0aHJvdyBuZXcgRXJyb3IoYG5ldyAke299IGlzIGZhaWxlZGApO2xldCB0bj10aGlzLG5uPW5ldyBQcm94eSh0bix7Z2V0KEV0LEt0KXtpZighbW5bS3RdKXtpZihLdD0kZyhLdCxjKSx6Lmhhc093bihjLEt0KSl7bGV0e2FzeW5jOmNuLHBhcmFtczpadCxyZXR1cm46Q259PWNbS3RdO21uW0t0XT1tVCghIWNuLHouZXh0ZW5kKHtuYW1lOkt0LHBhcmFtczpadCxyZXR1cm46Q259LFYpLHRuLl9faW5zdGFuY2VJZCxubil9ZWxzZSBpZihnLmluY2x1ZGVzKEt0KSlyZXR1cm4gVmcoe21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4saWQ6dG4uX19pbnN0YW5jZUlkLG5hbWU6S3QsZXJyTXNnOmJ9KX1yZXR1cm4gbW5bS3RdfX0pO3JldHVybiBubn19LGh0PXt9O3JldHVybiBuZXcgUHJveHkoZnQse2dldChGdCxTdCxtbil7aWYoU3Q9JGcoU3QsX2UpLHouaGFzT3duKF9lLFN0KSl7aWYoIWh0W1N0XSl7bGV0e2FzeW5jOnRuLHBhcmFtczpubixyZXR1cm46RXR9PV9lW1N0XTtodFtTdF09VWcoISF0bix6LmV4dGVuZCh7bmFtZTpTdCxjb21wYW5pb246ITAscGFyYW1zOm5uLHJldHVybjpFdH0sVikpfXJldHVybiBodFtTdF19cmV0dXJuIHdlLmluY2x1ZGVzKFN0KT9WZyh6LmV4dGVuZCh7bmFtZTpTdCxjb21wYW5pb246ITB9LFYpKTpSZWZsZWN0LmdldChGdCxTdCxtbil9fSl9ZnVuY3Rpb24gRVQoZSx0KXtyZXR1cm4gdHlwZW9mIHMhPSJ1bmRlZmluZWQiJiZzLm9zLm5hbWU9PT0iQW5kcm9pZCI/InV0cy5zZGsuIisodD8ibW9kdWxlcy4iOiIiKStlOiIifWZ1bmN0aW9uIFNUKGUsdCl7cmV0dXJuIHR5cGVvZiBzPT0idW5kZWZpbmVkIj8iIjpqZyhlLHMub3MubmFtZT09PSJpT1MiPyJJbmRleFN3aWZ0IjoiSW5kZXhLdCIsdCl9ZnVuY3Rpb24gamcoZSx0LG4pe3JldHVybiB0eXBlb2Ygcz09InVuZGVmaW5lZCI/IiI6cy5vcy5uYW1lPT09IkFuZHJvaWQiP3Q6cy5vcy5uYW1lPT09ImlPUyI/IlVUU1NESyIrKG4/Ik1vZHVsZXMiOiIiKSt6LmNhcGl0YWxpemUoZSkrei5jYXBpdGFsaXplKHQpOiIifWxldCBvZj17fTtmdW5jdGlvbiB3VChlLHQpe29mW2VdPXR9bGV0IHpnPXt9O2Z1bmN0aW9uIENUKGUsdCl7emdbZV09dH1mdW5jdGlvbiBBVChlKXtsZXQgdD16Z1tlXTtyZXR1cm4gdHx8Y29uc29sZS5lcnJvcihgJHtlfSBpcyBub3QgZm91bmRgKSx0fWxldCBFbz17bG9hZDoibG9hZCIsY2xvc2U6ImNsb3NlIixlcnJvcjoiZXJyb3IiLGFkQ2xpY2tlZDoiYWRDbGlja2VkIn07Y2xhc3MgV2d7Y29uc3RydWN0b3IoKXt0aGlzLl9jYWxsYmFja3M9e319b25Mb2FkKHQpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXIoRW8ubG9hZCx0KX1vbkNsb3NlKHQpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXIoRW8uY2xvc2UsdCl9b25FcnJvcih0KXt0aGlzLl9hZGRFdmVudExpc3RlbmVyKEVvLmVycm9yLHQpfW9mZkxvYWQodCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcihFby5sb2FkLHQpfW9mZkNsb3NlKHQpe3RoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXIoRW8uY2xvc2UsdCl9b2ZmRXJyb3IodCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcihFby5lcnJvcix0KX1fYWRkRXZlbnRMaXN0ZW5lcih0LG4peyF6LmlzRnVuY3Rpb24obil8fCh0aGlzLl9jYWxsYmFja3NbdF18fCh0aGlzLl9jYWxsYmFja3NbdF09W10pLHRoaXMuX2NhbGxiYWNrc1t0XS5wdXNoKG4pKX1fcmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCByPXRoaXMuX2NhbGxiYWNrc1t0XSxvPXIuaW5kZXhPZihuKTtvPi0xJiZyLnNwbGljZShvLDEpfV9kaXNwYXRjaEV2ZW50KHQsbil7dGhpcy5fY2FsbGJhY2tzW3RdLmZvckVhY2gocj0+e3Iobnx8e30pfSl9fWNsYXNzIGFmIGV4dGVuZHMgV2d7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO3RoaXMucHJlbG9hZD0hMCx0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlc29sdmU9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsLHRoaXMucHJlbG9hZD1uLnByZWxvYWQhPT12b2lkIDA/bi5wcmVsb2FkOiExO2xldCByPXRoaXMuX2FkSW5zdGFuY2U9dDtyLm9uTG9hZCgoKT0+e3RoaXMuX2lzTG9hZGVkPSEwLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUoKSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmU9bnVsbCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlIT1udWxsJiYodGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlKCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fc2hvd0FkKCkpLHRoaXMuX2Rpc3BhdGNoRXZlbnQoRW8ubG9hZCx7fSl9KSxyLm9uQ2xvc2Uobz0+e3RoaXMuX2lzTG9hZGVkPSExLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9kaXNwYXRjaEV2ZW50KEVvLmNsb3NlLG8pLHRoaXMucHJlbG9hZD09PSEwJiZ0aGlzLl9sb2FkQWQoKX0pLHIub25FcnJvcihvPT57dGhpcy5faXNMb2FkaW5nPSExO2xldCBjPXtjb2RlOm8uY29kZSxlcnJNc2c6by5tZXNzYWdlfTt0aGlzLl9kaXNwYXRjaEV2ZW50KEVvLmVycm9yLGMpO2xldCBnPW5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShjKSk7dGhpcy5fbG9hZFByb21pc2VSZWplY3QhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlamVjdChnKSx0aGlzLl9sb2FkUHJvbWlzZVJlamVjdD1udWxsKSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0KGcpLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW51bGwpfSksci5vbkFkQ2xpY2tlZCYmci5vbkFkQ2xpY2tlZCgoKT0+e3RoaXMuX2Rpc3BhdGNoRXZlbnQoRW8uYWRDbGlja2VkLHt9KX0pfWdldFByb3ZpZGVyKCl7cmV0dXJuIHRoaXMuX2FkSW5zdGFuY2UuZ2V0UHJvdmlkZXIoKX1sb2FkKCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57dGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPXQsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nJiYodGhpcy5faXNMb2FkZWQ/dCgiIik6dGhpcy5fbG9hZEFkKCkpfSl9c2hvdygpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e3RoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZT10LHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW4sIXRoaXMuX2lzTG9hZGluZyYmKHRoaXMuX2lzTG9hZGVkPyh0aGlzLl9zaG93QWQoKSx0KCIiKSk6dGhpcy5fbG9hZEFkKCkpfSl9ZGVzdHJveSgpe3RoaXMuX2FkSW5zdGFuY2UuZGVzdHJveSgpfV9sb2FkQWQoKXt0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9pc0xvYWRpbmc9ITAsdGhpcy5fYWRJbnN0YW5jZS5sb2FkKCl9X3Nob3dBZCgpe3RoaXMuX2FkSW5zdGFuY2Uuc2hvdygpfX1jbGFzcyBPVCBleHRlbmRzIGFme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHMuYWQuY3JlYXRlUmV3YXJkZWRWaWRlb0FkKHQpLHQpO3RoaXMuX2xvYWRBZCgpfX1sZXQgVFQ9RHQodXcsZT0+bmV3IE9UKGUpLGR3LGZ3KTtjbGFzcyBQVCBleHRlbmRzIGFme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHMuYWQuY3JlYXRlRnVsbFNjcmVlblZpZGVvQWQodCksdCk7dGhpcy5wcmVsb2FkPSExfX1sZXQgSVQ9RHQoaHcsZT0+bmV3IFBUKGUpLHB3LGd3KTtjbGFzcyBOVCBleHRlbmRzIGFme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHMuYWQuY3JlYXRlSW50ZXJzdGl0aWFsQWQodCksdCk7dGhpcy5wcmVsb2FkPSExLHRoaXMuX2xvYWRBZCgpfX1sZXQga1Q9RHQodncsZT0+bmV3IE5UKGUpLF93LG13KSxTYT17fSx0bD17fTtmdW5jdGlvbiBSVChlKXtsZXQgdD1lLnByb3ZpZGVyO2lmKFNhW3RdfHwoU2FbdF09e30pLHR5cGVvZiBTYVt0XS5wbHVnaW49PSJvYmplY3QiKXtlLnN1Y2Nlc3MoU2FbdF0ucGx1Z2luKTtyZXR1cm59aWYodGxbdF18fCh0bFt0XT1bXSksdGxbdF0ucHVzaChlKSxTYVt0XS5zdGF0dXM9PT0hMCl7ZS5fX3BsdWdpbj1TYVt0XS5wbHVnaW47cmV0dXJufVNhW3RdLnN0YXR1cz0hMDtsZXQgbj1Kbyh0KTtpZighbnx8IW4uaW5pdFNESyl7dGxbdF0uZm9yRWFjaChyPT57ci5mYWlsKHtjb2RlOi0xLG1lc3NhZ2U6InByb3ZpZGVyIFsiK3QrIl0gaW52YWxpZCJ9KX0pLHRsW3RdLmxlbmd0aD0wLFNhW3RdLnN0YXR1cz0hMTtyZXR1cm59U2FbdF0ucGx1Z2luPW4sZS5fX3BsdWdpbj1uLG4uaW5pdFNESyhyPT57bGV0IG89ci5jb2RlPT09MXx8ci5jb2RlPT09IjEiO28/U2FbdF0ucGx1Z2luPW46U2FbdF0uc3RhdHVzPSExLHRsW3RdLmZvckVhY2goYz0+e28/Yy5zdWNjZXNzKGMuX19wbHVnaW4pOmMuZmFpbChyKX0pLHRsW3RdLmxlbmd0aD0wfSl9Y2xhc3MgeFQgZXh0ZW5kcyBXZ3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO3RoaXMuX2FkcGlkPSIiLHRoaXMuX3Byb3ZpZGVyPSIiLHRoaXMuX3VzZXJEYXRhPW51bGwsdGhpcy5faXNMb2FkZWQ9ITEsdGhpcy5faXNMb2FkaW5nPSExLHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZT1udWxsLHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW51bGwsdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9bnVsbCx0aGlzLl9hZEluc3RhbmNlPW51bGwsdGhpcy5fYWRFcnJvcj0iIix0aGlzLl9hZHBpZD10LmFkcGlkLHRoaXMuX3Byb3ZpZGVyPXQucHJvdmlkZXIsdGhpcy5fdXNlckRhdGE9dC51c2VyRGF0YSxOKCgpPT57dGhpcy5faW5pdCgpfSl9X2luaXQoKXt0aGlzLl9hZEVycm9yPSIiLFJUKHtwcm92aWRlcjp0aGlzLl9wcm92aWRlcixzdWNjZXNzOnQ9Pnt0aGlzLl9hZEluc3RhbmNlPXQsdGhpcy5fdXNlckRhdGEmJnRoaXMuYmluZFVzZXJEYXRhKHRoaXMuX3VzZXJEYXRhKSx0aGlzLl9sb2FkQWQoKX0sZmFpbDp0PT57dGhpcy5fYWRFcnJvcj10LHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0IT1udWxsJiYodGhpcy5fbG9hZFByb21pc2VSZWplY3QodGhpcy5fY3JlYXRlRXJyb3IodCkpLHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW51bGwpLHRoaXMuX2Rpc3BhdGNoRXZlbnQoRW8uZXJyb3IsdCl9fSl9Z2V0UHJvdmlkZXIoKXtyZXR1cm4gdGhpcy5fcHJvdmlkZXJ9bG9hZCgpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2lmKHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZT10LHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW4sIXRoaXMuX2lzTG9hZGluZyl7aWYodGhpcy5fYWRFcnJvcil7dGhpcy5faW5pdCgpO3JldHVybn10aGlzLl9pc0xvYWRlZD90KCIiKTp0aGlzLl9sb2FkQWQoKX19KX1zaG93KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57aWYodGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPXQsdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nKXtpZih0aGlzLl9hZEVycm9yKXt0aGlzLl9pbml0KCk7cmV0dXJufXRoaXMuX2lzTG9hZGVkPyh0aGlzLl9zaG93QWQoKSx0KCIiKSk6dGhpcy5fbG9hZEFkKCl9fSl9cmVwb3J0RXhwb3N1cmUoKXt0aGlzLl9hZEluc3RhbmNlIT09bnVsbCYmdGhpcy5fYWRJbnN0YW5jZS5yZXBvcnRFeHBvc3VyZSgpfWJpbmRVc2VyRGF0YSh0KXt0aGlzLl9hZEluc3RhbmNlIT09bnVsbCYmdGhpcy5fYWRJbnN0YW5jZS5iaW5kVXNlckRhdGEodCl9ZGVzdHJveSgpe3RoaXMuX2FkSW5zdGFuY2UhPT1udWxsJiZ0aGlzLl9hZEluc3RhbmNlLmRlc3Ryb3kmJnRoaXMuX2FkSW5zdGFuY2UuZGVzdHJveSh7YWRwaWQ6dGhpcy5fYWRwaWR9KX1fbG9hZEFkKCl7aWYodGhpcy5fYWRJbnN0YW5jZSE9PW51bGwpe2lmKHRoaXMuX2lzTG9hZGluZz09PSEwKXJldHVybjt0aGlzLl9pc0xvYWRpbmc9ITAsdGhpcy5fYWRJbnN0YW5jZS5sb2FkRGF0YSh7YWRwaWQ6dGhpcy5fYWRwaWR9LHQ9Pnt0aGlzLl9pc0xvYWRlZD0hMCx0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlIT1udWxsJiYodGhpcy5fbG9hZFByb21pc2VSZXNvbHZlKCksdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPW51bGwpLHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZSE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZSgpLHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZT1udWxsLHRoaXMuX3Nob3dBZCgpKSx0aGlzLl9kaXNwYXRjaEV2ZW50KEVvLmxvYWQsdCl9LHQ9Pnt0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fc2hvd1Byb21pc2VSZWplY3QhPW51bGwmJih0aGlzLl9zaG93UHJvbWlzZVJlamVjdCh0aGlzLl9jcmVhdGVFcnJvcih0KSksdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9bnVsbCksdGhpcy5fZGlzcGF0Y2hFdmVudChFby5lcnJvcix0KX0pfX1fc2hvd0FkKCl7dGhpcy5fYWRJbnN0YW5jZSE9PW51bGwmJnRoaXMuX2lzTG9hZGVkPT09ITAmJnRoaXMuX2FkSW5zdGFuY2Uuc2hvdyh7YWRwaWQ6dGhpcy5fYWRwaWR9LCgpPT57dGhpcy5faXNMb2FkZWQ9ITF9LHQ9Pnt0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0KHRoaXMuX2NyZWF0ZUVycm9yKHQpKSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsKSx0aGlzLl9kaXNwYXRjaEV2ZW50KEVvLmVycm9yLHQpfSl9X2NyZWF0ZUVycm9yKHQpe3JldHVybiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodCkpfX1sZXQgQlQ9RHQoYncsZT0+bmV3IHhUKGUpLEV3LHl3KSxHZz1zLm9zLm5hbWU9PT0iQW5kcm9pZCImJnBhcnNlSW50KHMub3MudmVyc2lvbik8NixNVD1HZz8ic2xpZGUtaW4tcmlnaHQiOiJwb3AtaW4iLGpjPTMwMCxZZz1HZz8ic2xpZGUtb3V0LXJpZ2h0IjoicG9wLW91dCIsRFQ9Il93d3cvX191bmlhcHB2aWV3Lmh0bWwiLExUPSJ3ZWJ2aWV3SWQiLEZUPSJ1bmlNUE5hdGl2ZUV2ZW50IjtmdW5jdGlvbiBWVChlLHQsbil7biYmdC5pc05WdWUmJihlLnVuaU5WaWV3PXtwYXRoOm4sZGVmYXVsdEZvbnRTaXplOlIuZGVmYXVsdEZvbnRTaXplLHZpZXdwb3J0OlIudmlld3BvcnR9KX1sZXQgVVQ9L14jW2EtejAtOV17Nn0kL2k7ZnVuY3Rpb24gJFQoZSl7cmV0dXJuIGUmJihVVC50ZXN0KGUpfHxlPT09InRyYW5zcGFyZW50Iil9ZnVuY3Rpb24gSFQoZSx0KXtsZXR7YmFja2dyb3VuZENvbG9yOm59PXQ7IW58fCEkVChuKXx8KGUuYmFja2dyb3VuZD9uPWUuYmFja2dyb3VuZDplLmJhY2tncm91bmQ9bixlLmJhY2tncm91bmRDb2xvclRvcHx8KGUuYmFja2dyb3VuZENvbG9yVG9wPW4pLGUuYmFja2dyb3VuZENvbG9yQm90dG9tfHwoZS5iYWNrZ3JvdW5kQ29sb3JCb3R0b209biksZS5hbmltYXRpb25BbHBoYUJHQ29sb3J8fChlLmFuaW1hdGlvbkFscGhhQkdDb2xvcj1uKSx0eXBlb2YgZS53ZWJ2aWV3QkdUcmFuc3BhcmVudD09InVuZGVmaW5lZCImJihlLndlYnZpZXdCR1RyYW5zcGFyZW50PSEwKSl9ZnVuY3Rpb24galQoZSx0KXtlLnBvcEdlc3R1cmU9PT0iaGlkZSImJmRlbGV0ZSBlLnBvcEdlc3R1cmUsdC5pc1F1aXQmJihlLnBvcEdlc3R1cmU9cy5vcy5uYW1lPT09ImlPUyI/ImFwcGJhY2siOiJub25lIil9ZnVuY3Rpb24gelQoZSx0KXtpZighdC5lbmFibGVQdWxsRG93blJlZnJlc2gpcmV0dXJuO2xldCBuPVVhKHouZXh0ZW5kKHt9LHMub3MubmFtZT09PSJBbmRyb2lkIj9HVDpZVCx0LnB1bGxUb1JlZnJlc2gpKTtlLnB1bGxUb1JlZnJlc2g9V1Qobix0KX1mdW5jdGlvbiBXVChlLHQpe2xldCBuPV9yKGUpO2lmKCFuKXJldHVybiBlO2xldFtyLG8sY109bjtyZXR1cm4ocnx8b3x8YykmJlAub25Mb2NhbGVDaGFuZ2UoKCk9PntsZXQgZz1zLndlYnZpZXcuZ2V0V2Vidmlld0J5SWQodC5pZCsiIik7aWYoIWcpcmV0dXJuO2xldCBiPXtzdXBwb3J0OiEwfTtyJiYoYi5jb250ZW50ZG93bj17Y2FwdGlvbjplLmNvbnRlbnRkb3duLmNhcHRpb259KSxvJiYoYi5jb250ZW50b3Zlcj17Y2FwdGlvbjplLmNvbnRlbnRvdmVyLmNhcHRpb259KSxjJiYoYi5jb250ZW50cmVmcmVzaD17Y2FwdGlvbjplLmNvbnRlbnRyZWZyZXNoLmNhcHRpb259KSxnLnNldFN0eWxlKHtwdWxsVG9SZWZyZXNoOmJ9KX0pLGV9bGV0IEdUPXtzdXBwb3J0OiEwLHN0eWxlOiJjaXJjbGUifSxZVD17c3VwcG9ydDohMCxzdHlsZToiZGVmYXVsdCIsaGVpZ2h0OiI1MHB4IixyYW5nZToiMjAwcHgiLGNvbnRlbnRkb3duOntjYXB0aW9uOiIifSxjb250ZW50b3Zlcjp7Y2FwdGlvbjoiIn0sY29udGVudHJlZnJlc2g6e2NhcHRpb246IiJ9fTtmdW5jdGlvbiBxVChlLHQpe2xldHtuYXZpZ2F0aW9uQmFyOm59PXQ7aWYobi5zdHlsZT09PSJjdXN0b20iKXJldHVybiExO2xldCByPSEwO3QuaXNRdWl0JiYocj0hMSk7bGV0IG89e2F1dG9CYWNrQnV0dG9uOnJ9O09iamVjdC5rZXlzKG4pLmZvckVhY2goYz0+e2xldCBnPW5bY107Yz09PSJ0aXRsZUltYWdlIiYmZz9vLnRhZ3M9S1QoZyk6Yz09PSJidXR0b25zIiYmei5pc0FycmF5KGcpP28uYnV0dG9ucz1nLm1hcCgoYixWKT0+KGIub25jbGljaz1aVChWKSxiKSk6b1tjXT1nfSksZS50aXRsZU5WaWV3PUpUKG8sdCl9ZnVuY3Rpb24gSlQoZSx0KXtsZXQgbj1EbihlKTtpZighbilyZXR1cm4gZTtsZXRbcixvXT1uO3JldHVybihyfHxvKSYmUC5vbkxvY2FsZUNoYW5nZSgoKT0+e2xldCBjPXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZCh0LmlkKyIiKTtpZighYylyZXR1cm47bGV0IGc9e307ciYmKGcudGl0bGVUZXh0PWUudGl0bGVUZXh0KSxvJiYoZy5zZWFyY2hJbnB1dD17cGxhY2Vob2xkZXI6ZS5zZWFyY2hJbnB1dC5wbGFjZWhvbGRlcn0pLGMuc2V0U3R5bGUoe3RpdGxlTlZpZXc6Z30pfSksZX1mdW5jdGlvbiBLVChlKXtyZXR1cm5be3RhZzoiaW1nIixzcmM6ZSxwb3NpdGlvbjp7bGVmdDoiYXV0byIsdG9wOiJhdXRvIix3aWR0aDoiYXV0byIsaGVpZ2h0OiIyNnB4In19XX1mdW5jdGlvbiBaVChlKXtyZXR1cm4gZnVuY3Rpb24obil7bi5pbmRleD1lLFZuKEouT05fTkFWSUdBVElPTl9CQVJfQlVUVE9OX1RBUCxuKX19ZnVuY3Rpb24gcWcoZSx0LG4pe2xldCByPXtib3VuY2U6InZlcnRpY2FsIn07cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gobz0+e1hULmluZGV4T2Yobyk9PT0tMSYmKHJbb109dFtvXSl9KSxuLmlkIT09IjEiJiZWVChyLHQsZSksalQocix0KSxIVChyLHQpLHFUKHIsdCkselQocix0KSxyfWxldCBYVD1bImlkIiwicm91dGUiLCJpc05WdWUiLCJpc1F1aXQiLCJpc0VudHJ5IiwiaXNUYWJCYXIiLCJ0YWJCYXJJbmRleCIsIndpbmRvd1RvcCIsInRvcFdpbmRvdyIsImxlZnRXaW5kb3ciLCJyaWdodFdpbmRvdyIsIm1heFdpZHRoIiwidXNpbmdDb21wb25lbnRzIiwiZGlzYWJsZVNjcm9sbCIsImVuYWJsZVB1bGxEb3duUmVmcmVzaCIsIm5hdmlnYXRpb25CYXIiLCJwdWxsVG9SZWZyZXNoIiwib25SZWFjaEJvdHRvbURpc3RhbmNlIiwicGFnZU9yaWVudGF0aW9uIiwiYmFja2dyb3VuZENvbG9yIl0sSmc9MjtmdW5jdGlvbiBLZygpe3JldHVybiBKZ31mdW5jdGlvbiBaZygpe3JldHVybiBKZysrfWZ1bmN0aW9uIFhnKGUpe3JldHVybiBlfWZ1bmN0aW9uIFFnKGUsdCl7bGV0IG49dD9KLnN0cmluZ2lmeVF1ZXJ5KHQsWGcpOiIiO3JldHVybntwYXRoOmUuc2xpY2UoMSkscXVlcnk6biYmbi5zbGljZSgxKX19ZnVuY3Rpb24gUVQoZSx0LG4pe2xldCByPW4/Si5zdHJpbmdpZnlRdWVyeShuLFhnKToiIjtyZXR1cm57aXNUYWI6ZSxhcmd1bWVudHM6SlNPTi5zdHJpbmdpZnkoe3BhdGg6dC5zbGljZSgxKSxxdWVyeTpyJiZyLnNsaWNlKDEpfSl9fWZ1bmN0aW9uIGVQKHtwYXRoOmUscXVlcnk6dCxyb3V0ZU9wdGlvbnM6bix3ZWJ2aWV3RXh0cmFzOnJ9KXtsZXQgbz0oKT0+cWcoZSxIdShuLm1ldGEpLHtpZDpjKyIifSksYz1aZygpLGc9bygpO2cudW5pUGFnZVVybD1RZyhlLHQpLGcuaXNUYWI9ISFuLm1ldGEuaXNUYWJCYXI7bGV0IGI9cy53ZWJ2aWV3LmNyZWF0ZSgiIixTdHJpbmcoYyksZyx6LmV4dGVuZCh7bnZ1ZTohMCxfX3BhdGhfXzplLF9fcXVlcnlfXzpKU09OLnN0cmluZ2lmeSh0KX0scikpO3JldHVybiAkaChiLG8pLGJ9bGV0IExpO2Z1bmN0aW9uIGVwKGUpe0xpPWV9ZnVuY3Rpb24gdFAoKXtyZXR1cm4gTGl9ZnVuY3Rpb24gblAoKXtyZXR1cm4oIUxpfHxMaS5fX3VuaWFwcF9yb3V0ZSkmJihMaT1zLndlYnZpZXcuY3JlYXRlKERULFN0cmluZyhaZygpKSx7Y29udGVudEFkanVzdDohMX0pKSxMaX1mdW5jdGlvbiByUChlKXtsZXR7cG9wdXBTdWJOVnVlV2Vidmlld3M6dH09ZTshdHx8ZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49Pnt0W25dLmNsb3NlKCJub25lIil9KX0pfWZ1bmN0aW9uIHRwKGUpe3JldHVybiBSLnJlYWxFbnRyeVBhZ2VQYXRoJiZlLiRwYWdlLnJvdXRlPT09Ui5lbnRyeVBhZ2VQYXRofWZ1bmN0aW9uIG5wKCl7Ui5lbnRyeVBhZ2VQYXRoPVIucmVhbEVudHJ5UGFnZVBhdGgsZGVsZXRlIFIucmVhbEVudHJ5UGFnZVBhdGgsUC5yZUxhdW5jaCh7dXJsOkouYWRkTGVhZGluZ1NsYXNoKFIuZW50cnlQYWdlUGF0aCl9KX1mdW5jdGlvbiBpUChlKXtsZXQgdDtlLmFkZEV2ZW50TGlzdGVuZXIoInBvcEdlc3R1cmUiLG49PntpZihuLnR5cGU9PT0ic3RhcnQiKXtsZXQgcj1JbigpLG89cltyLmxlbmd0aC0yXTt0PW5jO2xldCBjPW8mJm8uJHBhZ2Uuc3RhdHVzQmFyU3R5bGU7YyYmQmEoYyl9ZWxzZSBpZihuLnR5cGU9PT0iZW5kIiYmIW4ucmVzdWx0KUJhKHQpO2Vsc2UgaWYobi50eXBlPT09ImVuZCImJm4ucmVzdWx0KXtsZXQgcj1JbigpLmxlbmd0aCxvPXdpKCk7enIoKSxCYSgpLG8mJnI9PT0xJiZ0cChvKT9ucCgpOlZuKEouT05fU0hPVyl9fSl9ZnVuY3Rpb24gb1AoZSl7aWYoZS5udnVlKXJldHVybjtsZXQgdD1lLmlkLHtzdWJzY3JpYmU6bix1bnN1YnNjcmliZTpyfT1vdCxvPShjLGcpPT57aWYodCE9PWcpcmV0dXJuO3IoUmwsbyk7bGV0IGI9SXIocGFyc2VJbnQoZykpO2ImJmIuX19wYWdlX2NvbnRhaW5lcl9fLnJlc3RvcmUoKX07ZS5hZGRFdmVudExpc3RlbmVyKCJyZWNvdmVyeSIsKCk9PntuKFJsLG8pfSl9ZnVuY3Rpb24gYVAoZSl7bGV0e2VtaXQ6dH09b3Qsbj1mdW5jdGlvbih7d2lkdGg6cixoZWlnaHQ6b30pe2xldCBnPXtkZXZpY2VPcmllbnRhdGlvbjpNYXRoLmFicyhzLm5hdmlnYXRvci5nZXRPcmllbnRhdGlvbigpKT09PTkwPyJsYW5kc2NhcGUiOiJwb3J0cmFpdCIsc2l6ZTp7d2luZG93V2lkdGg6TWF0aC5jZWlsKHIpLHdpbmRvd0hlaWdodDpNYXRoLmNlaWwobyl9fTt0KEouT05fUkVTSVpFLGcscGFyc2VJbnQoZS5pZCkpfTtlLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSi5kZWJvdW5jZShuLDUwLHtzZXRUaW1lb3V0Ok4sY2xlYXJUaW1lb3V0OkV9KSl9bGV0IHJwPXtwdWxsVG9SZWZyZXNoOkouT05fUFVMTF9ET1dOX1JFRlJFU0gsdGl0bGVOVmlld1NlYXJjaElucHV0Q2hhbmdlZDpKLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DSEFOR0VELHRpdGxlTlZpZXdTZWFyY2hJbnB1dENvbmZpcm1lZDpKLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DT05GSVJNRUQsdGl0bGVOVmlld1NlYXJjaElucHV0Q2xpY2tlZDpKLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DTElDS0VELHRpdGxlTlZpZXdTZWFyY2hJbnB1dEZvY3VzQ2hhbmdlZDpKLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9GT0NVU19DSEFOR0VEfTtmdW5jdGlvbiBzUChlKXtsZXQgdD1wYXJzZUludChlLmlkKTtPYmplY3Qua2V5cyhycCkuZm9yRWFjaChuPT57bGV0IHI9cnBbbl07ZS5hZGRFdmVudExpc3RlbmVyKG4sbz0+e3I9PT1KLk9OX1BVTExfRE9XTl9SRUZSRVNIJiZ6dShlKSxWbih0LHIsbyl9KX0pLHJQKGUpLGFQKGUpLHMub3MubmFtZT09PSJpT1MiJiYob1AoZSksaVAoZSkpfWZ1bmN0aW9uIGxQKGUsdCxuLHIpe2xldCBvPSgpPT5xZyh0LEh1KHIpLGUpLGM9bygpO2MudW5pUGFnZVVybD1RZyh0LG4pO2xldCBnPSEhci5pc1RhYkJhcjtyLmlzTlZ1ZT9jLmlzVGFiPWc6Yy5kZWJ1Z1JlZnJlc2g9UVQoZyx0LG4pLGMubG9jYWxlPWYucmVxdWlyZU1vZHVsZSgicGx1cyIpLmdldExhbmd1YWdlKCksJGgoZSxvKSxlLnNldFN0eWxlKGMpfWZ1bmN0aW9uIGNQKGUsdCxuKXsobi5zdWJOVnVlc3x8W10pLmZvckVhY2gobz0+e2lmKCFvLnBhdGgpcmV0dXJuO2xldCBjPVZhKG8uc3R5bGV8fHt9KSxnPW8udHlwZT09PSJuYXZpZ2F0aW9uQmFyIixiPW8udHlwZT09PSJwb3B1cCI7Yy51bmlOVmlldz17cGF0aDpvLnBhdGgucmVwbGFjZSgiLm52dWUiLCIuanMiKSxkZWZhdWx0Rm9udFNpemU6Ui5kZWZhdWx0Rm9udFNpemUsdmlld3BvcnQ6Ui52aWV3cG9ydH07bGV0IFY9e19fdW5pYXBwX2hvc3Q6dCxfX3VuaWFwcF9vcmlnaW46Yy51bmlOVmlldy5wYXRoLnNwbGl0KCI/IilbMF0ucmVwbGFjZSgiLmpzIiwiIiksX191bmlhcHBfb3JpZ2luX2lkOmUuaWQsX191bmlhcHBfb3JpZ2luX3R5cGU6ZS5fX3VuaWFwcF90eXBlfSxUO2c/KGMucG9zaXRpb249ImRvY2siLGMuZG9jaz0idG9wIixjLnRvcD0iMCIsYy53aWR0aD0iMTAwJSIsYy5oZWlnaHQ9U3RyaW5nKEouTkFWQkFSX0hFSUdIVCtXdSgpKSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJpZ2h0LGRlbGV0ZSBjLmJvdHRvbSxkZWxldGUgYy5tYXJnaW4pOmImJihjLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGModCk/VD1kaTpUPWUsVi5fX3VuaWFwcF9tYXNrPWMubWFza3x8InJnYmEoMCwwLDAsMC41KSIsVi5fX3VuaWFwcF9tYXNrX2lkPVQuaWQpLGRlbGV0ZSBjLm1hc2s7bGV0IEw9cy53ZWJ2aWV3LmNyZWF0ZSgiIixvLmlkLGMsVik7aWYoYil7VC5wb3B1cFN1Yk5WdWVXZWJ2aWV3c3x8KFQucG9wdXBTdWJOVnVlV2Vidmlld3M9e30pLFQucG9wdXBTdWJOVnVlV2Vidmlld3NbTC5pZF09TDtsZXQgX2U9ZnVuY3Rpb24oKXtULnNldFN0eWxlKHttYXNrOiJub25lIn0pLEwuaGlkZSgiYXV0byIpfTtULmFkZEV2ZW50TGlzdGVuZXIoIm1hc2tDbGljayIsX2UpO2xldCB3ZT0hMTtMLmFkZEV2ZW50TGlzdGVuZXIoInNob3ciLCgpPT57d2V8fChzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixEaSkscy5rZXkuYWRkRXZlbnRMaXN0ZW5lcigiYmFja2J1dHRvbiIsX2UpLHdlPSEwKX0pLEwuYWRkRXZlbnRMaXN0ZW5lcigiaGlkZSIsKCk9Pnt3ZSYmKHMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLF9lKSxzLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixEaSksd2U9ITEpfSksTC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntkZWxldGUgVC5wb3B1cFN1Yk5WdWVXZWJ2aWV3c1tMLmlkXSx3ZSYmKHMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLF9lKSxzLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixEaSksd2U9ITEpfSl9ZWxzZSBlLmFwcGVuZChMKX0pfWZ1bmN0aW9uIHVQKGUsdCxuLHIpeyhlLmlkPT09IjEifHwhci5pc05WdWUpJiZsUChlLHQsbixyKSxjUChlLHQsciksc1AoZSl9ZnVuY3Rpb24gaXAoZSl7cmV0dXJuIGUucm91dGVPcHRpb25zLm1ldGEuaXNOVnVlP2VQKGUpOktnKCk9PT0yP3Mud2Vidmlldy5nZXRMYXVuY2hXZWJ2aWV3KCk6dFAoKX1mdW5jdGlvbiBvcChlLHQpe290Lm9uY2UoUmwrIi4iK2UsdCl9bGV0IHdhPSExO2Z1bmN0aW9uIGFwKGUsdCxuKXt3YT17cGF0aDplLG52dWU6b3MoZSkuaXNOVnVlLGNhbGxiYWNrOnR9fWZ1bmN0aW9uIHNwKGUsdCxuKXtuYShlKSxubChlLiRnZXRBcHBXZWJ2aWV3KCksdCxuKX1mdW5jdGlvbiB6YyhlLHQsbj0hMSl7aWYoIW4mJndhKXJldHVybiBjb25zb2xlLmVycm9yKGBXYWl0aW5nIHRvIG5hdmlnYXRlIHRvOiAke3dhLnBhdGh9LCBkbyBub3Qgb3BlcmF0ZSBjb250aW51b3VzbHk6ICR7ZX0uYCk7aWYoUi5yZW5kZXJlcj09PSJuYXRpdmUiKXJldHVybiBJbigpLmxlbmd0aD09PTA/YXAoZSx0LCJ3YWl0Rm9yUmVhZHkiKTp0KCk7bGV0IHI9IUxpfHxMaSYmTGkuX191bmlhcHBfcm91dGUsbz1MaSYmIUxpLmxvYWRlZDtyfHxvP2FwKGUsdCxyPyJ3YWl0Rm9yQ3JlYXRlIjoid2FpdEZvclJlYWR5Iik6dCgpLG8mJm9wKExpLmlkLFdjKX1mdW5jdGlvbiBXYygpe2lmKCF3YSlyZXR1cm47bGV0e2NhbGxiYWNrOmV9PXdhO3JldHVybiB3YT0hMSxlKCl9ZnVuY3Rpb24gbHAoKXtpZihSLnJlbmRlcmVyPT09Im5hdGl2ZSIpcmV0dXJuIHdhJiZ3YS5udnVlP1djKCk6dm9pZCAwO2xldCBlPW5QKCk7aWYoISF3YSl7aWYod2EubnZ1ZSlyZXR1cm4gV2MoKTtlLmxvYWRlZD93YS5jYWxsYmFjaygpOm9wKGUuaWQsV2MpfX1mdW5jdGlvbiBubChlLHQsbil7ZVtlLl9fcHJlbG9hZF9fPyJoaWRlIjoiY2xvc2UiXSh0LG4pfWZ1bmN0aW9uIEdjKGUsdCxuLHIsbyl7dHlwZW9mIG89PSJ1bmRlZmluZWQiJiYobz1lLm52dWU/MDoxMDApO2xldCBjPWZ1bmN0aW9uKCl7Yy5fY2FsbGVkfHwoYy5fY2FsbGVkPSEwLHImJnIoKSxscCgpKX07Yy5fY2FsbGVkPSExLE4oKCk9PntsZXQgZz1OKCgpPT57YygpfSxuKzE1MCk7ZS5zaG93KHQsbiwoKT0+e2MuX2NhbGxlZHx8RShnKSxjKCl9KX0sbyl9ZnVuY3Rpb24gZlAoZSx0KXtsZXQgbj1lLmNoaWxkcmVuKCk7aWYoIW58fCFuLmxlbmd0aClyZXR1cm4gdCgpO2xldCByPW4uZmluZChvPT5vLmlkLmluZGV4T2YoTFQpPT09MCl8fG5bMF07ci5jYW5CYWNrKCh7Y2FuQmFjazpvfSk9PntvP3IuYmFjaygpOnQoKX0pfWxldCBkUD1UZShQRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj13aSgpO2lmKCFyKXJldHVybiBuKCJnZXRDdXJyZW50UGFnZXMgaXMgZW1wdHkiKTtpZihWbihyLEouT05fQkFDS19QUkVTUyx7ZnJvbTplLmZyb218fCJuYXZpZ2F0ZUJhY2sifSkpcmV0dXJuIHQoKTtpZihQLmhpZGVUb2FzdCgpLFAuaGlkZUxvYWRpbmcoKSxyLiRwYWdlLm1ldGEuaXNRdWl0KWhQKCk7ZWxzZSBpZih0cChyKSlucCgpO2Vsc2V7bGV0e2RlbHRhOm8sYW5pbWF0aW9uVHlwZTpjLGFuaW1hdGlvbkR1cmF0aW9uOmd9PWU7Z1AobyxjLGcpfXJldHVybiB0KCl9LE5FLFVFKSxZYz0wO2Z1bmN0aW9uIGhQKCl7dnQoKSxZYz9EYXRlLm5vdygpLVljPDJlMyYmcy5ydW50aW1lLnF1aXQoKTooWWM9RGF0ZS5ub3coKSxzLm5hdGl2ZVVJLnRvYXN0KGFlKCkudCgidW5pLmFwcC5xdWl0IikpLE4oKCk9PntZYz0wfSwyZTMpKX1mdW5jdGlvbiBnUChlLHQsbil7bGV0IHI9SW4oKSxvPXIubGVuZ3RoLGM9cltvLTFdO2U+MSYmci5zbGljZShvLWUsby0xKS5yZXZlcnNlKCkuZm9yRWFjaChWPT57bmwocy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKFYuJHBhZ2UuaWQrIiIpLCJub25lIiwwKX0pO2xldCBnPWZ1bmN0aW9uKFYpe3Q/bmwoVix0LG58fGpjKTpjLiRwYWdlLm9wZW5UeXBlPT09InJlZGlyZWN0VG8iP25sKFYsWWcsamMpOm5sKFYsImF1dG8iKSxyLnNsaWNlKG8tZSxvKS5mb3JFYWNoKFQ9Pm5hKFQpKSxCYSgpLFZuKEouT05fU0hPVyl9LGI9cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKGMuJHBhZ2UuaWQrIiIpO2lmKCFjLl9fdW5pYXBwX3dlYnZpZXcpcmV0dXJuIGcoYik7ZlAoYiwoKT0+e2coYil9KX1jbGFzcyBwUCBleHRlbmRzIEouVW5pTm9kZXtjb25zdHJ1Y3Rvcih0LG4scj0hMSl7c3VwZXIoSi5OT0RFX1RZUEVfUEFHRSwiI3BhZ2UiLG51bGwpO3RoaXMuX2lkPTEsdGhpcy5fY3JlYXRlZD0hMSx0aGlzLl91cGRhdGluZz0hMSx0aGlzLl9jcmVhdGVBY3Rpb25NYXA9bmV3IE1hcCx0aGlzLnVwZGF0ZUFjdGlvbnM9W10sdGhpcy5kaWN0cz1bXSx0aGlzLm5vZGVJZD0wLHRoaXMucGFnZUlkPXQsdGhpcy5wYWdlTm9kZT10aGlzLHRoaXMub3B0aW9ucz1uLHRoaXMuaXNVbm1vdW50ZWQ9ITEsdGhpcy5jcmVhdGVBY3Rpb249W0ouQUNUSU9OX1RZUEVfUEFHRV9DUkVBVEUsbl0sdGhpcy5jcmVhdGVkQWN0aW9uPVtKLkFDVElPTl9UWVBFX1BBR0VfQ1JFQVRFRF0sdGhpcy5ub3JtYWxpemVEaWN0PXRoaXMuX25vcm1hbGl6ZURpY3QuYmluZCh0aGlzKSx0aGlzLl91cGRhdGU9dGhpcy51cGRhdGUuYmluZCh0aGlzKSxyJiZ0aGlzLnNldHVwKCl9X25vcm1hbGl6ZURpY3QodCxuPSEwKXtpZighei5pc1BsYWluT2JqZWN0KHQpKXJldHVybiB0aGlzLmFkZERpY3QodCk7bGV0IHI9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gobz0+e2xldCBjPVt0aGlzLmFkZERpY3QobyldLGc9dFtvXTtuP2MucHVzaCh0aGlzLmFkZERpY3QoZykpOmMucHVzaChnKSxyLnB1c2goYyl9KSxyfWFkZERpY3QodCl7bGV0e2RpY3RzOm59PXRoaXMscj1uLmluZGV4T2YodCk7cmV0dXJuIHI+LTE/cjpuLnB1c2godCktMX1vbkluamVjdEhvb2sodCl7KHQ9PT1KLk9OX1BBR0VfU0NST0xMfHx0PT09Si5PTl9SRUFDSF9CT1RUT00pJiYhdGhpcy5zY3JvbGxBY3Rpb24mJih0aGlzLnNjcm9sbEFjdGlvbj1bSi5BQ1RJT05fVFlQRV9QQUdFX1NDUk9MTCx0aGlzLm9wdGlvbnMub25SZWFjaEJvdHRvbURpc3RhbmNlXSx0aGlzLnB1c2godGhpcy5zY3JvbGxBY3Rpb24pKX1vbkNyZWF0ZSh0LG4pe3JldHVybiBfUCh0aGlzLHQubm9kZUlkLG4pLHR9b25JbnNlcnRCZWZvcmUodCxuLHIpe3JldHVybiBiUCh0aGlzLG4sdC5ub2RlSWQsciYmci5ub2RlSWR8fC0xKSxufW9uUmVtb3ZlQ2hpbGQodCl7cmV0dXJuIHlQKHRoaXMsdC5ub2RlSWQpLHR9b25BZGRFdmVudCh0LG4scil7dC5wYXJlbnROb2RlJiZFUCh0aGlzLHQubm9kZUlkLG4scil9b25BZGRXeHNFdmVudCh0LG4scixvKXt0LnBhcmVudE5vZGUmJlNQKHRoaXMsdC5ub2RlSWQsbixyLG8pfW9uUmVtb3ZlRXZlbnQodCxuKXt0LnBhcmVudE5vZGUmJndQKHRoaXMsdC5ub2RlSWQsbil9b25TZXRBdHRyaWJ1dGUodCxuLHIpe3QucGFyZW50Tm9kZSYmQVAodGhpcyx0Lm5vZGVJZCxuLHIpfW9uUmVtb3ZlQXR0cmlidXRlKHQsbil7dC5wYXJlbnROb2RlJiZPUCh0aGlzLHQubm9kZUlkLG4pfW9uVGV4dENvbnRlbnQodCxuKXt0LnBhcmVudE5vZGUmJnVwKHRoaXMsdC5ub2RlSWQsbil9b25Ob2RlVmFsdWUodCxuKXt0LnBhcmVudE5vZGUmJnVwKHRoaXMsdC5ub2RlSWQsbil9Z2VuSWQoKXtyZXR1cm4gdGhpcy5faWQrK31wdXNoKHQsbil7aWYoIXRoaXMuaXNVbm1vdW50ZWQpe3N3aXRjaCh0WzBdKXtjYXNlIEouQUNUSU9OX1RZUEVfQ1JFQVRFOnRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5zZXQodFsxXSx0KTticmVhaztjYXNlIEouQUNUSU9OX1RZUEVfSU5TRVJUOmxldCByPXRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5nZXQodFsxXSk7cj8oclszXT10WzJdLHJbNF09dFszXSxuJiYocls1XT1uKSk6KG4mJih0WzRdPW4pLHRoaXMudXBkYXRlQWN0aW9ucy5wdXNoKHQpKTticmVha310WzBdIT09Si5BQ1RJT05fVFlQRV9JTlNFUlQmJnRoaXMudXBkYXRlQWN0aW9ucy5wdXNoKHQpLHRoaXMuX3VwZGF0aW5nfHwodGhpcy5fdXBkYXRpbmc9ITAsaG4ucXVldWVQb3N0Rmx1c2hDYih0aGlzLl91cGRhdGUpKX19cmVzdG9yZSgpe3RoaXMuY2xlYXIoKSx0aGlzLnNldHVwKCksdGhpcy5zY3JvbGxBY3Rpb24mJnRoaXMucHVzaCh0aGlzLnNjcm9sbEFjdGlvbik7bGV0IHQ9bj0+e3RoaXMub25DcmVhdGUobixuLm5vZGVOYW1lKSx0aGlzLm9uSW5zZXJ0QmVmb3JlKG4ucGFyZW50Tm9kZSxuLG51bGwpLG4uY2hpbGROb2Rlcy5mb3JFYWNoKHI9Pnt0KHIpfSl9O3RoaXMuY2hpbGROb2Rlcy5mb3JFYWNoKG49PnQobikpLHRoaXMucHVzaCh0aGlzLmNyZWF0ZWRBY3Rpb24pfXNldHVwKCl7dGhpcy5zZW5kKFt0aGlzLmNyZWF0ZUFjdGlvbl0pfXVwZGF0ZSgpe2xldHtkaWN0czp0LHVwZGF0ZUFjdGlvbnM6bixfY3JlYXRlQWN0aW9uTWFwOnJ9PXRoaXM7dGhpcy5fY3JlYXRlZHx8KHRoaXMuX2NyZWF0ZWQ9ITAsbi5wdXNoKHRoaXMuY3JlYXRlZEFjdGlvbikpLG4ubGVuZ3RoJiYodC5sZW5ndGgmJm4udW5zaGlmdChbSE8sdF0pLHRoaXMuc2VuZChuKSksdGhpcy5jbGVhcigpfWNsZWFyKCl7dGhpcy5kaWN0cy5sZW5ndGg9MCx0aGlzLnVwZGF0ZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy5fdXBkYXRpbmc9ITEsdGhpcy5fY3JlYXRlQWN0aW9uTWFwLmNsZWFyKCl9c2VuZCh0KXtvdC5wdWJsaXNoSGFuZGxlcihDZyx0LHRoaXMucGFnZUlkKX1maXJlRXZlbnQodCxuKXtsZXQgcj1jcCh0LHRoaXMpO3ImJnIuZGlzcGF0Y2hFdmVudChuKX19ZnVuY3Rpb24gdlAoZSl7bGV0IHQ9SXIoZSk7cmV0dXJuIHQ/dC5fX3BhZ2VfY29udGFpbmVyX186bnVsbH1mdW5jdGlvbiBzZihlLHQsbil7aWYodHlwZW9mIG49PSJudW1iZXIiJiYobj12UChuKSksbltlXT09PXQpcmV0dXJuIG47bGV0e2NoaWxkTm9kZXM6cn09bjtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGM9c2YoZSx0LHJbb10pO2lmKGMpcmV0dXJuIGN9cmV0dXJuIG51bGx9ZnVuY3Rpb24gY3AoZSx0KXtyZXR1cm4gc2YoIm5vZGVJZCIsZSx0KX1mdW5jdGlvbiBtUChlLHQpe3JldHVybiBzZigibm9kZU5hbWUiLGUudG9VcHBlckNhc2UoKSx0KX1mdW5jdGlvbiBfUChlLHQsbil7ZS5wdXNoKFtKLkFDVElPTl9UWVBFX0NSRUFURSx0LGUuYWRkRGljdChuKSwtMSwtMV0pfWZ1bmN0aW9uIGJQKGUsdCxuLHIpe2xldCBvPXQudG9KU09OKHthdHRyOiEwLG5vcm1hbGl6ZTplLm5vcm1hbGl6ZURpY3R9KTtlLnB1c2goW0ouQUNUSU9OX1RZUEVfSU5TRVJULHQubm9kZUlkLG4scl0sT2JqZWN0LmtleXMobykubGVuZ3RoP286dm9pZCAwKX1mdW5jdGlvbiB5UChlLHQpe2UucHVzaChbSi5BQ1RJT05fVFlQRV9SRU1PVkUsdF0pfWZ1bmN0aW9uIEVQKGUsdCxuLHIpe2UucHVzaChbSi5BQ1RJT05fVFlQRV9BRERfRVZFTlQsdCxlLmFkZERpY3Qobikscl0pfWZ1bmN0aW9uIFNQKGUsdCxuLHIsbyl7ZS5wdXNoKFtKLkFDVElPTl9UWVBFX0FERF9XWFNfRVZFTlQsdCxlLmFkZERpY3QobiksZS5hZGREaWN0KHIpLG9dKX1mdW5jdGlvbiB3UChlLHQsbil7ZS5wdXNoKFtKLkFDVElPTl9UWVBFX1JFTU9WRV9FVkVOVCx0LGUuYWRkRGljdChuKV0pfWZ1bmN0aW9uIENQKGUsdCxuKXtyZXR1cm4gdD09PSJzdHlsZSImJnouaXNQbGFpbk9iamVjdChuKT9lLm5vcm1hbGl6ZURpY3Qobik6ZS5hZGREaWN0KG4pfWZ1bmN0aW9uIEFQKGUsdCxuLHIpe2UucHVzaChbSi5BQ1RJT05fVFlQRV9TRVRfQVRUUklCVVRFLHQsZS5hZGREaWN0KG4pLENQKGUsbixyKV0pfWZ1bmN0aW9uIE9QKGUsdCxuKXtlLnB1c2goW0ouQUNUSU9OX1RZUEVfUkVNT1ZFX0FUVFJJQlVURSx0LGUuYWRkRGljdChuKV0pfWZ1bmN0aW9uIHVwKGUsdCxuKXtlLnB1c2goW0ouQUNUSU9OX1RZUEVfU0VUX1RFWFQsdCxlLmFkZERpY3QobildKX1mdW5jdGlvbiBUUChlLHQsbil7cmV0dXJuIG5ldyBwUChlLHQsbil9ZnVuY3Rpb24gZnAoZSl7bGV0IHQ9ZS5zZXR1cDtyZXR1cm4gZS5pbmhlcml0QXR0cnM9ITEsZS5zZXR1cD0obixyKT0+e2xldHthdHRyczp7X19wYWdlSWQ6byxfX3BhZ2VQYXRoOmMsX19wYWdlUXVlcnk6ZyxfX3BhZ2VJbnN0YW5jZTpifX09cixUPWhuLmdldEN1cnJlbnRJbnN0YW5jZSgpLnByb3h5O2lmKGd0KFQsYiksJG4oZHAobyxULGIpKSxobi5vbk1vdW50ZWQoKCk9Pntobi5uZXh0VGljaygoKT0+e1ZuKFQsSi5PTl9SRUFEWSl9KX0pLGhuLm9uQmVmb3JlVW5tb3VudCgoKT0+e1ZuKFQsSi5PTl9VTkxPQUQpfSksdClyZXR1cm4gdChnLHIpfSxlfWZ1bmN0aW9uIGRwKGUsdCxuKXt7bGV0IHI9KCk9PnMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChlKyIiKTt0LiRnZXRBcHBXZWJ2aWV3PXIsdC4kLmN0eC4kc2NvcGU9eyRnZXRBcHBXZWJ2aWV3OnJ9fXJldHVybiB0LmdldE9wZW5lckV2ZW50Q2hhbm5lbD0oKT0+KG4uZXZlbnRDaGFubmVsfHwobi5ldmVudENoYW5uZWw9bmV3IEouRXZlbnRDaGFubmVsKGUpKSxuLmV2ZW50Q2hhbm5lbCksdH1mdW5jdGlvbiBQUChlKXtyZXR1cm4gei5pc0Z1bmN0aW9uKGUpfWxldCBocD1uZXcgTWFwO2Z1bmN0aW9uIElQKGUsdCl7aHAuc2V0KGUsSi5vbmNlKGtQKHQpKSl9ZnVuY3Rpb24gTlAoZSx0LG4scixvKXtsZXQgYz1UUChlLG8sITApLGc9cWkoKSxiPWhwLmdldCh0KSgpLFY9VD0+Zy5tb3VudFBhZ2UoVCx7X19wYWdlSWQ6ZSxfX3BhZ2VQYXRoOnQsX19wYWdlUXVlcnk6bixfX3BhZ2VJbnN0YW5jZTpyfSxjKTtyZXR1cm4gei5pc1Byb21pc2UoYik/Yi50aGVuKFQ9PlYoVCkpOlYoYil9ZnVuY3Rpb24ga1AoZSl7cmV0dXJuKCk9PlBQKGUpP2UoKS50aGVuKHQ9PmZwKHQpKTpmcChlKX1sZXQgZ3A9ITE7ZnVuY3Rpb24gcHAoKXtpZihncClyZXR1cm47Z3A9ITA7bGV0IGUsdDtpZihmLnJlcXVpcmVNb2R1bGUoInBsdXMiKS5nZXRSZWRpcmVjdEluZm8pe2xldHtwYXRoOmMscXVlcnk6ZyxyZWZlcnJlckluZm86Yn09QnMoKTtjJiYoZT1jLHQ9ZyksUi5yZWZlcnJlckluZm89Yn1lbHNle2xldCBjPXMucnVudGltZS5hcmd1bWVudHM7aWYoIWMpcmV0dXJuO3RyeXtsZXQgZz1KU09OLnBhcnNlKGMpO2U9Zy5wYXRofHxnLnBhdGhOYW1lLHQ9Zy5xdWVyeT8iPyIrZy5xdWVyeToiIn1jYXRjaChnKXt9fWlmKCFlfHxlPT09Ui5lbnRyeVBhZ2VQYXRoKXt0JiYoUi5lbnRyeVBhZ2VRdWVyeT10KTtyZXR1cm59bGV0IHI9Si5hZGRMZWFkaW5nU2xhc2goZSksbz1XaShyKTshb3x8KG8ubWV0YS5pc1RhYkJhcnx8KFIucmVhbEVudHJ5UGFnZVBhdGg9Ui5yZWFsRW50cnlQYWdlUGF0aHx8Ui5lbnRyeVBhZ2VQYXRoKSxSLmVudHJ5UGFnZVBhdGg9ZSxSLmVudHJ5UGFnZVF1ZXJ5PXQpfWZ1bmN0aW9uIHFjKGUsdCl7bGV0IG49SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShXaShlKSkpO3JldHVybiBuLm1ldGE9RmEobi5tZXRhKSx0IT09InByZWxvYWRQYWdlIiYmIVIucmVhbEVudHJ5UGFnZVBhdGgmJih0PT09InJlTGF1bmNoInx8SW4oKS5sZW5ndGg9PT0wKT9uLm1ldGEuaXNRdWl0PSEwOm4ubWV0YS5pc1RhYkJhcnx8KG4ubWV0YS5pc1F1aXQ9ITEpLG59bGV0IENhPXt9O2Z1bmN0aW9uIFJQKGUpe2xldCB0PU9iamVjdC5rZXlzKENhKS5maW5kKG49PkNhW25dLmlkPT09ZS5pZCk7dCYmZGVsZXRlIENhW3RdfWZ1bmN0aW9uIHhQKHt1cmw6ZX0pe2xldCB0PUNhW2VdO3JldHVybiB0JiYodC5fX3BhZ2VfXyYmSW4oKS5maW5kKG49Pm49PT10Ll9fcGFnZV9fKT90Ll9fcHJlbG9hZF9fPSExOnQuY2xvc2UoIm5vbmUiKSxkZWxldGUgQ2FbZV0pLHR9ZnVuY3Rpb24gQlAoe3VybDplLHBhdGg6dCxxdWVyeTpufSl7aWYoIUNhW2VdKXtsZXQgcj1xYyh0LCJwcmVsb2FkUGFnZSIpO0NhW2VdPWlwKHtwYXRoOnQscm91dGVPcHRpb25zOnIscXVlcnk6bix3ZWJ2aWV3RXh0cmFzOntfX3ByZWxvYWRfXzohMH19KX1yZXR1cm4gQ2FbZV19ZnVuY3Rpb24gZmMoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOnIsd2VidmlldzpvLG52dWVQYWdlVm06YyxldmVudENoYW5uZWw6Z30pe2lmKG8mJnBwKCksQ2FbZV0pe289Q2FbZV07bGV0IHdlPW87aWYod2UuX19wYWdlX18paWYoSW4oKS5maW5kKFBlPT5QZT09PXdlLl9fcGFnZV9fKSlvPXZvaWQgMDtlbHNlIHJldHVybiBnJiYod2UuX19wYWdlX18uJHBhZ2UuZXZlbnRDaGFubmVsPWcpLHI9PT0ibGF1bmNoIj9NUChlLHQsbix3ZSxjLGcpOiRuKHdlLl9fcGFnZV9fKSx3ZX1sZXQgYj1xYyh0LHIpO28/KG89cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKG8uaWQpLG8ubnZ1ZT1iLm1ldGEuaXNOVnVlKTpvPWlwKHtwYXRoOnQscm91dGVPcHRpb25zOmIscXVlcnk6bn0pLGIubWV0YS5pZD1wYXJzZUludChvLmlkKSwhIWIubWV0YS5pc1RhYkJhciYmZGkuYXBwZW5kKG8pLHVQKG8sdCxuLGIubWV0YSk7bGV0IFQ9dC5zbGljZSgxKTtvLl9fdW5pYXBwX3JvdXRlPVQ7bGV0IEw9Z2EocixlLG4sYi5tZXRhLGcsUi5kYXJrbW9kZT9zLm5hdmlnYXRvci5nZXRVSVN0eWxlKCk6ImxpZ2h0IiksX2U9cGFyc2VJbnQoby5pZCk7cmV0dXJuIG8ubnZ1ZT9jP0xQKF9lLGMsTCk6dnAoX2UsbyxMKTpOUChfZSxULG4sTCxEUChiKSksb31mdW5jdGlvbiBNUChlLHQsbixyLG8sYyl7bGV0IGc9cWModCwicHJlbG9hZFBhZ2UiKTtnLm1ldGEuaWQ9cGFyc2VJbnQoci5pZCk7bGV0IGI9Z2EoInByZWxvYWRQYWdlIixlLG4sZy5tZXRhLGMsUi5kYXJrbW9kZT9zLm5hdmlnYXRvci5nZXRVSVN0eWxlKCk6ImxpZ2h0Iik7Z3QobyxiKSxyLl9fcGFnZV9fPW99ZnVuY3Rpb24gRFAoe21ldGE6ZX0pe2xldCB0PVd1KCkse3BsYXRmb3JtOm4scGl4ZWxSYXRpbzpyLHdpbmRvd1dpZHRoOm99PVJyKCk7cmV0dXJue2NzczohMCxyb3V0ZTplLnJvdXRlLHZlcnNpb246MSxsb2NhbGU6IiIscGxhdGZvcm06bixwaXhlbFJhdGlvOnIsd2luZG93V2lkdGg6byxkaXNhYmxlU2Nyb2xsOmUuZGlzYWJsZVNjcm9sbD09PSEwLG9uUGFnZVNjcm9sbDohMSxvblBhZ2VSZWFjaEJvdHRvbTohMSxvblJlYWNoQm90dG9tRGlzdGFuY2U6ei5oYXNPd24oZSwib25SZWFjaEJvdHRvbURpc3RhbmNlIik/ZS5vblJlYWNoQm90dG9tRGlzdGFuY2U6Si5PTl9SRUFDSF9CT1RUT01fRElTVEFOQ0Usc3RhdHVzYmFySGVpZ2h0OnQsd2luZG93VG9wOmUubmF2aWdhdGlvbkJhci50eXBlPT09ImZsb2F0Ij90K0ouTkFWQkFSX0hFSUdIVDowLHdpbmRvd0JvdHRvbTpkaS5pbmRleE9mKGUucm91dGUpPj0wJiZkaS5jb3Zlcj9kaS5oZWlnaHQ6MH19ZnVuY3Rpb24gTFAoZSx0LG4pe2d0KHQsbiksJG4oZHAoZSx0LG4pKSxlPT09MSYmKFIuc3BsYXNoc2NyZWVuJiZSLnNwbGFzaHNjcmVlbi5hdXRvY2xvc2UmJiFSLnNwbGFzaHNjcmVlbi5hbHdheXNTaG93QmVmb3JlUmVuZGVyJiZzLm5hdmlnYXRvci5jbG9zZVNwbGFzaHNjcmVlbigpLFIub25SZWFkeShmdW5jdGlvbigpe2xwKCl9KSl9ZnVuY3Rpb24gdnAoZSx0LG4pe2xldCByPXskOnt9LCRnZXRBcHBXZWJ2aWV3KCl7cmV0dXJuIHR9LGdldE9wZW5lckV2ZW50Q2hhbm5lbCgpe3JldHVybiBuLmV2ZW50Q2hhbm5lbHx8KG4uZXZlbnRDaGFubmVsPW5ldyBKLkV2ZW50Q2hhbm5lbChlKSksbi5ldmVudENoYW5uZWx9LF9fc2V0dXAobyxjKXtvLiRnZXRBcHBXZWJ2aWV3PSgpPT50LG8uZ2V0T3BlbmVyRXZlbnRDaGFubmVsPWMuZ2V0T3BlbmVyRXZlbnRDaGFubmVsLGd0KG8sbiksdC5fX3ByZWxvYWRfXyYmKHQuX19wYWdlX189byk7bGV0IGc9SG4oKSxiPWcuZmluZEluZGV4KFY9PlY9PT1jKTtiPi0xJiZnLnNwbGljZShiLDEsbyl9fTtndChyLG4pLHQuX19wcmVsb2FkX18/KHQuX19wYWdlX189cix0LmFkZEV2ZW50TGlzdGVuZXIoInNob3ciLCgpPT57Vm4odC5fX3BhZ2VfXyxKLk9OX1NIT1cpfSksdC5hZGRFdmVudExpc3RlbmVyKCJoaWRlIiwoKT0+e1ZuKHQuX19wYWdlX18sSi5PTl9ISURFKX0pKTokbihyKX1sZXQgbXA9KGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0e3VybDpyLGV2ZW50czpvLGFuaW1hdGlvblR5cGU6YyxhbmltYXRpb25EdXJhdGlvbjpnfT1lLHtwYXRoOmIscXVlcnk6Vn09Si5wYXJzZVVybChyKSxbVCxMXT1VUChiLGMsZyk7emMoYiwoKT0+e1ZQKHt1cmw6cixwYXRoOmIscXVlcnk6VixldmVudHM6byxhbmlUeXBlOlQsYW5pRHVyYXRpb246TH0pLnRoZW4odCkuY2F0Y2gobil9LGUub3BlblR5cGU9PT0iYXBwTGF1bmNoIil9LEZQPVRlKEx1LG1wLElFLERFKTtmdW5jdGlvbiBWUCh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sZXZlbnRzOnIsYW5pVHlwZTpvLGFuaUR1cmF0aW9uOmN9KXtWbihKLk9OX0hJREUpO2xldCBnPW5ldyBKLkV2ZW50Q2hhbm5lbChLZygpKzEscik7cmV0dXJuIG5ldyBQcm9taXNlKGI9PntHYyhmYyh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sb3BlblR5cGU6Im5hdmlnYXRlVG8iLGV2ZW50Q2hhbm5lbDpnfSksbyxjLCgpPT57Yih7ZXZlbnRDaGFubmVsOmd9KX0pLEJhKCl9KX1mdW5jdGlvbiBVUChlLHQsbil7bGV0e2dsb2JhbFN0eWxlOnJ9PVIsbz1vcyhlKTtyZXR1cm5bdHx8by5hbmltYXRpb25UeXBlfHxyLmFuaW1hdGlvblR5cGV8fE1ULG58fG8uYW5pbWF0aW9uRHVyYXRpb258fHIuYW5pbWF0aW9uRHVyYXRpb258fGpjXX1sZXQgJFA9VGUoRnUsKHt1cmw6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0e3BhdGg6cixxdWVyeTpvfT1KLnBhcnNlVXJsKGUpO3pjKHIsKCk9PntIUCh7dXJsOmUscGF0aDpyLHF1ZXJ5Om99KS50aGVuKHQpLmNhdGNoKG4pfSl9LGtFLExFKTtmdW5jdGlvbiBIUCh7dXJsOmUscGF0aDp0LHF1ZXJ5Om59KXtsZXQgcj13aSgpO3JldHVybiByJiZuYShyKSxuZXcgUHJvbWlzZShvPT57R2MoZmMoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOiJyZWRpcmVjdFRvIn0pLCJub25lIiwwLCgpPT57aWYocil7bGV0IGM9ci4kZ2V0QXBwV2VidmlldygpO2MuX19wcmVsb2FkX18mJlJQKGMpLGMuY2xvc2UoIm5vbmUiKX1vKHZvaWQgMCl9KSxCYSgpfSl9bGV0IGpQPSh7dXJsOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtwYXRoOnIscXVlcnk6b309Si5wYXJzZVVybChlKTt6YyhyLCgpPT57elAoe3VybDplLHBhdGg6cixxdWVyeTpvfSkudGhlbih0KS5jYXRjaChuKX0pfTtmdW5jdGlvbiB6UCh7dXJsOmUscGF0aDp0LHF1ZXJ5Om59KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBvPUhuKCkuc2xpY2UoMCk7RmUuZmluZChnPT5nLnBhdGg9PT10KS5tZXRhLmlzVGFiQmFyJiZkaS5zd2l0Y2hUYWIodC5zbGljZSgxKSksR2MoZmMoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOiJyZUxhdW5jaCJ9KSwibm9uZSIsMCwoKT0+e28uZm9yRWFjaChnPT5zcChnLCJub25lIikpLHIodm9pZCAwKX0pLEJhKCl9KX1sZXQgV1A9VGUoVGgsalAsUkUsRkUpLF9wPShlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHt1cmw6cn09ZSx7cGF0aDpvLHF1ZXJ5OmN9PUoucGFyc2VVcmwocik7emMobywoKT0+e1lQKHt1cmw6cixwYXRoOm8scXVlcnk6Y30pLnRoZW4odCkuY2F0Y2gobil9LGUub3BlblR5cGU9PT0iYXBwTGF1bmNoIil9LEdQPVRlKFBjLF9wLHhFLFZFKTtmdW5jdGlvbiBZUCh7dXJsOmUscGF0aDp0LHF1ZXJ5Om59KXtkaS5zd2l0Y2hUYWIodC5zbGljZSgxKSk7bGV0IHI9SW4oKSxvPXIubGVuZ3RoLGM9ITEsZz0hMSxiO28+PTEmJihiPXJbby0xXSxiJiYhYi4kLl9faXNUYWJCYXI/KGc9ITAsci5yZXZlcnNlKCkuZm9yRWFjaChUPT57IVQuJC5fX2lzVGFiQmFyJiZUIT09YiYmc3AoVCwibm9uZSIpfSksbmEoYiksTigoKT0+e2IuJHBhZ2Uub3BlblR5cGU9PT0icmVkaXJlY3RUbyI/bmwoYi4kZ2V0QXBwV2VidmlldygpLFlnLGpjKTpubChiLiRnZXRBcHBXZWJ2aWV3KCksImF1dG8iKX0sMTAwKSk6Yz0hMCk7bGV0IFY7cmV0dXJuIEhuKCkuZm9yRWFjaChUPT57Si5hZGRMZWFkaW5nU2xhc2goVC5yb3V0ZSk9PT10PyhULiQuX19pc0FjdGl2ZXx8KGc9ITApLFQuJC5fX2lzQWN0aXZlPSEwLFY9VCk6VC4kLl9faXNUYWJCYXImJihULiQuX19pc0FjdGl2ZT0hMSl9KSxiPT09ViYmKGM9ITEpLGImJmMmJlZuKGIsSi5PTl9ISURFKSxuZXcgUHJvbWlzZShUPT57aWYoVil7bGV0IEw9Vi4kZ2V0QXBwV2VidmlldygpO0wuc2hvdygibm9uZSIpLGcmJiFMLl9fcHJlbG9hZF9fJiZWbihWLEouT05fU0hPVyksQmEoKSxUKHZvaWQgMCl9ZWxzZSBHYyhmYyh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sb3BlblR5cGU6InN3aXRjaFRhYiJ9KSwibm9uZSIsMCwoKT0+e0JhKCksVCh2b2lkIDApfSw3MCl9KX1sZXQgcVA9RHQoUGgsKHt1cmw6ZX0pPT57bGV0IHQ9eFAoe3VybDplfSk7cmV0dXJuIHQ/e2lkOnQuaWQsdXJsOmUsZXJyTXNnOiJ1blByZWxvYWRQYWdlOm9rIn06e3VybDplLGVyck1zZzoidW5QcmVsb2FkUGFnZTpmYWlsIG5vdCBmb3VuZCJ9fSxNRSksSlA9VGUoVnUsKHt1cmw6ZX0se3Jlc29sdmU6dH0pPT57aWYoQ2FbZV0pcmV0dXJuO2xldCBuPWUuc3BsaXQoIj8iKSxyPW5bMF0sbz1KLnBhcnNlUXVlcnkoblsxXXx8IiIpLGM9QlAoe3VybDplLHBhdGg6cixxdWVyeTpvfSksZz1xYyhyLCJwcmVsb2FkUGFnZSIpO2cubWV0YS5pZD1wYXJzZUludChjLmlkKTtsZXQgYj1nYSgicHJlbG9hZFBhZ2UiLGUsbyxnLm1ldGEsdm9pZCAwLFIuZGFya21vZGU/cy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpOiJsaWdodCIpO3ZwKHBhcnNlSW50KGMuaWQpLGMsYiksdCh7aWQ6Yy5pZCx1cmw6ZSxlcnJNc2c6InByZWxvYWRQYWdlOm9rIn0pfSxCRSk7dmFyIEtQPXtfX3Byb3RvX186bnVsbCwkZW1pdDpjXywkb2ZmOmxfLCRvbjphXywkb25jZTpzXyxfX2xvZ19fOmRULGFkZEludGVyY2VwdG9yOkttLGFkZFBob25lQ29udGFjdDpMQyxhcnJheUJ1ZmZlclRvQmFzZTY0OlRyLGJhc2U2NFRvQXJyYXlCdWZmZXI6UmksY2FuSVVzZTpqdyxjYW52YXNHZXRJbWFnZURhdGE6TF8sY2FudmFzUHV0SW1hZ2VEYXRhOkZfLGNhbnZhc1RvVGVtcEZpbGVQYXRoOlZfLGNoZWNrSXNTb3RlckVucm9sbGVkSW5EZXZpY2U6akMsY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uOkhDLGNob29zZUltYWdlOmZBLGNob29zZUxvY2F0aW9uOmNPLGNob29zZVZpZGVvOmRBLGNsZWFyU3RvcmFnZTpOdyxjbGVhclN0b3JhZ2VTeW5jOkl3LGNsb3NlQXV0aFZpZXc6a2csY2xvc2VCTEVDb25uZWN0aW9uOkVDLGNsb3NlQmx1ZXRvb3RoQWRhcHRlcjpnQyxjbG9zZVByZXZpZXdJbWFnZTpuQSxjbG9zZVNvY2tldDpJQSxjb21wcmVzc0ltYWdlOmxBLGNvbXByZXNzVmlkZW86Y0EsY29uZmlnTVRMUzp3QSxjb25uZWN0U29ja2V0OlRBLGNyZWF0ZUFuaW1hdGlvbjppYixjcmVhdGVCTEVDb25uZWN0aW9uOnlDLGNyZWF0ZUNhbnZhc0NvbnRleHQ6RF8sY3JlYXRlRnVsbFNjcmVlblZpZGVvQWQ6SVQsY3JlYXRlSW5uZXJBdWRpb0NvbnRleHQ6V0EsY3JlYXRlSW50ZXJhY3RpdmVBZDpCVCxjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcjp6XyxjcmVhdGVJbnRlcnN0aXRpYWxBZDprVCxjcmVhdGVMaXZlUHVzaGVyQ29udGV4dDpvTyxjcmVhdGVNYXBDb250ZXh0OkVfLGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZlcjpHXyxjcmVhdGVQdXNoTWVzc2FnZTpuVCxjcmVhdGVSZXdhcmRlZFZpZGVvQWQ6VFQsY3JlYXRlU2VsZWN0b3JRdWVyeTpYXyxjcmVhdGVWaWRlb0NvbnRleHQ6Yl8sZG93bmxvYWRGaWxlOl9BLGdldEFwcEF1dGhvcml6ZVNldHRpbmc6Y2csZ2V0QXBwQmFzZUluZm86cWgsZ2V0QkxFRGV2aWNlQ2hhcmFjdGVyaXN0aWNzOndDLGdldEJMRURldmljZVJTU0k6UEMsZ2V0QkxFRGV2aWNlU2VydmljZXM6U0MsZ2V0QmFja2dyb3VuZEF1ZGlvTWFuYWdlcjpuTyxnZXRCZWFjb25zOmtDLGdldEJsdWV0b290aEFkYXB0ZXJTdGF0ZTpwQyxnZXRCbHVldG9vdGhEZXZpY2VzOl9DLGdldENoZWNrQm94U3RhdGU6UmcsZ2V0Q2xpcGJvYXJkRGF0YTpGQyxnZXRDb25uZWN0ZWRCbHVldG9vdGhEZXZpY2VzOmJDLGdldERldmljZUluZm86WWgsZ2V0RW50ZXJPcHRpb25zU3luYzpPYixnZXRGaWxlSW5mbzpSdyxnZXRJbWFnZUluZm86UUMsZ2V0TGF1bmNoT3B0aW9uc1N5bmM6VGIsZ2V0TG9jYWxlOktsLGdldExvY2F0aW9uOmxPLGdldE5ldHdvcmtUeXBlOnJnLGdldFByb3ZpZGVyOktPLGdldFB1c2hDbGllbnRJZDpQYixnZXRSZWNvcmRlck1hbmFnZXI6b0EsZ2V0U2F2ZWRGaWxlSW5mbzpVdyxnZXRTYXZlZEZpbGVMaXN0OlZ3LGdldFNjcmVlbkJyaWdodG5lc3M6cUMsZ2V0U2VsZWN0ZWRUZXh0UmFuZ2U6Z2IsZ2V0U3RvcmFnZTpPdyxnZXRTdG9yYWdlSW5mbzprdyxnZXRTdG9yYWdlSW5mb1N5bmM6TWgsZ2V0U3RvcmFnZVN5bmM6QXcsZ2V0U3ViTlZ1ZUJ5SWQ6R08sZ2V0U3lzdGVtSW5mbzpuQyxnZXRTeXN0ZW1JbmZvU3luYzpKaCxnZXRTeXN0ZW1TZXR0aW5nOlpDLGdldFVuaXZlcmlmeU1hbmFnZXI6dFQsZ2V0VXNlckluZm86Wk8sZ2V0VXNlclByb2ZpbGU6WE8sZ2V0VmlkZW9JbmZvOmVBLGdldFdpbmRvd0luZm86R2gsaGlkZUtleWJvYXJkOmdBLGhpZGVMb2FkaW5nOndPLGhpZGVOYXZpZ2F0aW9uQmFyTG9hZGluZzpOTyxoaWRlVGFiQmFyOkRPLGhpZGVUYWJCYXJSZWREb3Q6VU8saGlkZVRvYXN0OlNPLGluaXRVVFNDbGFzc05hbWU6amcsaW5pdFVUU0luZGV4Q2xhc3NOYW1lOlNULGluaXRVVFNQYWNrYWdlTmFtZTpFVCxpbml0VVRTUHJveHlDbGFzczpIZyxpbml0VVRTUHJveHlGdW5jdGlvbjpfVCxpbnRlcmNlcHRvcnM6WG0saW52b2tlUHVzaENhbGxiYWNrOk11LGxvYWRGb250RmFjZTpPTyxsb2dpbjpUZyxtYWtlUGhvbmVDYWxsOkJDLG5hdmlnYXRlQmFjazpkUCxuYXZpZ2F0ZVRvOkZQLG5hdmlnYXRlVG9NaW5pUHJvZ3JhbTpjVCxub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlOkNDLG9mZkFjY2VsZXJvbWV0ZXJDaGFuZ2U6bEMsb2ZmQXBwSGlkZTpBYixvZmZBcHBTaG93OndiLG9mZkNvbXBhc3NDaGFuZ2U6aUMsb2ZmRXJyb3I6RWIsb2ZmS2V5Ym9hcmRIZWlnaHRDaGFuZ2U6dkEsb2ZmTG9jYXRpb25DaGFuZ2U6Z08sb2ZmTG9jYXRpb25DaGFuZ2VFcnJvcjp2TyxvZmZOZXR3b3JrU3RhdHVzQ2hhbmdlOiRDLG9mZlBhZ2VOb3RGb3VuZDpiYixvZmZQdXNoTWVzc2FnZTpOYixvZmZUaGVtZUNoYW5nZTpZQyxvZmZVbmhhbmRsZWRSZWplY3Rpb246bWIsb2ZmV2luZG93UmVzaXplOmNiLG9uQWNjZWxlcm9tZXRlckNoYW5nZTpzQyxvbkFwcEhpZGU6Q2Isb25BcHBTaG93OlNiLG9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZTpkQyxvbkJMRUNvbm5lY3Rpb25TdGF0ZUNoYW5nZTpmQyxvbkJlYWNvblNlcnZpY2VDaGFuZ2U6TkMsb25CZWFjb25VcGRhdGU6SUMsb25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2U6dUMsb25CbHVldG9vdGhEZXZpY2VGb3VuZDpjQyxvbkNvbXBhc3NDaGFuZ2U6ckMsb25DcmVhdGVWdWVBcHA6Si5vbkNyZWF0ZVZ1ZUFwcCxvbkVycm9yOnliLG9uSG9zdEV2ZW50UmVjZWl2ZTpEZyxvbktleWJvYXJkSGVpZ2h0Q2hhbmdlOnBBLG9uTG9jYWxlQ2hhbmdlOmZiLG9uTG9jYXRpb25DaGFuZ2U6aE8sb25Mb2NhdGlvbkNoYW5nZUVycm9yOnBPLG9uTmF0aXZlRXZlbnRSZWNlaXZlOnVULG9uTmV0d29ya1N0YXR1c0NoYW5nZTpVQyxvblBhZ2VOb3RGb3VuZDpfYixvblB1c2hNZXNzYWdlOkliLG9uU29ja2V0Q2xvc2U6eEEsb25Tb2NrZXRFcnJvcjprQSxvblNvY2tldE1lc3NhZ2U6UkEsb25Tb2NrZXRPcGVuOk5BLG9uVGFiQmFyTWlkQnV0dG9uVGFwOm9iLG9uVGhlbWVDaGFuZ2U6R0Msb25VbmhhbmRsZWRSZWplY3Rpb246dmIsb25XaW5kb3dSZXNpemU6bGIsb3BlbkFwcEF1dGhvcml6ZVNldHRpbmc6WEMsb3BlbkJsdWV0b290aEFkYXB0ZXI6aEMsb3BlbkRvY3VtZW50Okh3LG9wZW5Mb2NhdGlvbjp1TyxwYWdlU2Nyb2xsVG86VE8scHJlTG9naW46SWcscHJlbG9hZFBhZ2U6SlAscHJldmlld0ltYWdlOnRBLHJlTGF1bmNoOldQLHJlYWRCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlOkFDLHJlZGlyZWN0VG86JFAscmVnaXN0ZXJSdW50aW1lOnJULHJlZ2lzdGVyVVRTSW50ZXJmYWNlOndULHJlZ2lzdGVyVVRTUGx1Z2luOkNULHJlbW92ZUludGVyY2VwdG9yOlptLHJlbW92ZVNhdmVkRmlsZTokdyxyZW1vdmVTdG9yYWdlOlB3LHJlbW92ZVN0b3JhZ2VTeW5jOlR3LHJlbW92ZVRhYkJhckJhZGdlOlZPLHJlcXVlc3Q6U0EscmVxdWVzdFBheW1lbnQ6bFQscmVxdWlyZUdsb2JhbDpxTyxyZXF1aXJlTmF0aXZlUGx1Z2luOkpvLHJlcXVpcmVVVFNQbHVnaW46QVQscmVzdG9yZUdsb2JhbDpZTyxzYXZlRmlsZTpEdyxzYXZlSW1hZ2VUb1Bob3Rvc0FsYnVtOnNBLHNhdmVWaWRlb1RvUGhvdG9zQWxidW06YUEsc2NhbkNvZGU6V0Msc2VuZEhvc3RFdmVudDpCZyxzZW5kTmF0aXZlRXZlbnQ6ZWcsc2VuZFNvY2tldE1lc3NhZ2U6UEEsc2V0QkxFTVRVOlRDLHNldENsaXBib2FyZERhdGE6VkMsc2V0S2VlcFNjcmVlbk9uOktDLHNldExvY2FsZTpkYixzZXROYXZpZ2F0aW9uQmFyQ29sb3I6Uk8sc2V0TmF2aWdhdGlvbkJhclRpdGxlOlBPLHNldFBhZ2VNZXRhOmhiLHNldFNjcmVlbkJyaWdodG5lc3M6SkMsc2V0U3RvcmFnZTpDdyxzZXRTdG9yYWdlU3luYzp3dyxzZXRUYWJCYXJCYWRnZTp4TyxzZXRUYWJCYXJJdGVtOkJPLHNldFRhYkJhclN0eWxlOk1PLHNoYXJlOmFULHNoYXJlV2l0aFN5c3RlbTpzVCxzaG93QWN0aW9uU2hlZXQ6Yk8sc2hvd0tleWJvYXJkOmhBLHNob3dMb2FkaW5nOnlPLHNob3dNb2RhbDptTyxzaG93TmF2aWdhdGlvbkJhckxvYWRpbmc6SU8sc2hvd1RhYkJhcjpMTyxzaG93VGFiQmFyUmVkRG90OkZPLHNob3dUb2FzdDpFTyxzdGFydEFjY2VsZXJvbWV0ZXI6WGgsc3RhcnRCZWFjb25EaXNjb3Zlcnk6UkMsc3RhcnRCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5OnZDLHN0YXJ0Q29tcGFzczpLaCxzdGFydExvY2F0aW9uVXBkYXRlOmZPLHN0YXJ0UHVsbERvd25SZWZyZXNoOkNPLHN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbjp6QyxzdG9wQWNjZWxlcm9tZXRlcjpRaCxzdG9wQmVhY29uRGlzY292ZXJ5OnhDLHN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5Om1DLHN0b3BDb21wYXNzOlpoLHN0b3BMb2NhdGlvblVwZGF0ZTpkTyxzdG9wUHVsbERvd25SZWZyZXNoOkFPLHN3aXRjaFRhYjpHUCxzeW5jRGF0YVRvR2xvYmFsOkpPLHVuUHJlbG9hZFBhZ2U6cVAsdXBsb2FkRmlsZTpNQSx1cHgycHg6em0sdmlicmF0ZUxvbmc6YUMsdmlicmF0ZVNob3J0Om9DLHdlZXhHZXRTeXN0ZW1JbmZvU3luYzppYyx3cml0ZUJMRUNoYXJhY3RlcmlzdGljVmFsdWU6T0N9O2xldCBaUD16LmV4dGVuZChVLHtwdWJsaXNoSGFuZGxlcjpYUH0pO2Z1bmN0aW9uIFhQKGUsdCxuKXt0PUpTT04uc3RyaW5naWZ5KHQpLHouaXNBcnJheShuKXx8KG49W25dKTtsZXQgcj1gdHlwZW9mIFVuaVZpZXdKU0JyaWRnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgVW5pVmlld0pTQnJpZGdlLnN1YnNjcmliZUhhbmRsZXIoIiR7ZX0iLCR7dH0sX19QQUdFX0lEX18pYDtuLmZvckVhY2gobz0+e2xldCBjPVN0cmluZyhvKSxnPXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChjKTtnJiZnLmV2YWxKUyhyLnJlcGxhY2UoIl9fUEFHRV9JRF9fIixjKSl9KX1mdW5jdGlvbiBRUCgpe2xldHt0YWJCYXI6ZX09UjtpZighKGUmJmUubGlzdCYmZS5saXN0Lmxlbmd0aCkpcmV0dXJuO2xldHtlbnRyeVBhZ2VQYXRoOm59PVI7ZS5zZWxlY3RlZEluZGV4PTA7bGV0IHI9ZS5saXN0LmZpbmRJbmRleChvPT5vLnBhZ2VQYXRoPT09bik7ZGkuaW5pdChlLChvLGMpPT57UC5zd2l0Y2hUYWIoe3VybDpKLmFkZExlYWRpbmdTbGFzaChvLnBhZ2VQYXRoKSxvcGVuVHlwZToic3dpdGNoVGFiIixmcm9tOiJ0YWJCYXIiLHN1Y2Nlc3MoKXtWbihKLk9OX1RBQl9JVEVNX1RBUCx7aW5kZXg6Yyx0ZXh0Om8udGV4dCxwYWdlUGF0aDpvLnBhZ2VQYXRofSl9fSl9KSxyIT09LTEmJihlLnNlbGVjdGVkSW5kZXg9cixyIT09MCYmZGkuc3dpdGNoVGFiKG4pKX1mdW5jdGlvbiBlSSgpe2xldCBlPXMuZ2xvYmFsRXZlbnQsdD1mLnJlcXVpcmVNb2R1bGUoImdsb2JhbEV2ZW50Iikse2VtaXQ6bixwdWJsaXNoSGFuZGxlcjpyfT1vdDtmLmNvbmZpZy5wcmVsb2FkP3Mua2V5LmFkZEV2ZW50TGlzdGVuZXIoRm8sRGkpOmUuYWRkRXZlbnRMaXN0ZW5lcigic3BsYXNoY2xvc2VkIiwoKT0+e3Mua2V5LmFkZEV2ZW50TGlzdGVuZXIoRm8sRGkpfSksZS5hZGRFdmVudExpc3RlbmVyKCJwYXVzZSIsKCk9PntuKEouT05fQVBQX0VOVEVSX0JBQ0tHUk9VTkQpfSksZS5hZGRFdmVudExpc3RlbmVyKCJyZXN1bWUiLCgpPT57bGV0IGM9QnMoKTtjJiZjLnVzZXJBY3Rpb24mJnhzKGMpLG4oSi5PTl9BUFBfRU5URVJfRk9SRUdST1VORCxWbygpKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidWlzdHlsZWNoYW5nZSIsZnVuY3Rpb24oYyl7bGV0IGc9e3RoZW1lOmMudWlzdHlsZX07bihKLk9OX1RIRU1FX0NIQU5HRSxnKSxyKEouT05fVEhFTUVfQ0hBTkdFLGcsaGEoKSksWXcoKX0pO2xldCBvPTA7ZS5hZGRFdmVudExpc3RlbmVyKCJLZXlib2FyZEhlaWdodENoYW5nZSIsZnVuY3Rpb24oYyl7byE9PWMuaGVpZ2h0JiYobz1jLmhlaWdodCxuKEouT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSx7aGVpZ2h0Om99KSl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoRlQsZnVuY3Rpb24oYyl7YyYmYy5ldmVudCYmZlQoYy5ldmVudCxjLmRhdGEpfSksZS5hZGRFdmVudExpc3RlbmVyKCJwbHVzTWVzc2FnZSIsYnApLGUuYWRkRXZlbnRMaXN0ZW5lcigiV2Vidmlld1Bvc3RNZXNzYWdlIixicCl9ZnVuY3Rpb24gYnAoe2RhdGE6ZX0pe2UmJmUudHlwZSYmb3Quc3Vic2NyaWJlSGFuZGxlcigicGx1c01lc3NhZ2UuIitlLnR5cGUsZS5hcmdzKX1mdW5jdGlvbiB5cChlLHQsbj0hMSl7b3Quc3Vic2NyaWJlKCJwbHVzTWVzc2FnZS4iK2UsdCxuKX1mdW5jdGlvbiB0SShlKXtwYihlLiQpO2xldHtlbnRyeVBhZ2VQYXRoOnQsZW50cnlQYWdlUXVlcnk6bixyZWZlcnJlckluZm86cn09UixvPWhzKHtwYXRoOnQscXVlcnk6bixyZWZlcnJlckluZm86cn0pO1ZuKGUsSi5PTl9MQVVOQ0gsbyksVm4oZSxKLk9OX1NIT1csbyk7bGV0IGM9Zi5yZXF1aXJlTW9kdWxlKCJwbHVzIikuZ2V0QXBwU3RhdGU7KGMmJk51bWJlcihjKCkpKT09PTImJlZuKGUsSi5PTl9ISURFLG8pfWZ1bmN0aW9uIEVwKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXC8kLywiIiksZS5pbmRleE9mKCJfIik9PT0wP3MuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTChlKTplfWZ1bmN0aW9uIG5JKCl7bGV0IGU9RXAoZnMpLHQ9RXAoV3IpLG49dC5zcGxpdCgiLyIpO24ucG9wKCk7bGV0IHI9bi5qb2luKCIvIik7cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKHMuaW8uY29udmVydEFic29sdXRlRmlsZVN5c3RlbShyKSxvPT57by5jcmVhdGVSZWFkZXIoKS5yZWFkRW50cmllcyhmdW5jdGlvbihnKXtsZXQgYj1nO2ImJmIubGVuZ3RoJiZiLmZvckVhY2goZnVuY3Rpb24oVil7Vi5pc0RpcmVjdG9yeSYmVi5mdWxsUGF0aC5pbmRleE9mKGUpPT09MCYmVi5mdWxsUGF0aC5pbmRleE9mKHQpIT09MCYmVi5yZW1vdmVSZWN1cnNpdmVseSgpfSl9KX0pfWxldCBTcD0wLHhsPTAsSmM9bnVsbCxybD1udWxsO2Z1bmN0aW9uIHJJKGUsdCl7aWYoSmM9bnVsbCxybCYmKEUocmwpLHJsPW51bGwpLGUudHlwZT09PSJvbkZvY3VzIilpZih4bD4wKWUuZGV0YWlsLmhlaWdodD14bDtlbHNle3JsPU4oZnVuY3Rpb24oKXtlLmRldGFpbC5oZWlnaHQ9eGwsdChlKX0sU3ApLEpjPWZ1bmN0aW9uKCl7cmwmJihFKHJsKSxybD1udWxsKSxlLmRldGFpbC5oZWlnaHQ9eGwsdChlKX07cmV0dXJufXQoZSl9ZnVuY3Rpb24gaUkoKXtTcD1zLm9zLm5hbWUudG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIj8zMDA6NzAwLG90Lm9uKEouT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSx0PT57aWYoeGw9dC5oZWlnaHQseGw+MCl7bGV0IG49SmM7SmM9bnVsbCxuJiZuKCl9fSl9ZnVuY3Rpb24gb0koZSx0LG4pe2xldCByPXQudHlwZTtyPT09Im9uRm9jdXMifHxyPT09Im9uQmx1ciI/ckkodCxvPT57bi5maXJlRXZlbnQoZSxvKX0pOm4uZmlyZUV2ZW50KGUsdCl9ZnVuY3Rpb24gYUkoZSx0KXtsZXQgbj1JcihwYXJzZUludCh0KSk7aWYoIW4pcmV0dXJuO2xldCByPW4uX19wYWdlX2NvbnRhaW5lcl9fO2UuZm9yRWFjaChvPT57c3dpdGNoKG9bMF0pe2Nhc2UgSi5BQ1RJT05fVFlQRV9FVkVOVDpvSShvWzFdLG9bMl0scik7YnJlYWt9fSl9bGV0IHdwPXt9O2Z1bmN0aW9uIHNJKGUsdCxuKXtsZXR7YWRwaWQ6cix3aWR0aDpvfT1lLGM9cisiLSIrbyxnPXdwW2NdO2lmKGcmJmcubGVuZ3RoPjApe3QoZy5zcGxpY2UoMCwxKVswXSk7cmV0dXJufXMuYWQuZ2V0QWRzKGUsYj0+e2xldCBWPWIuYWRzO3QoVi5zcGxpY2UoMCwxKVswXSksd3BbY109Zz9nLmNvbmNhdChWKTpWfSxiPT57bih7ZXJyQ29kZTpiLmNvZGUsZXJyTXNnOmIubWVzc2FnZX0pfSl9ZnVuY3Rpb24gbEkoKXt4KCJnZXRBZERhdGEiLChlLHQpPT57c0koZSxuPT57dCh7Y29kZTowLGRhdGE6bn0pfSxuPT57dCh7Y29kZToxLG1lc3NhZ2U6bn0pfSl9KX1sZXQgY0k9WyJzd2l0Y2hUYWIiLCJyZUxhdW5jaCIsInJlZGlyZWN0VG8iLCJuYXZpZ2F0ZVRvIiwibmF2aWdhdGVCYWNrIl07ZnVuY3Rpb24gdUkoKXtjSS5mb3JFYWNoKGU9Pnt4KGUsdD0+e1BbZV0oei5leHRlbmQodCx7ZmFpbChuKXtjb25zb2xlLmVycm9yKG4uZXJyTXNnKX19KSl9KX0pfWxldCBDcD0hMTtmdW5jdGlvbiBmSShlLHQpe2xldCBuPXQ9PT0iMSI7aWYoIShuJiZDcCkpe2lmKG4/KENwPSEwLGVwKHMud2Vidmlldy5nZXRMYXVuY2hXZWJ2aWV3KCkpKTpMaXx8ZXAocy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHQpKSwhTGkubG9hZGVkKXtpZihMaS5pZCE9PXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYHdlYnZpZXdSZWFkeVske0xpLmlkfV1bJHt0fV0gbm90IG1hdGNoYCk7TGkubG9hZGVkPSEwfW90LmVtaXQoUmwrIi4iK3QpLG4mJmRJKCl9fWZ1bmN0aW9uIGRJKCl7bGV0e2F1dG9jbG9zZTplLGFsd2F5c1Nob3dCZWZvcmVSZW5kZXI6dH09Ui5zcGxhc2hzY3JlZW47ZSYmIXQmJnMubmF2aWdhdG9yLmNsb3NlU3BsYXNoc2NyZWVuKCk7bGV0IG49Si5hZGRMZWFkaW5nU2xhc2goUi5lbnRyeVBhZ2VQYXRoKSxyPVdpKG4pO2lmKCFyLm1ldGEuaXNOVnVlKXtsZXQgbz17dXJsOm4rKFIuZW50cnlQYWdlUXVlcnl8fCIiKSxvcGVuVHlwZToiYXBwTGF1bmNoIn0sYz17cmVzb2x2ZSgpe30scmVqZWN0KCl7fX07cmV0dXJuIHIubWV0YS5pc1RhYkJhcj9fcChvLGMpOm1wKG8sYyl9fWZ1bmN0aW9uIGhJKGUsdCl7bGV0IG49SXIocGFyc2VJbnQodCkpO24mJihuLl9fdW5pYXBwX3dlYnZpZXc9ITApfWZ1bmN0aW9uIGdJKGUsdCl7bGV0IG49SXIocGFyc2VJbnQodCkpO24mJmRlbGV0ZSBuLl9fdW5pYXBwX3dlYnZpZXd9bGV0IHBJPSh7bmFtZTplLGFyZzp0fSxuKT0+e2U9PT0icG9zdE1lc3NhZ2UiP3ZJKG5bMF0sdCk6UFtlXSh6LmV4dGVuZCh0LHtmYWlsKHIpe2NvbnNvbGUuZXJyb3Ioci5lcnJNc2cpfX0pKX07ZnVuY3Rpb24gdkkoZSx0KXtsZXQgbj1tUCgid2ViLXZpZXciLHBhcnNlSW50KGUpKTtuJiZuLmRpc3BhdGNoRXZlbnQoSi5jcmVhdGVVbmlFdmVudCh7dHlwZToib25NZXNzYWdlIix0YXJnZXQ6T2JqZWN0LmNyZWF0ZShudWxsKSxjdXJyZW50VGFyZ2V0Ok9iamVjdC5jcmVhdGUobnVsbCksZGV0YWlsOntkYXRhOlt0XX19KSl9ZnVuY3Rpb24gbUkoe25vZGVJZDplLG93bmVySWQ6dCxtZXRob2Q6bixhcmdzOnJ9LG8pe2xldCBjPWNwKGUscGFyc2VJbnQobykpO2lmKCFjKXJldHVybjtsZXQgZz1fSSh0LGMuX192dWVQYXJlbnRDb21wb25lbnQpOyFnfHwhZ1tuXXx8Z1tuXShyKX1mdW5jdGlvbiBfSShlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQudWlkPT09ZSlyZXR1cm4gdC5wcm94eTtsZXQgbj10LnBhcmVudDtmb3IoO247KXtpZihuLnVpZD09PWUpcmV0dXJuIG4ucHJveHk7bj1uLnBhcmVudH1yZXR1cm4gdC5wcm94eX1mdW5jdGlvbiBiSSgpe2xldHtzdWJzY3JpYmU6ZSxzdWJzY3JpYmVIYW5kbGVyOnQscHVibGlzaEhhbmRsZXI6bn09b3Q7aWYoeXAoInN1YnNjcmliZUhhbmRsZXIiLCh7dHlwZTpyLGRhdGE6byxwYWdlSWQ6Y30pPT57dChyLG8sYyl9KSx5cChKLldFQl9JTlZPS0VfQVBQU0VSVklDRSwoe2RhdGE6cix3ZWJ2aWV3SWRzOm99KT0+e3BJKHIsbyl9KSxSLnJlbmRlcmVyIT09Im5hdGl2ZSIpe2UoUmwsZkkpLGUoQ2csYUkpLHYoKSxsSSgpLHVJKCksZShqTyxoSSksZSh6TyxnSSksZShKLk9OX1dYU19JTlZPS0VfQ0FMTF9NRVRIT0QsbUkpO2xldCByPVdpKEouYWRkTGVhZGluZ1NsYXNoKFIuZW50cnlQYWdlUGF0aCkpO3ImJiFyLm1ldGEuaXNOVnVlJiZuKFJsLHt9LDEpfX1sZXQgQmwsbGY9e2dsb2JhbERhdGE6e319O2Z1bmN0aW9uIHlJKHthbGxvd0RlZmF1bHQ6ZT0hMX09e30pe2lmKEJsKXJldHVybiBCbDtpZihlKXJldHVybiBsZjtjb25zb2xlLmVycm9yKCJbd2Fybl06IGdldEFwcCgpIGZhaWxlZC4gTGVhcm4gbW9yZTogaHR0cHM6Ly91bmlhcHAuZGNsb3VkLmlvL2NvbGxvY2F0aW9uL2ZyYW1lL3dpbmRvdz9pZD1nZXRhcHAuIil9ZnVuY3Rpb24gRUkoZSl7aWYoUC5WdWV4JiZlLiRzdG9yZSl7bGV0e3VzZVN0b3JlOnR9PVAuVnVleDtQLlZ1ZXgudXNlU3RvcmU9bj0+bj90KG4pOmUuJHN0b3JlfWphKGUpLEJsPWUsY3QoQmwpLHouZXh0ZW5kKEJsLGxmKSx5dChCbCxsZi5nbG9iYWxEYXRhKSxDZSgpLHBwKCksUVAoKSxlSSgpLGlJKCksYkkoKSx0SShlKSxOKG5JLDFlNCksUi5yZWFkeT0hMH12YXIgU0k9e3VuaTpLUCxnZXRBcHA6eUksZ2V0Q3VycmVudFBhZ2VzOnlyLF9fZGVmaW5lUGFnZTpJUCxfX3JlZ2lzdGVyQXBwOkVJLF9fcmVnaXN0ZXJQYWdlOmZjLFVuaVNlcnZpY2VKU0JyaWRnZTpaUH07cmV0dXJuIFNJfShJdCxWdCx3KTtPdD1PdC5kZWZhdWx0fHxPdDtsZXQgUD1PdC51bmksd3Q9T3QuZ2V0QXBwLEluPU90LmdldEN1cnJlbnRQYWdlcyxvdD1PdC5VbmlTZXJ2aWNlSlNCcmlkZ2U7cmV0dXJuIE90fXZhciBjdj11ayhoayk7ZnVuY3Rpb24gdXYoZil7fXZhciBmdj1mPT57fTt2YXIgZHY9Zj0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpzLGluaXRVVFNQcm94eUNsYXNzOnAsaW5pdFVUU1Byb3h5RnVuY3Rpb246dyxpbml0VVRTUGFja2FnZU5hbWU6Tixpbml0VVRTSW5kZXhDbGFzc05hbWU6RSxpbml0VVRTQ2xhc3NOYW1lOmh9PWYseT0iRENsb3VkVW5pRXhpdCIsUj0idW5pLWV4aXQiLEZlPSJidWlsdC1pbiIsSXQ9IiIsVnQ9ITAsT3Q9Tih5LFZ0KSxQPUUoeSxWdCk7Zi5leGl0PXcoITEse21vZHVsZU5hbWU6Uixtb2R1bGVUeXBlOkZlLGVyck1zZzpJdCxtYWluOiEwLHBhY2thZ2U6T3QsY2xhc3M6UCxuYW1lOiJleGl0QnlKcyIscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUV4aXRFeGl0T3B0aW9uc0pTT05PYmplY3QiLGRlZmF1bHQ6IlVUU051bGwifV0scmV0dXJuOiIifSl9O3ZhciBodj1mPT57bGV0e3JlZ2lzdGVyVVRTSW50ZXJmYWNlOnMsaW5pdFVUU1Byb3h5Q2xhc3M6cCxpbml0VVRTUHJveHlGdW5jdGlvbjp3LGluaXRVVFNQYWNrYWdlTmFtZTpOLGluaXRVVFNJbmRleENsYXNzTmFtZTpFLGluaXRVVFNDbGFzc05hbWU6aH09Zix5PSJEQ2xvdWRVbmlGYWNpYWxSZWNvZ25pdGlvblZlcmlmeSIsUj0iRmFjaWFsUmVjb2duaXRpb25WZXJpZnkoXHU1QjlFXHU0RUJBXHU4QkE0XHU4QkMxKSIsRmU9ImJ1aWx0LWluIixJdD0iIixWdD0hMCxPdD1OKHksVnQpLFA9RSh5LFZ0KTtmLnN0YXJ0RmFjaWFsUmVjb2duaXRpb25WZXJpZnk9dyghMSx7bW9kdWxlTmFtZTpSLG1vZHVsZVR5cGU6RmUsZXJyTXNnOkl0LG1haW46ITAscGFja2FnZTpPdCxjbGFzczpQLG5hbWU6InN0YXJ0RmFjaWFsUmVjb2duaXRpb25WZXJpZnlCeUpzIixwYXJhbXM6W3tuYW1lOiJmYWNlU3R5bGUiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlGYWNpYWxSZWNvZ25pdGlvblZlcmlmeVN0YXJ0RmFjaWFsUmVjb2duaXRpb25WZXJpZnlPcHRpb25zSlNPTk9iamVjdCJ9XSxyZXR1cm46IiJ9KSxmLmdldEZhY2lhbFJlY29nbml0aW9uTWV0YUluZm89dyghMSx7bW9kdWxlTmFtZTpSLG1vZHVsZVR5cGU6RmUsZXJyTXNnOkl0LG1haW46ITAscGFja2FnZTpPdCxjbGFzczpQLG5hbWU6ImdldEZhY2lhbFJlY29nbml0aW9uTWV0YUluZm9CeUpzIixwYXJhbXM6W10scmV0dXJuOiIifSl9O3ZhciBndj1mPT57bGV0e3JlZ2lzdGVyVVRTSW50ZXJmYWNlOnMsaW5pdFVUU1Byb3h5Q2xhc3M6cCxpbml0VVRTUHJveHlGdW5jdGlvbjp3LGluaXRVVFNQYWNrYWdlTmFtZTpOLGluaXRVVFNJbmRleENsYXNzTmFtZTpFLGluaXRVVFNDbGFzc05hbWU6aH09Zix5PSJEQ2xvdWRVbmlGaWxlU3lzdGVtTWFuYWdlciIsUj0idW5pLWZpbGUtbWFuYWdlciIsRmU9ImJ1aWx0LWluIixJdD0iIixWdD0hMCxPdD1OKHksVnQpLFA9RSh5LFZ0KTtzKCJGaWxlU3lzdGVtTWFuYWdlck9wdGlvbnMiLE9iamVjdC5hc3NpZ24oe21vZHVsZU5hbWU6Uixtb2R1bGVUeXBlOkZlLGVyck1zZzpJdCxwYWNrYWdlOk90LGNsYXNzOmgoeSwiRmlsZVN5c3RlbU1hbmFnZXJCeUpzUHJveHkiLFZ0KX0se21ldGhvZHM6e3JlYWRGaWxlQnlKczp7YXN5bmM6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUZpbGVTeXN0ZW1NYW5hZ2VyUmVhZEZpbGVPcHRpb25zSlNPTk9iamVjdCJ9XSxyZXR1cm46e319LHdyaXRlRmlsZUJ5SnM6e2FzeW5jOiExLHBhcmFtczpbe25hbWU6Im9wdGlvbnMiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlGaWxlU3lzdGVtTWFuYWdlcldyaXRlRmlsZU9wdGlvbnNKU09OT2JqZWN0In1dLHJldHVybjp7fX0sdW5saW5rQnlKczp7YXN5bmM6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUZpbGVTeXN0ZW1NYW5hZ2VyVW5MaW5rT3B0aW9uc0pTT05PYmplY3QifV0scmV0dXJuOnt9fSxta2RpckJ5SnM6e2FzeW5jOiExLHBhcmFtczpbe25hbWU6Im9wdGlvbnMiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlGaWxlU3lzdGVtTWFuYWdlck1rRGlyT3B0aW9uc0pTT05PYmplY3QifV0scmV0dXJuOnt9fSxybWRpckJ5SnM6e2FzeW5jOiExLHBhcmFtczpbe25hbWU6Im9wdGlvbnMiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlGaWxlU3lzdGVtTWFuYWdlclJtRGlyT3B0aW9uc0pTT05PYmplY3QifV0scmV0dXJuOnt9fSxyZWFkZGlyQnlKczp7YXN5bmM6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUZpbGVTeXN0ZW1NYW5hZ2VyUmVhZERpck9wdGlvbnNKU09OT2JqZWN0In1dLHJldHVybjp7fX0sYWNjZXNzQnlKczp7YXN5bmM6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUZpbGVTeXN0ZW1NYW5hZ2VyQWNjZXNzT3B0aW9uc0pTT05PYmplY3QifV0scmV0dXJuOnt9fSxyZW5hbWVCeUpzOnthc3luYzohMSxwYXJhbXM6W3tuYW1lOiJvcHRpb25zIix0eXBlOiJVVFNTREtNb2R1bGVzRENsb3VkVW5pRmlsZVN5c3RlbU1hbmFnZXJSZW5hbWVPcHRpb25zSlNPTk9iamVjdCJ9XSxyZXR1cm46e319LGNvcHlGaWxlQnlKczp7YXN5bmM6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUZpbGVTeXN0ZW1NYW5hZ2VyQ29weUZpbGVPcHRpb25zSlNPTk9iamVjdCJ9XSxyZXR1cm46e319LGdldEZpbGVJbmZvQnlKczp7YXN5bmM6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUZpbGVTeXN0ZW1NYW5hZ2VyR2V0RmlsZUluZm9PcHRpb25zSlNPTk9iamVjdCJ9XSxyZXR1cm46e319LHN0YXRCeUpzOnthc3luYzohMSxwYXJhbXM6W3tuYW1lOiJvcHRpb25zIix0eXBlOiJVVFNTREtNb2R1bGVzRENsb3VkVW5pRmlsZVN5c3RlbU1hbmFnZXJTdGF0T3B0aW9uc0pTT05PYmplY3QifV0scmV0dXJuOnt9fX0scHJvcHM6W119KSksZi5nZXRGaWxlU3lzdGVtTWFuYWdlcj13KCExLHttb2R1bGVOYW1lOlIsbW9kdWxlVHlwZTpGZSxlcnJNc2c6SXQsbWFpbjohMCxwYWNrYWdlOk90LGNsYXNzOlAsbmFtZToiZ2V0RmlsZVN5c3RlbU1hbmFnZXJCeUpzIixwYXJhbXM6W10scmV0dXJuOnt0eXBlOiJpbnRlcmZhY2UiLG9wdGlvbnM6IkZpbGVTeXN0ZW1NYW5hZ2VyT3B0aW9ucyJ9fSl9O3ZhciBwdj1mPT57fTt2YXIgdnY9Zj0+e307dmFyIG12PWY9Pnt9O3ZhciBfdj1mPT57fTt2YXIgYnY9Zj0+e307dmFyIHl2PWY9Pnt9O3ZhciBFdj1mPT57fTt2YXIgU3Y9Zj0+e307dmFyIHd2PWY9PntsZXR7cmVnaXN0ZXJVVFNJbnRlcmZhY2U6cyxpbml0VVRTUHJveHlDbGFzczpwLGluaXRVVFNQcm94eUZ1bmN0aW9uOncsaW5pdFVUU1BhY2thZ2VOYW1lOk4saW5pdFVUU0luZGV4Q2xhc3NOYW1lOkUsaW5pdFVUU0NsYXNzTmFtZTpofT1mLHk9IkRDbG91ZFVuaUluc3RhbGxBcGsiLFI9InVuaS1pbnN0YWxsQXBrIixGZT0iYnVpbHQtaW4iLEl0PSIiLFZ0PSEwLE90PU4oeSxWdCksUD1FKHksVnQpO2YuaW5zdGFsbEFwaz13KCExLHttb2R1bGVOYW1lOlIsbW9kdWxlVHlwZTpGZSxlcnJNc2c6SXQsbWFpbjohMCxwYWNrYWdlOk90LGNsYXNzOlAsbmFtZToiaW5zdGFsbEFwa0J5SnMiLHBhcmFtczpbe25hbWU6Im9wdGlvbnMiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlJbnN0YWxsQXBrSW5zdGFsbEFwa09wdGlvbnNKU09OT2JqZWN0In1dLHJldHVybjoiIn0pfTt2YXIgQ3Y9Zj0+e307dmFyIEF2PWY9Pnt9O3ZhciBPdj1mPT57fTt2YXIgVHY9Zj0+e307dmFyIFB2PWY9Pnt9O3ZhciBJdj1mPT57fTt2YXIgTnY9Zj0+e307dmFyIGt2PWY9Pnt9O2Z1bmN0aW9uIFJ2KGYpe2Z2KGYpLGR2KGYpLGh2KGYpLGd2KGYpLHB2KGYpLHZ2KGYpLG12KGYpLF92KGYpLGJ2KGYpLHl2KGYpLEV2KGYpLFN2KGYpLHd2KGYpLEN2KGYpLEF2KGYpLE92KGYpLFR2KGYpLFB2KGYpLEl2KGYpLE52KGYpLGt2KGYpLHV2KGYpfXZhciBJZixOZixrZixEYSxSZix4ZixCZjtmdW5jdGlvbiB4digpe3JldHVybiBEYT97X19kZWZpbmVQYWdlOklmLF9fcmVnaXN0ZXJBcHA6TmYsX19yZWdpc3RlclBhZ2U6a2YsdW5pOkRhLHd4OkRhLGdldEFwcDpSZixnZXRDdXJyZW50UGFnZXM6eGYsVW5pU2VydmljZUpTQnJpZGdlOkJmfTp7fX1mdW5jdGlvbiBCdihmKXtsZXR7d2VleDpzLHBsdXM6cCxWdWVTaGFyZWQ6d309ZjtyZXR1cm4gRGF8fCh7X19kZWZpbmVQYWdlOklmLF9fcmVnaXN0ZXJBcHA6TmYsX19yZWdpc3RlclBhZ2U6a2YsdW5pOkRhLGdldEFwcDpSZixnZXRDdXJyZW50UGFnZXM6eGYsVW5pU2VydmljZUpTQnJpZGdlOkJmfT1sdihzLHAsZiksRGEuVnVlU2hhcmVkPXcsUnYoRGEpLFJwKERhKSkse19fZGVmaW5lUGFnZTpJZixfX3JlZ2lzdGVyQXBwOk5mLF9fcmVnaXN0ZXJQYWdlOmtmLHBsdXM6cCx1bmk6RGEsd3g6RGEsZ2V0QXBwOlJmLGdldEN1cnJlbnRQYWdlczp4ZixVbmlTZXJ2aWNlSlNCcmlkZ2U6QmZ9fWZ1bmN0aW9uIE12KGYscyl7bGV0e19fdW5pQ29uZmlnOnB9PXM7aWYoIXApcmV0dXJuO2xldCB3PXMud2VleDt3LmRvY3VtZW50Ll9fJGF1dG9tYXRvcl9fPSEhcC5hdXRvbWF0b3I7bGV0IE49cC5yZW5kZXJlciE9PSJuYXRpdmUiJiZ3LmNvbmZpZy5idW5kbGVVcmwuaW5kZXhPZigiYXBwLXNlcnZpY2UuanMiKSE9PS0xO2lmKEZpKHMseHYoKSksTj9jdihzKTooRHAoZixzKSx0dihzLlZ1ZS5wYXJzZUNsYXNzU3R5bGVzKSksRmkocyxCdihzKSksdy5jb25maWcucGx1c193ZWJfaWQ9PT0iMSIpe2xldCBSPXcucmVxdWlyZU1vZHVsZSgicGx1cyIpO1Iuc2V0RGVmYXVsdEZvbnRTaXplJiZSLnNldERlZmF1bHRGb250U2l6ZShNYXRoLnJvdW5kKHMucGx1cy5zY3JlZW4ucmVzb2x1dGlvbldpZHRoLzIwKSl9bGV0e3NjYWxlOkUsZGV2aWNlV2lkdGg6aCxwbGF0Zm9ybTp5fT1nbG9iYWwuV1hFbnZpcm9ubWVudDtpZih5LnRvTG93ZXJDYXNlKCk9PT0iaW9zIil7bGV0IFI9TWF0aC5jZWlsKGgvRSk7dy5yZXF1aXJlTW9kdWxlKCJtZXRhIikuc2V0Vmlld3BvcnQoe3dpZHRoOlIscm91bmRPZmZEZXZpYXRpb246ITF9KX19dmFyIGNsPWNsYXNzIGV4dGVuZHMgbGx7Y29uc3RydWN0b3Iocyl7c3VwZXIoKTt0aGlzLm5vZGVUeXBlPTg7dGhpcy50eXBlPSJjb21tZW50Ijt0aGlzLnZhbHVlPSIiO3RoaXMudmFsdWU9c310b1N0cmluZygpe3JldHVybiI8IS0tICIrdGhpcy52YWx1ZSsiIC0tPiJ9fTtmdW5jdGlvbiBTbyhmLHM9W10pe3JldHVybnttb2R1bGU6ImRvbSIsbWV0aG9kOmYsYXJnczpzfX12YXIgVWw9Y2xhc3N7Y29uc3RydWN0b3IocyxwKXt0aGlzLmlkPXMsdGhpcy5iYXRjaGVkPSExLHRoaXMudXBkYXRlcz1bXSx6bihwKT9PYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaGFuZGxlciIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnB9KTpjb25zb2xlLmVycm9yKCJbSlMgUnVudGltZV0gaW52YWxpZCBwYXJhbWV0ZXIsIGhhbmRsZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9Y3JlYXRlRmluaXNoKHMpe3JldHVybiB0aGlzLmhhbmRsZXIoW1NvKCJjcmVhdGVGaW5pc2giKV0scyl9dXBkYXRlRmluaXNoKHMpe3JldHVybiB0aGlzLmhhbmRsZXIoW1NvKCJ1cGRhdGVGaW5pc2giKV0scyl9cmVmcmVzaEZpbmlzaChzKXtyZXR1cm4gdGhpcy5oYW5kbGVyKFtTbygicmVmcmVzaEZpbmlzaCIpXSxzKX1jcmVhdGVCb2R5KHMpe2xldCBwPXMudG9KU09OKCksdz1wLmNoaWxkcmVuO2RlbGV0ZSBwLmNoaWxkcmVuO2xldCBOPVtTbygiY3JlYXRlQm9keSIsW3BdKV07cmV0dXJuIHcmJk4ucHVzaC5hcHBseShOLHcubWFwKEU9PlNvKCJhZGRFbGVtZW50IixbcC5yZWYsRSwtMV0pKSksdGhpcy5hZGRBY3Rpb25zKE4pfWFkZEVsZW1lbnQocyxwLHcpe3JldHVybiB3Pj0wfHwodz0tMSksdGhpcy5hZGRBY3Rpb25zKFNvKCJhZGRFbGVtZW50IixbcCxzLnRvSlNPTigpLHddKSl9cmVtb3ZlRWxlbWVudChzKXtpZihJaShzKSl7bGV0IHA9cy5tYXAodz0+U28oInJlbW92ZUVsZW1lbnQiLFt3XSkpO3JldHVybiB0aGlzLmFkZEFjdGlvbnMocCl9cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhTbygicmVtb3ZlRWxlbWVudCIsW3NdKSl9bW92ZUVsZW1lbnQocyxwLHcpe3JldHVybiB0aGlzLmFkZEFjdGlvbnMoU28oIm1vdmVFbGVtZW50IixbcyxwLHddKSl9c2V0QXR0cihzLHAsdyl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhTbygidXBkYXRlQXR0cnMiLFtzLHtbcF06d31dKSl9c2V0U3R5bGUocyxwLHcpe3JldHVybiB0aGlzLmFkZEFjdGlvbnMoU28oInVwZGF0ZVN0eWxlIixbcyx7W3BdOnd9XSkpfXNldFN0eWxlcyhzLHApe3JldHVybiB0aGlzLmFkZEFjdGlvbnMoU28oInVwZGF0ZVN0eWxlIixbcyxwXSkpfWFkZEV2ZW50KHMscCl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhTbygiYWRkRXZlbnQiLFtzLHBdKSl9cmVtb3ZlRXZlbnQocyxwKXtyZXR1cm4gdGhpcy5hZGRBY3Rpb25zKFNvKCJyZW1vdmVFdmVudCIsW3MscF0pKX1oYW5kbGVyKHMscCl7cmV0dXJuIHAmJnAoKX1hZGRBY3Rpb25zKHMpe2xldCBwPXRoaXMudXBkYXRlcyx3PXRoaXMuaGFuZGxlcjtpZihJaShzKXx8KHM9W3NdKSx0aGlzLmJhdGNoZWQpcC5wdXNoLmFwcGx5KHAscyk7ZWxzZSByZXR1cm4gdyhzKX19O3ZhciBNZj17Y3JlYXRlQm9keToiY2FsbENyZWF0ZUJvZHkiLGFkZEVsZW1lbnQ6ImNhbGxBZGRFbGVtZW50IixyZW1vdmVFbGVtZW50OiJjYWxsUmVtb3ZlRWxlbWVudCIsbW92ZUVsZW1lbnQ6ImNhbGxNb3ZlRWxlbWVudCIsdXBkYXRlQXR0cnM6ImNhbGxVcGRhdGVBdHRycyIsdXBkYXRlU3R5bGU6ImNhbGxVcGRhdGVTdHlsZSIsYWRkRXZlbnQ6ImNhbGxBZGRFdmVudCIscmVtb3ZlRXZlbnQ6ImNhbGxSZW1vdmVFdmVudCJ9O2Z1bmN0aW9uIER2KGYscyl7bGV0IHA9c3x8Z2xvYmFsLmNhbGxOYXRpdmU7cmV0dXJuIHpuKHApfHxjb25zb2xlLmVycm9yKCJbSlMgUnVudGltZV0gbm8gZGVmYXVsdCBoYW5kbGVyIiksZnVuY3Rpb24oTil7SWkoTil8fChOPVtOXSk7Zm9yKGxldCBFPTA7RTxOLmxlbmd0aDtFKyspe2xldCBoPXBrKGYsTltFXSxwKTtpZihoPT09LTEpcmV0dXJuIGh9fX1mdW5jdGlvbiBnayhmLHMpe3JldHVybiBmPT09ImRvbSImJk1mW3NdJiZ6bihnbG9iYWxbTWZbc11dKX1mdW5jdGlvbiBwayhmLHMscCl7bGV0e21vZHVsZTp3LG1ldGhvZDpOLGFyZ3M6RX09cztyZXR1cm4gZ2sodyxOKT9nbG9iYWxbTWZbTl1dKGYsLi4uRSwiLTEiKTpwKGYsW3NdLCItMSIpfXZhciBkdT1jbGFzcyBleHRlbmRzIFppe2NvbnN0cnVjdG9yKHMpe3N1cGVyKCk7dGhpcy52YWx1ZT1zLHRoaXMubm9kZVR5cGU9Myx0aGlzLnR5cGU9InRleHQiLHRoaXMudmFsdWU9IiJ9dG9TdHJpbmcoKXtyZXR1cm4iIit0aGlzLnZhbHVlfX07dmFyIEx2PXtzbGlkZXI6e2NoYW5nZTpmdW5jdGlvbihmKXtyZXR1cm57aW5kZXg6Zi5pbmRleCxzb3VyY2U6Zi5zb3VyY2V9fSxzY3JvbGw6ZnVuY3Rpb24oZil7cmV0dXJue29mZnNldFhSYXRpbzpmLm9mZnNldFhSYXRpbyxvZmZzZXRZUmF0aW86Zi5vZmZzZXRZUmF0aW8sZHJhZzpmLmRyYWd9fX0sInNjcm9sbC12aWV3Ijp7c2Nyb2xsZW5kOmZ1bmN0aW9uKGYpe3JldHVybntjb250ZW50T2Zmc2V0OmYuY29udGVudE9mZnNldH19fX07ZnVuY3Rpb24gRnYoZil7bGV0e2F0dHI6cyxvZmZzZXRMZWZ0OnAsb2Zmc2V0VG9wOnd9PWYsTj17fTtyZXR1cm4gcyYmT2JqZWN0LmtleXMocykuZm9yRWFjaChFPT57RS5pbmRleE9mKCJkYXRhLSIpPT09MCYmKE5bRS5yZXBsYWNlKCJkYXRhLSIsIiIpXT1zW0VdKX0pLHtpZDpzJiZzLmlkfHwiIixkYXRhc2V0Ok4sb2Zmc2V0TGVmdDpwfHwwLG9mZnNldFRvcDp3fHwwfX12YXIgdms9WyJhIiwiZGl2IiwibGlzdCIsImNlbGwiLCJsb2FkaW5nIiwicmVmcmVzaCIsInJlY3ljbGUtbGlzdCIsInNjcm9sbGVyIiwiaW5kaWNhdG9yIiwid2F0ZXJmYWxsIiwid2ViIiwicmljaHRleHQiXSxtaz1bInZpZXdhcHBlYXIiLCJ2aWV3ZGlzYXBwZWFyIl0sX2s9e21hcmtlcnRhcDpbIm1hcmtlcklkIl0sY29udHJvbHRhcDpbImNvbnRyb2xJZCJdLHJlZ2lvbmNoYW5nZTpbImNhdXNlZEJ5Il0sZW5kOlsiY2F1c2VkQnkiXSxhcHBlYXI6WyJkaXJlY3Rpb24iXSxkaXNhcHBlYXI6WyJkaXJlY3Rpb24iXX07ZnVuY3Rpb24gVnYoZixzKXtsZXQgcD1mLnR5cGU7aWYobWsuaW5kZXhPZihwKSE9PS0xKXJldHVybiBmO2xldCB3PWYuY3VycmVudFRhcmdldCxOPXcudHlwZS5yZXBsYWNlKCJ1LSIsIiIpO2lmKHZrLmluZGV4T2YoTikhPT0tMSlyZXR1cm4gZjtsZXR7dGltZXN0YW1wOkUsdGFyZ2V0Omh9PWY7aWYoIXMpe2xldCBGZT1MdltOXTtGZT96bihGZVtwXSk/cz1GZVtwXShmKTpzPWYuZGV0YWlsfHx7fTpzPWYuZGV0YWlsfHx7fX1sZXQgeT17dHlwZTpwLHRpbWVTdGFtcDpFLHRhcmdldDpGdihoKSxjdXJyZW50VGFyZ2V0OkZ2KHcpLGRldGFpbDpzLHRvdWNoZXM6cD09PSJ0b3VjaGVuZCJ8fHA9PT0icGFuZW5kIj9bXTpmLmNoYW5nZWRUb3VjaGVzLGNoYW5nZWRUb3VjaGVzOmYuY2hhbmdlZFRvdWNoZXN9O2YuY29tcG9uZW50SWQmJih5LmNvbXBvbmVudElkPWYuY29tcG9uZW50SWQpO2xldCBSPV9rW3BdO3JldHVybiBSJiZSLmZvckVhY2goRmU9PntpbChmLEZlKSYmKHlbRmVdPWZbRmVdKX0pLHl9ZnVuY3Rpb24gYmsoZixzKXtsZXQgcD1zLmF0dHJzfHx7fTtmb3IobGV0IE4gaW4gcClmLnNldEF0dHIoTixwW05dLCEwKTtsZXQgdz1zLnN0eWxlfHx7fTtmb3IobGV0IE4gaW4gdylmLnNldFN0eWxlKE4sd1tOXSwhMCl9dmFyIEtvPWNsYXNze2NvbnN0cnVjdG9yKHMscD0iIix3KXtzPXM/cy50b1N0cmluZygpOiIiLHRoaXMuaWQ9cyx0aGlzLlVSTD1wLHFwKHMsdGhpcyksdGhpcy5ub2RlTWFwPXt9O2xldCBOPUtvLkxpc3RlbmVyfHxVbDt0aGlzLmxpc3RlbmVyPW5ldyBOKHMsd3x8RHYocyxLby5oYW5kbGVyKSksdGhpcy50YXNrQ2VudGVyPW5ldyBWbChzLHc/KEUsaCk9PncoaCk6S28uaGFuZGxlciksdGhpcy5jcmVhdGVEb2N1bWVudEVsZW1lbnQoKX1nZXRSZWYocyl7cmV0dXJuIHRoaXMubm9kZU1hcFtzXX1vcGVuKCl7dGhpcy5saXN0ZW5lci5iYXRjaGVkPSExfWNsb3NlKCl7dGhpcy5saXN0ZW5lci5iYXRjaGVkPSEwfWNyZWF0ZURvY3VtZW50RWxlbWVudCgpe2lmKCF0aGlzLmRvY3VtZW50RWxlbWVudCl7bGV0IHM9bmV3IFppKCJkb2N1bWVudCIpO3MuZG9jSWQ9dGhpcy5pZCxzLm93bmVyRG9jdW1lbnQ9dGhpcyxzLnJvbGU9ImRvY3VtZW50RWxlbWVudCIscy5yZWY9Il9kb2N1bWVudEVsZW1lbnQiLHRoaXMubm9kZU1hcC5fZG9jdW1lbnRFbGVtZW50PXMsdGhpcy5kb2N1bWVudEVsZW1lbnQ9cyxPYmplY3QuZGVmaW5lUHJvcGVydHkocywiYXBwZW5kQ2hpbGQiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpwPT57Z2YodGhpcyxwKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocywiaW5zZXJ0QmVmb3JlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6KHAsdyk9PntnZih0aGlzLHAsdyl9fSksUW4oImRlYnVnIikmJlZpKGBDcmVhdGUgZG9jdW1lbnQgZWxlbWVudCAoaWQ6ICIke3MuZG9jSWR9IiwgcmVmOiAiJHtzLnJlZn0iKWApfXJldHVybiB0aGlzLmRvY3VtZW50RWxlbWVudH1jcmVhdGVCb2R5KHMscCl7aWYoIXRoaXMuYm9keSl7bGV0IHc9bmV3IFppKHMscCk7cGYodGhpcyx3KSxRbigiZGVidWciKSYmVmkoYFtjcmVhdGVCb2R5XSgke3RoaXMuaWR9LCR7dy50eXBlfSwke3cucmVmfSkgKCR7SlNPTi5zdHJpbmdpZnkody50b0pTT04oITApKX0pLmApfXJldHVybiB0aGlzLmJvZHl9Y3JlYXRlRWxlbWVudChzLHApe2xldCB3PW5ldyBaaShzLHApO3JldHVybiBRbigiZGVidWciKSYmVmkoYFtjcmVhdGVFbGVtZW50XSgke3RoaXMuaWR9LCR7dy50eXBlfSwke3cucmVmfSkgKCR7SlNPTi5zdHJpbmdpZnkody50b0pTT04oITApKX0pLmApLHd9Y3JlYXRlQ29tbWVudChzKXtyZXR1cm4gbmV3IGNsKHMpfWNyZWF0ZVRleHQocyl7cmV0dXJuIG5ldyBkdShzKX1maXJlRXZlbnQocyxwLHcsTixFKXtpZighcylyZXR1cm47dz13fHx7fSx3LnR5cGU9dy50eXBlfHxwLHcudGFyZ2V0PXMsdy5jdXJyZW50VGFyZ2V0PXMsdy50aW1lc3RhbXA9RGF0ZS5ub3coKSxOJiZiayhzLE4pO2xldCBoPSEwLHk9dGhpcy5nZXRSZWYoIl9yb290Iik7aWYoeSYmeS5hdHRyKXtsZXQgUj15LmF0dHIuYnViYmxlO2g9Uj09PSJ0cnVlInx8Uj09PSEwfHxoJiZSPT09dm9pZCAwfXJldHVybiB3PVZ2KHcpLHMuZmlyZUV2ZW50KHAsdyxoLEUpfWRlc3Ryb3koKXtRbigiZGVidWciKSYmVmkoYFtkZXN0cm95XSgke3RoaXMuaWR9LGRvY3VtZW50KSBEZXN0cm95IGRvY3VtZW50IChpZDogIiR7dGhpcy5pZH0iLCBVUkw6ICIke3RoaXMuVVJMfSIpYCksdGhpcy50YXNrQ2VudGVyLmRlc3Ryb3lDYWxsYmFjaygpLGRlbGV0ZSB0aGlzLmxpc3RlbmVyLGRlbGV0ZSB0aGlzLm5vZGVNYXAsZGVsZXRlIHRoaXMudGFza0NlbnRlcixKcCh0aGlzLmlkKX19O0tvLmhhbmRsZXI9bnVsbDt2YXIgVXY9e0lucHV0RWxlbWVudERpdjoiPFdoaXRlU3BhY2U+fDxMaW5lVGVybWluYXRvcj58PFJlc2VydmVkV29yZD58PElkZW50aWZpZXI+fDxOdW1lcmljTGl0ZXJhbD58PFB1bmN0dWF0b3I+fDxTdHJpbmdMaXRlcmFsPiIsSW5wdXRFbGVtZW50UmVnRXhwOiI8V2hpdGVTcGFjZT58PExpbmVUZXJtaW5hdG9yPnw8UmVzZXJ2ZWRXb3JkPnw8SWRlbnRpZmllcj58PE51bWVyaWNMaXRlcmFsPnw8UHVuY3R1YXRvcj58PFN0cmluZ0xpdGVyYWw+IixSZXNlcnZlZFdvcmQ6IjxLZXl3b3JkPnw8TnVsbExpdGVyYWw+fDxCb29sZWFuTGl0ZXJhbD4iLFdoaXRlU3BhY2U6L1tcdFx2XGZcdTAwMjBcdTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDBBXHUyMDJGXHUyMDVmXHUzMDAwXHVGRUZGXS8sTGluZVRlcm1pbmF0b3I6L1tcblxyXHUyMDI4XHUyMDI5XS8sS2V5d29yZDovbmV3KD8hW18kYS16QS1aMC05XSl8dm9pZCg/IVtfJGEtekEtWjAtOV0pfGRlbGV0ZSg/IVtfJGEtekEtWjAtOV0pfGluKD8hW18kYS16QS1aMC05XSl8aW5zdGFuY2VvZig/IVtfJGEtekEtWjAtOV0pfHR5cGVvZig/IVtfJGEtekEtWjAtOV0pLyxOdWxsTGl0ZXJhbDovbnVsbCg/IVtfJGEtekEtWjAtOV0pLyxCb29sZWFuTGl0ZXJhbDovKD86dHJ1ZXxmYWxzZSkoPyFbXyRhLXpBLVowLTldKS8sSWRlbnRpZmllcjovW18kYS16QS1aXVtfJGEtekEtWjAtOV0qLyxQdW5jdHVhdG9yOi9cL3w9PnxcKlwqfD4+Pj18Pj49fDw8PXw9PT18IT09fD4+Pnw8PHwlPXxcKj18LT18XCs9fDw9fD49fD09fCE9fFxePXxcfD18XHxcfHwmJnwmPXw+PnxcK1wrfC0tfFw6fH18XCp8JnxcfHxcXnwhfH58LXxcK3xcP3wlfD18Pnw8fCx8O3xcLig/IVswLTldKXxcXXxcW3xcKXxcKHx7LyxEaXZQdW5jdHVhdG9yOi9cLz18XC8vLE51bWVyaWNMaXRlcmFsOi8oPzowW3hYXVswLTlhLWZBLUZdKnxcLlswLTldK3woPzpbMS05XStbMC05XSp8MCkoPzpcLlswLTldKnxcLik/KSg/OltlRV1bKy1dezAsMX1bMC05XSspPyg/IVtfJGEtekEtWjAtOV0pLyxTdHJpbmdMaXRlcmFsOi8iKD86W14iXG5cXFxyXHUyMDI4XHUyMDI5XXxcXCg/OlsnIlxcYmZucnR2XG5cclx1MjAyOFx1MjAyOV18XHJcbil8XFx4WzAtOWEtZkEtRl17Mn18XFx1WzAtOWEtZkEtRl17NH18XFxbXjAtOXV4JyJcXGJmbnJ0dlxuXFxcclx1MjAyOFx1MjAyOV0pKiJ8Jyg/OlteJ1xuXFxcclx1MjAyOFx1MjAyOV18XFwoPzpbJyJcXGJmbnJ0dlxuXHJcdTIwMjhcdTIwMjldfFxyXG4pfFxceFswLTlhLWZBLUZdezJ9fFxcdVswLTlhLWZBLUZdezR9fFxcW14wLTl1eCciXFxiZm5ydHZcblxcXHJcdTIwMjhcdTIwMjldKSonLyxSZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWw6L1wvKD86XFsoPzpcXFtcc1xTXXxbXlxdXSkqXF18W14qXC9cXFxuXHJcdTIwMjhcdTIwMjldfFxcW15cblxyXHUyMDI4XHUyMDI5XSkoPzpcWyg/OlxcW1xzXFNdfFteXF1dKSpcXXxbXlwvXFxcblxyXHUyMDI4XHUyMDI5XXxcXFteXG5cclx1MjAyOFx1MjAyOV0pKlwvWzAtOWEtekEtWl0qL307ZnVuY3Rpb24gJHYoZixzLHApe3ZhciB3PVtzXTtmdW5jdGlvbiBOKGgpe3ZhciB5PW5ldyBSZWdFeHA7cmV0dXJuIHkuY29tcGlsZShoLnJlcGxhY2UoLzwoW14+XSspPi9nLGZ1bmN0aW9uKFIsRmUpe3JldHVybiBmW0ZlXT8ody5wdXNoKEZlKSxmW0ZlXWluc3RhbmNlb2YgUmVnRXhwPyIoIitmW0ZlXS5zb3VyY2UrIikiOiIoIitOKGZbRmVdKS5zb3VyY2UrIikiKToiIn0pLHApLHl9dmFyIEU9TihmW3NdKTt0aGlzLmV4ZWM9ZnVuY3Rpb24oaCl7dmFyIHk9RS5leGVjKGgpO2lmKHk9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHZhciBSPW5ldyBTdHJpbmcoeVswXSksRmU9MDtGZTx3Lmxlbmd0aDtGZSsrKXlbRmVdJiYoUlt3W0ZlXV09eVtGZV0pO3JldHVybiBSfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGFzdEluZGV4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUubGFzdEluZGV4fSxzZXQ6ZnVuY3Rpb24oaCl7RS5sYXN0SW5kZXg9aH19KX1mdW5jdGlvbiB5aygpe3ZhciBmPW5ldyAkdihVdiwiSW5wdXRFbGVtZW50RGl2IiwiZyIpLHM9bmV3ICR2KFV2LCJJbnB1dEVsZW1lbnRSZWdFeHAiLCJnIikscDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic291cmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHB9LHNldDpmdW5jdGlvbih3KXtwPXcsZi5sYXN0SW5kZXg9MCxzLmxhc3RJbmRleD0wfX0pLHRoaXMucmVzZXQ9ZnVuY3Rpb24oKXtmLmxhc3RJbmRleD0wLHMubGFzdEluZGV4PTB9LHRoaXMuZ2V0TmV4dFRva2VuPWZ1bmN0aW9uKHcpe3ZhciBOPWYubGFzdEluZGV4LEU7dz9FPWY6RT1zO3ZhciBoPUUuZXhlYyhwKTtpZihoJiZFLmxhc3RJbmRleC1OPmgubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCB0b2tlbiBJTExFR0FMIik7cmV0dXJuIGYubGFzdEluZGV4PUUubGFzdEluZGV4LHMubGFzdEluZGV4PUUubGFzdEluZGV4LGh9fXZhciBIdj17SWRlbnRpZmllck5hbWU6W1siSWRlbnRpZmllciJdXSxMaXRlcmFsOltbIk51bGxMaXRlcmFsIl0sWyJCb29sZWFuTGl0ZXJhbCJdLFsiTnVtZXJpY0xpdGVyYWwiXSxbIlN0cmluZ0xpdGVyYWwiXSxbIlJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbCJdXSxQcmltYXJ5RXhwcmVzc2lvbjpbWyJJZGVudGlmaWVyIl0sWyJMaXRlcmFsIl0sWyIoIiwiRXhwcmVzc2lvbiIsIikiXV0sQ2FsbEV4cHJlc3Npb246W1siUHJpbWFyeUV4cHJlc3Npb24iLCJBcmd1bWVudHMiXSxbIkNhbGxFeHByZXNzaW9uIiwiQXJndW1lbnRzIl1dLEFyZ3VtZW50czpbWyIoIiwiKSJdLFsiKCIsIkFyZ3VtZW50TGlzdCIsIikiXV0sQXJndW1lbnRMaXN0OltbIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdLFsiQXJndW1lbnRMaXN0IiwiLCIsIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdXSxMZWZ0SGFuZFNpZGVFeHByZXNzaW9uOltbIlByaW1hcnlFeHByZXNzaW9uIl0sWyJDYWxsRXhwcmVzc2lvbiJdXSxVbmFyeUV4cHJlc3Npb246W1siTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiJdLFsidm9pZCIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsiKyIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsiLSIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsifiIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsiISIsIlVuYXJ5RXhwcmVzc2lvbiJdXSxFeHBvbmVudGlhdGlvbkV4cHJlc3Npb246W1siVW5hcnlFeHByZXNzaW9uIl0sWyJFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24iLCIqKiIsIlVuYXJ5RXhwcmVzc2lvbiJdXSxNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb246W1siTXVsdGlwbGljYXRpdmVFeHByZXNzaW9uIiwiLyIsIkV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbiJdLFsiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl0sWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iLCIqIiwiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl0sWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iLCIlIiwiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl1dLEFkZGl0aXZlRXhwcmVzc2lvbjpbWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iXSxbIkFkZGl0aXZlRXhwcmVzc2lvbiIsIisiLCJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iXSxbIkFkZGl0aXZlRXhwcmVzc2lvbiIsIi0iLCJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iXV0sU2hpZnRFeHByZXNzaW9uOltbIkFkZGl0aXZlRXhwcmVzc2lvbiJdLFsiU2hpZnRFeHByZXNzaW9uIiwiPDwiLCJBZGRpdGl2ZUV4cHJlc3Npb24iXSxbIlNoaWZ0RXhwcmVzc2lvbiIsIj4+IiwiQWRkaXRpdmVFeHByZXNzaW9uIl0sWyJTaGlmdEV4cHJlc3Npb24iLCI+Pj4iLCJBZGRpdGl2ZUV4cHJlc3Npb24iXV0sUmVsYXRpb25hbEV4cHJlc3Npb246W1siU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsIjwiLCJTaGlmdEV4cHJlc3Npb24iXSxbIlJlbGF0aW9uYWxFeHByZXNzaW9uIiwiPiIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCI8PSIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCI+PSIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCJpbnN0YW5jZW9mIiwiU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsImluIiwiU2hpZnRFeHByZXNzaW9uIl1dLEVxdWFsaXR5RXhwcmVzc2lvbjpbWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiPT0iLCJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiIT0iLCJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiPT09IiwiUmVsYXRpb25hbEV4cHJlc3Npb24iXSxbIkVxdWFsaXR5RXhwcmVzc2lvbiIsIiE9PSIsIlJlbGF0aW9uYWxFeHByZXNzaW9uIl1dLEJpdHdpc2VBTkRFeHByZXNzaW9uOltbIkVxdWFsaXR5RXhwcmVzc2lvbiJdLFsiQml0d2lzZUFOREV4cHJlc3Npb24iLCImIiwiRXF1YWxpdHlFeHByZXNzaW9uIl1dLEJpdHdpc2VYT1JFeHByZXNzaW9uOltbIkJpdHdpc2VBTkRFeHByZXNzaW9uIl0sWyJCaXR3aXNlWE9SRXhwcmVzc2lvbiIsIl4iLCJCaXR3aXNlQU5ERXhwcmVzc2lvbiJdXSxCaXR3aXNlT1JFeHByZXNzaW9uOltbIkJpdHdpc2VYT1JFeHByZXNzaW9uIl0sWyJCaXR3aXNlT1JFeHByZXNzaW9uIiwifCIsIkJpdHdpc2VYT1JFeHByZXNzaW9uIl1dLExvZ2ljYWxBTkRFeHByZXNzaW9uOltbIkJpdHdpc2VPUkV4cHJlc3Npb24iXSxbIkxvZ2ljYWxBTkRFeHByZXNzaW9uIiwiJiYiLCJCaXR3aXNlT1JFeHByZXNzaW9uIl1dLExvZ2ljYWxPUkV4cHJlc3Npb246W1siTG9naWNhbEFOREV4cHJlc3Npb24iXSxbIkxvZ2ljYWxPUkV4cHJlc3Npb24iLCJ8fCIsIkxvZ2ljYWxBTkRFeHByZXNzaW9uIl1dLENvbmRpdGlvbmFsRXhwcmVzc2lvbjpbWyJMb2dpY2FsT1JFeHByZXNzaW9uIl0sWyJMb2dpY2FsT1JFeHByZXNzaW9uIiwiPyIsIkxvZ2ljYWxPUkV4cHJlc3Npb24iLCI6IiwiTG9naWNhbE9SRXhwcmVzc2lvbiJdXSxFeHByZXNzaW9uOltbIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXhwcmVzc2lvbiIsIiwiLCJDb25kaXRpb25hbEV4cHJlc3Npb24iXV0sUHJvZ3JhbTpbWyJFeHByZXNzaW9uIl1dfTtmdW5jdGlvbiB2YyhmLHMpe3RoaXMubmFtZT1mLHRoaXMudG9rZW49cyx0aGlzLmNoaWxkTm9kZXM9W10sdGhpcy50b1N0cmluZz1mdW5jdGlvbihwKXtpZihwfHwocD0iIiksdGhpcy5jaGlsZE5vZGVzLmxlbmd0aD09MSlyZXR1cm4gdGhpcy5jaGlsZE5vZGVzWzBdLnRvU3RyaW5nKHApO2Zvcih2YXIgdz1wK3RoaXMubmFtZSsodGhpcy50b2tlbiE9bnVsbCYmdGhpcy5uYW1lIT10aGlzLnRva2VuPyI6Iit0aGlzLnRva2VuOiIiKStgCmAsTj0wO048dGhpcy5jaGlsZE5vZGVzLmxlbmd0aDtOKyspdys9dGhpcy5jaGlsZE5vZGVzW05dLnRvU3RyaW5nKHArIiAgICAiKTtyZXR1cm4gd319ZnVuY3Rpb24gRWsoKXt2YXIgZixzPXtQcm9ncmFtOiIkIn0scD17fTtmdW5jdGlvbiB3KHkpe3BbSlNPTi5zdHJpbmdpZnkoeSldPXk7Zm9yKHZhciBSPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHkpO1IubGVuZ3RoOyl7dmFyIEZlPVIuc2hpZnQoKTshSHZbRmVdfHxIdltGZV0uZm9yRWFjaChmdW5jdGlvbihWdCl7eVtWdFswXV18fFIucHVzaChWdFswXSk7dmFyIE90PXksUD1udWxsO1Z0LmZvckVhY2goZnVuY3Rpb24od3Qpe090W3d0XXx8KE90W3d0XT17fSksUD1PdCxPdD1PdFt3dF19KSx5W0ZlXS4kZGl2JiYoT3QuJGRpdj0hMCksT3QuJHJlZHVjZT1GZSxPdC4kY291bnQ9VnQubGVuZ3RofSl9Zm9yKHZhciBJdCBpbiB5KXR5cGVvZiB5W0l0XSE9Im9iamVjdCJ8fEl0LmNoYXJBdCgwKT09IiQifHx5W0l0XS4kY2xvc3VyZXx8KHBbSlNPTi5zdHJpbmdpZnkoeVtJdF0pXT95W0l0XT1wW0pTT04uc3RyaW5naWZ5KHlbSXRdKV06dyh5W0l0XSkpO3kuJGNsb3N1cmU9ITB9dyhzKTt2YXIgTj1bXSxFPVtzXSxoPXM7dGhpcy5pbnNlcnRTeW1ib2w9ZnVuY3Rpb24oUixGZSl7Zm9yKDshaFtSLm5hbWVdJiZoLiRyZWR1Y2U7KXtmb3IodmFyIEl0PWguJGNvdW50LFZ0PW5ldyB2YyhoLiRyZWR1Y2UpO0l0LS07KVZ0LmNoaWxkTm9kZXMucHVzaChOLnBvcCgpKSxFLnBvcCgpO2g9RVtFLmxlbmd0aC0xXSx0aGlzLmluc2VydFN5bWJvbChWdCl9aWYoaD1oW1IubmFtZV0sTi5wdXNoKFIpLEUucHVzaChoKSwhaCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGguJGRpdn0sdGhpcy5yZXNldD1mdW5jdGlvbigpe2g9cyxOPVtdLEU9W3NdfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZ3JhbW1hclRyZWUiLHtnZXQ6ZnVuY3Rpb24oKXt0cnl7Zm9yKDtoLiRyZWR1Y2U7KXtmb3IodmFyIHk9aC4kY291bnQsUj1uZXcgdmMoaC4kcmVkdWNlKTt5LS07KVIuY2hpbGROb2Rlcy5wdXNoKE4ucG9wKCkpLEUucG9wKCk7aD1FW0UubGVuZ3RoLTFdLHRoaXMuaW5zZXJ0U3ltYm9sKFIpfWlmKE4ubGVuZ3RoPjAmJmhbIjsiXSlyZXR1cm4gdGhpcy5pbnNlcnRTeW1ib2wobmV3IHZjKCI7IiwiOyIpKSx0aGlzLmdyYW1tYXJUcmVlO2lmKE4ubGVuZ3RoIT0xfHxOWzBdLm5hbWUhPSJQcm9ncmFtIil0aHJvdyBuZXcgRXJyb3J9Y2F0Y2goRmUpe3Rocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiKX1yZXR1cm4gTlswXX19KX1mdW5jdGlvbiBTaygpe3RoaXMubGV4aWNhbFBhcnNlcj1uZXcgeWssdGhpcy5zeW50YWN0aWNhbFBhcnNlcj1uZXcgRWs7dmFyIGY9WyJOdWxsTGl0ZXJhbCIsIkJvb2xlYW5MaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJTdHJpbmdMaXRlcmFsIiwiUmVndWxhckV4cHJlc3Npb25MaXRlcmFsIiwiSWRlbnRpZmllciIsIioqIiwiPT4iLCJ7IiwifSIsIigiLCIpIiwiWyIsIl0iLCIuIiwiOyIsIiwiLCI8IiwiPiIsIjw9IiwiPj0iLCI9PSIsIiE9IiwiPT09IiwiIT09IiwiKyIsIi0iLCIqIiwiJSIsIisrIiwiLS0iLCI8PCIsIj4+IiwiPj4+IiwiJiIsInwiLCJeIiwiISIsIn4iLCImJiIsInx8IiwiPyIsIjoiLCI9IiwiKz0iLCItPSIsIio9IiwiJT0iLCI8PD0iLCI+Pj0iLCI+Pj49IiwiJj0iLCJ8PSIsIl49IiwiLyIsIi89IiwiaW5zdGFuY2VvZiIsInR5cGVvZiIsIm5ldyIsInZvaWQiLCJkZWJ1Z2dlciIsInRoaXMiLCJkZWxldGUiLCJpbiJdLHM9e307Zi5mb3JFYWNoKGZ1bmN0aW9uKHApe09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLHAse30pfSksdGhpcy5yZXNldD1mdW5jdGlvbigpe3RoaXMubGV4aWNhbFBhcnNlci5yZXNldCgpLHRoaXMuc3ludGFjdGljYWxQYXJzZXIucmVzZXQoKX0sdGhpcy5wYXJzZT1mdW5jdGlvbihwLHcpe3ZhciBOLEU9ITE7dGhpcy5sZXhpY2FsUGFyc2VyLnNvdXJjZT1wO2Zvcih2YXIgaD0hMTtOPXRoaXMubGV4aWNhbFBhcnNlci5nZXROZXh0VG9rZW4oaCk7KXt3JiZ3KE4pO3RyeXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhOKS5zb21lKHk9PnMuaGFzT3duUHJvcGVydHkoeSk/KGg9dGhpcy5zeW50YWN0aWNhbFBhcnNlci5pbnNlcnRTeW1ib2wobmV3IHZjKHksTiksRSksRT0hMSwhMCk6ITEpKWNvbnRpbnVlOyhOLktleXdvcmR8fE4uUHVuY3R1YXRvcnx8Ti5EaXZQdW5jdHVhdG9yKSYmcy5oYXNPd25Qcm9wZXJ0eShOLnRvU3RyaW5nKCkpJiYoaD10aGlzLnN5bnRhY3RpY2FsUGFyc2VyLmluc2VydFN5bWJvbChuZXcgdmMoTi50b1N0cmluZygpLE4pLEUpKX1jYXRjaCh5KXt0aHJvdyBuZXcgU3ludGF4RXJyb3IoIlVuZXhwZWN0ZWQgdG9rZW4gIitOKX19cmV0dXJuIHRoaXMuc3ludGFjdGljYWxQYXJzZXIuZ3JhbW1hclRyZWV9fXZhciBqdj1uZXcgU2s7ZnVuY3Rpb24gd2soZil7anYucmVzZXQoKSx0aGlzLnRyZWU9anYucGFyc2UoZiksdGhpcy5wYXRocz1bXTt2YXIgcz1PYmplY3QuY3JlYXRlKG51bGwpLHA9dGhpcyx3PU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5pc1NpbXBsZSx0aGlzLmlzQ29uc3QsRSh0aGlzLnRyZWUpLE4odGhpcy50cmVlKSx0aGlzLnBhdGhzLmxlbmd0aD09PTAmJih0aGlzLmlzQ29uc3Q9ITApLHRoaXMuc2V0dGVyPWZ1bmN0aW9uKFIpe2Zvcih2YXIgRmU9cyxJdD0wO0l0PFIubGVuZ3RoLTE7SXQrKylGZVtSW0l0XV18fChGZVtSW0l0XV09T2JqZWN0LmNyZWF0ZShudWxsKSksRmU9RmVbUltJdF1dO3JldHVybntpc0NvbXBsZXRlZDpmdW5jdGlvbigpe2Zvcih2YXIgVnQgaW4gdylpZighd1tWdF0pcmV0dXJuITE7cmV0dXJuITB9LHNldDpmdW5jdGlvbihWdCl7aWYod1tSLmpvaW4oIi4iKV18fCh3W1Iuam9pbigiLiIpXT0hMCksRmVbUltJdF1dPVZ0LHRoaXMuaXNDb21wbGV0ZWQoKSlyZXR1cm4gcC5leGVjKCl9fX0sdGhpcy52YWx1ZU9mPXRoaXMuZXhlYz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4oMCxldmFsKShmKX0uY2FsbChzKX1jYXRjaChSKXt9fTtmdW5jdGlvbiBOKFIpe2Zvcih2YXIgRmU9UjtGZS5jaGlsZE5vZGVzLmxlbmd0aDw9MSYmRmUubmFtZSE9PSJNZW1iZXJFeHByZXNzaW9uIjspRmU9RmUuY2hpbGROb2Rlc1swXTtGZS5uYW1lPT09Ik1lbWJlckV4cHJlc3Npb24iP3AuaXNTaW1wbGU9ITA6cC5pc1NpbXBsZT0hMX1mdW5jdGlvbiBFKFIpe2lmKFIubmFtZT09PSJDYWxsRXhwcmVzc2lvbiImJlIuY2hpbGROb2Rlc1tSLmNoaWxkTm9kZXMubGVuZ3RoLTFdLm5hbWUhPT0iQ2FsbEV4cHJlc3Npb24iKXt2YXIgRmU9aChSLmNoaWxkTm9kZXNbMV0pO0UoUi5jaGlsZE5vZGVzWzBdKX1lbHNlIGlmKFIubmFtZT09PSJOZXdFeHByZXNzaW9uIiYmUi5jaGlsZE5vZGVzLmxlbmd0aD09PTEpdmFyIEZlPWgoUi5jaGlsZE5vZGVzWzBdKTtlbHNlIGlmKFIubmFtZT09PSJNZW1iZXJFeHByZXNzaW9uIiYmUi5jaGlsZE5vZGVzLmxlbmd0aD09PTEpdmFyIEZlPWgoUik7ZWxzZSBmb3IodmFyIEl0PTA7SXQ8Ui5jaGlsZE5vZGVzLmxlbmd0aDtJdCsrKUUoUi5jaGlsZE5vZGVzW0l0XSl9ZnVuY3Rpb24gaChSKXtpZihSLmNoaWxkTm9kZXNbMF0ubmFtZT09PSJJZGVudGlmaWVyTmFtZSIpe3ZhciBGZT1oKFIuY2hpbGROb2Rlc1syXSk7cmV0dXJuIEZlJiYoRmU9RmUuY29uY2F0KFIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLnRva2VuLnRvU3RyaW5nKCkpKSx5KEZlKSxGZX1lbHNlIGlmKFIuY2hpbGROb2Rlc1swXS5uYW1lPT09IlByaW1hcnlFeHByZXNzaW9uIilpZihSLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5uYW1lPT09IklkZW50aWZpZXIiKXt2YXIgRmU9W1IuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLnRva2VuLnRvU3RyaW5nKCldO3JldHVybiB5KEZlKSxGZX1lbHNlIHJldHVybiBudWxsO2Vsc2V7aWYoUi5jaGlsZE5vZGVzWzBdLm5hbWU9PT0iXSIpcmV0dXJuIGgoUi5jaGlsZE5vZGVzWzNdKSxFKFIuY2hpbGROb2Rlc1sxXSksbnVsbDtpZihSLmNoaWxkTm9kZXNbMF0ubmFtZT09PSJBcmd1bWVudHMiKXJldHVybiBFKFIuY2hpbGROb2Rlc1swXSksRShSLmNoaWxkTm9kZXNbMV0pLG51bGw7Zm9yKHZhciBJdD0wO0l0PFIuY2hpbGROb2Rlcy5sZW5ndGg7SXQrKylFKFIuY2hpbGROb2Rlc1tJdF0pfX1mdW5jdGlvbiB5KFIpe2Zvcih2YXIgRmU9cyxJdD0wO0l0PFIubGVuZ3RoLTE7SXQrKylGZVtSW0l0XV18fChGZVtSW0l0XV09T2JqZWN0LmNyZWF0ZShudWxsKSksRmU9RmVbUltJdF1dO3AucGF0aHMucHVzaChSKSx3W1Iuam9pbigiLiIpXT0hMX19ZnVuY3Rpb24gdWwoZil7dmFyIHM9Zi5jaGlsZE5vZGVzLnNsaWNlKCkucmV2ZXJzZSgpLHA9cy5maWx0ZXIoUj0+IVIudG9rZW58fCFSLnRva2VuLlB1bmN0dWF0b3IpO2lmKGYubmFtZT09PSJVbmFyeUV4cHJlc3Npb24iJiZzLmxlbmd0aD09PTImJnNbMF0ubmFtZT09PSItIiYmcC5sZW5ndGg9PT0xKXt2YXIgdz11bChwWzBdKTtyZXR1cm4gdy52YWx1ZT0tdy52YWx1ZSx3fWlmKGYubmFtZT09PSJBcmd1bWVudHMiKXtmb3IodmFyIE49W10sRT1wWzBdO0U7KUUuY2hpbGROb2Rlcy5sZW5ndGg9PT0zJiYoTi51bnNoaWZ0KEUuY2hpbGROb2Rlc1swXSksRT1FLmNoaWxkTm9kZXNbMl0pLEUuY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiYoTi51bnNoaWZ0KEUuY2hpbGROb2Rlc1swXSksRT1udWxsKTtyZXR1cm57dHlwZToiQXJndW1lbnRzIixjaGlsZHJlbjpOLm1hcChSPT51bChSKSl9fWlmKHAmJnAubGVuZ3RoPT09MSl7dmFyIHc9dWwocFswXSk7cmV0dXJuIHd9aWYoZi50b2tlbiYmWyJOdWxsTGl0ZXJhbCIsIkJvb2xlYW5MaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJTdHJpbmdMaXRlcmFsIiwiSWRlbnRpZmllciJdLnNvbWUoUj0+Zi50b2tlbltSXSkpe3ZhciBoPU9iamVjdC5rZXlzKGYudG9rZW4pLmZpbHRlcihSPT5SLm1hdGNoKC9MaXRlcmFsLyl8fFIubWF0Y2goL0lkZW50aWZpZXIvKSlbMF0seT17TnVsbExpdGVyYWw6bnVsbCxCb29sZWFuTGl0ZXJhbDpCb29sZWFuKGYudG9rZW4pLE51bWVyaWNMaXRlcmFsOk51bWJlcihmLnRva2VuKSxTdHJpbmdMaXRlcmFsOmYudG9rZW4sSWRlbnRpZmllcjpmLnRva2VufVtoXTtyZXR1cm57dHlwZTpoLHZhbHVlOnl9fXJldHVybiBmLm5hbWU9PT0iQ2FsbEV4cHJlc3Npb24iP3t0eXBlOiJDYWxsRXhwcmVzc2lvbiIsY2hpbGRyZW46W3VsKHNbMF0pLHVsKHNbMV0pXX06e3R5cGU6cy5maWx0ZXIoUj0+Ui50b2tlbiYmUi50b2tlbi5QdW5jdHVhdG9yKVswXS5uYW1lLGNoaWxkcmVuOnMuZmlsdGVyKFI9PiFSLnRva2VufHwhUi50b2tlbi5QdW5jdHVhdG9yKS5tYXAoUj0+dWwoUikpfX1mdW5jdGlvbiB6dihmKXt2YXIgcz1uZXcgd2soZik7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHVsKHMudHJlZSksbnVsbCl9ZnVuY3Rpb24gQ2soZixzKXtyZXR1cm4gcz09PSJiaW5kIiYmKGY9PT0iYmluZGluZ3gifHxmPT09ImJpbmRpbmciKX1mdW5jdGlvbiBXdihmKXtpZighZilyZXR1cm47dHJ5e2Y9SlNPTi5wYXJzZShmKX1jYXRjaChwKXt9bGV0IHM9e307aWYoaGkoZik/cy5vcmlnaW49ZjpmJiYocy5vcmlnaW49Zi5vcmlnaW4scy50cmFuc2Zvcm1lZD1mLnRyYW5zZm9ybWVkKSwhKCFzLnRyYW5zZm9ybWVkJiYhcy5vcmlnaW4pKXJldHVybiBzLnRyYW5zZm9ybWVkPXMudHJhbnNmb3JtZWR8fHp2KHMub3JpZ2luKSxzfWZ1bmN0aW9uIEFrKGYpe3JldHVybiBmJiYoZi5leGl0RXhwcmVzc2lvbj1XdihmLmV4aXRFeHByZXNzaW9uKSxmLnByb3BzJiZmLnByb3BzLmZvckVhY2gocz0+e3MuZXhwcmVzc2lvbj1XdihzLmV4cHJlc3Npb24pfSksZil9ZnVuY3Rpb24gT2soZil7cmV0dXJuIGZ1bmN0aW9uKHM9e30pe2lmKHpuKGYpKXJldHVybiBmKHtzdGF0ZTpzLnN0YXRlPT09ImVuZCI/ImV4aXQiOnMuc3RhdGUsdDpzLnQhPT12b2lkIDA/cy50OnMuZGVsdGFUfSl9fWZ1bmN0aW9uIEd2KGYscyxwKXtyZXR1cm4gcCYmKENrKGYscyk/ZnVuY3Rpb24odyxOPWZ1bmN0aW9uKCl7fSl7aWYoIXcpdGhyb3cgbmV3IEVycm9yKCJzaG91bGQgcGFzcyBvcHRpb25zIGZvciBiaW5kaW5nIik7cmV0dXJuIEFrKHcpLHAodyx3JiZ3LmV2ZW50VHlwZT09PSJ0aW1pbmciP09rKE4pOk4pfTpwKX1mdW5jdGlvbiBUayhmLHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJbW0N1cnJlbnRJbnN0YW5jZUlkXV0iLHt2YWx1ZTpzfSl9ZnVuY3Rpb24gWXYoZil7cmV0dXJuIGZbIltbQ3VycmVudEluc3RhbmNlSWRdXSJdfWZ1bmN0aW9uIFBrKGYscyxwKXtsZXQgdz1EcihmKTtyZXR1cm4hd3x8IXpuKHcuc2VuZCk/KGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBmaW5kIHRhc2tDZW50ZXIgKCR7Zn0pLmApLG51bGwpOiguLi5OKT0+dy5zZW5kKCJtb2R1bGUiLHttb2R1bGU6cyxtZXRob2Q6cH0sTil9ZnVuY3Rpb24gSWsoZixzLHAsdyl7bGV0IE49RHIoZik7cmV0dXJuIU58fCF6bihOLnNlbmQpPyhjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gZmluZCB0YXNrQ2VudGVyICgke2Z9KS5gKSxudWxsKTp6bih3KT9FPT5OLnNlbmQoIm1vZHVsZSIse21vZHVsZTpzLG1ldGhvZDpwfSxbRV0pOihjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSAke3N9LiR7cH0gbXVzdCBiZSBhc3NpZ25lZCBhcyBhIGZ1bmN0aW9uLmApLG51bGwpfXZhciBodT1jbGFzc3tjb25zdHJ1Y3RvcihzLHApe1RrKHRoaXMsU3RyaW5nKHMpKSx0aGlzLmNvbmZpZz1wfHx7fSx0aGlzLmRvY3VtZW50PW5ldyBLbyhzLHRoaXMuY29uZmlnLmJ1bmRsZVVybCksdGhpcy5yZXF1aXJlTW9kdWxlPXRoaXMucmVxdWlyZU1vZHVsZS5iaW5kKHRoaXMpLHRoaXMuaW1wb3J0U2NyaXB0PXRoaXMuaW1wb3J0U2NyaXB0LmJpbmQodGhpcyksdGhpcy5pc1JlZ2lzdGVyZWRNb2R1bGU9Y3UsdGhpcy5pc1JlZ2lzdGVyZWRDb21wb25lbnQ9VGZ9cmVxdWlyZU1vZHVsZShzKXtsZXQgcD1Zdih0aGlzKTtpZighKHAmJnRoaXMuZG9jdW1lbnQmJnRoaXMuZG9jdW1lbnQudGFza0NlbnRlcikpe2NvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byByZXF1aXJlTW9kdWxlKCIke3N9IiksIGluc3RhbmNlICgke3B9KSBkb2Vzbid0IGV4aXN0IGFueW1vcmUuYCk7cmV0dXJufWlmKCFjdShzKSl7Y29uc29sZS53YXJuKGBbSlMgRnJhbWV3b3JrXSBcdTVGNTNcdTUyNERcdThGRDBcdTg4NENcdTc2ODRcdTU3RkFcdTVFQTdcdTRFMERcdTUzMDVcdTU0MkJcdTUzOUZcdTc1MUZcdTYzRDJcdTRFRjZbJHtzfV1cdUZGMENcdThCRjdcdTU3MjhtYW5pZmVzdFx1NEUyRFx1OTE0RFx1N0Y2RVx1OEJFNVx1NjNEMlx1NEVGNlx1RkYwQ1x1OTFDRFx1NjVCMFx1NTIzNlx1NEY1Q1x1NTMwNVx1NjJFQ1x1OEJFNVx1NTM5Rlx1NzUxRlx1NjNEMlx1NEVGNlx1NzY4NFx1ODFFQVx1NUI5QVx1NEU0OVx1OEZEMFx1ODg0Q1x1NTdGQVx1NUVBN2ApO3JldHVybn1sZXQgdz17fSxOPWF2KHMpO2ZvcihsZXQgRSBpbiBOKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LEUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+R3YocyxFLFBrKHAscyxFKSksc2V0Omg9PklrKHAscyxFLGgpfSk7cmV0dXJuIHd9c3VwcG9ydHMocyl7aWYoIWhpKHMpKXJldHVybiBudWxsO2xldCBwPXMubWF0Y2goL15AKFx3KylcLyhbXHctXSspKFwuKFx3KykpPyQvaSk7aWYocCl7bGV0IHc9cFsxXSxOPXBbMl0sRT1wWzRdO3N3aXRjaCh3KXtjYXNlIm1vZHVsZSI6cmV0dXJuIGN1KE4sRSk7Y2FzZSJjb21wb25lbnQiOnJldHVybiBUZihOKX19cmV0dXJuIG51bGx9aW1wb3J0U2NyaXB0KHMscD17fSl7bGV0IHc9WXYodGhpcyksTj1Ecih3KTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oRSxoKXtpZighTnx8IXpuKE4uc2VuZCkpcmV0dXJuIGgobmV3IEVycm9yKGBbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gaW1wb3J0IHNjcmlwdCAiJHtzfSIsIG5vIHRhc2tDZW50ZXIgKCR7d30pIG1hdGNoZWQuYCkpO3RyeXtOLnNlbmQoIm1vZHVsZSIse21vZHVsZToic2NyaXB0IixtZXRob2Q6ImltcG9ydFNjcmlwdCJ9LFtzLHBdLHtjYWxsYmFjazpbeT0+RSh5KSx5PT5oKHkpXX0pfWNhdGNoKHkpe2goeSl9fSl9fTtmdW5jdGlvbiBOayhmLHMpe2xldCBwPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHAuc2VydmljZT1PYmplY3QuY3JlYXRlKG51bGwpLGtzLmZvckVhY2goKHtuYW1lOncsb3B0aW9uczpOfSk9PntsZXQgRT1OLmNyZWF0ZTtpZihFKXRyeXtsZXQgaD1FKGYscyk7RmkocC5zZXJ2aWNlLGgpLEZpKHAsaC5pbnN0YW5jZSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihgW0pTIFJ1bnRpbWVdIEZhaWxlZCB0byBjcmVhdGUgc2VydmljZSAke3d9LmApfX0pLGRlbGV0ZSBwLnNlcnZpY2UuaW5zdGFuY2UsT2EocC5zZXJ2aWNlKSxwfXZhciBraz17dWlkOjB9LFJrPXpwKGhjKSx4az1qcChoYyk7ZnVuY3Rpb24gcXYoZixzLHApe2xldCB3PW5ldyBodShmLHMpLE49IlZ1ZSIsRT1OayhmLHt3ZWV4OncsbnZ1ZTp3LGNvbmZpZzpzLGNyZWF0ZWQ6RGF0ZS5ub3coKSxmcmFtZXdvcms6Tn0pO09hKEUpO2xldCBoPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEZpKGgsVWsodykpLEZpKGgsRSx7U2hhcmVkT2JqZWN0OmtrLHdlZXg6dyxudnVlOncscmVxdWlyZU1vZHVsZTp5PT53LnJlcXVpcmVNb2R1bGUoeSksX19XRUVYX0NBTExfSkFWQVNDUklQVF9fOkFmLHNlcnZpY2VzOkV9KSxoLnBsdXM9bmV3IGguV2VleFBsdXModyksaC5WdWVTaGFyZWQ9aGMsaC5VbmlTaGFyZWQ9UmssaC5WdWVSZWFjdGl2aXR5PXhrLE12KGYsaCksT2EoaCksaH1mdW5jdGlvbiBCayhmLHMscD17fSl7bGV0IHc9IlZ1ZSI7cD1kZihwKSxwLmVudj1kZihnbG9iYWwuV1hFbnZpcm9ubWVudHx8e30pLHAuYnVuZGxlVHlwZT13O2xldCBOPXF2KGYscCk7TWsocyxOKX1mdW5jdGlvbiBNayhmLHMpe2xldCBwPVtdLHc9W107Zm9yKGxldCBoIGluIHMpcC5wdXNoKGgpLHcucHVzaChzW2hdKTtsZXQgRT0iKGZ1bmN0aW9uIChnbG9iYWwpIHsgIitgCmdsb2JhbCA9IChmdW5jdGlvbiAoKSB7CiAgdmFyIGcKICAvLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZQogIGcgPSAoZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMKICB9KSgpCiAgdHJ5IHsKICAgIC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKQogICAgZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkKICB9IGNhdGNoIChlKSB7CiAgICAvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZQogICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJvYmplY3QiKSBnID0gd2luZG93CiAgfQogIHJldHVybiBnCn0pKCkgfHwgZ2xvYmFsOwpgK2YrIiB9KShPYmplY3QuY3JlYXRlKHRoaXMpKSI7cmV0dXJuIG5ldyBGdW5jdGlvbiguLi5wLEUpKC4uLncpfWZ1bmN0aW9uIERrKGYpe2xldCBzPXJzKGYpO3RyeXtpZihzJiZzLmJvZHkpcmV0dXJuIHMuYm9keS50b0pTT04oKX1jYXRjaChwKXtjb25zb2xlLmVycm9yKCJbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gZ2V0IHRoZSB2aXJ0dWFsIGRvbSB0cmVlLiIpO3JldHVybn19ZnVuY3Rpb24gTGsoZil7QnAoZiksa3MuZm9yRWFjaChzPT57bGV0IHA9cy5vcHRpb25zLmRlc3Ryb3k7cCYmcChmKX0pfWZ1bmN0aW9uIEZrKGYpe01wKGYpLGtzLmZvckVhY2gocz0+e2xldCBwPXMub3B0aW9ucy5yZWZyZXNoO3AmJnAoZil9KX12YXIgVms9e2NyZWF0ZUluc3RhbmNlOkJrLGNyZWF0ZUluc3RhbmNlQ29udGV4dDpxdixnZXRSb290OkRrLGdldERvY3VtZW50OnJzLHJlZ2lzdGVyU2VydmljZTp1dSx1bnJlZ2lzdGVyU2VydmljZTpmdSxjYWxsSlMoZixzKXtyZXR1cm4gQWYoZixzKX0scmVnaXN0ZXJDb21wb25lbnRzOnN2LHJlZ2lzdGVyTW9kdWxlczpvdixkZXN0cm95SW5zdGFuY2U6TGsscmVmcmVzaEluc3RhbmNlOkZrfTtmdW5jdGlvbiBEZigpe3JldHVybiBpdigpLFZrfWZ1bmN0aW9uIFVrKGYpe2lmKGdsb2JhbC5zZXRUaW1lb3V0JiZnbG9iYWwuc2V0SW50ZXJ2YWwpcmV0dXJue3NldFRpbWVvdXQ6Z2xvYmFsLnNldFRpbWVvdXQsc2V0SW50ZXJ2YWw6Z2xvYmFsLnNldEludGVydmFsLGNsZWFyVGltZW91dDpnbG9iYWwuY2xlYXJUaW1lb3V0LGNsZWFySW50ZXJ2YWw6Z2xvYmFsLmNsZWFySW50ZXJ2YWx9O2xldCBzPWYucmVxdWlyZU1vZHVsZSgidGltZXIiKTtyZXR1cm57c2V0VGltZW91dDooLi4udyk9PntsZXQgTj1mdW5jdGlvbigpe3dbMF0oLi4udy5zbGljZSgyKSl9O3JldHVybiBzLnNldFRpbWVvdXQoTix3WzFdKSxmLmRvY3VtZW50LnRhc2tDZW50ZXIuY2FsbGJhY2tNYW5hZ2VyLmxhc3RDYWxsYmFja0lkLnRvU3RyaW5nKCl9LHNldEludGVydmFsOiguLi53KT0+e2xldCBOPWZ1bmN0aW9uKCl7d1swXSguLi53LnNsaWNlKDIpKX07cmV0dXJuIHMuc2V0SW50ZXJ2YWwoTix3WzFdKSxmLmRvY3VtZW50LnRhc2tDZW50ZXIuY2FsbGJhY2tNYW5hZ2VyLmxhc3RDYWxsYmFja0lkLnRvU3RyaW5nKCl9LGNsZWFyVGltZW91dDp3PT57cy5jbGVhclRpbWVvdXQodyl9LGNsZWFySW50ZXJ2YWw6dz0+e3MuY2xlYXJJbnRlcnZhbCh3KX19fXZhciBKdj17RG9jdW1lbnQ6S28sRWxlbWVudDpaaSxDb21tZW50OmNsLExpc3RlbmVyOlVsLFRhc2tDZW50ZXI6Vmwsc2VuZFRhc2tzKC4uLmYpe3JldHVybiB6bihjYWxsTmF0aXZlKT9jYWxsTmF0aXZlKC4uLmYpOihnbG9iYWwuY2FsbE5hdGl2ZXx8KCgpPT57fSkpKC4uLmYpfX07S28uaGFuZGxlcj1Kdi5zZW5kVGFza3M7dmFyIGZsPUp2O2Z1bmN0aW9uICRrKCl7T2EoZmwuQ29tbWVudCksT2EoZmwuTGlzdGVuZXIpLE9hKGZsLkRvY3VtZW50LnByb3RvdHlwZSksT2EoZmwuQ29tbWVudC5wcm90b3R5cGUpLE9hKGZsLkxpc3RlbmVyLnByb3RvdHlwZSl9dmFyIGd1PXtzZXJ2aWNlOntyZWdpc3Rlcjp1dSx1bnJlZ2lzdGVyOmZ1LGhhczpQZn0sZnJlZXplUHJvdG90eXBlOiRrLGluaXQ6RGYsY29uZmlnOmZsfTt2YXIgTGY9Y2xhc3N7Y29uc3RydWN0b3IocyxwPXt9KXt0aGlzLnR5cGU9c3x8Im1lc3NhZ2UiLHRoaXMuZGF0YT1wLmRhdGF8fG51bGwsdGhpcy5vcmlnaW49cC5vcmlnaW58fCIiLHRoaXMuc291cmNlPXAuc291cmNlfHxudWxsLHRoaXMucG9ydHM9cC5wb3J0c3x8W10sdGhpcy50YXJnZXQ9bnVsbCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfX07dmFyIFJzPXt9LG1jPXt9O2Z1bmN0aW9uIEZmKCl7fUZmLnByb3RvdHlwZS5wb3N0TWVzc2FnZT1mdW5jdGlvbihmKXtpZih0aGlzLl9jbG9zZWQpdGhyb3cgbmV3IEVycm9yKGBCcm9hZGNhc3RDaGFubmVsICIke3RoaXMubmFtZX0iIGlzIGNsb3NlZC5gKTtsZXQgcz1Sc1t0aGlzLm5hbWVdO2lmKHMmJnMubGVuZ3RoKWZvcihsZXQgcD0wO3A8cy5sZW5ndGg7KytwKXtsZXQgdz1zW3BdO3cuX2Nsb3NlZHx8dz09PXRoaXN8fHpuKHcub25tZXNzYWdlKSYmdy5vbm1lc3NhZ2UobmV3IExmKCJtZXNzYWdlIix7ZGF0YTpmfSkpfX07RmYucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Nsb3NlZCYmKHRoaXMuX2Nsb3NlZD0hMCxSc1t0aGlzLm5hbWVdKSl7bGV0IGY9UnNbdGhpcy5uYW1lXS5maWx0ZXIocz0+cyE9PXRoaXMpO2YubGVuZ3RoP1JzW3RoaXMubmFtZV09ZjpkZWxldGUgUnNbdGhpcy5uYW1lXX19O3ZhciBLdj17Y3JlYXRlOmY9PntpZihtY1tmXT1bXSx6bihnbG9iYWwuQnJvYWRjYXN0Q2hhbm5lbCkpcmV0dXJue307bGV0IHM9e0Jyb2FkY2FzdENoYW5uZWw6ZnVuY3Rpb24ocCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMSx2YWx1ZTpTdHJpbmcocCl9KSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5vbm1lc3NhZ2U9bnVsbCxSc1t0aGlzLm5hbWVdfHwoUnNbdGhpcy5uYW1lXT1bXSksUnNbdGhpcy5uYW1lXS5wdXNoKHRoaXMpLG1jW2ZdLnB1c2godGhpcyl9fTtyZXR1cm4gcy5Ccm9hZGNhc3RDaGFubmVsLnByb3RvdHlwZT1GZi5wcm90b3R5cGUse2luc3RhbmNlOnN9fSxkZXN0cm95OmY9PnttY1tmXSYmKG1jW2ZdLmZvckVhY2gocz0+cy5jbG9zZSgpKSxkZWxldGUgbWNbZl0pfX07ZnVuY3Rpb24gVmYoKXtsZXR7aW5pdDpmfT1ndTtndS5zZXJ2aWNlLnJlZ2lzdGVyKCJCcm9hZGNhc3RDaGFubmVsIixLdiksZ3UuZnJlZXplUHJvdG90eXBlKCk7bGV0IHM9ZigpO2ZvcihsZXQgcCBpbiBzKWdsb2JhbFtwXT0oLi4udyk9PntsZXQgTj1zW3BdKC4uLncpO3JldHVybiBOIGluc3RhbmNlb2YgRXJyb3ImJmNvbnNvbGUuZXJyb3IoTi50b1N0cmluZygpKSxOfX12YXIgQ0I9Z2xvYmFsLmNvbnNvbGU7ZnVuY3Rpb24gWnYoKXtpZihHcCgpLGdsb2JhbC5XWEVudmlyb25tZW50JiZnbG9iYWwuV1hFbnZpcm9ubWVudC5wbGF0Zm9ybSE9PSJXZWIiKWdsb2JhbC5jb25zb2xlPXtkZWJ1ZzooLi4uZik9PntRbigiZGVidWciKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5fYyhmKSwiX19ERUJVRyIpfSxsb2c6KC4uLmYpPT57UW4oImxvZyIpJiZnbG9iYWwubmF0aXZlTG9nKC4uLl9jKGYpLCJfX0xPRyIpfSxpbmZvOiguLi5mKT0+e1FuKCJpbmZvIikmJmdsb2JhbC5uYXRpdmVMb2coLi4uX2MoZiksIl9fSU5GTyIpfSx3YXJuOiguLi5mKT0+e1FuKCJ3YXJuIikmJmdsb2JhbC5uYXRpdmVMb2coLi4uX2MoZiksIl9fV0FSTiIpfSxlcnJvcjooLi4uZik9PntRbigiZXJyb3IiKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5fYyhmKSwiX19FUlJPUiIpfX07ZWxzZXtsZXR7ZGVidWc6Zixsb2c6cyxpbmZvOnAsd2Fybjp3LGVycm9yOk59PWNvbnNvbGU7Y29uc29sZS5fX29yaV9fPXtkZWJ1ZzpmLGxvZzpzLGluZm86cCx3YXJuOncsZXJyb3I6Tn0sY29uc29sZS5kZWJ1Zz0oLi4uRSk9PntRbigiZGVidWciKSYmY29uc29sZS5fX29yaV9fLmRlYnVnLmFwcGx5KGNvbnNvbGUsRSl9LGNvbnNvbGUubG9nPSguLi5FKT0+e1FuKCJsb2ciKSYmY29uc29sZS5fX29yaV9fLmxvZy5hcHBseShjb25zb2xlLEUpfSxjb25zb2xlLmluZm89KC4uLkUpPT57UW4oImluZm8iKSYmY29uc29sZS5fX29yaV9fLmluZm8uYXBwbHkoY29uc29sZSxFKX0sY29uc29sZS53YXJuPSguLi5FKT0+e1FuKCJ3YXJuIikmJmNvbnNvbGUuX19vcmlfXy53YXJuLmFwcGx5KGNvbnNvbGUsRSl9LGNvbnNvbGUuZXJyb3I9KC4uLkUpPT57UW4oImVycm9yIikmJmNvbnNvbGUuX19vcmlfXy5lcnJvci5hcHBseShjb25zb2xlLEUpfX19ZnVuY3Rpb24gX2MoZil7cmV0dXJuIGYubWFwKHM9PntpZihNYShzKS50b0xvd2VyQ2FzZSgpPT09IltvYmplY3Qgb2JqZWN0XSIpdHJ5e3M9SlNPTi5zdHJpbmdpZnkocyl9Y2F0Y2godyl7cz0iW29iamVjdCBvYmplY3RdIn1lbHNlIHM9U3RyaW5nKHMpO3JldHVybiBzfSl9WnYoKTtWZigpO30pKCk7Cg==