1778692640
441d63ebbc39eba359c9061ece8482bd-phpdoc%3A176e7c2fe73b3556891a58ceffaa3f35-e9beb423964715209dd4855ee054ca55
s:13636:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjI4OiJSZWRpc0NsdXN0ZXI2M1Byb3h5VHJhaXQucGhwIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czozMToiXFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0cyI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMxOiJcU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcVHJhaXRzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiVHJhaXRzIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGludGVyZmFjZXMiO2E6MDp7fXM6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAdHJhaXRzIjthOjE6e3M6NTY6IlxTeW1mb255XENvbXBvbmVudFxDYWNoZVxUcmFpdHNcUmVkaXNDbHVzdGVyNjNQcm94eVRyYWl0IjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XyI6MTA6e3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBwcm9wZXJ0aWVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AbWV0aG9kcyI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAHVzZWRUcmFpdHMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTU5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTYxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjU2OiJcU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcVHJhaXRzXFJlZGlzQ2x1c3RlcjYzUHJveHlUcmFpdCI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjI0OiJSZWRpc0NsdXN0ZXI2M1Byb3h5VHJhaXQiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjA6IiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjg6ImludGVybmFsIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MzA6IlN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0cyI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBtZXRhZGF0YSI7YTowOnt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGF0dHJpYnV0ZXMiO2E6MDp7fX19czo0MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBlbnVtcyI7YTowOnt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiJlOWJlYjQyMzk2NDcxNTIwOWRkNDg1NWVlMDU0Y2E1NSI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBwYXRoIjtzOjU2OiJ2ZW5kb3Ivc3ltZm9ueS9jYWNoZS9UcmFpdHMvUmVkaXNDbHVzdGVyNjNQcm94eVRyYWl0LnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6Njg1NjoiPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDYWNoZVxUcmFpdHM7CgppZiAodmVyc2lvbl9jb21wYXJlKHBocHZlcnNpb24oJ3JlZGlzJyksICc2LjMuMCcsICc+PScpKSB7CiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICB0cmFpdCBSZWRpc0NsdXN0ZXI2M1Byb3h5VHJhaXQKICAgIHsKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZGVsaWZlcSgka2V5LCAkdmFsdWUpOiBcUmVkaXNDbHVzdGVyfGludHxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmRlbGlmZXEoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaGV4cGlyZSgka2V5LCAkdHRsLCAkZmllbGRzLCAkbW9kZSA9IG51bGwpOiBcUmVkaXNDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aGV4cGlyZSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBoZXhwaXJlYXQoJGtleSwgJHRpbWUsICRmaWVsZHMsICRtb2RlID0gbnVsbCk6IFxSZWRpc0NsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5oZXhwaXJlYXQoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaGV4cGlyZXRpbWUoJGtleSwgJGZpZWxkcyk6IFxSZWRpc0NsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5oZXhwaXJldGltZSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBoZ2V0ZGVsKCRrZXksICRmaWVsZHMpOiBcUmVkaXNDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aGdldGRlbCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBoZ2V0ZXgoJGtleSwgJGZpZWxkcywgJGV4cGlyeSA9IG51bGwpOiBcUmVkaXNDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aGdldGV4KC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGhnZXRXaXRoTWV0YSgka2V5LCAkbWVtYmVyKTogbWl4ZWQKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5oZ2V0V2l0aE1ldGEoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaHBlcnNpc3QoJGtleSwgJGZpZWxkcyk6IFxSZWRpc0NsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5ocGVyc2lzdCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBocGV4cGlyZSgka2V5LCAkdHRsLCAkZmllbGRzLCAkbW9kZSA9IG51bGwpOiBcUmVkaXNDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aHBleHBpcmUoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaHBleHBpcmVhdCgka2V5LCAkbXN0aW1lLCAkZmllbGRzLCAkbW9kZSA9IG51bGwpOiBcUmVkaXNDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aHBleHBpcmVhdCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBocGV4cGlyZXRpbWUoJGtleSwgJGZpZWxkcyk6IFxSZWRpc0NsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5ocGV4cGlyZXRpbWUoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaHB0dGwoJGtleSwgJGZpZWxkcyk6IFxSZWRpc0NsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5ocHR0bCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBoc2V0ZXgoJGtleSwgJGZpZWxkcywgJGV4cGlyeSA9IG51bGwpOiBcUmVkaXNDbHVzdGVyfGludHxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhzZXRleCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBodHRsKCRrZXksICRmaWVsZHMpOiBcUmVkaXNDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aHR0bCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB2YWRkKCRrZXksICR2YWx1ZXMsICRlbGVtZW50LCAkb3B0aW9ucyA9IG51bGwpOiBcUmVkaXNDbHVzdGVyfGludHxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZhZGQoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmNhcmQoJGtleSk6IFxSZWRpc0NsdXN0ZXJ8aW50fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dmNhcmQoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmRpbSgka2V5KTogXFJlZGlzQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52ZGltKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZlbWIoJGtleSwgJG1lbWJlciwgJHJhdyA9IGZhbHNlKTogXFJlZGlzQ2x1c3RlcnxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZlbWIoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmdldGF0dHIoJGtleSwgJG1lbWJlciwgJGRlY29kZSA9IHRydWUpOiBcUmVkaXNDbHVzdGVyfGFycmF5fHN0cmluZ3xmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZnZXRhdHRyKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZpbmZvKCRrZXkpOiBcUmVkaXNDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dmluZm8oLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmlzbWVtYmVyKCRrZXksICRtZW1iZXIpOiBcUmVkaXNDbHVzdGVyfGJvb2wKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52aXNtZW1iZXIoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmxpbmtzKCRrZXksICRtZW1iZXIsICR3aXRoc2NvcmVzID0gZmFsc2UpOiBcUmVkaXNDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dmxpbmtzKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZyYW5kbWVtYmVyKCRrZXksICRjb3VudCA9IDApOiBcUmVkaXNDbHVzdGVyfGFycmF5fHN0cmluZ3xmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZyYW5kbWVtYmVyKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZyYW5nZSgka2V5LCAkbWluLCAkbWF4LCAkY291bnQgPSAtMSk6IFxSZWRpc0NsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52cmFuZ2UoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdnJlbSgka2V5LCAkbWVtYmVyKTogXFJlZGlzQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52cmVtKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZzZXRhdHRyKCRrZXksICRtZW1iZXIsICRhdHRyaWJ1dGVzKTogXFJlZGlzQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52c2V0YXR0ciguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB2c2ltKCRrZXksICRtZW1iZXIsICRvcHRpb25zID0gbnVsbCk6IFxSZWRpc0NsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52c2ltKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KICAgIH0KfSBlbHNlIHsKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHRyYWl0IFJlZGlzQ2x1c3RlcjYzUHJveHlUcmFpdAogICAgewogICAgfQp9CiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG1ldGFkYXRhIjthOjA6e319";