mail 2.6.4 → 2.9.0

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 (180) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +208 -156
  3. data/lib/mail/attachments_list.rb +13 -10
  4. data/lib/mail/body.rb +96 -107
  5. data/lib/mail/configuration.rb +2 -0
  6. data/lib/mail/constants.rb +27 -5
  7. data/lib/mail/elements/address.rb +61 -50
  8. data/lib/mail/elements/address_list.rb +11 -19
  9. data/lib/mail/elements/content_disposition_element.rb +9 -16
  10. data/lib/mail/elements/content_location_element.rb +6 -11
  11. data/lib/mail/elements/content_transfer_encoding_element.rb +6 -11
  12. data/lib/mail/elements/content_type_element.rb +16 -23
  13. data/lib/mail/elements/date_time_element.rb +7 -15
  14. data/lib/mail/elements/envelope_from_element.rb +22 -23
  15. data/lib/mail/elements/message_ids_element.rb +18 -13
  16. data/lib/mail/elements/mime_version_element.rb +7 -15
  17. data/lib/mail/elements/phrase_list.rb +12 -10
  18. data/lib/mail/elements/received_element.rb +27 -19
  19. data/lib/mail/encodings/7bit.rb +9 -14
  20. data/lib/mail/encodings/8bit.rb +2 -21
  21. data/lib/mail/encodings/base64.rb +11 -12
  22. data/lib/mail/encodings/binary.rb +3 -22
  23. data/lib/mail/encodings/identity.rb +24 -0
  24. data/lib/mail/encodings/quoted_printable.rb +6 -6
  25. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  26. data/lib/mail/encodings/unix_to_unix.rb +4 -2
  27. data/lib/mail/encodings.rb +83 -56
  28. data/lib/mail/envelope.rb +11 -14
  29. data/lib/mail/field.rb +181 -130
  30. data/lib/mail/field_list.rb +61 -8
  31. data/lib/mail/fields/bcc_field.rb +33 -52
  32. data/lib/mail/fields/cc_field.rb +27 -49
  33. data/lib/mail/fields/comments_field.rb +26 -37
  34. data/lib/mail/fields/common_address_field.rb +162 -0
  35. data/lib/mail/fields/common_date_field.rb +56 -0
  36. data/lib/mail/fields/common_field.rb +77 -0
  37. data/lib/mail/fields/common_message_id_field.rb +41 -0
  38. data/lib/mail/fields/content_description_field.rb +6 -14
  39. data/lib/mail/fields/content_disposition_field.rb +11 -38
  40. data/lib/mail/fields/content_id_field.rb +23 -51
  41. data/lib/mail/fields/content_location_field.rb +10 -25
  42. data/lib/mail/fields/content_transfer_encoding_field.rb +30 -31
  43. data/lib/mail/fields/content_type_field.rb +53 -84
  44. data/lib/mail/fields/date_field.rb +22 -52
  45. data/lib/mail/fields/from_field.rb +27 -49
  46. data/lib/mail/fields/in_reply_to_field.rb +37 -49
  47. data/lib/mail/fields/keywords_field.rb +17 -31
  48. data/lib/mail/fields/message_id_field.rb +24 -71
  49. data/lib/mail/fields/mime_version_field.rb +18 -30
  50. data/lib/mail/fields/named_structured_field.rb +10 -0
  51. data/lib/mail/fields/named_unstructured_field.rb +10 -0
  52. data/lib/mail/fields/optional_field.rb +9 -8
  53. data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +13 -11
  54. data/lib/mail/fields/received_field.rb +42 -57
  55. data/lib/mail/fields/references_field.rb +34 -49
  56. data/lib/mail/fields/reply_to_field.rb +27 -49
  57. data/lib/mail/fields/resent_bcc_field.rb +27 -49
  58. data/lib/mail/fields/resent_cc_field.rb +27 -49
  59. data/lib/mail/fields/resent_date_field.rb +4 -30
  60. data/lib/mail/fields/resent_from_field.rb +27 -49
  61. data/lib/mail/fields/resent_message_id_field.rb +4 -29
  62. data/lib/mail/fields/resent_sender_field.rb +26 -56
  63. data/lib/mail/fields/resent_to_field.rb +27 -49
  64. data/lib/mail/fields/return_path_field.rb +49 -54
  65. data/lib/mail/fields/sender_field.rb +33 -55
  66. data/lib/mail/fields/structured_field.rb +2 -30
  67. data/lib/mail/fields/subject_field.rb +8 -11
  68. data/lib/mail/fields/to_field.rb +27 -49
  69. data/lib/mail/fields/unstructured_field.rb +31 -47
  70. data/lib/mail/fields.rb +9 -0
  71. data/lib/mail/header.rb +71 -110
  72. data/lib/mail/mail.rb +34 -37
  73. data/lib/mail/matchers/attachment_matchers.rb +15 -0
  74. data/lib/mail/matchers/has_sent_mail.rb +21 -1
  75. data/lib/mail/message.rb +126 -127
  76. data/lib/mail/multibyte/chars.rb +24 -181
  77. data/lib/mail/multibyte/unicode.rb +11 -11
  78. data/lib/mail/multibyte/utils.rb +26 -43
  79. data/lib/mail/multibyte.rb +55 -16
  80. data/lib/mail/network/delivery_methods/exim.rb +8 -11
  81. data/lib/mail/network/delivery_methods/file_delivery.rb +15 -18
  82. data/lib/mail/network/delivery_methods/logger_delivery.rb +34 -0
  83. data/lib/mail/network/delivery_methods/sendmail.rb +32 -35
  84. data/lib/mail/network/delivery_methods/smtp.rb +125 -68
  85. data/lib/mail/network/delivery_methods/smtp_connection.rb +11 -16
  86. data/lib/mail/network/delivery_methods/test_mailer.rb +12 -13
  87. data/lib/mail/network/retriever_methods/base.rb +13 -13
  88. data/lib/mail/network/retriever_methods/imap.rb +25 -9
  89. data/lib/mail/network/retriever_methods/pop3.rb +25 -23
  90. data/lib/mail/network/retriever_methods/test_retriever.rb +3 -2
  91. data/lib/mail/network.rb +1 -0
  92. data/lib/mail/parser_tools.rb +15 -0
  93. data/lib/mail/parsers/address_lists_parser.rb +33228 -116
  94. data/lib/mail/parsers/address_lists_parser.rl +183 -0
  95. data/lib/mail/parsers/content_disposition_parser.rb +885 -49
  96. data/lib/mail/parsers/content_disposition_parser.rl +93 -0
  97. data/lib/mail/parsers/content_location_parser.rb +812 -23
  98. data/lib/mail/parsers/content_location_parser.rl +82 -0
  99. data/lib/mail/parsers/content_transfer_encoding_parser.rb +512 -21
  100. data/lib/mail/parsers/content_transfer_encoding_parser.rl +75 -0
  101. data/lib/mail/parsers/content_type_parser.rb +1039 -55
  102. data/lib/mail/parsers/content_type_parser.rl +94 -0
  103. data/lib/mail/parsers/date_time_parser.rb +880 -25
  104. data/lib/mail/parsers/date_time_parser.rl +73 -0
  105. data/lib/mail/parsers/envelope_from_parser.rb +3672 -40
  106. data/lib/mail/parsers/envelope_from_parser.rl +93 -0
  107. data/lib/mail/parsers/message_ids_parser.rb +5149 -25
  108. data/lib/mail/parsers/message_ids_parser.rl +97 -0
  109. data/lib/mail/parsers/mime_version_parser.rb +500 -26
  110. data/lib/mail/parsers/mime_version_parser.rl +72 -0
  111. data/lib/mail/parsers/phrase_lists_parser.rb +873 -22
  112. data/lib/mail/parsers/phrase_lists_parser.rl +94 -0
  113. data/lib/mail/parsers/received_parser.rb +8779 -43
  114. data/lib/mail/parsers/received_parser.rl +95 -0
  115. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
  116. data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
  117. data/lib/mail/parsers/rfc2045_mime.rl +16 -0
  118. data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
  119. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  120. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
  121. data/lib/mail/parsers/rfc5322.rl +74 -0
  122. data/lib/mail/parsers/rfc5322_address.rl +72 -0
  123. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +8 -1
  124. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
  125. data/lib/mail/parsers.rb +11 -25
  126. data/lib/mail/part.rb +25 -29
  127. data/lib/mail/parts_list.rb +62 -6
  128. data/lib/mail/smtp_envelope.rb +57 -0
  129. data/lib/mail/utilities.rb +361 -74
  130. data/lib/mail/version.rb +2 -2
  131. data/lib/mail/yaml.rb +30 -0
  132. data/lib/mail.rb +4 -37
  133. metadata +125 -67
  134. data/CHANGELOG.rdoc +0 -787
  135. data/CONTRIBUTING.md +0 -60
  136. data/Dependencies.txt +0 -2
  137. data/Gemfile +0 -11
  138. data/Rakefile +0 -29
  139. data/TODO.rdoc +0 -9
  140. data/lib/mail/check_delivery_params.rb +0 -21
  141. data/lib/mail/core_extensions/smtp.rb +0 -25
  142. data/lib/mail/core_extensions/string/access.rb +0 -146
  143. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  144. data/lib/mail/core_extensions/string.rb +0 -21
  145. data/lib/mail/fields/common/address_container.rb +0 -17
  146. data/lib/mail/fields/common/common_address.rb +0 -136
  147. data/lib/mail/fields/common/common_date.rb +0 -36
  148. data/lib/mail/fields/common/common_field.rb +0 -61
  149. data/lib/mail/fields/common/common_message_id.rb +0 -49
  150. data/lib/mail/multibyte/exceptions.rb +0 -9
  151. data/lib/mail/parsers/ragel/common.rl +0 -185
  152. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  153. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  154. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  155. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  156. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  157. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  158. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  159. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  160. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  161. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  162. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  163. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  164. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  165. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  166. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  167. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  168. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  169. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  170. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  171. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  172. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  173. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  174. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  175. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  176. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
  177. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  178. data/lib/mail/parsers/ragel.rb +0 -18
  179. data/lib/mail/version_specific/ruby_1_8.rb +0 -126
  180. data/lib/mail/version_specific/ruby_1_9.rb +0 -223
