1778692641
441d63ebbc39eba359c9061ece8482bd-phpdoc%3A9369a0a7acb7133b726c8be254831494-46f98d7d02ca31ecd40af1f6326bd48b
s:10084:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjE2OiJSZWxheTEyVHJhaXQucGhwIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czozNzoiXFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0c1xSZWxheSI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM3OiJcU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcVHJhaXRzXFJlbGF5IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NToiUmVsYXkiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MTp7czo1MDoiXFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0c1xSZWxheVxSZWxheTEyVHJhaXQiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfIjoxMDp7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAHByb3BlcnRpZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBtZXRob2RzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMDY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTA6IlxTeW1mb255XENvbXBvbmVudFxDYWNoZVxUcmFpdHNcUmVsYXlcUmVsYXkxMlRyYWl0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTI6IlJlbGF5MTJUcmFpdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czozNjoiU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcVHJhaXRzXFJlbGF5IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAG1ldGFkYXRhIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AYXR0cmlidXRlcyI7YTowOnt9fX1zOjQwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGVudW1zIjthOjA6e31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6IjQ2Zjk4ZDdkMDJjYTMxZWNkNDBhZjFmNjMyNmJkNDhiIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6NTA6InZlbmRvci9zeW1mb255L2NhY2hlL1RyYWl0cy9SZWxheS9SZWxheTEyVHJhaXQucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czo0MjE3OiI8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFN5bWZvbnkgcGFja2FnZS4KICoKICogKGMpIEZhYmllbiBQb3RlbmNpZXIgPGZhYmllbkBzeW1mb255LmNvbT4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0c1xSZWxheTsKCmlmICh2ZXJzaW9uX2NvbXBhcmUocGhwdmVyc2lvbigncmVsYXknKSwgJzAuMTIuMCcsICc+PScpKSB7CiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICB0cmFpdCBSZWxheTEyVHJhaXQKICAgIHsKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZGVsaWZlcSgka2V5LCAkdmFsdWUpOiBcUmVsYXlcUmVsYXl8ZmFsc2V8aW50CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+ZGVsaWZlcSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB2YWRkKCRrZXksICR2YWx1ZXMsICRlbGVtZW50LCAkb3B0aW9ucyA9IG51bGwpOiBcUmVsYXlcUmVsYXl8ZmFsc2V8aW50CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dmFkZCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB2Y2FyZCgka2V5KTogXFJlbGF5XFJlbGF5fGZhbHNlfGludAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZjYXJkKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZkaW0oJGtleSk6IFxSZWxheVxSZWxheXxmYWxzZXxpbnQKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52ZGltKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZlbWIoJGtleSwgJGVsZW1lbnQsICRyYXcgPSBmYWxzZSk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZlbWIoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmdldGF0dHIoJGtleSwgJGVsZW1lbnQsICRyYXcgPSBmYWxzZSk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZXxzdHJpbmcKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52Z2V0YXR0ciguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB2aW5mbygka2V5KTogXFJlbGF5XFJlbGF5fGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dmluZm8oLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmlzbWVtYmVyKCRrZXksICRlbGVtZW50KTogXFJlbGF5XFJlbGF5fGJvb2wKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT52aXNtZW1iZXIoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdmxpbmtzKCRrZXksICRlbGVtZW50LCAkd2l0aHNjb3Jlcyk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZsaW5rcyguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB2cmFuZG1lbWJlcigka2V5LCAkY291bnQgPSAwKTogXFJlbGF5XFJlbGF5fGFycmF5fGZhbHNlfHN0cmluZwogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZyYW5kbWVtYmVyKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZyYW5nZSgka2V5LCAkbWluLCAkbWF4LCAkY291bnQgPSAtMSk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZyYW5nZSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB2cmVtKCRrZXksICRlbGVtZW50KTogXFJlbGF5XFJlbGF5fGZhbHNlfGludAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZyZW0oLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdnNldGF0dHIoJGtleSwgJGVsZW1lbnQsICRhdHRyaWJ1dGVzKTogXFJlbGF5XFJlbGF5fGZhbHNlfGludAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPnZzZXRhdHRyKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHZzaW0oJGtleSwgJG1lbWJlciwgJG9wdGlvbnMgPSBudWxsKTogXFJlbGF5XFJlbGF5fGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+dnNpbSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB4ZGVsZXgoJGtleSwgJGlkcywgJG1vZGUgPSBudWxsKTogXFJlbGF5XFJlbGF5fGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+eGRlbGV4KC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHhhY2tkZWwoJGtleSwgJGdyb3VwLCAkaWRzLCAkbW9kZSA9IG51bGwpOiBcUmVsYXlcUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT54YWNrZGVsKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KICAgIH0KfSBlbHNlIHsKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHRyYWl0IFJlbGF5MTJUcmFpdAogICAgewogICAgfQp9CiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG1ldGFkYXRhIjthOjA6e319";