mx-remote 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. mx_remote/Interface.py +1656 -0
  2. mx_remote/Uid.py +137 -0
  3. mx_remote/__init__.py +12 -0
  4. mx_remote/api/BayConfig.py +53 -0
  5. mx_remote/api/__init__.py +8 -0
  6. mx_remote/const.py +20 -0
  7. mx_remote/main.py +117 -0
  8. mx_remote/proto/BayConfig.py +104 -0
  9. mx_remote/proto/Constants.py +382 -0
  10. mx_remote/proto/Data.py +142 -0
  11. mx_remote/proto/Factory.py +168 -0
  12. mx_remote/proto/FrameAmpDolbySettings.py +51 -0
  13. mx_remote/proto/FrameAmpZoneSettings.py +123 -0
  14. mx_remote/proto/FrameBase.py +80 -0
  15. mx_remote/proto/FrameBayConfig.py +47 -0
  16. mx_remote/proto/FrameBayConfigSecondary.py +43 -0
  17. mx_remote/proto/FrameBayHide.py +53 -0
  18. mx_remote/proto/FrameBayStatus.py +51 -0
  19. mx_remote/proto/FrameConnectStatus.py +38 -0
  20. mx_remote/proto/FrameDiscover.py +21 -0
  21. mx_remote/proto/FrameEDID.py +20 -0
  22. mx_remote/proto/FrameEDIDProfile.py +24 -0
  23. mx_remote/proto/FrameFilterStatus.py +39 -0
  24. mx_remote/proto/FrameFirmwareVersion.py +40 -0
  25. mx_remote/proto/FrameHeader.py +92 -0
  26. mx_remote/proto/FrameHello.py +77 -0
  27. mx_remote/proto/FrameLinks.py +45 -0
  28. mx_remote/proto/FrameMeshOperation.py +66 -0
  29. mx_remote/proto/FrameMirrorStatus.py +49 -0
  30. mx_remote/proto/FrameNetworkStatus.py +163 -0
  31. mx_remote/proto/FramePDUState.py +71 -0
  32. mx_remote/proto/FramePowerChange.py +38 -0
  33. mx_remote/proto/FrameRCAction.py +50 -0
  34. mx_remote/proto/FrameRCIr.py +17 -0
  35. mx_remote/proto/FrameRCKey.py +40 -0
  36. mx_remote/proto/FrameReboot.py +26 -0
  37. mx_remote/proto/FrameRoutingChange.py +66 -0
  38. mx_remote/proto/FrameSetName.py +27 -0
  39. mx_remote/proto/FrameSignalStatus.py +46 -0
  40. mx_remote/proto/FrameSignalStatusNew.py +285 -0
  41. mx_remote/proto/FrameSysTemperature.py +50 -0
  42. mx_remote/proto/FrameTXRCAction.py +58 -0
  43. mx_remote/proto/FrameTopology.py +36 -0
  44. mx_remote/proto/FrameV2IPDeviceConfiguration.py +86 -0
  45. mx_remote/proto/FrameV2IPLink.py +16 -0
  46. mx_remote/proto/FrameV2IPSetMaster.py +16 -0
  47. mx_remote/proto/FrameV2IPSourceSwitch.py +84 -0
  48. mx_remote/proto/FrameV2IPSources.py +43 -0
  49. mx_remote/proto/FrameV2IPStats.py +55 -0
  50. mx_remote/proto/FrameV2IPStreamDetails.py +46 -0
  51. mx_remote/proto/FrameVolume.py +62 -0
  52. mx_remote/proto/FrameVolumeDown.py +28 -0
  53. mx_remote/proto/FrameVolumeSet.py +81 -0
  54. mx_remote/proto/FrameVolumeUp.py +28 -0
  55. mx_remote/proto/LinkConfig.py +121 -0
  56. mx_remote/proto/PDUState.py +95 -0
  57. mx_remote/proto/Svd.py +69 -0
  58. mx_remote/proto/V2IPConfig.py +71 -0
  59. mx_remote/proto/V2IPStats.py +126 -0
  60. mx_remote/proto/__init__.py +8 -0
  61. mx_remote/proto/svd.csv +157 -0
  62. mx_remote/remote/Bay.py +923 -0
  63. mx_remote/remote/ConnectionAsync.py +132 -0
  64. mx_remote/remote/Device.py +530 -0
  65. mx_remote/remote/Link.py +187 -0
  66. mx_remote/remote/PDU.py +152 -0
  67. mx_remote/remote/Remote.py +300 -0
  68. mx_remote/remote/State.py +28 -0
  69. mx_remote/remote/V2IP.py +83 -0
  70. mx_remote-2.0.0.dist-info/METADATA +90 -0
  71. mx_remote-2.0.0.dist-info/RECORD +74 -0
  72. mx_remote-2.0.0.dist-info/WHEEL +4 -0
  73. mx_remote-2.0.0.dist-info/entry_points.txt +2 -0
  74. mx_remote-2.0.0.dist-info/licenses/LICENSE +11 -0
