Skip to content

Commit

Permalink
Part 1: Restore patcher logic
Browse files Browse the repository at this point in the history
  • Loading branch information
Jazzzny committed Feb 20, 2025
1 parent 803cfcb commit d7d7792
Show file tree
Hide file tree
Showing 5 changed files with 398 additions and 3 deletions.
11 changes: 10 additions & 1 deletion opencore_legacy_patcher/datasets/model_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

SupportedSMBIOS = [
# MacBook
"MacBook4,1",
"MacBook5,1",
"MacBook5,2",
"MacBook6,1",
Expand Down Expand Up @@ -101,6 +102,7 @@
# Audio

LegacyAudio = [
"MacBook4,1",
"MacBook5,1",
"MacBook5,2",
"MacBook6,1",
Expand Down Expand Up @@ -185,6 +187,7 @@
]

LegacyGPU = [
"MacBook4,1", # Intel GMA X3100
"MacBook5,1", # Nvidia 9000
"MacBook5,2", # Nvidia 9000
"MacBook6,1", # Nvidia 9000
Expand Down Expand Up @@ -261,7 +264,7 @@
# MXM iMac
MXMiMac = ["iMac11,1", "iMac11,2", "iMac11,3", "iMac10,1", "iMac12,1", "iMac12,2", "Dortania1,1"]

NoAGPMSupport = ["MacBookPro4,1", "iMac7,1", "iMac8,1", "MacPro3,1", "Xserve2,1", "Dortania1,1"]
NoAGPMSupport = ["MacBook4,1", "MacBookPro4,1", "iMac7,1", "iMac8,1", "MacPro3,1", "Xserve2,1", "Dortania1,1"]

AGDPSupport = [
"MacBookPro9,1",
Expand All @@ -285,6 +288,12 @@
# "MacPro6,1",
]

Missing_USB_Map_Legacy = [
# These machines were dropped before El Capitan, and as such, no proper USB maps exist for them.
# Instead, inject a custom USB map that forces all ports on the controller to be enabled.
"MacBook4,1"
]

Missing_USB_Map = [
"MacBook5,1",
"MacBook5,2",
Expand Down
2 changes: 1 addition & 1 deletion opencore_legacy_patcher/efi_builder/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ def _topcase_handling(self) -> None:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBMultitouch.kext", self.constants.multitouch_version, self.constants.multitouch_path)

# Two-finger Top Case support for macOS High Sierra+
if self.model == "MacBook5,2":
if self.model in ["MacBook4,1", "MacBook5,2"]:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBTrackpad.kext", self.constants.apple_trackpad, self.constants.apple_trackpad_path) # Also requires AppleUSBTopCase.kext
support.BuildSupport(self.model, self.constants, self.config).enable_kext("LegacyKeyboardInjector.kext", self.constants.legacy_keyboard, self.constants.legacy_keyboard_path) # Inject legacy personalities into AppleUSBTCKeyboard and AppleUSBTCKeyEventDriver

Expand Down
2 changes: 1 addition & 1 deletion opencore_legacy_patcher/wx_gui/gui_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -1087,7 +1087,7 @@ def on_checkbox(self, event: wx.Event, warning_pop: str = "", override_function:
if self.constants.computer.real_model in smbios_data.smbios_dictionary:
if self.constants.detected_os > smbios_data.smbios_dictionary[self.constants.computer.real_model]["Max OS Supported"]:
chassis_type = "aluminum"
if self.constants.computer.real_model in ["MacBook5,2", "MacBook6,1", "MacBook7,1"]:
if self.constants.computer.real_model in ["MacBook4,1", "MacBook5,2", "MacBook6,1", "MacBook7,1"]:
chassis_type = "plastic"
dlg = wx.MessageDialog(self.frame_modal, f"This model, {self.constants.computer.real_model}, does not natively support macOS {os_data.os_conversion.kernel_to_os(self.constants.detected_os)}, {os_data.os_conversion.convert_kernel_to_marketing_name(self.constants.detected_os)}. The last native OS was macOS {os_data.os_conversion.kernel_to_os(smbios_data.smbios_dictionary[self.constants.computer.real_model]['Max OS Supported'])}, {os_data.os_conversion.convert_kernel_to_marketing_name(smbios_data.smbios_dictionary[self.constants.computer.real_model]['Max OS Supported'])}\n\nToggling this option will break booting on this OS. Are you absolutely certain this is desired?\n\nYou may end up with a nice {chassis_type} brick 🧱", "Are you certain?", wx.YES_NO | wx.ICON_WARNING | wx.NO_DEFAULT)
if dlg.ShowModal() == wx.ID_NO:
Expand Down
40 changes: 40 additions & 0 deletions payloads/Kexts/Plists/PlatformPlugin/MacBook4,1/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>org.vanilla.driver.CPUFriendDataProvider</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>CPUFriendDataProvider</string>
<key>CFBundlePackageType</key>
<string>KEXT</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>IOKitPersonalities</key>
<dict>
<key>CPUFriendDataProvider</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.AppleACPIPlatform</string>
<key>IOClass</key>
<string>AppleACPICPU</string>
<key>IONameMatch</key>
<string>processor</string>
<key>IOProbeScore</key>
<integer>1100</integer>
<key>IOProviderClass</key>
<string>IOACPIPlatformDevice</string>
<key>cf-frequency-data</key>
<data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9uPSIxLjAiPgogIDxkaWN0PgogICAgPGtleT5JT1BsYXRmb3JtVGhlcm1hbFByb2ZpbGU8L2tleT4KICAgIDxkaWN0PgogICAgICA8a2V5PkNvbmZpZ0FycmF5PC9rZXk+CiAgICAgIDxhcnJheT4KICAgICAgICA8ZGljdD4KICAgICAgICAgIDxrZXk+V1dFTjwva2V5PgogICAgICAgICAgPHRydWUvPgogICAgICAgICAgPGtleT5tb2RlbDwva2V5PgogICAgICAgICAgPHN0cmluZz5NYWNCb29rNCwxPC9zdHJpbmc+CiAgICAgICAgPC9kaWN0PgogICAgICA8L2FycmF5PgogICAgICA8a2V5PkNTdGF0ZURpY3Q8L2tleT4KICAgICAgPGRpY3Q+CiAgICAgICAgPGtleT5NYWNCb29rNCwxPC9rZXk+CiAgICAgICAgPHN0cmluZz5DU0QzPC9zdHJpbmc+CiAgICAgICAgPGtleT5DU0QzPC9rZXk+CiAgICAgICAgPGRpY3Q+CiAgICAgICAgICA8a2V5PkM2PC9rZXk+CiAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgPGtleT5lbmFibGU8L2tleT4KICAgICAgICAgICAgPGZhbHNlLz4KICAgICAgICAgIDwvZGljdD4KICAgICAgICA8L2RpY3Q+CiAgICAgIDwvZGljdD4KICAgICAgPGtleT5Db250cm9sQXJyYXk8L2tleT4KICAgICAgPGFycmF5PgogICAgICAgIDxkaWN0PgogICAgICAgICAgPGtleT5EZXNjLUtleTwva2V5PgogICAgICAgICAgPHN0cmluZz5DUFVfUExJTUlUPC9zdHJpbmc+CiAgICAgICAgICA8a2V5PklPQ2xhc3M8L2tleT4KICAgICAgICAgIDxzdHJpbmc+QXBwbGVTTUNDb250cm9sPC9zdHJpbmc+CiAgICAgICAgICA8a2V5PmNvbnRyb2wtZmxhZ3M8L2tleT4KICAgICAgICAgIDxpbnRlZ2VyPjI8L2ludGVnZXI+CiAgICAgICAgICA8a2V5PmNvbnRyb2wtaWQ8L2tleT4KICAgICAgICAgIDxpbnRlZ2VyPjEwPC9pbnRlZ2VyPgogICAgICAgICAgPGtleT5sb2NhdGlvbjwva2V5PgogICAgICAgICAgPHN0cmluZz5jcHUgcGxpbWl0PC9zdHJpbmc+CiAgICAgICAgICA8a2V5PnR5cGU8L2tleT4KICAgICAgICAgIDxzdHJpbmc+c21jPC9zdHJpbmc+CiAgICAgICAgPC9kaWN0PgogICAgICAgIDxkaWN0PgogICAgICAgICAgPGtleT5EZXNjLUtleTwva2V5PgogICAgICAgICAgPHN0cmluZz5DUFVfU1RBVEU8L3N0cmluZz4KICAgICAgICAgIDxrZXk+SU9DbGFzczwva2V5PgogICAgICAgICAgPHN0cmluZz5BcHBsZVNNQ0NvbnRyb2w8L3N0cmluZz4KICAgICAgICAgIDxrZXk+Y29udHJvbC1mbGFnczwva2V5PgogICAgICAgICAgPGludGVnZXI+MjwvaW50ZWdlcj4KICAgICAgICAgIDxrZXk+Y29udHJvbC1pZDwva2V5PgogICAgICAgICAgPGludGVnZXI+MTM8L2ludGVnZXI+CiAgICAgICAgICA8a2V5PmxvY2F0aW9uPC9rZXk+CiAgICAgICAgICA8c3RyaW5nPmNwdSBzdGF0ZTwvc3RyaW5nPgogICAgICAgICAgPGtleT50eXBlPC9rZXk+CiAgICAgICAgICA8c3RyaW5nPnNtYzwvc3RyaW5nPgogICAgICAgIDwvZGljdD4KICAgICAgICA8ZGljdD4KICAgICAgICAgIDxrZXk+RGVzYy1LZXk8L2tleT4KICAgICAgICAgIDxzdHJpbmc+R1BVX1BMSU1JVDwvc3RyaW5nPgogICAgICAgICAgPGtleT5JT0NsYXNzPC9rZXk+CiAgICAgICAgICA8c3RyaW5nPkFwcGxlU01DQ29udHJvbDwvc3RyaW5nPgogICAgICAgICAgPGtleT5jb250cm9sLWZsYWdzPC9rZXk+CiAgICAgICAgICA8aW50ZWdlcj4yPC9pbnRlZ2VyPgogICAgICAgICAgPGtleT5jb250cm9sLWlkPC9rZXk+CiAgICAgICAgICA8aW50ZWdlcj4xMTwvaW50ZWdlcj4KICAgICAgICAgIDxrZXk+bG9jYXRpb248L2tleT4KICAgICAgICAgIDxzdHJpbmc+Z3B1IHBsaW1pdDwvc3RyaW5nPgogICAgICAgICAgPGtleT50eXBlPC9rZXk+CiAgICAgICAgICA8c3RyaW5nPnNtYzwvc3RyaW5nPgogICAgICAgIDwvZGljdD4KICAgICAgICA8ZGljdD4KICAgICAgICAgIDxrZXk+RGVzYy1LZXk8L2tleT4KICAgICAgICAgIDxzdHJpbmc+R1BVX1NUQVRFPC9zdHJpbmc+CiAgICAgICAgICA8a2V5PklPQ2xhc3M8L2tleT4KICAgICAgICAgIDxzdHJpbmc+QXBwbGVTTUNDb250cm9sPC9zdHJpbmc+CiAgICAgICAgICA8a2V5PmNvbnRyb2wtZmxhZ3M8L2tleT4KICAgICAgICAgIDxpbnRlZ2VyPjI8L2ludGVnZXI+CiAgICAgICAgICA8a2V5PmNvbnRyb2wtaWQ8L2tleT4KICAgICAgICAgIDxpbnRlZ2VyPjE0PC9pbnRlZ2VyPgogICAgICAgICAgPGtleT5sb2NhdGlvbjwva2V5PgogICAgICAgICAgPHN0cmluZz5ncHUgc3RhdGU8L3N0cmluZz4KICAgICAgICAgIDxrZXk+dHlwZTwva2V5PgogICAgICAgICAgPHN0cmluZz5zbWM8L3N0cmluZz4KICAgICAgICA8L2RpY3Q+CiAgICAgICAgPGRpY3Q+CiAgICAgICAgICA8a2V5PkRlc2MtS2V5PC9rZXk+CiAgICAgICAgICA8c3RyaW5nPk1FTV9QTElNSVQ8L3N0cmluZz4KICAgICAgICAgIDxrZXk+SU9DbGFzczwva2V5PgogICAgICAgICAgPHN0cmluZz5BcHBsZVNNQ0NvbnRyb2w8L3N0cmluZz4KICAgICAgICAgIDxrZXk+Y29udHJvbC1mbGFnczwva2V5PgogICAgICAgICAgPGludGVnZXI+MjwvaW50ZWdlcj4KICAgICAgICAgIDxrZXk+Y29udHJvbC1pZDwva2V5PgogICAgICAgICAgPGludGVnZXI+MTI8L2ludGVnZXI+CiAgICAgICAgICA8a2V5PmxvY2F0aW9uPC9rZXk+CiAgICAgICAgICA8c3RyaW5nPm1lbSBwbGltaXQ8L3N0cmluZz4KICAgICAgICAgIDxrZXk+dHlwZTwva2V5PgogICAgICAgICAgPHN0cmluZz5zbWM8L3N0cmluZz4KICAgICAgICA8L2RpY3Q+CiAgICAgIDwvYXJyYXk+CiAgICAgIDxrZXk+Q3JlYXRpb25EYXRlPC9rZXk+CiAgICAgIDxzdHJpbmc+VHVlIE1heSAyNiAxNToyNjowNyBQRFQgMjAwOTwvc3RyaW5nPgogICAgICA8a2V5PkN0cmxMb29wQXJyYXk8L2tleT4KICAgICAgPGFycmF5PgogICAgICAgIDxkaWN0PgogICAgICAgICAgPGtleT5EZXNjcmlwdGlvbjwva2V5PgogICAgICAgICAgPHN0cmluZz5TTUNfQ1BVX0NvbnRyb2xfTG9vcDwvc3RyaW5nPgogICAgICAgICAgPGtleT5JT0NsYXNzPC9rZXk+CiAgICAgICAgICA8c3RyaW5nPkFDUElfU01DX0N0cmxMb29wPC9zdHJpbmc+CiAgICAgICAgICA8a2V5PlBMaW1pdENsYXNzPC9rZXk+CiAgICAgICAgICA8YXJyYXk+CiAgICAgICAgICAgIDxzdHJpbmc+Q1BVPC9zdHJpbmc+CiAgICAgICAgICA8L2FycmF5PgogICAgICAgICAgPGtleT5NZXRhU3RhdGVBcnJheTwva2V5PgogICAgICAgICAgPGFycmF5PgogICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICA8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CiAgICAgICAgICAgICAgPHN0cmluZz5Ob3JtYWw8L3N0cmluZz4KICAgICAgICAgICAgPC9kaWN0PgogICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICA8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CiAgICAgICAgICAgICAgPHN0cmluZz5SZWR1Y2VkIFBvd2VyPC9zdHJpbmc+CiAgICAgICAgICAgIDwvZGljdD4KICAgICAgICAgICAgPGRpY3Q+CiAgICAgICAgICAgICAgPGtleT5EZXNjcmlwdGlvbjwva2V5PgogICAgICAgICAgICAgIDxzdHJpbmc+VXNlciBMb3cgUG93ZXI8L3N0cmluZz4KICAgICAgICAgICAgPC9kaWN0PgogICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICA8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CiAgICAgICAgICAgICAgPHN0cmluZz5Vc2VyIEhpZ2ggUG93ZXI8L3N0cmluZz4KICAgICAgICAgICAgPC9kaWN0PgogICAgICAgICAgPC9hcnJheT4KICAgICAgICAgIDxrZXk+U3RlcERhdGFEaWN0PC9rZXk+CiAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgPGtleT5NYWNCb29rNCwxPC9rZXk+CiAgICAgICAgICAgIDxzdHJpbmc+U1AxPC9zdHJpbmc+CiAgICAgICAgICAgIDxrZXk+U1AxPC9rZXk+CiAgICAgICAgICAgIDxkYXRhPgp4Z1lBQUFBQUFRSUVBQUFDQWdBQVZRQnVBSE1BY0FCbEFHTUFhUUJtQUdrQVpRQmtEQUFIL3djQUFDRUFBQUFDQUFBQi8vOEEvd0QvCkFQOEEvd0QvQUFZQUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEvd0VBQS84QUN3OEFBUDhCQUFQL0FBc1BBQUQvQVFBRC93QUwKRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEvd0VBQS84QUN3OEFBUDhCQUFQL0FBc1BBQUQvQVFBRAovd0FMRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEvd0VBQS84QUN3OEFBUDhCQUFQL0FBc1BBQUQvCkFRQUQvd0FMRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEvd0VBQS84QUN3OEFBUDhCQUFQL0FBc1AKQUFEL0FRQUQvd0FMRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEvd0VBQS84QUN3OEFBUDhCQUFQLwpBQXNQQUFEL0FRQUQvd0FMRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEvd0VBQS84QUN3OEFBUDhCCkFBUC9BQXNQQUFEL0FRQUQvd0FMRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEvd0VBQS84QUN3OEEKQVA4QkFBUC9BQXNQQUFEL0FRQUQvd0FMRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEvd0VBQS84QQpDdzhBQVA4QkFBUC9BQXNQQUFEL0FRQUQvd0FMRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEvd0VBCkEvOEFDdzhBQVA4QkFBUC9BQXNQQUFEL0FRQUQvd0FMRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTER3QUEKL3dFQUEvOEFDdzhBQVA4QkFBUC9BQXNQQUFEL0FRQUQvd0FMRHdBQS93RUFBLzhBQ3c4QUFQOEJBQVAvQUFzUEFBRC9BUUFEL3dBTApEd0FBL3dFQUEvOEFDdzhBQVA4QkFBUC9BQXNLQUFBQkNnQUFBUUFBQUFFQUFBRDFBQUVGQUFBQkFBQUYvd0FCQUFBQUFRQUFBQUVHCkFBQUNBQUFBQkFFQUFJQUF3d0MzQUM0QU5BQUxBQUFBQWdBQUFBRUFBQUFCQUFBQUFnQUFBQUlDQUFBQ0JnQUFBUUFBQUFFQUFBRDEKQUFFRkFBQURBQUFGL3dBREFnQUFBd1lBQUFrQUFBQUVBQUFBVEFBRUJRQUFCQUFBQmY4QUF3QUFBQUVBQUFBRUJBQUFnQUFBQUFvSwpBQUFJQUFBQUJRQUFBQWdBQUFBRkFBQUFBd0FBQUFJQUFBQUZCZ0FBQndBQUFBRUFBQUQxQUFFRkFBQUdBQUFGL3dBREFBQUFBd0FBCkFBWUdBQUFDQUFBQUJBQUFBS0FBRHdVQUFBY0VBQUFIQUFBQUF3QUFBQVFBQUFBSEJnQUFDQW9BQUFNQUFBWC9BQVFDQUFBSUJnQUEKQVFBQUFBRUFBQURvQUFNRkFBQUpBQUFGL3dBRkFnQUFDUVlBQUFJQUFBQUVBQUFBNkFBREJRQUFEUUFBQUFvQUFBQU5BQUFBQ2dBQQpBQVVBQUFBQkFBQUFDZ1lBQUFjQUFBQUJBQUFBOVFBQkJRQUFDd0FBQmY4QUJRQUFBQUlBQUFBTEJnQUFBZ0FBQUFRQUFBQ2dBQThGCkFBQU1CQUFBREFBQUFBVUFBQUFEQUFBQURBWUFBQWdLQUFBSkFBQUYvd0FHQWdBQURRWUFBQUVBQUFBQkFBQUE2QUFEQlFBQURnQUEKQmY4QUJ3SUFBQTRHQUFBQ0FBQUFCQUFBQUZnQUd3VUFBQklBQUFBUEFBQUFFZ0FBQUE4QUFBQUhBQUFBQVFBQUFBOEdBQUFIQUFBQQpBUUFBQVBVQUFRVUFBQkFBQUFYL0FBY0FBQUFDQUFBQUVBWUFBQUlBQUFBRUFBQUFvQUFQQlFBQUVRUUFBQkVBQUFBSEFBQUFBd0FBCkFCRUdBQUFJQ2dBQURnQUFCZjhBQ0FJQUFCSUdBQUFCQUFBQUFRQUFBT2dBQXdVQUFCTUFBQVgvQUFrQ0FBQVRCZ0FBQWdBQUFBUUEKQUFEOEFBZ0ZBQUFYQUFBQUZBQUFBQmNBQUFBVUFBQUFDUUFBQUFFQUFBQVVCZ0FBQndBQUFBRUFBQUQxQUFFRkFBQVZBQUFGL3dBSgpBQUFBQWdBQUFCVUdBQUFDQUFBQUJBQUFBS0FBRHdVQUFCWUVBQUFXQUFBQUNRQUFBQU1BQUFBV0JnQUFDQW9BQUJNQUFBWC9BQW9DCkFBQVhCZ0FBQVFBQUFBRUFBQURvQUFNRkFBQVlBQUFGL3dBTEFnQUFHQVlBQUFJQUFBQUVBQUFBS0FBS0JRQUFIQUFBQUJrQUFBQWMKQUFBQUdRQUFBQXNBQUFBQkFBQUFHUVlBQUFjQUFBQUJBQUFBOVFBQkJRQUFHZ0FBQmY4QUN3QUFBQUlBQUFBYUJnQUFBZ0FBQUFRQQpBQUNnQUE4RkFBQWJCQUFBR3dBQUFBc0FBQUFEQUFBQUd3WUFBQWdLQUFBWUFBQUYvd0FNQWdBQUhBWUFBQUVBQUFBQkFBQUE5QUFCCkJRQUFIUUFBQmY4QURRSUFBQjBHQUFBQ0FBQUFCQUVBQUlBQXd3QzNBQzRBTkFBTEFBQUFIUUFBQUI0QUFBQWRBQUFBSGdBQUFBMEEKQUFBQkFBQUFIZ1lBQUFjQUFBQUJBQUFBOVFBQkJRQUFId0FBQmY4QURRQUFBQUlBQUFBZkJnQUFBZ0FBQUFRQUFBQ2dBQThGQUFBZwpCQUFBSUFBQUFBMEFBQUFEQUFBQUlBWUFBQWdLQUFBZEFBQUYvdz09CjwvZGF0YT4KICAgICAgICAgIDwvZGljdD4KICAgICAgICAgIDxrZXk+Y3RybGxvb3AtaWQ8L2tleT4KICAgICAgICAgIDxpbnRlZ2VyPjA8L2ludGVnZXI+CiAgICAgICAgICA8a2V5PmlzLXN0YXRlLWRyaXZlbjwva2V5PgogICAgICAgICAgPGludGVnZXI+MTwvaW50ZWdlcj4KICAgICAgICA8L2RpY3Q+CiAgICAgICAgPGRpY3Q+CiAgICAgICAgICA8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CiAgICAgICAgICA8c3RyaW5nPlNNQ19HUFVfc2Vuc29yX0NvbnRyb2xfTG9vcDwvc3RyaW5nPgogICAgICAgICAgPGtleT5HUFVQb3dlck1nbXRGbG9vckFycmF5PC9rZXk+CiAgICAgICAgICA8YXJyYXk+CiAgICAgICAgICAgIDxpbnRlZ2VyPjE8L2ludGVnZXI+CiAgICAgICAgICA8L2FycmF5PgogICAgICAgICAgPGtleT5HUFVUaHJlc2hvbGREaWN0PC9rZXk+CiAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgPGtleT5NYWNCb29rNCwxPC9rZXk+CiAgICAgICAgICAgIDxzdHJpbmc+VEEzPC9zdHJpbmc+CiAgICAgICAgICAgIDxrZXk+VEEzPC9rZXk+CiAgICAgICAgICAgIDxhcnJheT4KICAgICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICAgIDxrZXk+aGlnaC10aHJlc2hvbGQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjI1PC9pbnRlZ2VyPgogICAgICAgICAgICAgICAgPGtleT5sb3ctdGhyZXNob2xkPC9rZXk+CiAgICAgICAgICAgICAgICA8aW50ZWdlcj4wPC9pbnRlZ2VyPgogICAgICAgICAgICAgIDwvZGljdD4KICAgICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICAgIDxrZXk+aGlnaC10aHJlc2hvbGQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjMzPC9pbnRlZ2VyPgogICAgICAgICAgICAgICAgPGtleT5sb3ctdGhyZXNob2xkPC9rZXk+CiAgICAgICAgICAgICAgICA8aW50ZWdlcj4yNTwvaW50ZWdlcj4KICAgICAgICAgICAgICA8L2RpY3Q+CiAgICAgICAgICAgICAgPGRpY3Q+CiAgICAgICAgICAgICAgICA8a2V5PmhpZ2gtdGhyZXNob2xkPC9rZXk+CiAgICAgICAgICAgICAgICA8aW50ZWdlcj45OTwvaW50ZWdlcj4KICAgICAgICAgICAgICAgIDxrZXk+bG93LXRocmVzaG9sZDwva2V5PgogICAgICAgICAgICAgICAgPGludGVnZXI+MzM8L2ludGVnZXI+CiAgICAgICAgICAgICAgPC9kaWN0PgogICAgICAgICAgICAgIDxkaWN0PgogICAgICAgICAgICAgICAgPGtleT5oaWdoLXRocmVzaG9sZDwva2V5PgogICAgICAgICAgICAgICAgPGludGVnZXI+MTAwPC9pbnRlZ2VyPgogICAgICAgICAgICAgICAgPGtleT5sb3ctdGhyZXNob2xkPC9rZXk+CiAgICAgICAgICAgICAgICA8aW50ZWdlcj45OTwvaW50ZWdlcj4KICAgICAgICAgICAgICA8L2RpY3Q+CiAgICAgICAgICAgIDwvYXJyYXk+CiAgICAgICAgICA8L2RpY3Q+CiAgICAgICAgICA8a2V5PklPQ2xhc3M8L2tleT4KICAgICAgICAgIDxzdHJpbmc+QUNQSV9TTUNfQ3RybExvb3A8L3N0cmluZz4KICAgICAgICAgIDxrZXk+UExpbWl0Q2xhc3M8L2tleT4KICAgICAgICAgIDxhcnJheT4KICAgICAgICAgICAgPHN0cmluZz5HUFU8L3N0cmluZz4KICAgICAgICAgIDwvYXJyYXk+CiAgICAgICAgICA8a2V5Pk1ldGFTdGF0ZUFycmF5PC9rZXk+CiAgICAgICAgICA8YXJyYXk+CiAgICAgICAgICAgIDxkaWN0PgogICAgICAgICAgICAgIDxrZXk+RGVzY3JpcHRpb248L2tleT4KICAgICAgICAgICAgICA8c3RyaW5nPk5vcm1hbDwvc3RyaW5nPgogICAgICAgICAgICA8L2RpY3Q+CiAgICAgICAgICAgIDxkaWN0PgogICAgICAgICAgICAgIDxrZXk+RGVzY3JpcHRpb248L2tleT4KICAgICAgICAgICAgICA8c3RyaW5nPlJlZHVjZWQgUG93ZXI8L3N0cmluZz4KICAgICAgICAgICAgPC9kaWN0PgogICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICA8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CiAgICAgICAgICAgICAgPHN0cmluZz5Vc2VyIExvdyBQb3dlcjwvc3RyaW5nPgogICAgICAgICAgICA8L2RpY3Q+CiAgICAgICAgICAgIDxkaWN0PgogICAgICAgICAgICAgIDxrZXk+RGVzY3JpcHRpb248L2tleT4KICAgICAgICAgICAgICA8c3RyaW5nPlVzZXIgSGlnaCBQb3dlcjwvc3RyaW5nPgogICAgICAgICAgICA8L2RpY3Q+CiAgICAgICAgICA8L2FycmF5PgogICAgICAgICAgPGtleT5TZW5zb3JJREFycmF5PC9rZXk+CiAgICAgICAgICA8YXJyYXk+CiAgICAgICAgICAgIDxpbnRlZ2VyPjY8L2ludGVnZXI+CiAgICAgICAgICA8L2FycmF5PgogICAgICAgICAgPGtleT5jdHJsbG9vcC1pZDwva2V5PgogICAgICAgICAgPGludGVnZXI+MTwvaW50ZWdlcj4KICAgICAgICAgIDxrZXk+aXMtc3RhdGUtZHJpdmVuPC9rZXk+CiAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgogICAgICAgIDwvZGljdD4KICAgICAgICA8ZGljdD4KICAgICAgICAgIDxrZXk+RGVzY3JpcHRpb248L2tleT4KICAgICAgICAgIDxzdHJpbmc+U01DX01lbW9yeV9Db250cm9sX0xvb3A8L3N0cmluZz4KICAgICAgICAgIDxrZXk+SU9DbGFzczwva2V5PgogICAgICAgICAgPHN0cmluZz5BQ1BJX1NNQ19DdHJsTG9vcDwvc3RyaW5nPgogICAgICAgICAgPGtleT5QTGltaXRDbGFzczwva2V5PgogICAgICAgICAgPGFycmF5PgogICAgICAgICAgICA8c3RyaW5nPk1lbTwvc3RyaW5nPgogICAgICAgICAgPC9hcnJheT4KICAgICAgICAgIDxrZXk+TUNIVGhyb3R0bGVEaWN0PC9rZXk+CiAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgPGtleT5NYWNCb29rNCwxPC9rZXk+CiAgICAgICAgICAgIDxzdHJpbmc+TVQzPC9zdHJpbmc+CiAgICAgICAgICAgIDxrZXk+TVQzPC9rZXk+CiAgICAgICAgICAgIDxhcnJheT4KICAgICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICAgIDxrZXk+RFRDX1dBQjwva2V5PgogICAgICAgICAgICAgICAgPGludGVnZXI+MzI8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkRUQ19XQVQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjA8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkdUQ19XQUI8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjA8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkdUQ19XQVQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjE1PC9pbnRlZ2VyPgogICAgICAgICAgICAgIDwvZGljdD4KICAgICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICAgIDxrZXk+RFRDX1dBQjwva2V5PgogICAgICAgICAgICAgICAgPGludGVnZXI+MzI8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkRUQ19XQVQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjA8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkdUQ19XQUI8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjA8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkdUQ19XQVQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjE1PC9pbnRlZ2VyPgogICAgICAgICAgICAgIDwvZGljdD4KICAgICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICAgIDxrZXk+RFRDX1dBQjwva2V5PgogICAgICAgICAgICAgICAgPGludGVnZXI+MzI8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkRUQ19XQVQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjA8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkdUQ19XQUI8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjA8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkdUQ19XQVQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjE1PC9pbnRlZ2VyPgogICAgICAgICAgICAgIDwvZGljdD4KICAgICAgICAgICAgICA8ZGljdD4KICAgICAgICAgICAgICAgIDxrZXk+RFRDX1dBQjwva2V5PgogICAgICAgICAgICAgICAgPGludGVnZXI+MzI8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkRUQ19XQVQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjA8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkdUQ19XQUI8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjA8L2ludGVnZXI+CiAgICAgICAgICAgICAgICA8a2V5PkdUQ19XQVQ8L2tleT4KICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjE1PC9pbnRlZ2VyPgogICAgICAgICAgICAgIDwvZGljdD4KICAgICAgICAgICAgPC9hcnJheT4KICAgICAgICAgIDwvZGljdD4KICAgICAgICAgIDxrZXk+TWV0YVN0YXRlQXJyYXk8L2tleT4KICAgICAgICAgIDxhcnJheT4KICAgICAgICAgICAgPGRpY3Q+CiAgICAgICAgICAgICAgPGtleT5EZXNjcmlwdGlvbjwva2V5PgogICAgICAgICAgICAgIDxzdHJpbmc+Tm9ybWFsPC9zdHJpbmc+CiAgICAgICAgICAgIDwvZGljdD4KICAgICAgICAgICAgPGRpY3Q+CiAgICAgICAgICAgICAgPGtleT5EZXNjcmlwdGlvbjwva2V5PgogICAgICAgICAgICAgIDxzdHJpbmc+UmVkdWNlZCBQb3dlcjwvc3RyaW5nPgogICAgICAgICAgICA8L2RpY3Q+CiAgICAgICAgICAgIDxkaWN0PgogICAgICAgICAgICAgIDxrZXk+RGVzY3JpcHRpb248L2tleT4KICAgICAgICAgICAgICA8c3RyaW5nPlVzZXIgTG93IFBvd2VyPC9zdHJpbmc+CiAgICAgICAgICAgIDwvZGljdD4KICAgICAgICAgICAgPGRpY3Q+CiAgICAgICAgICAgICAgPGtleT5EZXNjcmlwdGlvbjwva2V5PgogICAgICAgICAgICAgIDxzdHJpbmc+VXNlciBIaWdoIFBvd2VyPC9zdHJpbmc+CiAgICAgICAgICAgIDwvZGljdD4KICAgICAgICAgIDwvYXJyYXk+CiAgICAgICAgICA8a2V5PmN0cmxsb29wLWlkPC9rZXk+CiAgICAgICAgICA8aW50ZWdlcj4yPC9pbnRlZ2VyPgogICAgICAgICAgPGtleT5pcy1zdGF0ZS1kcml2ZW48L2tleT4KICAgICAgICAgIDxpbnRlZ2VyPjE8L2ludGVnZXI+CiAgICAgICAgPC9kaWN0PgogICAgICA8L2FycmF5PgogICAgICA8a2V5PlNlbnNvckFycmF5PC9rZXk+CiAgICAgIDxhcnJheT4KICAgICAgICA8ZGljdD4KICAgICAgICAgIDxrZXk+RGVzYy1LZXk8L2tleT4KICAgICAgICAgIDxzdHJpbmc+R1BVPC9zdHJpbmc+CiAgICAgICAgICA8a2V5PklPQ2xhc3M8L2tleT4KICAgICAgICAgIDxzdHJpbmc+SU9QbGF0Zm9ybVNlbnNvcjwvc3RyaW5nPgogICAgICAgICAgPGtleT5zZW5zb3ItaWQ8L2tleT4KICAgICAgICAgIDxpbnRlZ2VyPjY8L2ludGVnZXI+CiAgICAgICAgPC9kaWN0PgogICAgICA8L2FycmF5PgogICAgPC9kaWN0PgogIDwvZGljdD4KPC9wbGlzdD4K</data>
</dict>
</dict>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2017 - 2019 PMheart. All rights reserved.</string>
<key>OSBundleRequired</key>
<string>Root</string>
</dict>
</plist>
Loading

0 comments on commit d7d7792

Please sign in to comment.