Files
crm.clientright.ru/modules/CTMultipleSMTP/views/MassSaveAjax.php
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

1 line
13 KiB
PHP

<?php eval(base64_decode('CiBjbGFzcyBDVE11bHRpcGxlU01UUF9NYXNzU2F2ZUFqYXhfVmlldyBleHRlbmRzIFZ0aWdlcl9Gb290ZXJfVmlldyB7IGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgeyBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7ICR0aGlzLT5leHBvc2VNZXRob2QoIlwxNTVcMTQxXDE2M1wxNjNceDUzXDE0MVx4NzZceDY1Iik7IH0gcHVibGljIGZ1bmN0aW9uIGNoZWNrUGVybWlzc2lvbihWdGlnZXJfUmVxdWVzdCAkcmVxdWVzdCkgeyByZXR1cm47IH0gcHVibGljIGZ1bmN0aW9uIHByb2Nlc3MoVnRpZ2VyX1JlcXVlc3QgJHJlcXVlc3QpIHsgJG1vZGUgPSAkcmVxdWVzdC0+Z2V0TW9kZSgpOyBpZiAoIWVtcHR5KCRtb2RlKSkgeyBlY2hvICR0aGlzLT5pbnZva2VFeHBvc2VkTWV0aG9kKCRtb2RlLCAkcmVxdWVzdCk7IHJldHVybjsgfSB9IHB1YmxpYyBmdW5jdGlvbiBtYXNzU2F2ZShWdGlnZXJfUmVxdWVzdCAkcmVxdWVzdCkgeyBnbG9iYWwgJHVwbG9hZF9iYWRleHQ7ICRhZGIgPSBQZWFyRGF0YWJhc2U6OmdldEluc3RhbmNlKCk7ICRtb2R1bGVOYW1lID0gJHJlcXVlc3QtPmdldE1vZHVsZSgpOyAkY3VycmVudFVzZXJNb2RlbCA9IFVzZXJzX1JlY29yZF9Nb2RlbDo6Z2V0Q3VycmVudFVzZXJNb2RlbCgpOyAkcmVjb3JkSWRzID0gJHRoaXMtPmdldFJlY29yZHNMaXN0RnJvbVJlcXVlc3QoJHJlcXVlc3QpOyAkZG9jdW1lbnRJZHMgPSAkcmVxdWVzdC0+Z2V0KCJcMTQ0XHg2Zlx4NjNceDc1XHg2ZFx4NjVcMTU2XDE2NFwxNTFcMTQ0XHg3MyIpOyAkZmxhZyA9ICRyZXF1ZXN0LT5nZXQoIlx4NjZcMTU0XHg2MVx4NjciKTsgJHJlc3VsdCA9IFZ0aWdlcl9VdGlsX0hlbHBlcjo6dHJhbnNmb3JtVXBsb2FkZWRGaWxlcygkX0ZJTEVTLCB0cnVlKTsgJF9GSUxFUyA9ICRyZXN1bHRbIlwxNDZceDY5XHg2Y1wxNDUiXTsgJHJlY29yZElkID0gJHJlcXVlc3QtPmdldCgiXDE2MlwxNDVcMTQzXDE1N1wxNjJceDY0Iik7IGlmICghZW1wdHkoJHJlY29yZElkKSkgeyAkcmVjb3JkTW9kZWwgPSBDVE11bHRpcGxlU01UUF9SZWNvcmRfTW9kZWw6OmdldEluc3RhbmNlQnlJZCgkcmVjb3JkSWQsICRtb2R1bGVOYW1lKTsgJHJlY29yZE1vZGVsLT5zZXQoIlx4NmRceDZmXHg2NFwxNDUiLCAiXDE0NVwxNDRceDY5XHg3NCIpOyB9IGVsc2UgeyAkcmVjb3JkTW9kZWwgPSBDVE11bHRpcGxlU01UUF9SZWNvcmRfTW9kZWw6OmdldENsZWFuSW5zdGFuY2UoJG1vZHVsZU5hbWUpOyAkcmVjb3JkTW9kZWwtPnNldCgiXDE1NVwxNTdcMTQ0XHg2NSIsICcnKTsgfSAkcGFyZW50RW1haWxJZCA9ICRyZXF1ZXN0LT5nZXQoIlwxNjBceDYxXHg3MlwxNDVceDZlXDE2NFx4NWZcMTUxXHg2NCIsIG51bGwpOyAkYXR0YWNobWVudHNXaXRoUGFyZW50RW1haWwgPSBhcnJheSgpOyBpZiAoIWVtcHR5KCRwYXJlbnRFbWFpbElkKSAmJiAhZW1wdHkoJHJlY29yZElkKSkgeyAkcGFyZW50RW1haWxNb2RlbCA9IENUTXVsdGlwbGVTTVRQX1JlY29yZF9Nb2RlbDo6Z2V0SW5zdGFuY2VCeUlkKCRwYXJlbnRFbWFpbElkKTsgJGF0dGFjaG1lbnRzV2l0aFBhcmVudEVtYWlsID0gJHBhcmVudEVtYWlsTW9kZWwtPmdldEF0dGFjaG1lbnREZXRhaWxzKCk7IH0gJGV4aXN0aW5nQXR0YWNobWVudHMgPSAkcmVxdWVzdC0+Z2V0KCJceDYxXDE2NFwxNjRcMTQxXHg2M1x4NjhceDZkXDE0NVx4NmVceDc0XDE2MyIsIGFycmF5KCkpOyBpZiAoZW1wdHkoJHJlY29yZElkKSkgeyBpZiAoaXNfYXJyYXkoJGV4aXN0aW5nQXR0YWNobWVudHMpKSB7IGZvcmVhY2ggKCRleGlzdGluZ0F0dGFjaG1lbnRzIGFzICRpbmRleCA9PiAkZXhpc3RpbmdBdHRhY2hJbmZvKSB7ICRleGlzdGluZ0F0dGFjaEluZm9bIlwxNjRcMTU1XDE2MFx4NWZceDZlXHg2MVwxNTVceDY1Il0gPSAkZXhpc3RpbmdBdHRhY2hJbmZvWyJcMTU2XDE0MVx4NmRcMTQ1Il07ICRleGlzdGluZ0F0dGFjaG1lbnRzWyRpbmRleF0gPSAkZXhpc3RpbmdBdHRhY2hJbmZvOyBpZiAoYXJyYXlfa2V5X2V4aXN0cygiXHg2NFwxNTdceDYzXDE1MVx4NjQiLCAkZXhpc3RpbmdBdHRhY2hJbmZvKSkgeyAkZG9jdW1lbnRJZHNbXSA9ICRleGlzdGluZ0F0dGFjaEluZm9bIlwxNDRceDZmXHg2M1x4NjlcMTQ0Il07IHVuc2V0KCRleGlzdGluZ0F0dGFjaG1lbnRzWyRpbmRleF0pOyB9IH0gfSB9IGVsc2UgeyAkYXR0YWNobWVudHNUb1VubGluayA9IGFycmF5KCk7ICRkb2N1bWVudHNUb1VubGluayA9IGFycmF5KCk7IGZvcmVhY2ggKCRhdHRhY2htZW50c1dpdGhQYXJlbnRFbWFpbCBhcyAkaSA9PiAkYXR0YWNoSW5mbykgeyAkZm91bmQgPSBmYWxzZTsgZm9yZWFjaCAoJGV4aXN0aW5nQXR0YWNobWVudHMgYXMgJGluZGV4ID0+ICRleGlzdGluZ0F0dGFjaEluZm8pIHsgaWYgKCRhdHRhY2hJbmZvWyJcMTQ2XDE1MVx4NmNceDY1XDE1MVwxNDQiXSA9PSAkZXhpc3RpbmdBdHRhY2hJbmZvWyJcMTQ2XHg2OVwxNTRceDY1XHg2OVx4NjQiXSkgeyAkZm91bmQgPSB0cnVlOyBicmVhazsgfSB9IGlmICghJGZvdW5kKSB7IGlmIChhcnJheV9rZXlfZXhpc3RzKCJceDY0XDE1N1x4NjNceDY5XHg2NCIsICRhdHRhY2hJbmZvKSkgeyAkZG9jdW1lbnRzVG9VbmxpbmtbXSA9ICRhdHRhY2hJbmZvWyJcMTQ0XDE1N1wxNDNcMTUxXHg2NCJdOyB9IGVsc2UgeyAkYXR0YWNobWVudHNUb1VubGlua1tdID0gJGF0dGFjaEluZm87IH0gfSB1bnNldCgkYXR0YWNobWVudHNXaXRoUGFyZW50RW1haWxbJGldKTsgfSAkZXhpc3RpbmdBdHRhY2htZW50cyA9IGFycmF5KCk7IGlmICghZW1wdHkoJGRvY3VtZW50c1RvVW5saW5rKSkgeyAkcmVjb3JkTW9kZWwtPmRlbGV0ZURvY3VtZW50TGluaygkZG9jdW1lbnRzVG9VbmxpbmspOyB9IGlmICghZW1wdHkoJGF0dGFjaG1lbnRzVG9VbmxpbmspKSB7ICRyZWNvcmRNb2RlbC0+ZGVsZXRlQXR0YWNobWVudCgkYXR0YWNobWVudHNUb1VubGluayk7IH0gfSAkdG9NYWlsSW5mbyA9ICRyZXF1ZXN0LT5nZXQoIlwxNjRceDZmXHg2NVx4NmRcMTQxXHg2OVwxNTRceDY5XDE1NlwxNDZcMTU3Iik7ICR0byA9ICRyZXF1ZXN0LT5nZXQoIlwxNjRceDZmIik7IGlmIChpc19hcnJheSgkdG8pKSB7ICR0byA9IGltcGxvZGUoIlx4MmMiLCAkdG8pOyB9ICRyZWNvcmRNb2RlbC0+c2V0KCJceDY0XHg2NVwxNjNceDYzXHg3Mlx4NjlceDcwXHg3NFwxNTFcMTU3XDE1NiIsICRyZXF1ZXN0LT5nZXQoIlwxNDRcMTQ1XDE2M1x4NjNcMTYyXDE1MVx4NzBceDc0XDE1MVx4NmZcMTU2IikpOyAkcmVjb3JkTW9kZWwtPnNldCgiXDE2M1x4NzVceDYyXHg2YVwxNDVceDYzXDE2NCIsICRyZXF1ZXN0LT5nZXQoIlwxNjNceDc1XDE0MlwxNTJcMTQ1XHg2M1x4NzQiKSk7ICRyZWNvcmRNb2RlbC0+c2V0KCJceDc0XHg2ZlwxMTVcMTQxXDE1MVwxNTRceDRlXDE0MVx4NmRcMTQ1XDE2M1wxMTRceDY5XHg3M1x4NzQiLCAkcmVxdWVzdC0+Z2V0KCJceDc0XDE1N1x4NGRceDYxXHg2OVwxNTRcMTE2XHg2MVwxNTVceDY1XDE2M1x4NGNcMTUxXDE2M1wxNjQiKSk7ICRyZWNvcmRNb2RlbC0+c2V0KCJcMTYzXDE0MVx4NzZceDY1XHg2NFx4NWZcMTY0XHg2Zlx4NjlceDY0IiwgJHRvKTsgJHJlY29yZE1vZGVsLT5zZXQoIlx4NjNceDYzXDE1NVx4NjFcMTUxXDE1NCIsICRyZXF1ZXN0LT5nZXQoIlx4NjNcMTQzIikpOyAkcmVjb3JkTW9kZWwtPnNldCgiXDE0Mlx4NjNceDYzXDE1NVwxNDFcMTUxXHg2YyIsICRyZXF1ZXN0LT5nZXQoIlwxNDJceDYzXDE0MyIpKTsgJHJlY29yZE1vZGVsLT5zZXQoIlwxNDFceDczXHg3M1x4NjlceDY3XDE1NlwxNDVceDY0XHg1ZlwxNjVcMTYzXDE0NVwxNjJceDVmXHg2OVwxNDQiLCAkY3VycmVudFVzZXJNb2RlbC0+Z2V0SWQoKSk7ICRyZWNvcmRNb2RlbC0+c2V0KCJcMTQ1XDE1NVwxNDFcMTUxXDE1NFx4NWZceDY2XDE1NFx4NjFcMTQ3IiwgJGZsYWcpOyAkcmVjb3JkTW9kZWwtPnNldCgiXDE0NFwxNTdcMTQzXHg3NVx4NmRcMTQ1XDE1Nlx4NzRcMTUxXHg2NFwxNjMiLCAkZG9jdW1lbnRJZHMpOyAkcmVjb3JkTW9kZWwtPnNldCgiXHg3NFx4NmZcMTQ1XDE1NVwxNDFceDY5XHg2Y1x4NjlcMTU2XHg2NlwxNTciLCAkdG9NYWlsSW5mbyk7IGZvcmVhY2ggKCR0b01haWxJbmZvIGFzICRyZWNvcmRJZCA9PiAkZW1haWxWYWx1ZUxpc3QpIHsgaWYgKCRyZWNvcmRNb2RlbC0+Z2V0RW50aXR5VHlwZSgkcmVjb3JkSWQpID09ICJcMTI1XHg3M1wxNDVcMTYyXDE2MyIpIHsgJHBhcmVudElkcyAuPSAkcmVjb3JkSWQgLiAiXDEwMFw1NVw2MVwxNzQiOyB9IGVsc2UgeyAkcGFyZW50SWRzIC49ICRyZWNvcmRJZCAuICJceDQwXDYxXDE3NCI7IH0gfSAkcmVjb3JkTW9kZWwtPnNldCgiXDE2MFx4NjFcMTYyXHg2NVx4NmVcMTY0XDEzN1wxNTFcMTQ0IiwgJHBhcmVudElkcyk7ICRfUkVRVUVTVFsiXDE2MFwxNDFceDcyXDE0NVwxNTZcMTY0XDEzN1x4NjlceDY0Il0gPSAkcGFyZW50SWRzOyAkc3VjY2VzcyA9IGZhbHNlOyAkdmlld2VyID0gJHRoaXMtPmdldFZpZXdlcigkcmVxdWVzdCk7IGlmICgkcmVjb3JkTW9kZWwtPmNoZWNrVXBsb2FkU2l6ZSgkZG9jdW1lbnRJZHMpKSB7ICRyZWNvcmRNb2RlbC0+c2F2ZSgpOyAkY3VycmVudF91c2VyID0gVXNlcnNfUmVjb3JkX01vZGVsOjpnZXRDdXJyZW50VXNlck1vZGVsKCk7ICRvd25lcklkID0gJHJlY29yZE1vZGVsLT5nZXQoIlwxNDFceDczXHg3M1wxNTFceDY3XDE1Nlx4NjVcMTQ0XHg1ZlwxNjVcMTYzXDE0NVwxNjJceDVmXHg2OVwxNDQiKTsgJGRhdGVfdmFyID0gZGF0ZSgiXDEzMVx4MmRcMTU1XHgyZFx4NjRcNDBceDQ4XDcyXHg2OVw3Mlx4NzMiKTsgaWYgKGlzX2FycmF5KCRleGlzdGluZ0F0dGFjaG1lbnRzKSkgeyBmb3JlYWNoICgkZXhpc3RpbmdBdHRhY2htZW50cyBhcyAkaW5kZXggPT4gJGV4aXN0aW5nQXR0YWNoSW5mbykgeyAkZmlsZV9uYW1lID0gJGV4aXN0aW5nQXR0YWNoSW5mb1siXHg2MVwxNjRcMTY0XDE0MVx4NjNcMTUwXHg2ZFx4NjVcMTU2XDE2NCJdOyAkcGF0aCA9ICRleGlzdGluZ0F0dGFjaEluZm9bIlwxNjBceDYxXHg3NFx4NjgiXTsgJGZpbGVJZCA9ICRleGlzdGluZ0F0dGFjaEluZm9bIlx4NjZcMTUxXHg2Y1x4NjVceDY5XHg2NCJdOyAkb2xkRmlsZU5hbWUgPSAkZmlsZV9uYW1lOyBpZiAoIWVtcHR5KCRmaWxlSWQpKSB7ICRvbGRGaWxlTmFtZSA9ICRleGlzdGluZ0F0dGFjaEluZm9bIlwxNDZcMTUxXDE1NFx4NjVcMTUxXDE0NCJdIC4gIlx4NWYiIC4gJGZpbGVfbmFtZTsgfSAkb2xkRmlsZVBhdGggPSAkcGF0aCAuICJceDJmIiAuICRvbGRGaWxlTmFtZTsgJGJpbkZpbGUgPSBzYW5pdGl6ZVVwbG9hZEZpbGVOYW1lKCRmaWxlX25hbWUsICR1cGxvYWRfYmFkZXh0KTsgJGN1cnJlbnRfaWQgPSAkYWRiLT5nZXRVbmlxdWVJRCgiXHg3Nlx4NzRceDY5XHg2N1x4NjVceDcyXDEzN1wxNDNceDcyXDE1NVx4NjVcMTU2XHg3NFx4NjlceDc0XDE3MSIpOyAkZmlsZW5hbWUgPSBsdHJpbShiYXNlbmFtZSgiXDQwIiAuICRiaW5GaWxlKSk7ICRmaWxldHlwZSA9ICRleGlzdGluZ0F0dGFjaEluZm9bIlx4NzRceDc5XHg3MFwxNDUiXTsgJGZpbGVzaXplID0gJGV4aXN0aW5nQXR0YWNoSW5mb1siXHg3M1x4NjlcMTcyXDE0NSJdOyAkdXBsb2FkX2ZpbGVfcGF0aCA9IGRlY2lkZUZpbGVQYXRoKCk7ICRlbmNyeXB0RmlsZU5hbWUgPSBWdGlnZXJfVXRpbF9IZWxwZXI6OmdldEVuY3J5cHRlZEZpbGVOYW1lKCRiaW5GaWxlKTsgJG5ld0ZpbGVQYXRoID0gJHVwbG9hZF9maWxlX3BhdGggLiAkY3VycmVudF9pZCAuICJceDVmIiAuICRlbmNyeXB0RmlsZU5hbWU7IGNvcHkoJG9sZEZpbGVQYXRoLCAkbmV3RmlsZVBhdGgpOyAkc3FsMSA9ICJcMTUxXHg2ZVx4NzNcMTQ1XHg3Mlx4NzRcNDBcMTUxXHg2ZVwxNjRceDZmXDQwXDE2Nlx4NzRceDY5XHg2N1x4NjVcMTYyXDEzN1x4NjNceDcyXDE1NVwxNDVceDZlXHg3NFx4NjlcMTY0XDE3MVw0MFw1MFx4NjNceDcyXHg2ZFx4NjlceDY0XHgyY1wxNjNcMTU1XHg2M1wxNjJceDY1XHg2MVwxNjRceDZmXHg3MlwxNTFcMTQ0XHgyY1wxNjNceDZkXHg2ZlwxNjdceDZlXDE0NVx4NzJcMTUxXHg2NFx4MmNcMTYzXHg2NVx4NzRceDc5XHg3MFwxNDVcNTRcMTQ0XHg2NVwxNjNceDYzXHg3Mlx4NjlcMTYwXHg3NFx4NjlcMTU3XHg2ZVw1NFwxNDNcMTYyXHg2NVx4NjFceDc0XDE0NVwxNDRceDc0XDE1MVx4NmRcMTQ1XDU0XDE1NVx4NmZceDY0XHg2OVwxNDZcMTUxXDE0NVwxNDRcMTY0XDE1MVx4NmRcMTQ1XHgyOVx4MjBceDc2XDE0MVwxNTRcMTY1XDE0NVx4NzNcNTBcNzdcNTRceDIwXDc3XHgyY1w0MFw3N1x4MmNceDIwXDc3XDU0XHgyMFx4M2ZcNTRcNDBcNzdceDJjXDQwXDc3XDUxIjsgJHBhcmFtczEgPSBhcnJheSgkY3VycmVudF9pZCwgJGN1cnJlbnRfdXNlci0+Z2V0SWQoKSwgJG93bmVySWQsICRtb2R1bGVOYW1lIC4gIlw0MFwxMDFceDc0XDE2NFwxNDFceDYzXHg2OFwxNTVcMTQ1XHg2ZVx4NzQiLCAkcmVjb3JkTW9kZWwtPmdldCgiXDE0NFwxNDVcMTYzXDE0M1wxNjJcMTUxXHg3MFx4NzRcMTUxXDE1N1wxNTYiKSwgJGFkYi0+Zm9ybWF0RGF0ZSgkZGF0ZV92YXIsIHRydWUpLCAkYWRiLT5mb3JtYXREYXRlKCRkYXRlX3ZhciwgdHJ1ZSkpOyAkYWRiLT5wcXVlcnkoJHNxbDEsICRwYXJhbXMxKTsgJHNxbDIgPSAiXHg2OVx4NmVcMTYzXDE0NVx4NzJceDc0XDQwXDE1MVx4NmVcMTY0XHg2Zlw0MFx4NzZcMTY0XHg2OVx4NjdcMTQ1XHg3Mlx4NWZceDYxXDE2NFx4NzRceDYxXHg2M1wxNTBcMTU1XDE0NVx4NmVceDc0XHg3M1x4MjhceDYxXDE2NFwxNjRcMTQxXDE0M1x4NjhcMTU1XDE0NVx4NmVcMTY0XHg3M1x4NjlceDY0XHgyY1x4MjBcMTU2XHg2MVwxNTVcMTQ1XDU0XHgyMFwxNDRcMTQ1XDE2M1wxNDNceDcyXHg2OVwxNjBceDc0XDE1MVx4NmZcMTU2XHgyY1w0MFx4NzRceDc5XHg3MFx4NjVcNTRceDIwXDE2MFx4NjFcMTY0XDE1MFw1NFx4NzNcMTY0XHg2ZlwxNjJceDY1XDE0NFwxNTZcMTQxXDE1NVx4NjVcNTFceDIwXDE2Nlx4NjFcMTU0XHg3NVx4NjVceDczXHgyOFw3N1x4MmNceDIwXDc3XDU0XDQwXDc3XDU0XHgyMFw3N1x4MmNcNDBceDNmXHgyY1x4MjBcNzdcNTEiOyAkcGFyYW1zMiA9IGFycmF5KCRjdXJyZW50X2lkLCAkZmlsZW5hbWUsICRyZWNvcmRNb2RlbC0+Z2V0KCJceDY0XDE0NVwxNjNceDYzXDE2Mlx4NjlcMTYwXDE2NFwxNTFceDZmXDE1NiIpLCAkZmlsZXR5cGUsICR1cGxvYWRfZmlsZV9wYXRoLCAkZW5jcnlwdEZpbGVOYW1lKTsgJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgkc3FsMiwgJHBhcmFtczIpOyAkc3FsMyA9ICJceDY5XDE1Nlx4NzNcMTQ1XHg3Mlx4NzRceDIwXDE1MVx4NmVceDc0XDE1N1w0MFx4NzZcMTY0XHg2OVwxNDdceDY1XDE2Mlx4NWZcMTYzXHg2NVwxNDFcMTY0XDE2NFx4NjFcMTQzXDE1MFx4NmRcMTQ1XDE1Nlx4NzRcMTYzXDE2MlwxNDVceDZjXHgyMFx4NzZceDYxXDE1NFwxNjVceDY1XHg3M1w1MFx4M2ZceDJjXDc3XHgyOSI7ICRhZGItPnBxdWVyeSgkc3FsMywgYXJyYXkoJHJlY29yZE1vZGVsLT5nZXRJZCgpLCAkY3VycmVudF9pZCkpOyB9IH0gJHN1Y2Nlc3MgPSB0cnVlOyBpZiAoJGZsYWcgPT0gIlwxMjNcMTA1XHg0ZVx4NTQiKSB7ICRzdGF0dXMgPSAkcmVjb3JkTW9kZWwtPnNlbmQoKTsgaWYgKCRzdGF0dXMgPT09IHRydWUpIHsgJHJlY29yZE1vZGVsLT5zZXRBY2Nlc3NDb3VudFZhbHVlKCk7IH0gZWxzZSB7ICRzdWNjZXNzID0gZmFsc2U7ICRtZXNzYWdlID0gJHN0YXR1czsgfSB9IH0gZWxzZSB7ICRtZXNzYWdlID0gdnRyYW5zbGF0ZSgiXHg0Y1x4NDJcMTE0XHg1ZlwxMTVcMTAxXHg1OFwxMzdceDU1XDEyMFx4NGNceDRmXHg0MVwxMDRceDVmXHg1M1x4NDlceDVhXHg0NSIsICRtb2R1bGVOYW1lKSAuICJcNDAiIC4gdnRyYW5zbGF0ZSgiXDExNFwxMDJceDRjXHg1Zlx4NDVcMTMwXHg0M1x4NDVcMTA1XHg0NFx4NDVcMTA0IiwgJG1vZHVsZU5hbWUpOyB9ICR2aWV3ZXItPmFzc2lnbigiXHg1M1x4NTVcMTAzXHg0M1wxMDVceDUzXHg1MyIsICRzdWNjZXNzKTsgJHZpZXdlci0+YXNzaWduKCJceDRkXDEwNVwxMjNceDUzXDEwMVwxMDdceDQ1IiwgJG1lc3NhZ2UpOyAkdmlld2VyLT5hc3NpZ24oIlx4NDZcMTE0XHg0MVx4NDciLCAkZmxhZyk7ICRsb2FkUmVsYXRlZExpc3QgPSAkcmVxdWVzdC0+Z2V0KCJceDcyXDE0NVwxNTRceDYxXHg3NFx4NjVceDY0XDEzN1wxNTRcMTU3XDE0MVwxNDQiKTsgaWYgKCFlbXB0eSgkbG9hZFJlbGF0ZWRMaXN0KSkgeyAkdmlld2VyLT5hc3NpZ24oIlwxMjJcMTA1XHg0Y1wxMDFceDU0XHg0NVx4NDRcMTM3XHg0Y1wxMTdceDQxXHg0NCIsIHRydWUpOyB9ICR2aWV3ZXItPnZpZXcoIlx4NTNcMTQ1XHg2ZVx4NjRceDQ1XDE1NVwxNDFcMTUxXDE1NFx4NTJceDY1XDE2M1x4NzVceDZjXDE2NFw1NlwxNjRcMTYwXHg2YyIsICJcMTA1XHg2ZFx4NjFceDY5XHg2Y1x4NzMiKTsgfSBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVjb3Jkc0xpc3RGcm9tUmVxdWVzdChWdGlnZXJfUmVxdWVzdCAkcmVxdWVzdCkgeyAkY3ZJZCA9ICRyZXF1ZXN0LT5nZXQoIlwxNjZcMTUxXDE0NVwxNjdcMTU2XDE0MVx4NmRceDY1Iik7ICRzZWxlY3RlZElkcyA9ICRyZXF1ZXN0LT5nZXQoIlx4NzNceDY1XHg2Y1wxNDVceDYzXDE2NFx4NjVcMTQ0XHg1Zlx4NjlcMTQ0XDE2MyIpOyAkZXhjbHVkZWRJZHMgPSAkcmVxdWVzdC0+Z2V0KCJcMTQ1XDE3MFx4NjNceDZjXHg3NVx4NjRceDY1XHg2NFwxMzdceDY5XHg2NFx4NzMiKTsgaWYgKCFlbXB0eSgkc2VsZWN0ZWRJZHMpICYmICRzZWxlY3RlZElkcyAhPSAiXDE0MVx4NmNceDZjIikgeyBpZiAoIWVtcHR5KCRzZWxlY3RlZElkcykgJiYgY291bnQoJHNlbGVjdGVkSWRzKSA+IDApIHsgcmV0dXJuICRzZWxlY3RlZElkczsgfSB9IGlmICgkc2VsZWN0ZWRJZHMgPT0gIlwxNDFcMTU0XDE1NCIpIHsgJHNvdXJjZVJlY29yZCA9ICRyZXF1ZXN0LT5nZXQoIlwxNjNcMTU3XHg3NVwxNjJceDYzXDE0NVx4NTJcMTQ1XHg2M1x4NmZcMTYyXDE0NCIpOyAkc291cmNlTW9kdWxlID0gJHJlcXVlc3QtPmdldCgiXDE2M1x4NmZcMTY1XDE2MlwxNDNcMTQ1XHg0ZFx4NmZceDY0XDE2NVx4NmNceDY1Iik7IGlmICgkc291cmNlUmVjb3JkICYmICRzb3VyY2VNb2R1bGUpIHsgJHNvdXJjZVJlY29yZE1vZGVsID0gVnRpZ2VyX1JlY29yZF9Nb2RlbDo6Z2V0SW5zdGFuY2VCeUlkKCRzb3VyY2VSZWNvcmQsICRzb3VyY2VNb2R1bGUpOyByZXR1cm4gJHNvdXJjZVJlY29yZE1vZGVsLT5nZXRTZWxlY3RlZElkc0xpc3QoJHJlcXVlc3QtPmdldCgiXHg3MFx4NjFceDcyXHg2NVx4NmVceDc0XHg0ZFx4NmZceDY0XDE2NVwxNTRceDY1IiksICRleGNsdWRlZElkcyk7IH0gJGN1c3RvbVZpZXdNb2RlbCA9IEN1c3RvbVZpZXdfUmVjb3JkX01vZGVsOjpnZXRJbnN0YW5jZUJ5SWQoJGN2SWQpOyBpZiAoJGN1c3RvbVZpZXdNb2RlbCkgeyAkc2VhcmNoS2V5ID0gJHJlcXVlc3QtPmdldCgiXDE2M1x4NjVcMTQxXHg3Mlx4NjNceDY4XHg1Zlx4NmJceDY1XHg3OSIpOyAkc2VhcmNoVmFsdWUgPSAkcmVxdWVzdC0+Z2V0KCJcMTYzXHg2NVwxNDFceDcyXDE0M1x4NjhceDVmXDE2NlwxNDFcMTU0XHg3NVx4NjUiKTsgJG9wZXJhdG9yID0gJHJlcXVlc3QtPmdldCgiXDE1N1wxNjBceDY1XDE2Mlx4NjFcMTY0XDE1N1wxNjIiKTsgaWYgKCFlbXB0eSgkb3BlcmF0b3IpKSB7ICRjdXN0b21WaWV3TW9kZWwtPnNldCgiXDE1N1x4NzBcMTQ1XDE2Mlx4NjFcMTY0XDE1N1x4NzIiLCAkb3BlcmF0b3IpOyAkY3VzdG9tVmlld01vZGVsLT5zZXQoIlwxNjNceDY1XHg2MVx4NzJcMTQzXDE1MFwxMzdcMTUzXDE0NVwxNzEiLCAkc2VhcmNoS2V5KTsgJGN1c3RvbVZpZXdNb2RlbC0+c2V0KCJceDczXDE0NVwxNDFcMTYyXDE0M1x4NjhcMTM3XDE2NlwxNDFcMTU0XHg3NVwxNDUiLCAkc2VhcmNoVmFsdWUpOyB9IHJldHVybiAkY3VzdG9tVmlld01vZGVsLT5nZXRSZWNvcmRJZHMoJGV4Y2x1ZGVkSWRzKTsgfSB9IHJldHVybiBhcnJheSgpOyB9IHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZVJlcXVlc3QoVnRpZ2VyX1JlcXVlc3QgJHJlcXVlc3QpIHsgJHJlcXVlc3QtPnZhbGlkYXRlV3JpdGVBY2Nlc3MoKTsgfSB9IA==')); ?>