1# Copyright (c) 2017, The MITRE Corporation. All rights reserved. 2# See LICENSE.txt for complete terms. 3 4import sys 5 6from mixbox.binding_utils import * 7from . import cybox_common 8from . import file_object 9 10 11class ImageFileFormatType(cybox_common.BaseObjectPropertyType): 12 """The ImageFileFormatType specifies image file formats via a union of 13 the ImageFileFormatEnum type and the atomic xs:string type. Its 14 base type is the CybOX Core cybox_common.BaseObjectPropertyType, for 15 permitting complex (i.e. regular-expression based) 16 specifications.""" 17 18 subclass = None 19 superclass = cybox_common.BaseObjectPropertyType 20 def __init__(self, obfuscation_algorithm_ref=None, refanging_transform_type=None, has_changed=None, delimiter='##comma##', pattern_type=None, datatype='string', refanging_transform=None, is_case_sensitive=True, bit_mask=None, appears_random=None, observed_encoding=None, defanging_algorithm_ref=None, is_obfuscated=None, regex_syntax=None, apply_condition='ANY', trend=None, idref=None, is_defanged=None, id=None, condition=None, valueOf_=None): 21 super(ImageFileFormatType, self).__init__(obfuscation_algorithm_ref, refanging_transform_type, has_changed, delimiter, pattern_type, datatype, refanging_transform, is_case_sensitive, bit_mask, appears_random, observed_encoding, defanging_algorithm_ref, is_obfuscated, regex_syntax, apply_condition, trend, idref, is_defanged, id, condition, valueOf_, ) 22 self.valueOf_ = valueOf_ 23 def factory(*args_, **kwargs_): 24 if ImageFileFormatType.subclass: 25 return ImageFileFormatType.subclass(*args_, **kwargs_) 26 else: 27 return ImageFileFormatType(*args_, **kwargs_) 28 factory = staticmethod(factory) 29 def get_valueOf_(self): return self.valueOf_ 30 def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_ 31 def hasContent_(self): 32 if ( 33 self.valueOf_ or 34 super(ImageFileFormatType, self).hasContent_() 35 ): 36 return True 37 else: 38 return False 39 def export(self, lwrite, level, namespace_='ImageFileObj:', name_='ImageFileFormatType', namespacedef_='', pretty_print=True): 40 if pretty_print: 41 eol_ = '\n' 42 else: 43 eol_ = '' 44 showIndent(lwrite, level, pretty_print) 45 lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) 46 already_processed = set() 47 self.exportAttributes(lwrite, level, already_processed, namespace_, name_='ImageFileFormatType') 48 if self.hasContent_(): 49 lwrite('>') 50 lwrite(quote_xml(self.valueOf_)) 51 self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print) 52 lwrite('</%s%s>%s' % (namespace_, name_, eol_)) 53 else: 54 lwrite('/>%s' % (eol_, )) 55 def exportAttributes(self, lwrite, level, already_processed, namespace_='ImageFileObj:', name_='ImageFileFormatType'): 56 super(ImageFileFormatType, self).exportAttributes(lwrite, level, already_processed, namespace_, name_='ImageFileFormatType') 57 def exportChildren(self, lwrite, level, namespace_='ImageFileObj:', name_='ImageFileFormatType', fromsubclass_=False, pretty_print=True): 58 super(ImageFileFormatType, self).exportChildren(lwrite, level, 'ImageFileObj:', name_, True, pretty_print=pretty_print) 59 pass 60 def build(self, node): 61 self.__sourcenode__ = node 62 already_processed = set() 63 self.buildAttributes(node, node.attrib, already_processed) 64 self.valueOf_ = get_all_text_(node) 65 for child in node: 66 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] 67 self.buildChildren(child, node, nodeName_) 68 def buildAttributes(self, node, attrs, already_processed): 69 super(ImageFileFormatType, self).buildAttributes(node, attrs, already_processed) 70 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): 71 pass 72# end class ImageFileFormatType 73 74class ImageFileObjectType(file_object.FileObjectType): 75 """The ImageFileObjectType type is intended to characterize image 76 files.The image_is_compressed field specifies whether the image 77 in the image file is compressed.""" 78 79 subclass = None 80 superclass = file_object.FileObjectType 81 def __init__(self, object_reference=None, Custom_Properties=None, xsi_type=None, is_packed=None, is_masqueraded=None, File_Name=None, File_Path=None, Device_Path=None, Full_Path=None, File_Extension=None, Size_In_Bytes=None, Magic_Number=None, File_Format=None, Hashes=None, Digital_Signatures=None, Modified_Time=None, Accessed_Time=None, Created_Time=None, File_Attributes_List=None, Permissions=None, User_Owner=None, Packer_List=None, Peak_Entropy=None, Sym_Links=None, Byte_Runs=None, Extracted_Features=None, Encryption_Algorithm=None, Decryption_Key=None, Compression_Method=None, Compression_Version=None, Compression_Comment=None, image_is_compressed=None, Image_File_Format=None, Image_Height=None, Image_Width=None, Bits_Per_Pixel=None, Compression_Algorithm=None): 82 super(ImageFileObjectType, self).__init__(object_reference, Custom_Properties, xsi_type, is_packed, is_masqueraded, File_Name, File_Path, Device_Path, Full_Path, File_Extension, Size_In_Bytes, Magic_Number, File_Format, Hashes, Digital_Signatures, Modified_Time, Accessed_Time, Created_Time, File_Attributes_List, Permissions, User_Owner, Packer_List, Peak_Entropy, Sym_Links, Byte_Runs, Extracted_Features, Encryption_Algorithm, Decryption_Key, Compression_Method, Compression_Version, Compression_Comment, ) 83 self.image_is_compressed = _cast(bool, image_is_compressed) 84 self.Image_File_Format = Image_File_Format 85 self.Image_Height = Image_Height 86 self.Image_Width = Image_Width 87 self.Bits_Per_Pixel = Bits_Per_Pixel 88 self.Compression_Algorithm = Compression_Algorithm 89 def factory(*args_, **kwargs_): 90 if ImageFileObjectType.subclass: 91 return ImageFileObjectType.subclass(*args_, **kwargs_) 92 else: 93 return ImageFileObjectType(*args_, **kwargs_) 94 factory = staticmethod(factory) 95 def get_Image_File_Format(self): return self.Image_File_Format 96 def set_Image_File_Format(self, Image_File_Format): self.Image_File_Format = Image_File_Format 97 def validate_ImageFileFormatType(self, value): 98 # Validate type ImageFileFormatType, a restriction on None. 99 pass 100 def get_Image_Height(self): return self.Image_Height 101 def set_Image_Height(self, Image_Height): self.Image_Height = Image_Height 102 def validate_IntegerObjectPropertyType(self, value): 103 # Validate type cybox_common.IntegerObjectPropertyType, a restriction on None. 104 pass 105 def get_Image_Width(self): return self.Image_Width 106 def set_Image_Width(self, Image_Width): self.Image_Width = Image_Width 107 def get_Bits_Per_Pixel(self): return self.Bits_Per_Pixel 108 def set_Bits_Per_Pixel(self, Bits_Per_Pixel): self.Bits_Per_Pixel = Bits_Per_Pixel 109 def validate_PositiveIntegerObjectPropertyType(self, value): 110 # Validate type cybox_common.PositiveIntegerObjectPropertyType, a restriction on None. 111 pass 112 def get_Compression_Algorithm(self): return self.Compression_Algorithm 113 def set_Compression_Algorithm(self, Compression_Algorithm): self.Compression_Algorithm = Compression_Algorithm 114 def validate_StringObjectPropertyType(self, value): 115 # Validate type cybox_common.StringObjectPropertyType, a restriction on None. 116 pass 117 def get_image_is_compressed(self): return self.image_is_compressed 118 def set_image_is_compressed(self, image_is_compressed): self.image_is_compressed = image_is_compressed 119 def hasContent_(self): 120 if ( 121 self.Image_File_Format is not None or 122 self.Image_Height is not None or 123 self.Image_Width is not None or 124 self.Bits_Per_Pixel is not None or 125 self.Compression_Algorithm is not None or 126 super(ImageFileObjectType, self).hasContent_() 127 ): 128 return True 129 else: 130 return False 131 def export(self, lwrite, level, namespace_='ImageFileObj:', name_='ImageFileObjectType', namespacedef_='', pretty_print=True): 132 if pretty_print: 133 eol_ = '\n' 134 else: 135 eol_ = '' 136 showIndent(lwrite, level, pretty_print) 137 lwrite('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', )) 138 already_processed = set() 139 self.exportAttributes(lwrite, level, already_processed, namespace_, name_='ImageFileObjectType') 140 if self.hasContent_(): 141 lwrite('>%s' % (eol_, )) 142 self.exportChildren(lwrite, level + 1, namespace_, name_, pretty_print=pretty_print) 143 showIndent(lwrite, level, pretty_print) 144 lwrite('</%s%s>%s' % (namespace_, name_, eol_)) 145 else: 146 lwrite('/>%s' % (eol_, )) 147 def exportAttributes(self, lwrite, level, already_processed, namespace_='ImageFileObj:', name_='ImageFileObjectType'): 148 super(ImageFileObjectType, self).exportAttributes(lwrite, level, already_processed, namespace_, name_='ImageFileObjectType') 149 if self.image_is_compressed is not None: 150 151 lwrite(' image_is_compressed="%s"' % self.gds_format_boolean(self.image_is_compressed, input_name='image_is_compressed')) 152 def exportChildren(self, lwrite, level, namespace_='ImageFileObj:', name_='ImageFileObjectType', fromsubclass_=False, pretty_print=True): 153 super(ImageFileObjectType, self).exportChildren(lwrite, level, 'ImageFileObj:', name_, True, pretty_print=pretty_print) 154 if pretty_print: 155 eol_ = '\n' 156 else: 157 eol_ = '' 158 if self.Image_File_Format is not None: 159 self.Image_File_Format.export(lwrite, level, 'ImageFileObj:', name_='Image_File_Format', pretty_print=pretty_print) 160 if self.Image_Height is not None: 161 self.Image_Height.export(lwrite, level, 'ImageFileObj:', name_='Image_Height', pretty_print=pretty_print) 162 if self.Image_Width is not None: 163 self.Image_Width.export(lwrite, level, 'ImageFileObj:', name_='Image_Width', pretty_print=pretty_print) 164 if self.Bits_Per_Pixel is not None: 165 self.Bits_Per_Pixel.export(lwrite, level, 'ImageFileObj:', name_='Bits_Per_Pixel', pretty_print=pretty_print) 166 if self.Compression_Algorithm is not None: 167 self.Compression_Algorithm.export(lwrite, level, 'ImageFileObj:', name_='Compression_Algorithm', pretty_print=pretty_print) 168 def build(self, node): 169 self.__sourcenode__ = node 170 already_processed = set() 171 self.buildAttributes(node, node.attrib, already_processed) 172 for child in node: 173 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1] 174 self.buildChildren(child, node, nodeName_) 175 def buildAttributes(self, node, attrs, already_processed): 176 value = find_attr_value_('image_is_compressed', node) 177 if value is not None: 178 179 if value in ('true', '1'): 180 self.image_is_compressed = True 181 elif value in ('false', '0'): 182 self.image_is_compressed = False 183 else: 184 raise_parse_error(node, 'Bad boolean attribute') 185 super(ImageFileObjectType, self).buildAttributes(node, attrs, already_processed) 186 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False): 187 if nodeName_ == 'Image_File_Format': 188 obj_ = ImageFileFormatType.factory() 189 obj_.build(child_) 190 self.set_Image_File_Format(obj_) 191 elif nodeName_ == 'Image_Height': 192 obj_ = cybox_common.IntegerObjectPropertyType.factory() 193 obj_.build(child_) 194 self.set_Image_Height(obj_) 195 elif nodeName_ == 'Image_Width': 196 obj_ = cybox_common.IntegerObjectPropertyType.factory() 197 obj_.build(child_) 198 self.set_Image_Width(obj_) 199 elif nodeName_ == 'Bits_Per_Pixel': 200 obj_ = cybox_common.PositiveIntegerObjectPropertyType.factory() 201 obj_.build(child_) 202 self.set_Bits_Per_Pixel(obj_) 203 elif nodeName_ == 'Compression_Algorithm': 204 obj_ = cybox_common.StringObjectPropertyType.factory() 205 obj_.build(child_) 206 self.set_Compression_Algorithm(obj_) 207 super(ImageFileObjectType, self).buildChildren(child_, node, nodeName_, True) 208# end class ImageFileObjectType 209 210GDSClassesMapping = { 211 'Build_Utility': cybox_common.BuildUtilityType, 212 'Byte_Order': cybox_common.EndiannessType, 213 'Errors': cybox_common.ErrorsType, 214 'File_Extension': cybox_common.StringObjectPropertyType, 215 'Time': cybox_common.TimeType, 216 'Sym_Links': file_object.SymLinksListType, 217 'Certificate_Issuer': cybox_common.StringObjectPropertyType, 218 'Metadata': cybox_common.MetadataType, 219 'Hash': cybox_common.HashType, 220 'Size_In_Bytes': cybox_common.UnsignedLongObjectPropertyType, 221 'Information_Source_Type': cybox_common.ControlledVocabularyStringType, 222 'Compression_Version': cybox_common.StringObjectPropertyType, 223 'Internal_Strings': cybox_common.InternalStringsType, 224 'Fuzzy_Hash_Structure': cybox_common.FuzzyHashStructureType, 225 'Byte_Runs': cybox_common.ByteRunsType, 226 'SubDatum': cybox_common.MetadataType, 227 'Segment_Hash': cybox_common.HashValueType, 228 'Digital_Signature': cybox_common.DigitalSignatureInfoType, 229 'Code_Snippets': cybox_common.CodeSnippetsType, 230 'Value': cybox_common.StringObjectPropertyType, 231 'Length': cybox_common.IntegerObjectPropertyType, 232 'Device_Path': cybox_common.StringObjectPropertyType, 233 'Produced_Time': cybox_common.DateTimeWithPrecisionType, 234 'Reference': cybox_common.ToolReferenceType, 235 'Encoding': cybox_common.ControlledVocabularyStringType, 236 'Internationalization_Settings': cybox_common.InternationalizationSettingsType, 237 'Tool_Configuration': cybox_common.ToolConfigurationType, 238 'Bits_Per_Pixel': cybox_common.PositiveIntegerObjectPropertyType, 239 'English_Translation': cybox_common.StringObjectPropertyType, 240 'Start_Date': cybox_common.DateWithPrecisionType, 241 'Functions': cybox_common.FunctionsType, 242 'String_Value': cybox_common.StringObjectPropertyType, 243 'Build_Utility_Platform_Specification': cybox_common.PlatformSpecificationType, 244 'Compiler_Informal_Description': cybox_common.CompilerInformalDescriptionType, 245 'Start_Time': cybox_common.DateTimeWithPrecisionType, 246 'System': cybox_common.ObjectPropertiesType, 247 'Platform': cybox_common.PlatformSpecificationType, 248 'Version': cybox_common.StringObjectPropertyType, 249 'Usage_Context_Assumptions': cybox_common.UsageContextAssumptionsType, 250 'Created_Time': cybox_common.DateTimeObjectPropertyType, 251 'Type': file_object.PackerClassType, 252 'Compilers': cybox_common.CompilersType, 253 'Digital_Signatures': cybox_common.DigitalSignaturesType, 254 'Tool_Type': cybox_common.ControlledVocabularyStringType, 255 'String': cybox_common.ExtractedStringType, 256 'File_Format': cybox_common.StringObjectPropertyType, 257 'Custom_Properties': cybox_common.CustomPropertiesType, 258 'Build_Information': cybox_common.BuildInformationType, 259 'Detected_Entrypoint_Signatures': file_object.EntryPointSignatureListType, 260 'Tool_Hashes': cybox_common.HashListType, 261 'File_Path': file_object.FilePathType, 262 'Observable_Location': cybox_common.LocationType, 263 'Entry_Point_Signature': file_object.EntryPointSignatureType, 264 'Error_Instances': cybox_common.ErrorInstancesType, 265 'End_Date': cybox_common.DateWithPrecisionType, 266 'Data_Segment': cybox_common.StringObjectPropertyType, 267 'Certificate_Subject': cybox_common.StringObjectPropertyType, 268 'Compensation_Model': cybox_common.CompensationModelType, 269 'Signature': cybox_common.StringObjectPropertyType, 270 'Property': cybox_common.PropertyType, 271 'Strings': cybox_common.ExtractedStringsType, 272 'User_Owner': cybox_common.StringObjectPropertyType, 273 'Contributors': cybox_common.PersonnelType, 274 'Packer': file_object.PackerType, 275 'Code_Snippet': cybox_common.ObjectPropertiesType, 276 'File_Attributes_List': file_object.FileAttributeType, 277 'Configuration_Settings': cybox_common.ConfigurationSettingsType, 278 'Simple_Hash_Value': cybox_common.SimpleHashValueType, 279 'Byte_String_Value': cybox_common.HexBinaryObjectPropertyType, 280 'Received_Time': cybox_common.DateTimeWithPrecisionType, 281 'Instance': cybox_common.ObjectPropertiesType, 282 'Packer_List': file_object.PackerListType, 283 'Import': cybox_common.StringObjectPropertyType, 284 'Accessed_Time': cybox_common.DateTimeObjectPropertyType, 285 'Sym_Link': cybox_common.StringObjectPropertyType, 286 'Identifier': cybox_common.PlatformIdentifierType, 287 'Tool_Specific_Data': cybox_common.ToolSpecificDataType, 288 'Execution_Environment': cybox_common.ExecutionEnvironmentType, 289 'Search_Distance': cybox_common.IntegerObjectPropertyType, 290 'Dependencies': cybox_common.DependenciesType, 291 'Segment_Count': cybox_common.IntegerObjectPropertyType, 292 'Offset': cybox_common.IntegerObjectPropertyType, 293 'Date': cybox_common.DateRangeType, 294 'Hashes': cybox_common.HashListType, 295 'Segments': cybox_common.HashSegmentsType, 296 'Permissions': file_object.FilePermissionsType, 297 'Compression_Algorithm': cybox_common.StringObjectPropertyType, 298 'Language': cybox_common.StringObjectPropertyType, 299 'Usage_Context_Assumption': cybox_common.StructuredTextType, 300 'Block_Hash': cybox_common.FuzzyHashBlockType, 301 'Dependency': cybox_common.DependencyType, 302 'Error': cybox_common.ErrorType, 303 'Trigger_Point': cybox_common.HexBinaryObjectPropertyType, 304 'Environment_Variable': cybox_common.EnvironmentVariableType, 305 'Byte_Run': cybox_common.ByteRunType, 306 'File_System_Offset': cybox_common.IntegerObjectPropertyType, 307 'Image_Offset': cybox_common.IntegerObjectPropertyType, 308 'Imports': cybox_common.ImportsType, 309 'Opcodes': cybox_common.StringObjectPropertyType, 310 'Library': cybox_common.LibraryType, 311 'References': cybox_common.ToolReferencesType, 312 'Encryption_Algorithm': cybox_common.CipherType, 313 'Compilation_Date': cybox_common.DateTimeWithPrecisionType, 314 'Block_Hash_Value': cybox_common.HashValueType, 315 'EP_Jump_Codes': file_object.EPJumpCodeType, 316 'File_Name': cybox_common.StringObjectPropertyType, 317 'Configuration_Setting': cybox_common.ConfigurationSettingType, 318 'Data_Size': cybox_common.DataSizeType, 319 'Observation_Location': cybox_common.LocationType, 320 'Modified_Time': cybox_common.DateTimeObjectPropertyType, 321 'Image_Width': cybox_common.IntegerObjectPropertyType, 322 'Libraries': cybox_common.LibrariesType, 323 'Function': cybox_common.StringObjectPropertyType, 324 'Description': cybox_common.StructuredTextType, 325 'User_Account_Info': cybox_common.ObjectPropertiesType, 326 'Build_Configuration': cybox_common.BuildConfigurationType, 327 'Extracted_Features': cybox_common.ExtractedFeaturesType, 328 'Magic_Number': cybox_common.HexBinaryObjectPropertyType, 329 'Image_Height': cybox_common.IntegerObjectPropertyType, 330 'Decryption_Key': cybox_common.StringObjectPropertyType, 331 'Address': cybox_common.HexBinaryObjectPropertyType, 332 'Search_Within': cybox_common.IntegerObjectPropertyType, 333 'Segment': cybox_common.HashSegmentType, 334 'Full_Path': cybox_common.StringObjectPropertyType, 335 'Compiler': cybox_common.CompilerType, 336 'Name': cybox_common.StringObjectPropertyType, 337 'Depth': cybox_common.IntegerObjectPropertyType, 338 'Entry_Point': cybox_common.HexBinaryObjectPropertyType, 339 'Signature_Description': cybox_common.StringObjectPropertyType, 340 'Block_Size': cybox_common.IntegerObjectPropertyType, 341 'Compiler_Platform_Specification': cybox_common.PlatformSpecificationType, 342 'Compression_Comment': cybox_common.StringObjectPropertyType, 343 'Fuzzy_Hash_Value': cybox_common.FuzzyHashValueType, 344 'Compression_Method': cybox_common.StringObjectPropertyType, 345 'Dependency_Description': cybox_common.StructuredTextType, 346 'End_Time': cybox_common.DateTimeWithPrecisionType, 347 'File': file_object.FileObjectType, 348 'Contributor': cybox_common.ContributorType, 349 'Peak_Entropy': cybox_common.DoubleObjectPropertyType, 350 'Tools': cybox_common.ToolsInformationType, 351 'Tool': cybox_common.ToolInformationType, 352} 353 354USAGE_TEXT = """ 355Usage: python <Parser>.py [ -s ] <in_xml_file> 356""" 357 358def usage(): 359 print(USAGE_TEXT) 360 sys.exit(1) 361 362def get_root_tag(node): 363 tag = Tag_pattern_.match(node.tag).groups()[-1] 364 rootClass = GDSClassesMapping.get(tag) 365 if rootClass is None: 366 rootClass = globals().get(tag) 367 return tag, rootClass 368 369def parse(inFileName): 370 doc = parsexml_(inFileName) 371 rootNode = doc.getroot() 372 rootTag, rootClass = get_root_tag(rootNode) 373 if rootClass is None: 374 rootTag = 'Image_File' 375 rootClass = ImageFileObjectType 376 rootObj = rootClass.factory() 377 rootObj.build(rootNode) 378 # Enable Python to collect the space used by the DOM. 379 doc = None 380 sys.stdout.write('<?xml version="1.0" ?>\n') 381 rootObj.export(sys.stdout.write, 0, name_=rootTag, 382 namespacedef_='', 383 pretty_print=True) 384 return rootObj 385 386def parseEtree(inFileName): 387 doc = parsexml_(inFileName) 388 rootNode = doc.getroot() 389 rootTag, rootClass = get_root_tag(rootNode) 390 if rootClass is None: 391 rootTag = 'Image_File' 392 rootClass = ImageFileObjectType 393 rootObj = rootClass.factory() 394 rootObj.build(rootNode) 395 # Enable Python to collect the space used by the DOM. 396 doc = None 397 rootElement = rootObj.to_etree(None, name_=rootTag) 398 content = etree_.tostring(rootElement, pretty_print=True, 399 xml_declaration=True, encoding="utf-8") 400 sys.stdout.write(content) 401 sys.stdout.write('\n') 402 return rootObj, rootElement 403 404def parseString(inString): 405 from mixbox.vendor.six import StringIO 406 doc = parsexml_(StringIO(inString)) 407 rootNode = doc.getroot() 408 rootTag, rootClass = get_root_tag(rootNode) 409 if rootClass is None: 410 rootTag = 'Image_File' 411 rootClass = ImageFileObjectType 412 rootObj = rootClass.factory() 413 rootObj.build(rootNode) 414 # Enable Python to collect the space used by the DOM. 415 doc = None 416 sys.stdout.write('<?xml version="1.0" ?>\n') 417 rootObj.export(sys.stdout.write, 0, name_="Image_File", 418 namespacedef_='') 419 return rootObj 420 421def main(): 422 args = sys.argv[1:] 423 if len(args) == 1: 424 parse(args[0]) 425 else: 426 usage() 427 428if __name__ == '__main__': 429 #import pdb; pdb.set_trace() 430 main() 431 432__all__ = [ 433 "ImageFileObjectType", 434 "ImageFileFormatType" 435 ] 436