@@ -1,67 +1,1051 @@
1
1
  # frozen_string_literal: true
2
- module Mail::Parsers
3
- class ContentTypeParser
4
- include Mail::Utilities
5
-
6
- def parse(s)
7
- actions, error = Ragel.parse(:content_type, s)
8
- if error
9
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, error)
2
+ require "mail/utilities"
3
+ require "mail/parser_tools"
4
+
5
+ begin
6
+ original_verbose, $VERBOSE = $VERBOSE, nil
7
+
8
+ module Mail::Parsers
9
+ module ContentTypeParser
10
+ extend Mail::ParserTools
11
+
12
+ ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
13
+
14
+ class << self
15
+ attr_accessor :_trans_keys
16
+ private :_trans_keys, :_trans_keys=
10
17
  end
18
+ self._trans_keys = [
19
+ 0, 0, 33, 126, 33, 126,
20
+ 33, 126, 9, 126, 10,
21
+ 10, 9, 32, 33, 126,
22
+ 9, 126, 9, 40, 10, 10,
23
+ 9, 32, 1, 244, 1,
24
+ 244, 10, 10, 9, 32,
25
+ 10, 10, 9, 32, 9, 126,
26
+ 9, 126, 10, 10, 9,
27
+ 32, 9, 126, 0, 244,
28
+ 128, 191, 160, 191, 128, 191,
29
+ 128, 159, 144, 191, 128,
30
+ 191, 128, 143, 9, 40,
31
+ 10, 10, 9, 32, 9, 126,
32
+ 1, 244, 1, 244, 10,
33
+ 10, 9, 32, 0, 244,
34
+ 128, 191, 160, 191, 128, 191,
35
+ 128, 159, 144, 191, 128,
36
+ 191, 128, 143, 9, 126,
37
+ 9, 59, 9, 126, 9, 126,
38
+ 9, 126, 9, 126, 9,
39
+ 126, 0, 0, 0,
40
+ ]
11
41
 