@@ -0,0 +1,95 @@
1
+ ##################################################
2
+ ## MX Remote Python Interface ##
3
+ ## ##
4
+ ## author: Lars Op den Kamp (lars@opdenkamp.eu) ##
5
+ ## copyright (c) 2024 Op den Kamp IT Solutions ##
6
+ ##################################################
7
+
8
+ class PDUOutletState:
9
+ ''' pdu outlet state '''
10
+ OFF = 0
11
+ ON = 1
12
+ REBOOTING = 2
13
+
14
+ def __init__(self, state: int):
15
+ self._state = state
16
+
17
+ @property
18
+ def is_on(self) -> bool:
19
+ # outlet powered on
20
+ return (self._state == self.ON)
21
+
22
+ @property
23
+ def is_off(self) -> bool:
24
+ # outlet powered off
25
+ return (self._state == self.OFF) or self.is_rebooting
26
+
27
+ @property
28
+ def is_rebooting(self) -> bool:
29
+ # outlet rebooting
30
+ return (self._state == self.REBOOTING)
31
+
32
+ def __str__(self) -> str:
33
+ if self._state == self.ON:
34
+ return "ON"
35
+ elif self._state == self.OFF:
36
+ return "OFF"
37
+ elif self._state == self.REBOOTING:
38
+ return "REBOOTING"
39
+ return "Unknown"
40
+
41
+ def __repr__(self) -> str:
42
+ return str(self)
43
+
44
+ class PDUState:
45
+ def __init__(self, frame):
46
+ self._current = frame.current
47
+ self._voltage = frame.voltage
48
+ self._power = frame.power
49
+ self._dissipation = frame.dissipation
50
+ self._frequency = frame.frequency
51
+
52
+ self._outlets = []
53
+ ptr = 0
54
+ while ptr < 8:
55
+ self._outlets.append(PDUOutletState(frame.outlet_state(ptr)))
56
+ ptr = ptr + 1
57
+
58
+ @property
59
+ def current(self) -> float:
60
+ # current (A)
61
+ return self._current
62
+
63
+ @property
64
+ def voltage(self) -> float:
65
+ # voltage (V)
66
+ return self._voltage
67
+
68
+ @property
69
+ def power(self) -> float:
70
+ # power consumption (W)
71
+ return self._power
72
+
73
+ @property
74
+ def dissipation(self) -> float:
75
+ # power dissipation (W)
76
+ return self._dissipation
77
+
78
+ @property
79
+ def frequency(self) -> float:
80
+ # AC frequency
81
+ return self._frequency
82
+
83
+ @property
84
+ def outlets(self) -> list[PDUOutletState]:
85
+ # list of all outlets defined in this frame
86
+ return self._outlets
87
+
88
+ def outlet(self, outlet) -> PDUOutletState:
89
+ # get the state of a single outlet
90
+ return self._outlets[outlet] if outlet < 8 else None
91
+
92
+ def __str__(self) -> str:
93
+ return "current = {}A, voltage = {}V, power = {}W, diss = {}W, pf = {}, freq = {}Hz, outlets = {}". \
94
+ format(str(self.current), str(self.voltage), str(self.power), str(self.dissipation), str(self.power_factor), str(self.frequency), str(self.outlets))
95
+
mx_remote/proto/Svd.py ADDED
@@ -0,0 +1,69 @@
1
+ ##################################################
2
+ ## MX Remote Python Interface ##
3
+ ## ##
4
+ ## author: Lars Op den Kamp (lars@opdenkamp.eu) ##
5
+ ## copyright (c) 2024 Op den Kamp IT Solutions ##
6
+ ##################################################
7
+
8
+ import csv
9
+ from ..const import *
10
+
11
+ class Svd:
12
+ def __init__(self, data:list[int]) -> None:
13
+ self._data = data
14
+
15
+ @property
16
+ def id(self) -> int:
17
+ return int(self._data[0])
18
+
19
+ @property
20
+ def picture_aspect(self) -> int:
21
+ return int(self._data[1])
22
+
23
+ @property
24
+ def pixel_aspect(self) -> int:
25
+ return int(self._data[2])
26
+
27
+ @property
28
+ def horizontal_active(self) -> int:
29
+ return int(self._data[3])
30
+
31
+ @property
32
+ def horizontal_total(self) -> int:
33
+ return int(self._data[4])
34
+
35
+ @property
36
+ def vertical_active(self) -> int:
37
+ return int(self._data[5])
38
+
39
+ @property
40
+ def vertical_total(self) -> int:
41
+ return int(self._data[6])
42
+
43
+ @property
44
+ def refresh(self) -> int:
45
+ return int(self._data[7])
46
+
47
+ @property
48
+ def interlaced(self) -> bool:
49
+ return (int(self._data[8]) == 1)
50
+
51
+ @property
52
+ def multiplier(self) -> int:
53
+ return int(self._data[9])
54
+
55
+ def __str__(self) -> str:
56
+ return f"{self.horizontal_active}x{self.vertical_active}@{self.refresh}Hz"
57
+
58
+ def __repr__(self) -> str:
59
+ return str(self)
60
+
61
+ class SvdMap:
62
+ svd:dict[int, Svd] = {}
63
+
64
+ def __init__(self) -> None:
65
+ with open(f'{BASE_PATH}/proto/svd.csv', newline='') as csvfile:
66
+ reader = csv.reader(csvfile, delimiter=';', quotechar='|')
67
+ for row in reader:
68
+ svd = Svd(row)
69
+ self.svd[svd.id] = svd
@@ -0,0 +1,71 @@
1
+ ##################################################
2
+ ## MX Remote Python Interface ##
3
+ ## ##
4
+ ## author: Lars Op den Kamp (lars@opdenkamp.eu) ##
5
+ ## copyright (c) 2024 Op den Kamp IT Solutions ##
6
+ ##################################################
7
+
8
+ from ..Uid import MxrDeviceUid
9
+ from ..Interface import V2IPStreamSource, V2IPStreamSources
10
+
11
+ class V2IPConfig:
12
+ ''' Single source configuration '''
13
+ def __init__(self, frame, port:int, payload:bytes):
14
+ if len(payload) < 40:
15
+ raise Exception(f"invalid size: {len(payload)}")
16
+ self.frame = frame
17
+ self.port = port
18
+ self.payload = payload
19
+ self.video = V2IPStreamSource("video", self.payload[16:22])
20
+ self.audio = V2IPStreamSource("audio", self.payload[24:30])
21
+ self.anc = V2IPStreamSource("anc", self.payload[32:38])
22
+
23
+ def process(self) -> None:
24
+ # register or update this link in the local cache
25
+ pass
26
+
27
+ @property
28
+ def uid(self) -> MxrDeviceUid:
29
+ return MxrDeviceUid(self.payload[0:16])
30
+
31
+ def __repr__(self) -> str:
32
+ return str(self)
33
+
34
+ def __str__(self) -> str:
35
+ return f"V2IP port {self.port} source uid {self.uid} - {self.video} {self.audio} {self.anc}"
36
+
37
+ class V2IPStreamSourcesData(V2IPStreamSources):
38
+ def __init__(self, video:V2IPStreamSource, audio:V2IPStreamSource, anc:V2IPStreamSource) -> None:
39
+ self._video = video
40
+ self._audio = audio
41
+ self._anc = anc
42
+
43
+ @property
44
+ def video(self) -> V2IPStreamSource:
45
+ return self._video
46
+
47
+ @video.setter
48
+ def video(self, stream:V2IPStreamSource) -> None:
49
+ self._video = stream
50
+
51
+ @property
52
+ def audio(self) -> V2IPStreamSource:
53
+ return self._audio
54
+
55
+ @audio.setter
56
+ def audio(self, stream:V2IPStreamSource) -> None:
57
+ self._audio = stream
58
+
59
+ @property
60
+ def anc(self) -> V2IPStreamSource:
61
+ return self._anc
62
+
63
+ @anc.setter
64
+ def anc(self, stream:V2IPStreamSource) -> None:
65
+ self._anc = stream
66
+
67
+ def __str__(self) -> str:
68
+ return f"video:{self.video} audio:{self.audio} anc:{self.anc}"
69
+
70
+ def __repr__(self) -> str:
71
+ return str(self)
@@ -0,0 +1,126 @@
1
+ ##################################################
2
+ ## MX Remote Python Interface ##
3
+ ## ##
4
+ ## author: Lars Op den Kamp (lars@opdenkamp.eu) ##
5
+ ## copyright (c) 2024 Op den Kamp IT Solutions ##
6
+ ##################################################
7
+
8
+ from enum import Enum
9
+
10
+ class V2IPTxStats:
11
+ def __init__(self, data:bytes) -> None:
12
+ if len(data) < 20:
13
+ raise Exception(f'invalid stats size: {len(data)}')
14
+ self._data = data
15
+
16
+ @property
17
+ def video(self) -> int:
18
+ return int.from_bytes(self._data[0:4], "little")
19
+
20
+ @property
21
+ def audio(self) -> int:
22
+ return int.from_bytes(self._data[4:8], "little")
23
+
24
+ @property
25
+ def anc(self) -> int:
26
+ return int.from_bytes(self._data[8:12], "little")
27
+
28
+ @property
29
+ def stream_down(self) -> int:
30
+ return int.from_bytes(self._data[12:16], "little")
31
+
32
+ @property
33
+ def overflow(self) -> int:
34
+ return int.from_bytes(self._data[16:20], "little")
35
+
36
+ def __str__(self) -> str:
37
+ rv = f"Video: {self.video}, Audio: {self.audio}, Anc: {self.anc}"
38
+ if self.stream_down > 0:
39
+ rv += f", Stream Down:{self.stream_down}"
40
+ if self.overflow > 0:
41
+ rv += f", Overflow:{self.overflow}"
42
+ return rv
43
+
44
+ def __repr__(self) -> str:
45
+ return str(self)
46
+
47
+ class V2IPDecoderState(Enum):
48
+ UNKNOWN = 0
49
+ HEALTHY = 1
50
+ BAD = 2
51
+
52
+ def __str__(self) -> str:
53
+ if self.value == 1:
54
+ return 'Healthy'
55
+ if self.value == 2:
56
+ return 'Bad'
57
+ return 'Unknown'
58
+
59
+ class V2IPRxStats:
60
+ def __init__(self, data:bytes) -> None:
61
+ if len(data) < 44:
62
+ raise Exception(f'invalid stats size: {len(data)}')
63
+ self._data = data
64
+
65
+ @property
66
+ def video_total(self) -> int:
67
+ return int.from_bytes(self._data[0:4], "little")
68
+
69
+ @property
70
+ def video_dropped(self) -> int:
71
+ return int.from_bytes(self._data[4:8], "little")
72
+
73
+ @property
74
+ def video_sequence_errors(self) -> int:
75
+ return int.from_bytes(self._data[8:12], "little")
76
+
77
+ @property
78
+ def wdt_timeout(self) -> int:
79
+ return int.from_bytes(self._data[12:16], "little")
80
+
81
+ @property
82
+ def audio_total(self) -> int:
83
+ return int.from_bytes(self._data[16:20], "little")
84
+
85
+ @property
86
+ def audio_dropped(self) -> int:
87
+ return int.from_bytes(self._data[20:24], "little")
88
+
89
+ @property
90
+ def audio_sequence_errors(self) -> int:
91
+ return int.from_bytes(self._data[24:28], "little")
92
+
93
+ @property
94
+ def anc_total(self) -> int:
95
+ return int.from_bytes(self._data[28:32], "little")
96
+
97
+ @property
98
+ def anc_dropped(self) -> int:
99
+ return int.from_bytes(self._data[32:36], "little")
100
+
101
+ @property
102
+ def anc_sequence_errors(self) -> int:
103
+ return int.from_bytes(self._data[36:40], "little")
104
+
105
+ @property
106
+ def decoder_state(self) -> V2IPDecoderState:
107
+ return V2IPDecoderState(int(self._data[40]))
108
+
109
+ def __str__(self) -> str:
110
+ viseq = f" (seq: {self.video_sequence_errors})" if self.video_sequence_errors > 0 else ''
111
+ auseq = f" (seq: {self.audio_sequence_errors})" if self.audio_sequence_errors > 0 else ''
112
+ anseq = f" (seq: {self.anc_sequence_errors})" if self.anc_sequence_errors > 0 else ''
113
+ wdt = f" WDT Timeout:{self.wdt_timeout}" if self.wdt_timeout > 0 else ''
114
+ return f"State: {self.decoder_state}, Video: {self.video_total}{viseq}, Audio: {self.audio_total}{auseq}, Anc: {self.anc_total}{anseq}{wdt}"
115
+
116
+ class V2IPDeviceStats:
117
+ tx:V2IPTxStats = None
118
+ tx_per_minute:V2IPTxStats = None
119
+ rx:V2IPRxStats = None
120
+ rx_per_minute:V2IPRxStats = None
121
+
122
+ def __str__(self) -> str:
123
+ return f"v2ip stats: tx={self.tx_per_minute} rx={self.rx_per_minute}"
124
+
125
+ def __repr__(self) -> str:
126
+ return str(self)
@@ -0,0 +1,8 @@
1
+ ##################################################
2
+ ## MX Remote Python Interface ##
3
+ ## ##
4
+ ## author: Lars Op den Kamp (lars@opdenkamp.eu) ##
5
+ ## copyright (c) 2024 Op den Kamp IT Solutions ##
6
+ ##################################################
7
+
8
+ from .Constants import *
@@ -0,0 +1,157 @@
1
+ 1;0;0;640;800;480;525;60;0;1
2
+ 2;0;2;720;858;480;525;60;0;1
3
+ 3;1;4;720;858;480;525;60;0;1
4
+ 4;1;0;1280;1650;720;750;60;0;1
5
+ 5;1;0;1920;2200;1080;1125;60;1;1
6
+ 6;0;2;720;858;480;525;60;1;2
7
+ 7;1;4;720;858;480;525;60;1;2
8
+ 8;0;2;720;858;240;262;60;0;2
9
+ 9;1;4;720;858;240;262;60;0;2
10
+ 10;0;2;720;858;480;525;60;1;4
11
+ 11;1;4;720;858;480;525;60;1;4
12
+ 12;0;2;720;858;240;262;60;0;4
13
+ 13;1;4;720;858;240;262;60;0;4
14
+ 14;0;2;720;858;480;525;60;0;2
15
+ 15;1;4;720;858;480;525;60;0;2
16
+ 16;1;0;1920;2200;1080;1125;60;0;1
17
+ 17;0;3;720;864;576;625;50;0;1
18
+ 18;1;5;720;864;576;625;50;0;1
19
+ 19;1;0;1280;1980;720;750;50;0;1
20
+ 20;1;0;1920;2640;1080;1125;50;1;1
21
+ 21;0;3;720;864;576;625;50;1;2
22
+ 22;1;5;720;864;576;625;50;1;2
23
+ 23;0;3;720;864;288;312;50;0;2
24
+ 24;1;5;720;864;288;312;50;0;2
25
+ 25;0;3;720;864;576;625;50;1;4
26
+ 26;1;5;720;864;576;625;50;1;4
27
+ 27;0;3;720;864;288;312;50;0;4
28
+ 28;1;5;720;864;288;312;50;0;4
29
+ 29;0;3;720;864;576;625;50;0;2
30
+ 30;1;5;720;864;576;625;50;0;2
31
+ 31;1;0;1920;2640;1080;1125;50;0;1
32
+ 32;1;0;1920;2750;1080;1125;24;0;1
33
+ 33;1;0;1920;2640;1080;1125;25;0;1
34
+ 34;1;0;1920;2200;1080;1125;30;0;1
35
+ 35;0;2;720;858;480;525;60;0;4
36
+ 36;1;4;720;858;480;525;60;0;4
37
+ 37;0;3;720;814;576;625;50;0;4
38
+ 38;1;5;720;814;576;625;50;0;4
39
+ 39;1;0;1920;2304;1080;1250;50;1;1
40
+ 40;1;0;1920;2640;1080;1125;100;1;1
41
+ 41;1;0;1280;1980;720;750;100;0;1
42
+ 42;0;2;720;864;576;625;100;0;1
43
+ 43;1;4;720;864;576;625;100;0;1
44
+ 44;0;3;720;864;576;625;100;1;2
45
+ 45;1;5;720;864;576;625;100;1;2
46
+ 46;1;0;1920;2200;1080;1125;120;1;1
47
+ 47;1;0;1280;1650;720;750;120;0;1
48
+ 48;0;3;720;858;480;525;120;0;1
49
+ 49;1;5;720;858;480;525;120;0;1
50
+ 50;0;2;720;864;576;625;120;1;2
51
+ 51;1;4;720;864;576;625;120;1;2
52
+ 52;0;3;720;864;576;625;200;0;1
53
+ 53;1;5;720;864;576;625;200;0;1
54
+ 54;0;3;720;864;576;625;200;1;2
55
+ 55;1;5;720;864;576;625;200;1;2
56
+ 56;0;2;720;858;480;525;240;0;1
57
+ 57;1;4;720;858;480;525;240;0;1
58
+ 58;0;2;720;858;480;525;240;1;2
59
+ 59;1;4;720;858;480;525;240;1;2
60
+ 60;1;0;1280;3300;720;750;24;0;1
61
+ 61;1;0;1280;3960;720;750;25;0;1
62
+ 62;1;0;1280;3300;720;750;30;0;1
63
+ 63;1;0;1920;2200;1080;1125;120;0;1
64
+ 64;1;0;1920;2640;1080;1125;100;0;1
65
+ 65;2;1;1280;3300;720;750;24;0;1
66
+ 66;2;1;1280;3960;720;750;25;0;1
67
+ 67;2;1;1280;3300;720;750;30;0;1
68
+ 68;2;1;1280;1980;720;750;50;0;1
69
+ 69;2;1;1280;1650;720;750;60;0;1
70
+ 70;2;1;1280;1980;720;750;100;0;1
71
+ 71;2;1;1280;1650;720;750;120;0;1
72
+ 72;2;1;1920;2750;1080;1125;24;0;1
73
+ 73;2;1;1920;2640;1080;1125;25;0;1
74
+ 74;2;1;1920;2200;1080;1125;30;0;1
75
+ 75;2;1;1920;2640;1080;1125;50;0;1
76
+ 76;2;1;1920;2200;1080;1125;60;0;1
77
+ 77;2;1;1920;2640;1080;1125;100;0;1
78
+ 78;2;1;1920;2200;1080;1125;120;0;1
79
+ 79;2;6;1680;3300;720;750;24;0;1
80
+ 80;2;6;1680;3168;720;750;25;0;1
81
+ 81;2;6;1680;2640;720;750;30;0;1
82
+ 82;2;6;1680;2200;720;750;50;0;1
83
+ 83;2;6;1680;2200;720;750;60;0;1
84
+ 84;2;6;1680;2000;720;825;100;0;1
85
+ 85;2;6;1680;2000;720;825;120;0;1
86
+ 86;2;6;2560;3750;1080;1100;24;0;1
87
+ 87;2;6;2560;3200;1080;1125;25;0;1
88
+ 88;2;6;2560;3520;1080;1125;30;0;1
89
+ 89;2;6;2560;3300;1080;1125;50;0;1
90
+ 90;2;6;2560;3000;1080;1100;60;0;1
91
+ 91;2;6;2560;2970;1080;1250;100;0;1
92
+ 92;2;6;2560;3300;1080;1250;120;0;1
93
+ 93;1;0;3840;5500;2160;2250;24;0;1
94
+ 94;1;0;3840;5280;2160;2250;25;0;1
95
+ 95;1;0;3840;4400;2160;2250;30;0;1
96
+ 96;1;0;3840;5280;2160;2250;50;0;1
97
+ 97;1;0;3840;4400;2160;2250;60;0;1
98
+ 98;3;0;4096;5500;2160;2250;24;0;1
99
+ 99;3;0;4096;5280;2160;2250;25;0;1
100
+ 100;3;0;4096;4400;2160;2250;30;0;1
101
+ 101;3;0;4096;5280;2160;2250;50;0;1
102
+ 102;3;0;4096;4400;2160;2250;60;0;1
103
+ 103;2;1;3840;5500;2160;2250;24;0;1
104
+ 104;2;1;3840;5280;2160;2250;25;0;1
105
+ 105;2;1;3840;4400;2160;2250;30;0;1
106
+ 106;2;1;3840;5280;2160;2250;50;0;1
107
+ 107;2;1;3840;4400;2160;2250;60;0;1
108
+ 108;1;0;1280;2500;720;750;48;0;1
109
+ 109;2;1;1280;2500;720;750;48;0;1
110
+ 110;2;6;1680;2750;720;825;48;0;1
111
+ 111;1;0;1920;2750;1080;1125;48;0;1
112
+ 112;2;1;1920;2750;1080;1125;48;0;1
113
+ 113;2;0;2560;3750;1080;1100;48;0;1
114
+ 114;1;0;3840;5500;2160;2250;48;0;1
115
+ 115;3;0;4096;5500;2160;2250;48;0;1
116
+ 116;2;1;3840;5500;2160;2250;48;0;1
117
+ 117;1;0;3840;5280;2160;2250;100;0;1
118
+ 118;1;0;3840;4400;2160;2250;120;0;1
119
+ 119;2;1;3840;5280;2160;2250;100;0;1
120
+ 120;2;1;3840;4400;2160;2250;120;0;1
121
+ 121;2;0;5120;7500;2160;2200;24;0;1
122
+ 122;2;0;5120;7200;2160;2200;25;0;1
123
+ 123;2;0;5120;6000;2160;2200;30;0;1
124
+ 124;2;0;5120;6250;2160;2450;48;0;1
125
+ 125;2;0;5120;6600;2160;2250;50;0;1
126
+ 126;2;0;5120;5500;2160;2250;60;0;1
127
+ 127;2;0;5120;6600;2160;2250;100;0;1
128
+ 193;2;0;5120;5500;2160;2250;120;0;1
129
+ 194;1;0;7680;11000;4320;4500;24;0;1
130
+ 195;1;0;7680;10800;4320;4400;25;0;1
131
+ 196;1;0;7680;9000;4320;4400;30;0;1
132
+ 197;1;0;7680;11000;4320;4500;48;0;1
133
+ 198;1;0;7680;10800;4320;4400;50;0;1
134
+ 199;1;0;7680;9000;4320;4400;60;0;1
135
+ 200;1;0;7680;10560;4320;4500;100;0;1
136
+ 201;1;0;7680;8800;4320;4500;120;0;1
137
+ 202;2;1;7680;11000;4320;4500;24;0;1
138
+ 203;2;1;7680;10800;4320;4400;25;0;1
139
+ 204;2;1;7680;9000;4320;4400;30;0;1
140
+ 205;2;1;7680;11000;4320;4500;48;0;1
141
+ 206;2;1;7680;10800;4320;4400;50;0;1
142
+ 207;2;1;7680;9000;4320;4400;60;0;1
143
+ 208;2;1;7680;10560;4320;4500;100;0;1
144
+ 209;2;1;7680;8800;4320;4500;100;0;1
145
+ 210;2;0;10240;12500;4320;4950;24;0;1
146
+ 211;2;0;10240;13500;4320;4400;25;0;1
147
+ 212;2;0;10240;11000;4320;4500;30;0;1
148
+ 213;2;0;10240;12500;4320;4950;48;0;1
149
+ 214;2;0;10240;13500;4320;4400;50;0;1
150
+ 215;2;0;10240;11000;4320;4400;60;0;1
151
+ 216;2;0;10240;13200;4320;4500;100;0;1
152
+ 217;2;0;10240;11000;4320;4500;120;0;1
153
+ 218;3;0;4096;5280;2160;2250;100;0;1
154
+ 219;3;0;4096;4400;2160;2250;120;0;1
155
+ 244;2;6;2560;2720;1440;1481;60;0;1
156
+ 248;2;6;1680;2240;1050;1089;60;0;1
157
+ 251;2;6;1440;1904;900;934;60;0;1