12
- content_type = ContentTypeStruct.new(nil,nil,[])
13
-
14
- content_type.parameters = []
15
-
16
- main_type_s = sub_type_s = param_attr_s = param_attr = nil
17
- qstr_s = qstr = param_val_s = nil
18
- actions.each_slice(2) do |action_id, p|
19
- action = Mail::Parsers::Ragel::ACTIONS[action_id]
20
- case action
21
-
22
- # Main Type
23
- when :main_type_s then main_type_s = p
24
- when :main_type_e then
25
- content_type.main_type = s[main_type_s..(p-1)]
26
- content_type.main_type.downcase!
27
-
28
- # Sub Type
29
- when :sub_type_s then sub_type_s = p
30
- when :sub_type_e
31
- content_type.sub_type = s[sub_type_s..(p-1)]
32
- content_type.sub_type.downcase!
33
-
34
- # Parameter Attribute
35
- when :param_attr_s then param_attr_s = p
36
- when :param_attr_e then param_attr = s[param_attr_s..(p-1)]
37
-
38
- # Quoted String.
39
- when :qstr_s then qstr_s = p
40
- when :qstr_e then qstr = s[qstr_s..(p-1)]
41
-
42
- # Parameter Value
43
- when :param_val_s then param_val_s = p
44
- when :param_val_e
45
- if param_attr.nil?
46
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, "no attribute for value")
47
- end
42
+ class << self
43
+ attr_accessor :_key_spans
44
+ private :_key_spans, :_key_spans=
45
+ end
46
+ self._key_spans = [
47
+ 0, 94, 94, 94, 118, 1, 24, 94,
48
+ 118, 32, 1, 24, 244, 244, 1, 24,
49
+ 1, 24, 118, 118, 1, 24, 118, 245,
50
+ 64, 32, 64, 32, 48, 64, 16, 32,
51
+ 1, 24, 118, 244, 244, 1, 24, 245,
52
+ 64, 32, 64, 32, 48, 64, 16, 118,
53
+ 51, 118, 118, 118, 118, 118, 0,
54
+ ]
55
+
56
+ class << self
57
+ attr_accessor :_index_offsets
58
+ private :_index_offsets, :_index_offsets=
59
+ end
60
+ self._index_offsets = [
61
+ 0, 0, 95, 190, 285, 404, 406, 431,
62
+ 526, 645, 678, 680, 705, 950, 1195, 1197,
63
+ 1222, 1224, 1249, 1368, 1487, 1489, 1514, 1633,
64
+ 1879, 1944, 1977, 2042, 2075, 2124, 2189, 2206,
65
+ 2239, 2241, 2266, 2385, 2630, 2875, 2877, 2902,
66
+ 3148, 3213, 3246, 3311, 3344, 3393, 3458, 3475,
67
+ 3594, 3646, 3765, 3884, 4003, 4122, 4241,
68
+ ]
69
+
70
+ class << self
71
+ attr_accessor :_indicies
72
+ private :_indicies, :_indicies=
73
+ end
74
+ self._indicies = [
75
+ 0, 0, 0, 0, 0, 0, 0, 1,
76
+ 1, 0, 0, 0, 0, 0, 1, 0,
77
+ 0, 0, 0, 0, 0, 0, 0, 0,
78
+ 0, 1, 1, 1, 1, 1, 1, 1,
79
+ 0, 0, 0, 0, 0, 0, 0, 0,
80
+ 0, 0, 0, 0, 0, 0, 0, 0,
81
+ 0, 0, 0, 0, 0, 0, 0, 0,
82
+ 0, 0, 1, 1, 1, 0, 0, 0,
83
+ 0, 0, 0, 0, 0, 0, 0, 0,
84
+ 0, 0, 0, 0, 0, 0, 0, 0,
85
+ 0, 0, 0, 0, 0, 0, 0, 0,
86
+ 0, 0, 0, 0, 0, 0, 1, 2,
87
+ 2, 2, 2, 2, 2, 2, 1, 1,
88
+ 2, 2, 2, 2, 2, 3, 2, 2,
89
+ 2, 2, 2, 2, 2, 2, 2, 2,
90
+ 1, 1, 1, 1, 1, 1, 1, 2,
91
+ 2, 2, 2, 2, 2, 2, 2, 2,
92
+ 2, 2, 2, 2, 2, 2, 2, 2,
93
+ 2, 2, 2, 2, 2, 2, 2, 2,
94
+ 2, 1, 1, 1, 2, 2, 2, 2,
95
+ 2, 2, 2, 2, 2, 2, 2, 2,
96
+ 2, 2, 2, 2, 2, 2, 2, 2,
97
+ 2, 2, 2, 2, 2, 2, 2, 2,
98
+ 2, 2, 2, 2, 2, 1, 4, 4,
99
+ 4, 4, 4, 4, 4, 1, 1, 4,
100
+ 4, 4, 4, 4, 1, 4, 4, 4,
101
+ 4, 4, 4, 4, 4, 4, 4, 1,
102
+ 1, 1, 1, 1, 1, 1, 4, 4,
103
+ 4, 4, 4, 4, 4, 4, 4, 4,
104
+ 4, 4, 4, 4, 4, 4, 4, 4,
105
+ 4, 4, 4, 4, 4, 4, 4, 4,
106
+ 1, 1, 1, 4, 4, 4, 4, 4,
107
+ 4, 4, 4, 4, 4, 4, 4, 4,
108
+ 4, 4, 4, 4, 4, 4, 4, 4,
109
+ 4, 4, 4, 4, 4, 4, 4, 4,
110
+ 4, 4, 4, 4, 1, 5, 1, 1,
111
+ 1, 6, 1, 1, 1, 1, 1, 1,
112
+ 1, 1, 1, 1, 1, 1, 1, 1,
113
+ 1, 1, 1, 1, 5, 7, 7, 7,
114
+ 7, 7, 7, 7, 8, 1, 7, 7,
115
+ 7, 7, 7, 1, 7, 7, 7, 7,
116
+ 7, 7, 7, 7, 7, 7, 1, 9,
117
+ 1, 1, 1, 1, 1, 7, 7, 7,
118
+ 7, 7, 7, 7, 7, 7, 7, 7,
119
+ 7, 7, 7, 7, 7, 7, 7, 7,
120
+ 7, 7, 7, 7, 7, 7, 7, 1,
121
+ 1, 1, 7, 7, 7, 7, 7, 7,
122
+ 7, 7, 7, 7, 7, 7, 7, 7,
123
+ 7, 7, 7, 7, 7, 7, 7, 7,
124
+ 7, 7, 7, 7, 7, 7, 7, 7,
125
+ 7, 7, 7, 1, 10, 1, 5, 1,
126
+ 1, 1, 1, 1, 1, 1, 1, 1,
127
+ 1, 1, 1, 1, 1, 1, 1, 1,
128
+ 1, 1, 1, 1, 1, 5, 1, 11,
129
+ 11, 11, 11, 11, 11, 11, 1, 1,
130
+ 11, 11, 11, 11, 11, 1, 11, 11,
131
+ 11, 11, 11, 11, 11, 11, 11, 11,
132
+ 1, 1, 1, 12, 1, 1, 1, 11,
133
+ 11, 11, 11, 11, 11, 11, 11, 11,
134
+ 11, 11, 11, 11, 11, 11, 11, 11,
135
+ 11, 11, 11, 11, 11, 11, 11, 11,
136
+ 11, 1, 1, 1, 11, 11, 11, 11,
137
+ 11, 11, 11, 11, 11, 11, 11, 11,
138
+ 11, 11, 11, 11, 11, 11, 11, 11,
139
+ 11, 11, 11, 11, 11, 11, 11, 11,
140
+ 11, 11, 11, 11, 11, 1, 13, 1,
141
+ 1, 1, 14, 1, 1, 1, 1, 1,
142
+ 1, 1, 1, 1, 1, 1, 1, 1,
143
+ 1, 1, 1, 1, 1, 13, 15, 16,
144
+ 15, 15, 15, 15, 15, 17, 1, 15,
145
+ 15, 15, 15, 15, 1, 15, 15, 15,
146
+ 15, 15, 15, 15, 15, 15, 15, 1,
147
+ 1, 1, 15, 1, 1, 1, 15, 15,
148
+ 15, 15, 15, 15, 15, 15, 15, 15,
149
+ 15, 15, 15, 15, 15, 15, 15, 15,
150
+ 15, 15, 15, 15, 15, 15, 15, 15,
151
+ 1, 1, 1, 15, 15, 15, 15, 15,
152
+ 15, 15, 15, 15, 15, 15, 15, 15,
153
+ 15, 15, 15, 15, 15, 15, 15, 15,
154
+ 15, 15, 15, 15, 15, 15, 15, 15,
155
+ 15, 15, 15, 15, 1, 18, 1, 1,
156
+ 1, 19, 1, 1, 1, 1, 1, 1,
157
+ 1, 1, 1, 1, 1, 1, 1, 1,
158
+ 1, 1, 1, 1, 18, 1, 20, 1,
159
+ 1, 1, 1, 1, 21, 1, 22, 1,
160
+ 18, 1, 1, 1, 1, 1, 1, 1,
161
+ 1, 1, 1, 1, 1, 1, 1, 1,
162
+ 1, 1, 1, 1, 1, 1, 1, 18,
163
+ 1, 23, 23, 23, 23, 23, 23, 23,
164
+ 23, 23, 1, 23, 23, 24, 23, 23,
165
+ 23, 23, 23, 23, 23, 23, 23, 23,
166
+ 23, 23, 23, 23, 23, 23, 23, 23,
167
+ 23, 23, 25, 23, 23, 23, 23, 23,
168
+ 23, 23, 23, 23, 23, 23, 23, 23,
169
+ 23, 23, 23, 23, 23, 23, 23, 23,
170
+ 23, 23, 23, 23, 23, 23, 23, 23,
171
+ 23, 23, 23, 23, 23, 23, 23, 23,
172
+ 23, 23, 23, 23, 23, 23, 23, 23,
173
+ 23, 23, 23, 23, 23, 23, 23, 23,
174
+ 23, 23, 23, 23, 26, 23, 23, 23,
175
+ 23, 23, 23, 23, 23, 23, 23, 23,
176
+ 23, 23, 23, 23, 23, 23, 23, 23,
177
+ 23, 23, 23, 23, 23, 23, 23, 23,
178
+ 23, 23, 23, 23, 23, 23, 23, 23,
179
+ 1, 1, 1, 1, 1, 1, 1, 1,
180
+ 1, 1, 1, 1, 1, 1, 1, 1,
181
+ 1, 1, 1, 1, 1, 1, 1, 1,
182
+ 1, 1, 1, 1, 1, 1, 1, 1,
183
+ 1, 1, 1, 1, 1, 1, 1, 1,
184
+ 1, 1, 1, 1, 1, 1, 1, 1,
185
+ 1, 1, 1, 1, 1, 1, 1, 1,
186
+ 1, 1, 1, 1, 1, 1, 1, 1,
187
+ 1, 1, 27, 27, 27, 27, 27, 27,
188
+ 27, 27, 27, 27, 27, 27, 27, 27,
189
+ 27, 27, 27, 27, 27, 27, 27, 27,
190
+ 27, 27, 27, 27, 27, 27, 27, 27,
191
+ 28, 29, 29, 29, 29, 29, 29, 29,
192
+ 29, 29, 29, 29, 29, 30, 29, 29,
193
+ 31, 32, 32, 32, 33, 1, 34, 34,
194
+ 34, 34, 34, 34, 34, 34, 34, 1,
195
+ 34, 34, 35, 34, 34, 34, 34, 34,
196
+ 34, 34, 34, 34, 34, 34, 34, 34,
197
+ 34, 34, 34, 34, 34, 34, 34, 36,
198
+ 34, 34, 34, 34, 34, 34, 34, 34,
199
+ 34, 34, 34, 34, 34, 34, 34, 34,
200
+ 34, 34, 34, 34, 34, 34, 34, 34,
201
+ 34, 34, 34, 34, 34, 34, 34, 34,
202
+ 34, 34, 34, 34, 34, 34, 34, 34,
203
+ 34, 34, 34, 34, 34, 34, 34, 34,
204
+ 34, 34, 34, 34, 34, 34, 34, 34,
205
+ 34, 37, 34, 34, 34, 34, 34, 34,
206
+ 34, 34, 34, 34, 34, 34, 34, 34,
207
+ 34, 34, 34, 34, 34, 34, 34, 34,
208
+ 34, 34, 34, 34, 34, 34, 34, 34,
209
+ 34, 34, 34, 34, 34, 1, 1, 1,
210
+ 1, 1, 1, 1, 1, 1, 1, 1,
211
+ 1, 1, 1, 1, 1, 1, 1, 1,
212
+ 1, 1, 1, 1, 1, 1, 1, 1,
213
+ 1, 1, 1, 1, 1, 1, 1, 1,
214
+ 1, 1, 1, 1, 1, 1, 1, 1,
215
+ 1, 1, 1, 1, 1, 1, 1, 1,
216
+ 1, 1, 1, 1, 1, 1, 1, 1,
217
+ 1, 1, 1, 1, 1, 1, 1, 38,
218
+ 38, 38, 38, 38, 38, 38, 38, 38,
219
+ 38, 38, 38, 38, 38, 38, 38, 38,
220
+ 38, 38, 38, 38, 38, 38, 38, 38,
221
+ 38, 38, 38, 38, 38, 39, 40, 40,
222
+ 40, 40, 40, 40, 40, 40, 40, 40,
223
+ 40, 40, 41, 40, 40, 42, 43, 43,
224
+ 43, 44, 1, 45, 1, 34, 1, 1,
225
+ 1, 1, 1, 1, 1, 1, 1, 1,
226
+ 1, 1, 1, 1, 1, 1, 1, 1,
227
+ 1, 1, 1, 1, 34, 1, 46, 1,
228
+ 47, 1, 1, 1, 1, 1, 1, 1,
229
+ 1, 1, 1, 1, 1, 1, 1, 1,
230
+ 1, 1, 1, 1, 1, 1, 1, 47,
231
+ 1, 48, 1, 1, 1, 49, 1, 1,
232
+ 1, 1, 1, 1, 1, 1, 1, 1,
233
+ 1, 1, 1, 1, 1, 1, 1, 1,
234
+ 48, 7, 7, 7, 7, 7, 7, 7,
235
+ 50, 1, 7, 7, 7, 7, 7, 1,
236
+ 7, 7, 7, 7, 7, 7, 7, 7,
237
+ 7, 7, 1, 9, 1, 1, 1, 1,
238
+ 1, 7, 7, 7, 7, 7, 7, 7,
239
+ 7, 7, 7, 7, 7, 7, 7, 7,
240
+ 7, 7, 7, 7, 7, 7, 7, 7,
241
+ 7, 7, 7, 1, 1, 1, 7, 7,
242
+ 7, 7, 7, 7, 7, 7, 7, 7,
243
+ 7, 7, 7, 7, 7, 7, 7, 7,
244
+ 7, 7, 7, 7, 7, 7, 7, 7,
245
+ 7, 7, 7, 7, 7, 7, 7, 1,
246
+ 48, 1, 1, 1, 49, 1, 1, 1,
247
+ 1, 1, 1, 1, 1, 1, 1, 1,
248
+ 1, 1, 1, 1, 1, 1, 1, 48,
249
+ 7, 7, 7, 7, 7, 7, 7, 50,
250
+ 1, 7, 7, 7, 7, 7, 1, 7,
251
+ 7, 7, 7, 7, 7, 7, 7, 7,
252
+ 7, 1, 1, 1, 1, 1, 1, 1,
253
+ 7, 7, 7, 7, 7, 7, 7, 7,
254
+ 7, 7, 7, 7, 7, 7, 7, 7,
255
+ 7, 7, 7, 7, 7, 7, 7, 7,
256
+ 7, 7, 1, 1, 1, 7, 7, 7,
257
+ 7, 7, 7, 7, 7, 7, 7, 7,
258
+ 7, 7, 7, 7, 7, 7, 7, 7,
259
+ 7, 7, 7, 7, 7, 7, 7, 7,
260
+ 7, 7, 7, 7, 7, 7, 1, 51,
261
+ 1, 48, 1, 1, 1, 1, 1, 1,
262
+ 1, 1, 1, 1, 1, 1, 1, 1,
263
+ 1, 1, 1, 1, 1, 1, 1, 1,
264
+ 48, 1, 52, 1, 1, 1, 53, 1,
265
+ 1, 1, 1, 1, 1, 1, 1, 1,
266
+ 1, 1, 1, 1, 1, 1, 1, 1,
267
+ 1, 52, 54, 54, 54, 54, 54, 54,
268
+ 54, 55, 1, 54, 54, 54, 54, 54,
269
+ 1, 54, 54, 54, 54, 54, 54, 54,
270
+ 54, 54, 54, 1, 1, 1, 1, 1,
271
+ 1, 1, 54, 54, 54, 54, 54, 54,
272
+ 54, 54, 54, 54, 54, 54, 54, 54,
273
+ 54, 54, 54, 54, 54, 54, 54, 54,
274
+ 54, 54, 54, 54, 1, 1, 1, 54,
275
+ 54, 54, 54, 54, 54, 54, 54, 54,
276
+ 54, 54, 54, 54, 54, 54, 54, 54,
277
+ 54, 54, 54, 54, 54, 54, 54, 54,
278
+ 54, 54, 54, 54, 54, 54, 54, 54,
279
+ 1, 34, 34, 34, 34, 34, 34, 34,
280
+ 34, 34, 34, 34, 34, 34, 34, 34,
281
+ 34, 34, 34, 34, 34, 34, 34, 34,
282
+ 34, 34, 34, 34, 34, 34, 34, 34,
283
+ 34, 34, 34, 34, 34, 34, 34, 34,
284
+ 34, 34, 34, 34, 34, 34, 34, 34,
285
+ 34, 34, 34, 34, 34, 34, 34, 34,
286
+ 34, 34, 34, 34, 34, 34, 34, 34,
287
+ 34, 34, 34, 34, 34, 34, 34, 34,
288
+ 34, 34, 34, 34, 34, 34, 34, 34,
289
+ 34, 34, 34, 34, 34, 34, 34, 34,
290
+ 34, 34, 34, 34, 34, 34, 34, 34,
291
+ 34, 34, 34, 34, 34, 34, 34, 34,
292
+ 34, 34, 34, 34, 34, 34, 34, 34,
293
+ 34, 34, 34, 34, 34, 34, 34, 34,
294
+ 34, 34, 34, 34, 34, 34, 34, 34,
295
+ 34, 1, 1, 1, 1, 1, 1, 1,
296
+ 1, 1, 1, 1, 1, 1, 1, 1,
297
+ 1, 1, 1, 1, 1, 1, 1, 1,
298
+ 1, 1, 1, 1, 1, 1, 1, 1,
299
+ 1, 1, 1, 1, 1, 1, 1, 1,
300
+ 1, 1, 1, 1, 1, 1, 1, 1,
301
+ 1, 1, 1, 1, 1, 1, 1, 1,
302
+ 1, 1, 1, 1, 1, 1, 1, 1,
303
+ 1, 1, 1, 38, 38, 38, 38, 38,
304
+ 38, 38, 38, 38, 38, 38, 38, 38,
305
+ 38, 38, 38, 38, 38, 38, 38, 38,
306
+ 38, 38, 38, 38, 38, 38, 38, 38,
307
+ 38, 39, 40, 40, 40, 40, 40, 40,
308
+ 40, 40, 40, 40, 40, 40, 41, 40,
309
+ 40, 42, 43, 43, 43, 44, 1, 34,
310
+ 34, 34, 34, 34, 34, 34, 34, 34,
311
+ 34, 34, 34, 34, 34, 34, 34, 34,
312
+ 34, 34, 34, 34, 34, 34, 34, 34,
313
+ 34, 34, 34, 34, 34, 34, 34, 34,
314
+ 34, 34, 34, 34, 34, 34, 34, 34,
315
+ 34, 34, 34, 34, 34, 34, 34, 34,
316
+ 34, 34, 34, 34, 34, 34, 34, 34,
317
+ 34, 34, 34, 34, 34, 34, 34, 1,
318
+ 38, 38, 38, 38, 38, 38, 38, 38,
319
+ 38, 38, 38, 38, 38, 38, 38, 38,
320
+ 38, 38, 38, 38, 38, 38, 38, 38,
321
+ 38, 38, 38, 38, 38, 38, 38, 38,
322
+ 1, 38, 38, 38, 38, 38, 38, 38,
323
+ 38, 38, 38, 38, 38, 38, 38, 38,
324
+ 38, 38, 38, 38, 38, 38, 38, 38,
325
+ 38, 38, 38, 38, 38, 38, 38, 38,
326
+ 38, 38, 38, 38, 38, 38, 38, 38,
327
+ 38, 38, 38, 38, 38, 38, 38, 38,
328
+ 38, 38, 38, 38, 38, 38, 38, 38,
329
+ 38, 38, 38, 38, 38, 38, 38, 38,
330
+ 38, 1, 38, 38, 38, 38, 38, 38,
331
+ 38, 38, 38, 38, 38, 38, 38, 38,
332
+ 38, 38, 38, 38, 38, 38, 38, 38,
333
+ 38, 38, 38, 38, 38, 38, 38, 38,
334
+ 38, 38, 1, 40, 40, 40, 40, 40,
335
+ 40, 40, 40, 40, 40, 40, 40, 40,
336
+ 40, 40, 40, 40, 40, 40, 40, 40,
337
+ 40, 40, 40, 40, 40, 40, 40, 40,
338
+ 40, 40, 40, 40, 40, 40, 40, 40,
339
+ 40, 40, 40, 40, 40, 40, 40, 40,
340
+ 40, 40, 40, 1, 40, 40, 40, 40,
341
+ 40, 40, 40, 40, 40, 40, 40, 40,
342
+ 40, 40, 40, 40, 40, 40, 40, 40,
343
+ 40, 40, 40, 40, 40, 40, 40, 40,
344
+ 40, 40, 40, 40, 40, 40, 40, 40,
345
+ 40, 40, 40, 40, 40, 40, 40, 40,
346
+ 40, 40, 40, 40, 40, 40, 40, 40,
347
+ 40, 40, 40, 40, 40, 40, 40, 40,
348
+ 40, 40, 40, 40, 1, 40, 40, 40,
349
+ 40, 40, 40, 40, 40, 40, 40, 40,
350
+ 40, 40, 40, 40, 40, 1, 56, 1,
351
+ 1, 1, 57, 1, 1, 1, 1, 1,
352
+ 1, 1, 1, 1, 1, 1, 1, 1,
353
+ 1, 1, 1, 1, 1, 56, 1, 58,
354
+ 1, 1, 1, 1, 1, 59, 1, 60,
355
+ 1, 61, 1, 1, 1, 1, 1, 1,
356
+ 1, 1, 1, 1, 1, 1, 1, 1,
357
+ 1, 1, 1, 1, 1, 1, 1, 1,
358
+ 61, 1, 62, 1, 1, 1, 63, 1,
359
+ 1, 1, 1, 1, 1, 1, 1, 1,
360
+ 1, 1, 1, 1, 1, 1, 1, 1,
361
+ 1, 62, 54, 54, 54, 54, 54, 54,
362
+ 54, 64, 1, 54, 54, 54, 54, 54,
363
+ 1, 54, 54, 54, 54, 54, 54, 54,
364
+ 54, 54, 54, 1, 65, 1, 1, 1,
365
+ 1, 1, 54, 54, 54, 54, 54, 54,
366
+ 54, 54, 54, 54, 54, 54, 54, 54,
367
+ 54, 54, 54, 54, 54, 54, 54, 54,
368
+ 54, 54, 54, 54, 1, 1, 1, 54,
369
+ 54, 54, 54, 54, 54, 54, 54, 54,
370
+ 54, 54, 54, 54, 54, 54, 54, 54,
371
+ 54, 54, 54, 54, 54, 54, 54, 54,
372
+ 54, 54, 54, 54, 54, 54, 54, 54,
373
+ 1, 66, 66, 66, 66, 66, 66, 66,
374
+ 66, 66, 1, 66, 66, 67, 66, 66,
375
+ 66, 66, 66, 66, 66, 66, 66, 66,
376
+ 66, 66, 66, 66, 66, 66, 66, 66,
377
+ 66, 66, 66, 66, 66, 66, 66, 66,
378
+ 68, 69, 66, 66, 66, 66, 66, 66,
379
+ 66, 66, 66, 66, 66, 66, 66, 66,
380
+ 66, 66, 66, 66, 66, 66, 66, 66,
381
+ 66, 66, 66, 66, 66, 66, 66, 66,
382
+ 66, 66, 66, 66, 66, 66, 66, 66,
383
+ 66, 66, 66, 66, 66, 66, 66, 66,
384
+ 66, 66, 66, 66, 70, 66, 66, 66,
385
+ 66, 66, 66, 66, 66, 66, 66, 66,
386
+ 66, 66, 66, 66, 66, 66, 66, 66,
387
+ 66, 66, 66, 66, 66, 66, 66, 66,
388
+ 66, 66, 66, 66, 66, 66, 66, 66,
389
+ 1, 1, 1, 1, 1, 1, 1, 1,
390
+ 1, 1, 1, 1, 1, 1, 1, 1,
391
+ 1, 1, 1, 1, 1, 1, 1, 1,
392
+ 1, 1, 1, 1, 1, 1, 1, 1,
393
+ 1, 1, 1, 1, 1, 1, 1, 1,
394
+ 1, 1, 1, 1, 1, 1, 1, 1,
395
+ 1, 1, 1, 1, 1, 1, 1, 1,
396
+ 1, 1, 1, 1, 1, 1, 1, 1,
397
+ 1, 1, 71, 71, 71, 71, 71, 71,
398
+ 71, 71, 71, 71, 71, 71, 71, 71,
399
+ 71, 71, 71, 71, 71, 71, 71, 71,
400
+ 71, 71, 71, 71, 71, 71, 71, 71,
401
+ 72, 73, 73, 73, 73, 73, 73, 73,
402
+ 73, 73, 73, 73, 73, 74, 73, 73,
403
+ 75, 76, 76, 76, 77, 1, 78, 78,
404
+ 78, 78, 78, 78, 78, 78, 78, 1,
405
+ 78, 78, 79, 78, 78, 78, 78, 78,
406
+ 78, 78, 78, 78, 78, 78, 78, 78,
407
+ 78, 78, 78, 78, 78, 78, 78, 78,
408
+ 78, 78, 78, 78, 78, 80, 81, 78,
409
+ 78, 78, 78, 78, 78, 78, 78, 78,
410
+ 78, 78, 78, 78, 78, 78, 78, 78,
411
+ 78, 78, 78, 78, 78, 78, 78, 78,
412
+ 78, 78, 78, 78, 78, 78, 78, 78,
413
+ 78, 78, 78, 78, 78, 78, 78, 78,
414
+ 78, 78, 78, 78, 78, 78, 78, 78,
415
+ 78, 82, 78, 78, 78, 78, 78, 78,
416
+ 78, 78, 78, 78, 78, 78, 78, 78,
417
+ 78, 78, 78, 78, 78, 78, 78, 78,
418
+ 78, 78, 78, 78, 78, 78, 78, 78,
419
+ 78, 78, 78, 78, 78, 1, 1, 1,
420
+ 1, 1, 1, 1, 1, 1, 1, 1,
421
+ 1, 1, 1, 1, 1, 1, 1, 1,
422
+ 1, 1, 1, 1, 1, 1, 1, 1,
423
+ 1, 1, 1, 1, 1, 1, 1, 1,
424
+ 1, 1, 1, 1, 1, 1, 1, 1,
425
+ 1, 1, 1, 1, 1, 1, 1, 1,
426
+ 1, 1, 1, 1, 1, 1, 1, 1,
427
+ 1, 1, 1, 1, 1, 1, 1, 83,
428
+ 83, 83, 83, 83, 83, 83, 83, 83,
429
+ 83, 83, 83, 83, 83, 83, 83, 83,
430
+ 83, 83, 83, 83, 83, 83, 83, 83,
431
+ 83, 83, 83, 83, 83, 84, 85, 85,
432
+ 85, 85, 85, 85, 85, 85, 85, 85,
433
+ 85, 85, 86, 85, 85, 87, 88, 88,
434
+ 88, 89, 1, 90, 1, 78, 1, 1,
435
+ 1, 1, 1, 1, 1, 1, 1, 1,
436
+ 1, 1, 1, 1, 1, 1, 1, 1,
437
+ 1, 1, 1, 1, 78, 1, 78, 78,
438
+ 78, 78, 78, 78, 78, 78, 78, 78,
439
+ 78, 78, 78, 78, 78, 78, 78, 78,
440
+ 78, 78, 78, 78, 78, 78, 78, 78,
441
+ 78, 78, 78, 78, 78, 78, 78, 78,
442
+ 78, 78, 78, 78, 78, 78, 78, 78,
443
+ 78, 78, 78, 78, 78, 78, 78, 78,
444
+ 78, 78, 78, 78, 78, 78, 78, 78,
445
+ 78, 78, 78, 78, 78, 78, 78, 78,
446
+ 78, 78, 78, 78, 78, 78, 78, 78,
447
+ 78, 78, 78, 78, 78, 78, 78, 78,
448
+ 78, 78, 78, 78, 78, 78, 78, 78,
449
+ 78, 78, 78, 78, 78, 78, 78, 78,
450
+ 78, 78, 78, 78, 78, 78, 78, 78,
451
+ 78, 78, 78, 78, 78, 78, 78, 78,
452
+ 78, 78, 78, 78, 78, 78, 78, 78,
453
+ 78, 78, 78, 78, 78, 78, 1, 1,
454
+ 1, 1, 1, 1, 1, 1, 1, 1,
455
+ 1, 1, 1, 1, 1, 1, 1, 1,
456
+ 1, 1, 1, 1, 1, 1, 1, 1,
457
+ 1, 1, 1, 1, 1, 1, 1, 1,
458
+ 1, 1, 1, 1, 1, 1, 1, 1,
459
+ 1, 1, 1, 1, 1, 1, 1, 1,
460
+ 1, 1, 1, 1, 1, 1, 1, 1,
461
+ 1, 1, 1, 1, 1, 1, 1, 1,
462
+ 83, 83, 83, 83, 83, 83, 83, 83,
463
+ 83, 83, 83, 83, 83, 83, 83, 83,
464
+ 83, 83, 83, 83, 83, 83, 83, 83,
465
+ 83, 83, 83, 83, 83, 83, 84, 85,
466
+ 85, 85, 85, 85, 85, 85, 85, 85,
467
+ 85, 85, 85, 86, 85, 85, 87, 88,
468
+ 88, 88, 89, 1, 78, 78, 78, 78,
469
+ 78, 78, 78, 78, 78, 78, 78, 78,
470
+ 78, 78, 78, 78, 78, 78, 78, 78,
471
+ 78, 78, 78, 78, 78, 78, 78, 78,
472
+ 78, 78, 78, 78, 78, 78, 78, 78,
473
+ 78, 78, 78, 78, 78, 78, 78, 78,
474
+ 78, 78, 78, 78, 78, 78, 78, 78,
475
+ 78, 78, 78, 78, 78, 78, 78, 78,
476
+ 78, 78, 78, 78, 1, 83, 83, 83,
477
+ 83, 83, 83, 83, 83, 83, 83, 83,
478
+ 83, 83, 83, 83, 83, 83, 83, 83,
479
+ 83, 83, 83, 83, 83, 83, 83, 83,
480
+ 83, 83, 83, 83, 83, 1, 83, 83,
481
+ 83, 83, 83, 83, 83, 83, 83, 83,
482
+ 83, 83, 83, 83, 83, 83, 83, 83,
483
+ 83, 83, 83, 83, 83, 83, 83, 83,
484
+ 83, 83, 83, 83, 83, 83, 83, 83,
485
+ 83, 83, 83, 83, 83, 83, 83, 83,
486
+ 83, 83, 83, 83, 83, 83, 83, 83,
487
+ 83, 83, 83, 83, 83, 83, 83, 83,
488
+ 83, 83, 83, 83, 83, 83, 1, 83,
489
+ 83, 83, 83, 83, 83, 83, 83, 83,
490
+ 83, 83, 83, 83, 83, 83, 83, 83,
491
+ 83, 83, 83, 83, 83, 83, 83, 83,
492
+ 83, 83, 83, 83, 83, 83, 83, 1,
493
+ 85, 85, 85, 85, 85, 85, 85, 85,
494
+ 85, 85, 85, 85, 85, 85, 85, 85,
495
+ 85, 85, 85, 85, 85, 85, 85, 85,
496
+ 85, 85, 85, 85, 85, 85, 85, 85,
497
+ 85, 85, 85, 85, 85, 85, 85, 85,
498
+ 85, 85, 85, 85, 85, 85, 85, 85,
499
+ 1, 85, 85, 85, 85, 85, 85, 85,
500
+ 85, 85, 85, 85, 85, 85, 85, 85,
501
+ 85, 85, 85, 85, 85, 85, 85, 85,
502
+ 85, 85, 85, 85, 85, 85, 85, 85,
503
+ 85, 85, 85, 85, 85, 85, 85, 85,
504
+ 85, 85, 85, 85, 85, 85, 85, 85,
505
+ 85, 85, 85, 85, 85, 85, 85, 85,
506
+ 85, 85, 85, 85, 85, 85, 85, 85,
507
+ 85, 1, 85, 85, 85, 85, 85, 85,
508
+ 85, 85, 85, 85, 85, 85, 85, 85,
509
+ 85, 85, 1, 91, 1, 1, 1, 92,
510
+ 1, 1, 1, 1, 1, 1, 1, 1,
511
+ 1, 1, 1, 1, 1, 1, 1, 1,
512
+ 1, 1, 91, 93, 93, 93, 93, 93,
513
+ 93, 93, 94, 1, 93, 93, 93, 93,
514
+ 93, 1, 93, 93, 93, 93, 93, 93,
515
+ 93, 93, 93, 93, 1, 95, 1, 1,
516
+ 1, 1, 1, 93, 93, 93, 93, 93,
517
+ 93, 93, 93, 93, 93, 93, 93, 93,
518
+ 93, 93, 93, 93, 93, 93, 93, 93,
519
+ 93, 93, 93, 93, 93, 1, 1, 1,
520
+ 93, 93, 93, 93, 93, 93, 93, 93,
521
+ 93, 93, 93, 93, 93, 93, 93, 93,
522
+ 93, 93, 93, 93, 93, 93, 93, 93,
523
+ 93, 93, 93, 93, 93, 93, 93, 93,
524
+ 93, 1, 96, 1, 1, 1, 97, 1,
525
+ 1, 1, 1, 1, 1, 1, 1, 1,
526
+ 1, 1, 1, 1, 1, 1, 1, 1,
527
+ 1, 96, 1, 1, 1, 1, 1, 1,
528
+ 1, 98, 1, 1, 1, 1, 1, 1,
529
+ 1, 1, 1, 1, 1, 1, 1, 1,
530
+ 1, 1, 1, 1, 99, 1, 96, 1,
531
+ 1, 1, 97, 1, 1, 1, 1, 1,
532
+ 1, 1, 1, 1, 1, 1, 1, 1,
533
+ 1, 1, 1, 1, 1, 96, 7, 7,
534
+ 7, 7, 7, 7, 7, 98, 1, 7,
535
+ 7, 7, 7, 7, 1, 7, 7, 7,
536
+ 7, 7, 7, 7, 7, 7, 7, 1,
537
+ 99, 1, 1, 1, 1, 1, 7, 7,
538
+ 7, 7, 7, 7, 7, 7, 7, 7,
539
+ 7, 7, 7, 7, 7, 7, 7, 7,
540
+ 7, 7, 7, 7, 7, 7, 7, 7,
541
+ 1, 1, 1, 7, 7, 7, 7, 7,
542
+ 7, 7, 7, 7, 7, 7, 7, 7,
543
+ 7, 7, 7, 7, 7, 7, 7, 7,
544
+ 7, 7, 7, 7, 7, 7, 7, 7,
545
+ 7, 7, 7, 7, 1, 100, 1, 1,
546
+ 1, 101, 1, 1, 1, 1, 1, 1,
547
+ 1, 1, 1, 1, 1, 1, 1, 1,
548
+ 1, 1, 1, 1, 100, 54, 54, 54,
549
+ 54, 54, 54, 54, 102, 1, 54, 54,
550
+ 54, 54, 54, 1, 54, 54, 54, 54,
551
+ 54, 54, 54, 54, 54, 54, 1, 103,
552
+ 1, 1, 1, 1, 1, 54, 54, 54,
553
+ 54, 54, 54, 54, 54, 54, 54, 54,
554
+ 54, 54, 54, 54, 54, 54, 54, 54,
555
+ 54, 54, 54, 54, 54, 54, 54, 1,
556
+ 1, 1, 54, 54, 54, 54, 54, 54,
557
+ 54, 54, 54, 54, 54, 54, 54, 54,
558
+ 54, 54, 54, 54, 54, 54, 54, 54,
559
+ 54, 54, 54, 54, 54, 54, 54, 54,
560
+ 54, 54, 54, 1, 104, 1, 1, 1,
561
+ 105, 1, 1, 1, 1, 1, 1, 1,
562
+ 1, 1, 1, 1, 1, 1, 1, 1,
563
+ 1, 1, 1, 104, 106, 1, 106, 106,
564
+ 106, 106, 106, 107, 1, 106, 106, 106,
565
+ 106, 106, 1, 106, 106, 106, 106, 106,
566
+ 106, 106, 106, 106, 106, 1, 99, 1,
567
+ 106, 1, 1, 1, 106, 106, 106, 106,
568
+ 106, 106, 106, 106, 106, 106, 106, 106,
569
+ 106, 106, 106, 106, 106, 106, 106, 106,
570
+ 106, 106, 106, 106, 106, 106, 1, 1,
571
+ 1, 106, 106, 106, 106, 106, 106, 106,
572
+ 106, 106, 106, 106, 106, 106, 106, 106,
573
+ 106, 106, 106, 106, 106, 106, 106, 106,
574
+ 106, 106, 106, 106, 106, 106, 106, 106,
575
+ 106, 106, 1, 61, 1, 1, 1, 108,
576
+ 1, 1, 1, 1, 1, 1, 1, 1,
577
+ 1, 1, 1, 1, 1, 1, 1, 1,
578
+ 1, 1, 61, 7, 7, 7, 7, 7,
579
+ 7, 7, 109, 1, 7, 7, 7, 7,
580
+ 7, 1, 7, 7, 7, 7, 7, 7,
581
+ 7, 7, 7, 7, 1, 9, 1, 1,
582
+ 1, 1, 1, 7, 7, 7, 7, 7,
583
+ 7, 7, 7, 7, 7, 7, 7, 7,
584
+ 7, 7, 7, 7, 7, 7, 7, 7,
585
+ 7, 7, 7, 7, 7, 1, 1, 1,
586
+ 7, 7, 7, 7, 7, 7, 7, 7,
587
+ 7, 7, 7, 7, 7, 7, 7, 7,
588
+ 7, 7, 7, 7, 7, 7, 7, 7,
589
+ 7, 7, 7, 7, 7, 7, 7, 7,
590
+ 7, 1, 110, 1, 1, 1, 111, 1,
591
+ 1, 1, 1, 1, 1, 1, 1, 1,
592
+ 1, 1, 1, 1, 1, 1, 1, 1,
593
+ 1, 110, 54, 54, 54, 54, 54, 54,
594
+ 54, 112, 1, 54, 54, 54, 54, 54,
595
+ 1, 54, 54, 54, 54, 54, 54, 54,
596
+ 54, 54, 54, 1, 65, 1, 1, 1,
597
+ 1, 1, 54, 54, 54, 54, 54, 54,
598
+ 54, 54, 54, 54, 54, 54, 54, 54,
599
+ 54, 54, 54, 54, 54, 54, 54, 54,
600
+ 54, 54, 54, 54, 1, 1, 1, 54,
601
+ 54, 54, 54, 54, 54, 54, 54, 54,
602
+ 54, 54, 54, 54, 54, 54, 54, 54,
603
+ 54, 54, 54, 54, 54, 54, 54, 54,
604
+ 54, 54, 54, 54, 54, 54, 54, 54,
605
+ 1, 1, 0,
606
+ ]
607
+
608
+ class << self
609
+ attr_accessor :_trans_targs
610
+ private :_trans_targs, :_trans_targs=
611
+ end
612
+ self._trans_targs = [
613
+ 2, 0, 2, 3, 47, 4, 5, 7,
614
+ 34, 18, 6, 7, 8, 9, 10, 51,
615
+ 12, 31, 9, 10, 12, 31, 11, 13,
616
+ 14, 48, 23, 24, 25, 26, 27, 28,
617
+ 29, 30, 13, 14, 48, 23, 24, 25,
618
+ 26, 27, 28, 29, 30, 15, 17, 49,
619
+ 19, 20, 22, 21, 19, 20, 7, 22,
620
+ 9, 10, 12, 31, 33, 52, 4, 5,
621
+ 34, 18, 36, 37, 36, 54, 39, 40,
622
+ 41, 42, 43, 44, 45, 46, 36, 37,
623
+ 36, 54, 39, 40, 41, 42, 43, 44,
624
+ 45, 46, 38, 4, 5, 47, 34, 18,
625
+ 49, 16, 50, 18, 49, 16, 50, 18,
626
+ 52, 32, 51, 53, 32, 53, 52, 32,
627
+ 53,
628
+ ]
629
+
630
+ class << self
631
+ attr_accessor :_trans_actions
632
+ private :_trans_actions, :_trans_actions=
633
+ end
634
+ self._trans_actions = [
635
+ 1, 0, 0, 2, 3, 0, 0, 4,
636
+ 5, 0, 0, 0, 6, 7, 7, 7,
637
+ 7, 8, 0, 0, 0, 5, 0, 9,
638
+ 9, 10, 9, 9, 9, 9, 9, 9,
639
+ 9, 9, 0, 0, 11, 0, 0, 0,
640
+ 0, 0, 0, 0, 0, 0, 0, 0,
641
+ 0, 0, 5, 0, 12, 12, 13, 14,
642
+ 12, 12, 12, 14, 0, 0, 12, 12,
643
+ 14, 12, 15, 15, 16, 17, 15, 15,
644
+ 15, 15, 15, 15, 15, 15, 0, 0,
645
+ 5, 18, 0, 0, 0, 0, 0, 0,
646
+ 0, 0, 0, 19, 19, 0, 20, 19,
647
+ 21, 21, 22, 21, 23, 23, 24, 23,
648
+ 21, 21, 0, 25, 0, 5, 12, 12,
649
+ 14,
650
+ ]
651
+
652
+ class << self
653
+ attr_accessor :_eof_actions
654
+ private :_eof_actions, :_eof_actions=
655
+ end
656
+ self._eof_actions = [
657
+ 0, 0, 0, 0, 0, 0, 0, 0,
658
+ 0, 0, 0, 0, 0, 0, 0, 0,
659
+ 0, 0, 0, 0, 0, 0, 0, 0,
660
+ 0, 0, 0, 0, 0, 0, 0, 0,
661
+ 0, 0, 0, 0, 0, 0, 0, 0,
662
+ 0, 0, 0, 0, 0, 0, 0, 19,
663
+ 21, 21, 23, 21, 0, 12, 0,
664
+ ]
665
+
666
+ class << self
667
+ attr_accessor :start
668
+ end
669
+ self.start = 1
670
+ class << self
671
+ attr_accessor :first_final
672
+ end
673
+ self.first_final = 47
674
+ class << self
675
+ attr_accessor :error
676
+ end
677
+ self.error = 0
678
+
679
+ class << self
680
+ attr_accessor :en_comment_tail
681
+ end
682
+ self.en_comment_tail = 35
683
+ class << self
684
+ attr_accessor :en_main
685
+ end
686
+ self.en_main = 1
48
687
 
49
- # Use quoted s value if one exists, otherwise use parameter value
50
- if qstr
51
- value = qstr
52
- else
53
- value = s[param_val_s..(p-1)]
688
+ def self.parse(data)
689
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
690
+
691
+ return ContentTypeStruct.new("text", "plain", []) if Mail::Utilities.blank?(data)
692
+ content_type = ContentTypeStruct.new(nil, nil, [])
693
+
694
+ # Parser state
695
+ main_type_s = sub_type_s = param_attr_s = param_attr = nil
696
+ qstr_s = qstr = param_val_s = nil
697
+
698
+ # 5.1 Variables Used by Ragel
699
+ p = 0
700
+ eof = pe = data.length
701
+ stack = []
702
+
703
+ begin
704
+ p ||= 0
705
+ pe ||= data.length
706
+ cs = start
707
+ top = 0
708
+ end
709
+
710
+ begin
711
+ testEof = false
712
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
713
+ _goto_level = 0
714
+ _resume = 10
715
+ _eof_trans = 15
716
+ _again = 20
717
+ _test_eof = 30
718
+ _out = 40
719
+ while true
720
+ if _goto_level <= 0
721
+ if p == pe
722
+ _goto_level = _test_eof
723
+ next
724
+ end
725
+ if cs == 0
726
+ _goto_level = _out
727
+ next
728
+ end
729
+ end
730
+ if _goto_level <= _resume
731
+ _keys = cs << 1
732
+ _inds = _index_offsets[cs]
733
+ _slen = _key_spans[cs]
734
+ _wide = data[p].ord
735
+ _trans = if (_slen > 0 &&
736
+ _trans_keys[_keys] <= _wide &&
737
+ _wide <= _trans_keys[_keys + 1])
738
+ _indicies[_inds + _wide - _trans_keys[_keys]]
739
+ else
740
+ _indicies[_inds + _slen]
741
+ end
742
+ cs = _trans_targs[_trans]
743
+ if _trans_actions[_trans] != 0
744
+ case _trans_actions[_trans]
745
+ when 1
746
+ begin
747
+ main_type_s = p
748
+ end
749
+ when 2
750
+ begin
751
+ content_type.main_type = chars(data, main_type_s, p - 1).downcase
752
+ end
753
+ when 3
754
+ begin
755
+ sub_type_s = p
756
+ end
757
+ when 19
758
+ begin
759
+ content_type.sub_type = chars(data, sub_type_s, p - 1).downcase
760
+ end
761
+ when 4
762
+ begin
763
+ param_attr_s = p
764
+ end
765
+ when 6
766
+ begin
767
+ param_attr = chars(data, param_attr_s, p - 1)
768
+ end
769
+ when 9
770
+ begin
771
+ qstr_s = p
772
+ end
773
+ when 11
774
+ begin
775
+ qstr = chars(data, qstr_s, p - 1)
776
+ end
777
+ when 7
778
+ begin
779
+ param_val_s = p
780
+ end
781
+ when 21
782
+ begin
783
+ if param_attr.nil?
784
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
785
+ end
786
+
787
+ # Use quoted s value if one exists, otherwise use parameter value
788
+ value = qstr || chars(data, param_val_s, p - 1)
789
+
790
+ content_type.parameters << { param_attr => value }
791
+ param_attr = nil
792
+ qstr = nil
793
+ end
794
+ when 12
795
+ begin
796
+ end
797
+ when 15
798
+ begin
799
+ end
800
+ when 5
801
+ begin
802
+ begin
803
+ stack[top] = cs
804
+ top += 1
805
+ cs = 35
806
+ _goto_level = _again
807
+ next
808
+ end
809
+ end
810
+ when 18
811
+ begin
812
+ begin
813
+ top -= 1
814
+ cs = stack[top]
815
+ _goto_level = _again
816
+ next
817
+ end
818
+ end
819
+ when 20
820
+ begin
821
+ content_type.sub_type = chars(data, sub_type_s, p - 1).downcase
822
+ end
823
+ begin
824
+ begin
825
+ stack[top] = cs
826
+ top += 1
827
+ cs = 35
828
+ _goto_level = _again
829
+ next
830
+ end
831
+ end
832
+ when 10
833
+ begin
834
+ qstr_s = p
835
+ end
836
+ begin
837
+ qstr = chars(data, qstr_s, p - 1)
838
+ end
839
+ when 8
840
+ begin
841
+ param_val_s = p
842
+ end
843
+ begin
844
+ begin
845
+ stack[top] = cs
846
+ top += 1
847
+ cs = 35
848
+ _goto_level = _again
849
+ next
850
+ end
851
+ end
852
+ when 25
853
+ begin
854
+ if param_attr.nil?
855
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
856
+ end
857
+
858
+ # Use quoted s value if one exists, otherwise use parameter value
859
+ value = qstr || chars(data, param_val_s, p - 1)
860
+
861
+ content_type.parameters << { param_attr => value }
862
+ param_attr = nil
863
+ qstr = nil
864
+ end
865
+ begin
866
+ begin
867
+ stack[top] = cs
868
+ top += 1
869
+ cs = 35
870
+ _goto_level = _again
871
+ next
872
+ end
873
+ end
874
+ when 13
875
+ begin
876
+ end
877
+ begin
878
+ param_attr_s = p
879
+ end
880
+ when 23
881
+ begin
882
+ end
883
+ begin
884
+ if param_attr.nil?
885
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
886
+ end
887
+
888
+ # Use quoted s value if one exists, otherwise use parameter value
889
+ value = qstr || chars(data, param_val_s, p - 1)
890
+
891
+ content_type.parameters << { param_attr => value }
892
+ param_attr = nil
893
+ qstr = nil
894
+ end
895
+ when 14
896
+ begin
897
+ end
898
+ begin
899
+ begin
900
+ stack[top] = cs
901
+ top += 1
902
+ cs = 35
903
+ _goto_level = _again
904
+ next
905
+ end
906
+ end
907
+ when 16
908
+ begin
909
+ end
910
+ begin
911
+ begin
912
+ stack[top] = cs
913
+ top += 1
914
+ cs = 35
915
+ _goto_level = _again
916
+ next
917
+ end
918
+ end
919
+ when 17
920
+ begin
921
+ end
922
+ begin
923
+ begin
924
+ top -= 1
925
+ cs = stack[top]
926
+ _goto_level = _again
927
+ next
928
+ end
929
+ end
930
+ when 22
931
+ begin
932
+ begin
933
+ stack[top] = cs
934
+ top += 1
935
+ cs = 35
936
+ _goto_level = _again
937
+ next
938
+ end
939
+ end
940
+ begin
941
+ if param_attr.nil?
942
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
943
+ end
944
+
945
+ # Use quoted s value if one exists, otherwise use parameter value
946
+ value = qstr || chars(data, param_val_s, p - 1)
947
+
948
+ content_type.parameters << { param_attr => value }
949
+ param_attr = nil
950
+ qstr = nil
951
+ end
952
+ when 24
953
+ begin
954
+ end
955
+ begin
956
+ begin
957
+ stack[top] = cs
958
+ top += 1
959
+ cs = 35
960
+ _goto_level = _again
961
+ next
962
+ end
963
+ end
964
+ begin
965
+ if param_attr.nil?
966
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
967
+ end
968
+
969
+ # Use quoted s value if one exists, otherwise use parameter value
970
+ value = qstr || chars(data, param_val_s, p - 1)
971
+
972
+ content_type.parameters << { param_attr => value }
973
+ param_attr = nil
974
+ qstr = nil
975
+ end
976
+ end
977
+ end
978
+ end
979
+ if _goto_level <= _again
980
+ if cs == 0
981
+ _goto_level = _out
982
+ next
983
+ end
984
+ p += 1
985
+ if p != pe
986
+ _goto_level = _resume
987
+ next
988
+ end
989
+ end
990
+ if _goto_level <= _test_eof
991
+ if p == eof
992
+ case _eof_actions[cs]
993
+ when 19
994
+ begin
995
+ content_type.sub_type = chars(data, sub_type_s, p - 1).downcase
996
+ end
997
+ when 21
998
+ begin
999
+ if param_attr.nil?
1000
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
1001
+ end
1002
+
1003
+ # Use quoted s value if one exists, otherwise use parameter value
1004
+ value = qstr || chars(data, param_val_s, p - 1)
1005
+
1006
+ content_type.parameters << { param_attr => value }
1007
+ param_attr = nil
1008
+ qstr = nil
1009
+ end
1010
+ when 12
1011
+ begin
1012
+ end
1013
+ when 23
1014
+ begin
1015
+ end
1016
+ begin
1017
+ if param_attr.nil?
1018
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
1019
+ end
1020
+
1021
+ # Use quoted s value if one exists, otherwise use parameter value
1022
+ value = qstr || chars(data, param_val_s, p - 1)
1023
+
1024
+ content_type.parameters << { param_attr => value }
1025
+ param_attr = nil
1026
+ qstr = nil
1027
+ end
1028
+ end
1029
+ end
1030
+ end
1031
+ if _goto_level <= _out
1032
+ break
1033
+ end
54
1034
  end
1035
+ end
55
1036
 
56
- content_type.parameters << { param_attr => value }
57
- param_attr = nil
58
- qstr = nil
1037
+ if false
1038
+ testEof
1039
+ end
59
1040
 
60
- else
61
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, "Failed to process unknown action: #{action}")
1041
+ if p != eof || cs < 47
1042
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentTypeElement, data, p)
62
1043
  end
1044
+
1045
+ content_type
63
1046
  end
64
- content_type
65
1047
  end
66
1048
  end
1049
+ ensure
1050
+ $VERBOSE = original_verbose
67
1051
  end