Skip to content

Instantly share code, notes, and snippets.

@dtoma
Created December 11, 2018 09:09
Show Gist options
  • Save dtoma/4f9c74ae6f4f862e5573247c003da80e to your computer and use it in GitHub Desktop.
Save dtoma/4f9c74ae6f4f862e5573247c003da80e to your computer and use it in GitHub Desktop.
Trying out https://kaitai.io/
#include <fstream>
#include <iostream>
#include "kaitai/kaitaistream.h"
#include "exif_le.h"
#include "exif.h"
#include "jpeg.h"
#include <map>
#include <string>
std::map<exif_le_t::ifd_field_t::field_type_enum_t, std::string> type_to_str = {
{exif_le_t::ifd_field_t::field_type_enum_t::FIELD_TYPE_ENUM_BYTE, "FIELD_TYPE_ENUM_BYTE"},
{exif_le_t::ifd_field_t::field_type_enum_t::FIELD_TYPE_ENUM_ASCII_STRING, "FIELD_TYPE_ENUM_ASCII_STRING"},
{exif_le_t::ifd_field_t::field_type_enum_t::FIELD_TYPE_ENUM_WORD, "FIELD_TYPE_ENUM_WORD"},
{exif_le_t::ifd_field_t::field_type_enum_t::FIELD_TYPE_ENUM_DWORD, "FIELD_TYPE_ENUM_DWORD"},
{exif_le_t::ifd_field_t::field_type_enum_t::FIELD_TYPE_ENUM_RATIONAL, "FIELD_TYPE_ENUM_RATIONAL"}
};
std::map<exif_le_t::ifd_field_t::tag_enum_t, std::string> tag_to_str = {
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_WIDTH, "TAG_ENUM_IMAGE_WIDTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_HEIGHT, "TAG_ENUM_IMAGE_HEIGHT"},
{exif_le_t::ifd_field_t::TAG_ENUM_BITS_PER_SAMPLE, "TAG_ENUM_BITS_PER_SAMPLE"},
{exif_le_t::ifd_field_t::TAG_ENUM_COMPRESSION, "TAG_ENUM_COMPRESSION"},
{exif_le_t::ifd_field_t::TAG_ENUM_PHOTOMETRIC_INTERPRETATION, "TAG_ENUM_PHOTOMETRIC_INTERPRETATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_THRESHOLDING, "TAG_ENUM_THRESHOLDING"},
{exif_le_t::ifd_field_t::TAG_ENUM_CELL_WIDTH, "TAG_ENUM_CELL_WIDTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_CELL_LENGTH, "TAG_ENUM_CELL_LENGTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_FILL_ORDER, "TAG_ENUM_FILL_ORDER"},
{exif_le_t::ifd_field_t::TAG_ENUM_DOCUMENT_NAME, "TAG_ENUM_DOCUMENT_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_DESCRIPTION, "TAG_ENUM_IMAGE_DESCRIPTION"},
{exif_le_t::ifd_field_t::TAG_ENUM_MAKE, "TAG_ENUM_MAKE"},
{exif_le_t::ifd_field_t::TAG_ENUM_MODEL, "TAG_ENUM_MODEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_STRIP_OFFSETS, "TAG_ENUM_STRIP_OFFSETS"},
{exif_le_t::ifd_field_t::TAG_ENUM_ORIENTATION, "TAG_ENUM_ORIENTATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_SAMPLES_PER_PIXEL, "TAG_ENUM_SAMPLES_PER_PIXEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_ROWS_PER_STRIP, "TAG_ENUM_ROWS_PER_STRIP"},
{exif_le_t::ifd_field_t::TAG_ENUM_STRIP_BYTE_COUNTS, "TAG_ENUM_STRIP_BYTE_COUNTS"},
{exif_le_t::ifd_field_t::TAG_ENUM_MIN_SAMPLE_VALUE, "TAG_ENUM_MIN_SAMPLE_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_MAX_SAMPLE_VALUE, "TAG_ENUM_MAX_SAMPLE_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_X_RESOLUTION, "TAG_ENUM_X_RESOLUTION"},
{exif_le_t::ifd_field_t::TAG_ENUM_Y_RESOLUTION, "TAG_ENUM_Y_RESOLUTION"},
{exif_le_t::ifd_field_t::TAG_ENUM_PLANAR_CONFIGURATION, "TAG_ENUM_PLANAR_CONFIGURATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_PAGE_NAME, "TAG_ENUM_PAGE_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_X_POSITION, "TAG_ENUM_X_POSITION"},
{exif_le_t::ifd_field_t::TAG_ENUM_Y_POSITION, "TAG_ENUM_Y_POSITION"},
{exif_le_t::ifd_field_t::TAG_ENUM_FREE_OFFSETS, "TAG_ENUM_FREE_OFFSETS"},
{exif_le_t::ifd_field_t::TAG_ENUM_FREE_BYTE_COUNTS, "TAG_ENUM_FREE_BYTE_COUNTS"},
{exif_le_t::ifd_field_t::TAG_ENUM_GRAY_RESPONSE_UNIT, "TAG_ENUM_GRAY_RESPONSE_UNIT"},
{exif_le_t::ifd_field_t::TAG_ENUM_GRAY_RESPONSE_CURVE, "TAG_ENUM_GRAY_RESPONSE_CURVE"},
{exif_le_t::ifd_field_t::TAG_ENUM_T4_OPTIONS, "TAG_ENUM_T4_OPTIONS"},
{exif_le_t::ifd_field_t::TAG_ENUM_T6_OPTIONS, "TAG_ENUM_T6_OPTIONS"},
{exif_le_t::ifd_field_t::TAG_ENUM_RESOLUTION_UNIT, "TAG_ENUM_RESOLUTION_UNIT"},
{exif_le_t::ifd_field_t::TAG_ENUM_PAGE_NUMBER, "TAG_ENUM_PAGE_NUMBER"},
{exif_le_t::ifd_field_t::TAG_ENUM_COLOR_RESPONSE_UNIT, "TAG_ENUM_COLOR_RESPONSE_UNIT"},
{exif_le_t::ifd_field_t::TAG_ENUM_TRANSFER_FUNCTION, "TAG_ENUM_TRANSFER_FUNCTION"},
{exif_le_t::ifd_field_t::TAG_ENUM_SOFTWARE, "TAG_ENUM_SOFTWARE"},
{exif_le_t::ifd_field_t::TAG_ENUM_MODIFY_DATE, "TAG_ENUM_MODIFY_DATE"},
{exif_le_t::ifd_field_t::TAG_ENUM_ARTIST, "TAG_ENUM_ARTIST"},
{exif_le_t::ifd_field_t::TAG_ENUM_HOST_COMPUTER, "TAG_ENUM_HOST_COMPUTER"},
{exif_le_t::ifd_field_t::TAG_ENUM_PREDICTOR, "TAG_ENUM_PREDICTOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_WHITE_POINT, "TAG_ENUM_WHITE_POINT"},
{exif_le_t::ifd_field_t::TAG_ENUM_PRIMARY_CHROMATICITIES, "TAG_ENUM_PRIMARY_CHROMATICITIES"},
{exif_le_t::ifd_field_t::TAG_ENUM_COLOR_MAP, "TAG_ENUM_COLOR_MAP"},
{exif_le_t::ifd_field_t::TAG_ENUM_HALFTONE_HINTS, "TAG_ENUM_HALFTONE_HINTS"},
{exif_le_t::ifd_field_t::TAG_ENUM_TILE_WIDTH, "TAG_ENUM_TILE_WIDTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_TILE_LENGTH, "TAG_ENUM_TILE_LENGTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_TILE_OFFSETS, "TAG_ENUM_TILE_OFFSETS"},
{exif_le_t::ifd_field_t::TAG_ENUM_TILE_BYTE_COUNTS, "TAG_ENUM_TILE_BYTE_COUNTS"},
{exif_le_t::ifd_field_t::TAG_ENUM_BAD_FAX_LINES, "TAG_ENUM_BAD_FAX_LINES"},
{exif_le_t::ifd_field_t::TAG_ENUM_CLEAN_FAX_DATA, "TAG_ENUM_CLEAN_FAX_DATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_CONSECUTIVE_BAD_FAX_LINES, "TAG_ENUM_CONSECUTIVE_BAD_FAX_LINES"},
{exif_le_t::ifd_field_t::TAG_ENUM_SUB_IFD, "TAG_ENUM_SUB_IFD"},
{exif_le_t::ifd_field_t::TAG_ENUM_INK_SET, "TAG_ENUM_INK_SET"},
{exif_le_t::ifd_field_t::TAG_ENUM_INK_NAMES, "TAG_ENUM_INK_NAMES"},
{exif_le_t::ifd_field_t::TAG_ENUM_NUMBEROF_INKS, "TAG_ENUM_NUMBEROF_INKS"},
{exif_le_t::ifd_field_t::TAG_ENUM_DOT_RANGE, "TAG_ENUM_DOT_RANGE"},
{exif_le_t::ifd_field_t::TAG_ENUM_TARGET_PRINTER, "TAG_ENUM_TARGET_PRINTER"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXTRA_SAMPLES, "TAG_ENUM_EXTRA_SAMPLES"},
{exif_le_t::ifd_field_t::TAG_ENUM_SAMPLE_FORMAT, "TAG_ENUM_SAMPLE_FORMAT"},
{exif_le_t::ifd_field_t::TAG_ENUM_S_MIN_SAMPLE_VALUE, "TAG_ENUM_S_MIN_SAMPLE_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_S_MAX_SAMPLE_VALUE, "TAG_ENUM_S_MAX_SAMPLE_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_TRANSFER_RANGE, "TAG_ENUM_TRANSFER_RANGE"},
{exif_le_t::ifd_field_t::TAG_ENUM_CLIP_PATH, "TAG_ENUM_CLIP_PATH"},
{exif_le_t::ifd_field_t::TAG_ENUM_X_CLIP_PATH_UNITS, "TAG_ENUM_X_CLIP_PATH_UNITS"},
{exif_le_t::ifd_field_t::TAG_ENUM_Y_CLIP_PATH_UNITS, "TAG_ENUM_Y_CLIP_PATH_UNITS"},
{exif_le_t::ifd_field_t::TAG_ENUM_INDEXED, "TAG_ENUM_INDEXED"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPEG_TABLES, "TAG_ENUM_JPEG_TABLES"},
{exif_le_t::ifd_field_t::TAG_ENUM_OPI_PROXY, "TAG_ENUM_OPI_PROXY"},
{exif_le_t::ifd_field_t::TAG_ENUM_GLOBAL_PARAMETERS_IFD, "TAG_ENUM_GLOBAL_PARAMETERS_IFD"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_TYPE, "TAG_ENUM_PROFILE_TYPE"},
{exif_le_t::ifd_field_t::TAG_ENUM_FAX_PROFILE, "TAG_ENUM_FAX_PROFILE"},
{exif_le_t::ifd_field_t::TAG_ENUM_CODING_METHODS, "TAG_ENUM_CODING_METHODS"},
{exif_le_t::ifd_field_t::TAG_ENUM_VERSION_YEAR, "TAG_ENUM_VERSION_YEAR"},
{exif_le_t::ifd_field_t::TAG_ENUM_MODE_NUMBER, "TAG_ENUM_MODE_NUMBER"},
{exif_le_t::ifd_field_t::TAG_ENUM_DECODE, "TAG_ENUM_DECODE"},
{exif_le_t::ifd_field_t::TAG_ENUM_DEFAULT_IMAGE_COLOR, "TAG_ENUM_DEFAULT_IMAGE_COLOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_T82_OPTIONS, "TAG_ENUM_T82_OPTIONS"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPEG_TABLES2, "TAG_ENUM_JPEG_TABLES2"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPEG_PROC, "TAG_ENUM_JPEG_PROC"},
{exif_le_t::ifd_field_t::TAG_ENUM_THUMBNAIL_OFFSET, "TAG_ENUM_THUMBNAIL_OFFSET"},
{exif_le_t::ifd_field_t::TAG_ENUM_THUMBNAIL_LENGTH, "TAG_ENUM_THUMBNAIL_LENGTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPEG_RESTART_INTERVAL, "TAG_ENUM_JPEG_RESTART_INTERVAL"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPEG_LOSSLESS_PREDICTORS, "TAG_ENUM_JPEG_LOSSLESS_PREDICTORS"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPEG_POINT_TRANSFORMS, "TAG_ENUM_JPEG_POINT_TRANSFORMS"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPEGQ_TABLES, "TAG_ENUM_JPEGQ_TABLES"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPEGDC_TABLES, "TAG_ENUM_JPEGDC_TABLES"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPEGAC_TABLES, "TAG_ENUM_JPEGAC_TABLES"},
{exif_le_t::ifd_field_t::TAG_ENUM_Y_CB_CR_COEFFICIENTS, "TAG_ENUM_Y_CB_CR_COEFFICIENTS"},
{exif_le_t::ifd_field_t::TAG_ENUM_Y_CB_CR_SUB_SAMPLING, "TAG_ENUM_Y_CB_CR_SUB_SAMPLING"},
{exif_le_t::ifd_field_t::TAG_ENUM_Y_CB_CR_POSITIONING, "TAG_ENUM_Y_CB_CR_POSITIONING"},
{exif_le_t::ifd_field_t::TAG_ENUM_REFERENCE_BLACK_WHITE, "TAG_ENUM_REFERENCE_BLACK_WHITE"},
{exif_le_t::ifd_field_t::TAG_ENUM_STRIP_ROW_COUNTS, "TAG_ENUM_STRIP_ROW_COUNTS"},
{exif_le_t::ifd_field_t::TAG_ENUM_APPLICATION_NOTES, "TAG_ENUM_APPLICATION_NOTES"},
{exif_le_t::ifd_field_t::TAG_ENUM_USPTO_MISCELLANEOUS, "TAG_ENUM_USPTO_MISCELLANEOUS"},
{exif_le_t::ifd_field_t::TAG_ENUM_RELATED_IMAGE_FILE_FORMAT, "TAG_ENUM_RELATED_IMAGE_FILE_FORMAT"},
{exif_le_t::ifd_field_t::TAG_ENUM_RELATED_IMAGE_WIDTH, "TAG_ENUM_RELATED_IMAGE_WIDTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_RELATED_IMAGE_HEIGHT, "TAG_ENUM_RELATED_IMAGE_HEIGHT"},
{exif_le_t::ifd_field_t::TAG_ENUM_RATING, "TAG_ENUM_RATING"},
{exif_le_t::ifd_field_t::TAG_ENUM_XP_DIP_XML, "TAG_ENUM_XP_DIP_XML"},
{exif_le_t::ifd_field_t::TAG_ENUM_STITCH_INFO, "TAG_ENUM_STITCH_INFO"},
{exif_le_t::ifd_field_t::TAG_ENUM_RATING_PERCENT, "TAG_ENUM_RATING_PERCENT"},
{exif_le_t::ifd_field_t::TAG_ENUM_SONY_RAW_FILE_TYPE, "TAG_ENUM_SONY_RAW_FILE_TYPE"},
{exif_le_t::ifd_field_t::TAG_ENUM_LIGHT_FALLOFF_PARAMS, "TAG_ENUM_LIGHT_FALLOFF_PARAMS"},
{exif_le_t::ifd_field_t::TAG_ENUM_CHROMATIC_ABERRATION_CORR_PARAMS, "TAG_ENUM_CHROMATIC_ABERRATION_CORR_PARAMS"},
{exif_le_t::ifd_field_t::TAG_ENUM_DISTORTION_CORR_PARAMS, "TAG_ENUM_DISTORTION_CORR_PARAMS"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_ID, "TAG_ENUM_IMAGE_ID"},
{exif_le_t::ifd_field_t::TAG_ENUM_WANG_TAG1, "TAG_ENUM_WANG_TAG1"},
{exif_le_t::ifd_field_t::TAG_ENUM_WANG_ANNOTATION, "TAG_ENUM_WANG_ANNOTATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_WANG_TAG3, "TAG_ENUM_WANG_TAG3"},
{exif_le_t::ifd_field_t::TAG_ENUM_WANG_TAG4, "TAG_ENUM_WANG_TAG4"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_REFERENCE_POINTS, "TAG_ENUM_IMAGE_REFERENCE_POINTS"},
{exif_le_t::ifd_field_t::TAG_ENUM_REGION_XFORM_TACK_POINT, "TAG_ENUM_REGION_XFORM_TACK_POINT"},
{exif_le_t::ifd_field_t::TAG_ENUM_WARP_QUADRILATERAL, "TAG_ENUM_WARP_QUADRILATERAL"},
{exif_le_t::ifd_field_t::TAG_ENUM_AFFINE_TRANSFORM_MAT, "TAG_ENUM_AFFINE_TRANSFORM_MAT"},
{exif_le_t::ifd_field_t::TAG_ENUM_MATTEING, "TAG_ENUM_MATTEING"},
{exif_le_t::ifd_field_t::TAG_ENUM_DATA_TYPE, "TAG_ENUM_DATA_TYPE"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_DEPTH, "TAG_ENUM_IMAGE_DEPTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_TILE_DEPTH, "TAG_ENUM_TILE_DEPTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_FULL_WIDTH, "TAG_ENUM_IMAGE_FULL_WIDTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_FULL_HEIGHT, "TAG_ENUM_IMAGE_FULL_HEIGHT"},
{exif_le_t::ifd_field_t::TAG_ENUM_TEXTURE_FORMAT, "TAG_ENUM_TEXTURE_FORMAT"},
{exif_le_t::ifd_field_t::TAG_ENUM_WRAP_MODES, "TAG_ENUM_WRAP_MODES"},
{exif_le_t::ifd_field_t::TAG_ENUM_FOV_COT, "TAG_ENUM_FOV_COT"},
{exif_le_t::ifd_field_t::TAG_ENUM_MATRIX_WORLD_TO_SCREEN, "TAG_ENUM_MATRIX_WORLD_TO_SCREEN"},
{exif_le_t::ifd_field_t::TAG_ENUM_MATRIX_WORLD_TO_CAMERA, "TAG_ENUM_MATRIX_WORLD_TO_CAMERA"},
{exif_le_t::ifd_field_t::TAG_ENUM_MODEL2, "TAG_ENUM_MODEL2"},
{exif_le_t::ifd_field_t::TAG_ENUM_CFA_REPEAT_PATTERN_DIM, "TAG_ENUM_CFA_REPEAT_PATTERN_DIM"},
{exif_le_t::ifd_field_t::TAG_ENUM_CFA_PATTERN2, "TAG_ENUM_CFA_PATTERN2"},
{exif_le_t::ifd_field_t::TAG_ENUM_BATTERY_LEVEL, "TAG_ENUM_BATTERY_LEVEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_KODAK_IFD, "TAG_ENUM_KODAK_IFD"},
{exif_le_t::ifd_field_t::TAG_ENUM_COPYRIGHT, "TAG_ENUM_COPYRIGHT"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPOSURE_TIME, "TAG_ENUM_EXPOSURE_TIME"},
{exif_le_t::ifd_field_t::TAG_ENUM_F_NUMBER, "TAG_ENUM_F_NUMBER"},
{exif_le_t::ifd_field_t::TAG_ENUM_MD_FILE_TAG, "TAG_ENUM_MD_FILE_TAG"},
{exif_le_t::ifd_field_t::TAG_ENUM_MD_SCALE_PIXEL, "TAG_ENUM_MD_SCALE_PIXEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_MD_COLOR_TABLE, "TAG_ENUM_MD_COLOR_TABLE"},
{exif_le_t::ifd_field_t::TAG_ENUM_MD_LAB_NAME, "TAG_ENUM_MD_LAB_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_MD_SAMPLE_INFO, "TAG_ENUM_MD_SAMPLE_INFO"},
{exif_le_t::ifd_field_t::TAG_ENUM_MD_PREP_DATE, "TAG_ENUM_MD_PREP_DATE"},
{exif_le_t::ifd_field_t::TAG_ENUM_MD_PREP_TIME, "TAG_ENUM_MD_PREP_TIME"},
{exif_le_t::ifd_field_t::TAG_ENUM_MD_FILE_UNITS, "TAG_ENUM_MD_FILE_UNITS"},
{exif_le_t::ifd_field_t::TAG_ENUM_PIXEL_SCALE, "TAG_ENUM_PIXEL_SCALE"},
{exif_le_t::ifd_field_t::TAG_ENUM_ADVENT_SCALE, "TAG_ENUM_ADVENT_SCALE"},
{exif_le_t::ifd_field_t::TAG_ENUM_ADVENT_REVISION, "TAG_ENUM_ADVENT_REVISION"},
{exif_le_t::ifd_field_t::TAG_ENUM_UIC1_TAG, "TAG_ENUM_UIC1_TAG"},
{exif_le_t::ifd_field_t::TAG_ENUM_UIC2_TAG, "TAG_ENUM_UIC2_TAG"},
{exif_le_t::ifd_field_t::TAG_ENUM_UIC3_TAG, "TAG_ENUM_UIC3_TAG"},
{exif_le_t::ifd_field_t::TAG_ENUM_UIC4_TAG, "TAG_ENUM_UIC4_TAG"},
{exif_le_t::ifd_field_t::TAG_ENUM_IPTC_NAA, "TAG_ENUM_IPTC_NAA"},
{exif_le_t::ifd_field_t::TAG_ENUM_INTERGRAPH_PACKET_DATA, "TAG_ENUM_INTERGRAPH_PACKET_DATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_INTERGRAPH_FLAG_REGISTERS, "TAG_ENUM_INTERGRAPH_FLAG_REGISTERS"},
{exif_le_t::ifd_field_t::TAG_ENUM_INTERGRAPH_MATRIX, "TAG_ENUM_INTERGRAPH_MATRIX"},
{exif_le_t::ifd_field_t::TAG_ENUM_INGR_RESERVED, "TAG_ENUM_INGR_RESERVED"},
{exif_le_t::ifd_field_t::TAG_ENUM_MODEL_TIE_POINT, "TAG_ENUM_MODEL_TIE_POINT"},
{exif_le_t::ifd_field_t::TAG_ENUM_SITE, "TAG_ENUM_SITE"},
{exif_le_t::ifd_field_t::TAG_ENUM_COLOR_SEQUENCE, "TAG_ENUM_COLOR_SEQUENCE"},
{exif_le_t::ifd_field_t::TAG_ENUM_IT8_HEADER, "TAG_ENUM_IT8_HEADER"},
{exif_le_t::ifd_field_t::TAG_ENUM_RASTER_PADDING, "TAG_ENUM_RASTER_PADDING"},
{exif_le_t::ifd_field_t::TAG_ENUM_BITS_PER_RUN_LENGTH, "TAG_ENUM_BITS_PER_RUN_LENGTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_BITS_PER_EXTENDED_RUN_LENGTH, "TAG_ENUM_BITS_PER_EXTENDED_RUN_LENGTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_COLOR_TABLE, "TAG_ENUM_COLOR_TABLE"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_COLOR_INDICATOR, "TAG_ENUM_IMAGE_COLOR_INDICATOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_BACKGROUND_COLOR_INDICATOR, "TAG_ENUM_BACKGROUND_COLOR_INDICATOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_COLOR_VALUE, "TAG_ENUM_IMAGE_COLOR_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_BACKGROUND_COLOR_VALUE, "TAG_ENUM_BACKGROUND_COLOR_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_PIXEL_INTENSITY_RANGE, "TAG_ENUM_PIXEL_INTENSITY_RANGE"},
{exif_le_t::ifd_field_t::TAG_ENUM_TRANSPARENCY_INDICATOR, "TAG_ENUM_TRANSPARENCY_INDICATOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_COLOR_CHARACTERIZATION, "TAG_ENUM_COLOR_CHARACTERIZATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_HC_USAGE, "TAG_ENUM_HC_USAGE"},
{exif_le_t::ifd_field_t::TAG_ENUM_TRAP_INDICATOR, "TAG_ENUM_TRAP_INDICATOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_CMYK_EQUIVALENT, "TAG_ENUM_CMYK_EQUIVALENT"},
{exif_le_t::ifd_field_t::TAG_ENUM_SEM_INFO, "TAG_ENUM_SEM_INFO"},
{exif_le_t::ifd_field_t::TAG_ENUM_AFCP_IPTC, "TAG_ENUM_AFCP_IPTC"},
{exif_le_t::ifd_field_t::TAG_ENUM_PIXEL_MAGIC_JBIG_OPTIONS, "TAG_ENUM_PIXEL_MAGIC_JBIG_OPTIONS"},
{exif_le_t::ifd_field_t::TAG_ENUM_JPL_CARTO_IFD, "TAG_ENUM_JPL_CARTO_IFD"},
{exif_le_t::ifd_field_t::TAG_ENUM_MODEL_TRANSFORM, "TAG_ENUM_MODEL_TRANSFORM"},
{exif_le_t::ifd_field_t::TAG_ENUM_WB_GRGB_LEVELS, "TAG_ENUM_WB_GRGB_LEVELS"},
{exif_le_t::ifd_field_t::TAG_ENUM_LEAF_DATA, "TAG_ENUM_LEAF_DATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_PHOTOSHOP_SETTINGS, "TAG_ENUM_PHOTOSHOP_SETTINGS"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXIF_OFFSET, "TAG_ENUM_EXIF_OFFSET"},
{exif_le_t::ifd_field_t::TAG_ENUM_ICC_PROFILE, "TAG_ENUM_ICC_PROFILE"},
{exif_le_t::ifd_field_t::TAG_ENUM_TIFF_FX_EXTENSIONS, "TAG_ENUM_TIFF_FX_EXTENSIONS"},
{exif_le_t::ifd_field_t::TAG_ENUM_MULTI_PROFILES, "TAG_ENUM_MULTI_PROFILES"},
{exif_le_t::ifd_field_t::TAG_ENUM_SHARED_DATA, "TAG_ENUM_SHARED_DATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_T88_OPTIONS, "TAG_ENUM_T88_OPTIONS"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_LAYER, "TAG_ENUM_IMAGE_LAYER"},
{exif_le_t::ifd_field_t::TAG_ENUM_GEO_TIFF_DIRECTORY, "TAG_ENUM_GEO_TIFF_DIRECTORY"},
{exif_le_t::ifd_field_t::TAG_ENUM_GEO_TIFF_DOUBLE_PARAMS, "TAG_ENUM_GEO_TIFF_DOUBLE_PARAMS"},
{exif_le_t::ifd_field_t::TAG_ENUM_GEO_TIFF_ASCII_PARAMS, "TAG_ENUM_GEO_TIFF_ASCII_PARAMS"},
{exif_le_t::ifd_field_t::TAG_ENUM_JBIG_OPTIONS, "TAG_ENUM_JBIG_OPTIONS"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPOSURE_PROGRAM, "TAG_ENUM_EXPOSURE_PROGRAM"},
{exif_le_t::ifd_field_t::TAG_ENUM_SPECTRAL_SENSITIVITY, "TAG_ENUM_SPECTRAL_SENSITIVITY"},
{exif_le_t::ifd_field_t::TAG_ENUM_GPS_INFO, "TAG_ENUM_GPS_INFO"},
{exif_le_t::ifd_field_t::TAG_ENUM_ISO, "TAG_ENUM_ISO"},
{exif_le_t::ifd_field_t::TAG_ENUM_OPTO_ELECTRIC_CONV_FACTOR, "TAG_ENUM_OPTO_ELECTRIC_CONV_FACTOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_INTERLACE, "TAG_ENUM_INTERLACE"},
{exif_le_t::ifd_field_t::TAG_ENUM_TIME_ZONE_OFFSET, "TAG_ENUM_TIME_ZONE_OFFSET"},
{exif_le_t::ifd_field_t::TAG_ENUM_SELF_TIMER_MODE, "TAG_ENUM_SELF_TIMER_MODE"},
{exif_le_t::ifd_field_t::TAG_ENUM_SENSITIVITY_TYPE, "TAG_ENUM_SENSITIVITY_TYPE"},
{exif_le_t::ifd_field_t::TAG_ENUM_STANDARD_OUTPUT_SENSITIVITY, "TAG_ENUM_STANDARD_OUTPUT_SENSITIVITY"},
{exif_le_t::ifd_field_t::TAG_ENUM_RECOMMENDED_EXPOSURE_INDEX, "TAG_ENUM_RECOMMENDED_EXPOSURE_INDEX"},
{exif_le_t::ifd_field_t::TAG_ENUM_ISO_SPEED, "TAG_ENUM_ISO_SPEED"},
{exif_le_t::ifd_field_t::TAG_ENUM_ISO_SPEED_LATITUDEYYY, "TAG_ENUM_ISO_SPEED_LATITUDEYYY"},
{exif_le_t::ifd_field_t::TAG_ENUM_ISO_SPEED_LATITUDEZZZ, "TAG_ENUM_ISO_SPEED_LATITUDEZZZ"},
{exif_le_t::ifd_field_t::TAG_ENUM_FAX_RECV_PARAMS, "TAG_ENUM_FAX_RECV_PARAMS"},
{exif_le_t::ifd_field_t::TAG_ENUM_FAX_SUB_ADDRESS, "TAG_ENUM_FAX_SUB_ADDRESS"},
{exif_le_t::ifd_field_t::TAG_ENUM_FAX_RECV_TIME, "TAG_ENUM_FAX_RECV_TIME"},
{exif_le_t::ifd_field_t::TAG_ENUM_FEDEX_EDR, "TAG_ENUM_FEDEX_EDR"},
{exif_le_t::ifd_field_t::TAG_ENUM_LEAF_SUB_IFD, "TAG_ENUM_LEAF_SUB_IFD"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXIF_VERSION, "TAG_ENUM_EXIF_VERSION"},
{exif_le_t::ifd_field_t::TAG_ENUM_DATE_TIME_ORIGINAL, "TAG_ENUM_DATE_TIME_ORIGINAL"},
{exif_le_t::ifd_field_t::TAG_ENUM_CREATE_DATE, "TAG_ENUM_CREATE_DATE"},
{exif_le_t::ifd_field_t::TAG_ENUM_GOOGLE_PLUS_UPLOAD_CODE, "TAG_ENUM_GOOGLE_PLUS_UPLOAD_CODE"},
{exif_le_t::ifd_field_t::TAG_ENUM_OFFSET_TIME, "TAG_ENUM_OFFSET_TIME"},
{exif_le_t::ifd_field_t::TAG_ENUM_OFFSET_TIME_ORIGINAL, "TAG_ENUM_OFFSET_TIME_ORIGINAL"},
{exif_le_t::ifd_field_t::TAG_ENUM_OFFSET_TIME_DIGITIZED, "TAG_ENUM_OFFSET_TIME_DIGITIZED"},
{exif_le_t::ifd_field_t::TAG_ENUM_COMPONENTS_CONFIGURATION, "TAG_ENUM_COMPONENTS_CONFIGURATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_COMPRESSED_BITS_PER_PIXEL, "TAG_ENUM_COMPRESSED_BITS_PER_PIXEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_SHUTTER_SPEED_VALUE, "TAG_ENUM_SHUTTER_SPEED_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_APERTURE_VALUE, "TAG_ENUM_APERTURE_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_BRIGHTNESS_VALUE, "TAG_ENUM_BRIGHTNESS_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPOSURE_COMPENSATION, "TAG_ENUM_EXPOSURE_COMPENSATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_MAX_APERTURE_VALUE, "TAG_ENUM_MAX_APERTURE_VALUE"},
{exif_le_t::ifd_field_t::TAG_ENUM_SUBJECT_DISTANCE, "TAG_ENUM_SUBJECT_DISTANCE"},
{exif_le_t::ifd_field_t::TAG_ENUM_METERING_MODE, "TAG_ENUM_METERING_MODE"},
{exif_le_t::ifd_field_t::TAG_ENUM_LIGHT_SOURCE, "TAG_ENUM_LIGHT_SOURCE"},
{exif_le_t::ifd_field_t::TAG_ENUM_FLASH, "TAG_ENUM_FLASH"},
{exif_le_t::ifd_field_t::TAG_ENUM_FOCAL_LENGTH, "TAG_ENUM_FOCAL_LENGTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_FLASH_ENERGY, "TAG_ENUM_FLASH_ENERGY"},
{exif_le_t::ifd_field_t::TAG_ENUM_SPATIAL_FREQUENCY_RESPONSE, "TAG_ENUM_SPATIAL_FREQUENCY_RESPONSE"},
{exif_le_t::ifd_field_t::TAG_ENUM_NOISE, "TAG_ENUM_NOISE"},
{exif_le_t::ifd_field_t::TAG_ENUM_FOCAL_PLANE_X_RESOLUTION, "TAG_ENUM_FOCAL_PLANE_X_RESOLUTION"},
{exif_le_t::ifd_field_t::TAG_ENUM_FOCAL_PLANE_Y_RESOLUTION, "TAG_ENUM_FOCAL_PLANE_Y_RESOLUTION"},
{exif_le_t::ifd_field_t::TAG_ENUM_FOCAL_PLANE_RESOLUTION_UNIT, "TAG_ENUM_FOCAL_PLANE_RESOLUTION_UNIT"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_NUMBER, "TAG_ENUM_IMAGE_NUMBER"},
{exif_le_t::ifd_field_t::TAG_ENUM_SECURITY_CLASSIFICATION, "TAG_ENUM_SECURITY_CLASSIFICATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_HISTORY, "TAG_ENUM_IMAGE_HISTORY"},
{exif_le_t::ifd_field_t::TAG_ENUM_SUBJECT_AREA, "TAG_ENUM_SUBJECT_AREA"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPOSURE_INDEX, "TAG_ENUM_EXPOSURE_INDEX"},
{exif_le_t::ifd_field_t::TAG_ENUM_TIFF_EP_STANDARD_ID, "TAG_ENUM_TIFF_EP_STANDARD_ID"},
{exif_le_t::ifd_field_t::TAG_ENUM_SENSING_METHOD, "TAG_ENUM_SENSING_METHOD"},
{exif_le_t::ifd_field_t::TAG_ENUM_CIP3_DATA_FILE, "TAG_ENUM_CIP3_DATA_FILE"},
{exif_le_t::ifd_field_t::TAG_ENUM_CIP3_SHEET, "TAG_ENUM_CIP3_SHEET"},
{exif_le_t::ifd_field_t::TAG_ENUM_CIP3_SIDE, "TAG_ENUM_CIP3_SIDE"},
{exif_le_t::ifd_field_t::TAG_ENUM_STO_NITS, "TAG_ENUM_STO_NITS"},
{exif_le_t::ifd_field_t::TAG_ENUM_MAKER_NOTE, "TAG_ENUM_MAKER_NOTE"},
{exif_le_t::ifd_field_t::TAG_ENUM_USER_COMMENT, "TAG_ENUM_USER_COMMENT"},
{exif_le_t::ifd_field_t::TAG_ENUM_SUB_SEC_TIME, "TAG_ENUM_SUB_SEC_TIME"},
{exif_le_t::ifd_field_t::TAG_ENUM_SUB_SEC_TIME_ORIGINAL, "TAG_ENUM_SUB_SEC_TIME_ORIGINAL"},
{exif_le_t::ifd_field_t::TAG_ENUM_SUB_SEC_TIME_DIGITIZED, "TAG_ENUM_SUB_SEC_TIME_DIGITIZED"},
{exif_le_t::ifd_field_t::TAG_ENUM_MS_DOCUMENT_TEXT, "TAG_ENUM_MS_DOCUMENT_TEXT"},
{exif_le_t::ifd_field_t::TAG_ENUM_MS_PROPERTY_SET_STORAGE, "TAG_ENUM_MS_PROPERTY_SET_STORAGE"},
{exif_le_t::ifd_field_t::TAG_ENUM_MS_DOCUMENT_TEXT_POSITION, "TAG_ENUM_MS_DOCUMENT_TEXT_POSITION"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_SOURCE_DATA, "TAG_ENUM_IMAGE_SOURCE_DATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_AMBIENT_TEMPERATURE, "TAG_ENUM_AMBIENT_TEMPERATURE"},
{exif_le_t::ifd_field_t::TAG_ENUM_HUMIDITY, "TAG_ENUM_HUMIDITY"},
{exif_le_t::ifd_field_t::TAG_ENUM_PRESSURE, "TAG_ENUM_PRESSURE"},
{exif_le_t::ifd_field_t::TAG_ENUM_WATER_DEPTH, "TAG_ENUM_WATER_DEPTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_ACCELERATION, "TAG_ENUM_ACCELERATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_CAMERA_ELEVATION_ANGLE, "TAG_ENUM_CAMERA_ELEVATION_ANGLE"},
{exif_le_t::ifd_field_t::TAG_ENUM_XP_TITLE, "TAG_ENUM_XP_TITLE"},
{exif_le_t::ifd_field_t::TAG_ENUM_XP_COMMENT, "TAG_ENUM_XP_COMMENT"},
{exif_le_t::ifd_field_t::TAG_ENUM_XP_AUTHOR, "TAG_ENUM_XP_AUTHOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_XP_KEYWORDS, "TAG_ENUM_XP_KEYWORDS"},
{exif_le_t::ifd_field_t::TAG_ENUM_XP_SUBJECT, "TAG_ENUM_XP_SUBJECT"},
{exif_le_t::ifd_field_t::TAG_ENUM_FLASHPIX_VERSION, "TAG_ENUM_FLASHPIX_VERSION"},
{exif_le_t::ifd_field_t::TAG_ENUM_COLOR_SPACE, "TAG_ENUM_COLOR_SPACE"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXIF_IMAGE_WIDTH, "TAG_ENUM_EXIF_IMAGE_WIDTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXIF_IMAGE_HEIGHT, "TAG_ENUM_EXIF_IMAGE_HEIGHT"},
{exif_le_t::ifd_field_t::TAG_ENUM_RELATED_SOUND_FILE, "TAG_ENUM_RELATED_SOUND_FILE"},
{exif_le_t::ifd_field_t::TAG_ENUM_INTEROP_OFFSET, "TAG_ENUM_INTEROP_OFFSET"},
{exif_le_t::ifd_field_t::TAG_ENUM_SAMSUNG_RAW_POINTERS_OFFSET, "TAG_ENUM_SAMSUNG_RAW_POINTERS_OFFSET"},
{exif_le_t::ifd_field_t::TAG_ENUM_SAMSUNG_RAW_POINTERS_LENGTH, "TAG_ENUM_SAMSUNG_RAW_POINTERS_LENGTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_SAMSUNG_RAW_BYTE_ORDER, "TAG_ENUM_SAMSUNG_RAW_BYTE_ORDER"},
{exif_le_t::ifd_field_t::TAG_ENUM_SAMSUNG_RAW_UNKNOWN, "TAG_ENUM_SAMSUNG_RAW_UNKNOWN"},
{exif_le_t::ifd_field_t::TAG_ENUM_FLASH_ENERGY2, "TAG_ENUM_FLASH_ENERGY2"},
{exif_le_t::ifd_field_t::TAG_ENUM_SPATIAL_FREQUENCY_RESPONSE2, "TAG_ENUM_SPATIAL_FREQUENCY_RESPONSE2"},
{exif_le_t::ifd_field_t::TAG_ENUM_NOISE2, "TAG_ENUM_NOISE2"},
{exif_le_t::ifd_field_t::TAG_ENUM_FOCAL_PLANE_X_RESOLUTION2, "TAG_ENUM_FOCAL_PLANE_X_RESOLUTION2"},
{exif_le_t::ifd_field_t::TAG_ENUM_FOCAL_PLANE_Y_RESOLUTION2, "TAG_ENUM_FOCAL_PLANE_Y_RESOLUTION2"},
{exif_le_t::ifd_field_t::TAG_ENUM_FOCAL_PLANE_RESOLUTION_UNIT2, "TAG_ENUM_FOCAL_PLANE_RESOLUTION_UNIT2"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_NUMBER2, "TAG_ENUM_IMAGE_NUMBER2"},
{exif_le_t::ifd_field_t::TAG_ENUM_SECURITY_CLASSIFICATION2, "TAG_ENUM_SECURITY_CLASSIFICATION2"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_HISTORY2, "TAG_ENUM_IMAGE_HISTORY2"},
{exif_le_t::ifd_field_t::TAG_ENUM_SUBJECT_LOCATION, "TAG_ENUM_SUBJECT_LOCATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPOSURE_INDEX2, "TAG_ENUM_EXPOSURE_INDEX2"},
{exif_le_t::ifd_field_t::TAG_ENUM_TIFF_EP_STANDARD_ID2, "TAG_ENUM_TIFF_EP_STANDARD_ID2"},
{exif_le_t::ifd_field_t::TAG_ENUM_SENSING_METHOD2, "TAG_ENUM_SENSING_METHOD2"},
{exif_le_t::ifd_field_t::TAG_ENUM_FILE_SOURCE, "TAG_ENUM_FILE_SOURCE"},
{exif_le_t::ifd_field_t::TAG_ENUM_SCENE_TYPE, "TAG_ENUM_SCENE_TYPE"},
{exif_le_t::ifd_field_t::TAG_ENUM_CFA_PATTERN, "TAG_ENUM_CFA_PATTERN"},
{exif_le_t::ifd_field_t::TAG_ENUM_CUSTOM_RENDERED, "TAG_ENUM_CUSTOM_RENDERED"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPOSURE_MODE, "TAG_ENUM_EXPOSURE_MODE"},
{exif_le_t::ifd_field_t::TAG_ENUM_WHITE_BALANCE, "TAG_ENUM_WHITE_BALANCE"},
{exif_le_t::ifd_field_t::TAG_ENUM_DIGITAL_ZOOM_RATIO, "TAG_ENUM_DIGITAL_ZOOM_RATIO"},
{exif_le_t::ifd_field_t::TAG_ENUM_FOCAL_LENGTH_IN35MM_FORMAT, "TAG_ENUM_FOCAL_LENGTH_IN35MM_FORMAT"},
{exif_le_t::ifd_field_t::TAG_ENUM_SCENE_CAPTURE_TYPE, "TAG_ENUM_SCENE_CAPTURE_TYPE"},
{exif_le_t::ifd_field_t::TAG_ENUM_GAIN_CONTROL, "TAG_ENUM_GAIN_CONTROL"},
{exif_le_t::ifd_field_t::TAG_ENUM_CONTRAST, "TAG_ENUM_CONTRAST"},
{exif_le_t::ifd_field_t::TAG_ENUM_SATURATION, "TAG_ENUM_SATURATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_SHARPNESS, "TAG_ENUM_SHARPNESS"},
{exif_le_t::ifd_field_t::TAG_ENUM_DEVICE_SETTING_DESCRIPTION, "TAG_ENUM_DEVICE_SETTING_DESCRIPTION"},
{exif_le_t::ifd_field_t::TAG_ENUM_SUBJECT_DISTANCE_RANGE, "TAG_ENUM_SUBJECT_DISTANCE_RANGE"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_UNIQUE_ID, "TAG_ENUM_IMAGE_UNIQUE_ID"},
{exif_le_t::ifd_field_t::TAG_ENUM_OWNER_NAME, "TAG_ENUM_OWNER_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_SERIAL_NUMBER, "TAG_ENUM_SERIAL_NUMBER"},
{exif_le_t::ifd_field_t::TAG_ENUM_LENS_INFO, "TAG_ENUM_LENS_INFO"},
{exif_le_t::ifd_field_t::TAG_ENUM_LENS_MAKE, "TAG_ENUM_LENS_MAKE"},
{exif_le_t::ifd_field_t::TAG_ENUM_LENS_MODEL, "TAG_ENUM_LENS_MODEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_LENS_SERIAL_NUMBER, "TAG_ENUM_LENS_SERIAL_NUMBER"},
{exif_le_t::ifd_field_t::TAG_ENUM_GDAL_METADATA, "TAG_ENUM_GDAL_METADATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_GDAL_NO_DATA, "TAG_ENUM_GDAL_NO_DATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_GAMMA, "TAG_ENUM_GAMMA"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPAND_SOFTWARE, "TAG_ENUM_EXPAND_SOFTWARE"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPAND_LENS, "TAG_ENUM_EXPAND_LENS"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPAND_FILM, "TAG_ENUM_EXPAND_FILM"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPAND_FILTER_LENS, "TAG_ENUM_EXPAND_FILTER_LENS"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPAND_SCANNER, "TAG_ENUM_EXPAND_SCANNER"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPAND_FLASH_LAMP, "TAG_ENUM_EXPAND_FLASH_LAMP"},
{exif_le_t::ifd_field_t::TAG_ENUM_PIXEL_FORMAT, "TAG_ENUM_PIXEL_FORMAT"},
{exif_le_t::ifd_field_t::TAG_ENUM_TRANSFORMATION, "TAG_ENUM_TRANSFORMATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_UNCOMPRESSED, "TAG_ENUM_UNCOMPRESSED"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_TYPE, "TAG_ENUM_IMAGE_TYPE"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_WIDTH2, "TAG_ENUM_IMAGE_WIDTH2"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_HEIGHT2, "TAG_ENUM_IMAGE_HEIGHT2"},
{exif_le_t::ifd_field_t::TAG_ENUM_WIDTH_RESOLUTION, "TAG_ENUM_WIDTH_RESOLUTION"},
{exif_le_t::ifd_field_t::TAG_ENUM_HEIGHT_RESOLUTION, "TAG_ENUM_HEIGHT_RESOLUTION"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_OFFSET, "TAG_ENUM_IMAGE_OFFSET"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_BYTE_COUNT, "TAG_ENUM_IMAGE_BYTE_COUNT"},
{exif_le_t::ifd_field_t::TAG_ENUM_ALPHA_OFFSET, "TAG_ENUM_ALPHA_OFFSET"},
{exif_le_t::ifd_field_t::TAG_ENUM_ALPHA_BYTE_COUNT, "TAG_ENUM_ALPHA_BYTE_COUNT"},
{exif_le_t::ifd_field_t::TAG_ENUM_IMAGE_DATA_DISCARD, "TAG_ENUM_IMAGE_DATA_DISCARD"},
{exif_le_t::ifd_field_t::TAG_ENUM_ALPHA_DATA_DISCARD, "TAG_ENUM_ALPHA_DATA_DISCARD"},
{exif_le_t::ifd_field_t::TAG_ENUM_OCE_SCANJOB_DESC, "TAG_ENUM_OCE_SCANJOB_DESC"},
{exif_le_t::ifd_field_t::TAG_ENUM_OCE_APPLICATION_SELECTOR, "TAG_ENUM_OCE_APPLICATION_SELECTOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_OCE_ID_NUMBER, "TAG_ENUM_OCE_ID_NUMBER"},
{exif_le_t::ifd_field_t::TAG_ENUM_OCE_IMAGE_LOGIC, "TAG_ENUM_OCE_IMAGE_LOGIC"},
{exif_le_t::ifd_field_t::TAG_ENUM_ANNOTATIONS, "TAG_ENUM_ANNOTATIONS"},
{exif_le_t::ifd_field_t::TAG_ENUM_PRINT_IM, "TAG_ENUM_PRINT_IM"},
{exif_le_t::ifd_field_t::TAG_ENUM_ORIGINAL_FILE_NAME, "TAG_ENUM_ORIGINAL_FILE_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_USPTO_ORIGINAL_CONTENT_TYPE, "TAG_ENUM_USPTO_ORIGINAL_CONTENT_TYPE"},
{exif_le_t::ifd_field_t::TAG_ENUM_DNG_VERSION, "TAG_ENUM_DNG_VERSION"},
{exif_le_t::ifd_field_t::TAG_ENUM_DNG_BACKWARD_VERSION, "TAG_ENUM_DNG_BACKWARD_VERSION"},
{exif_le_t::ifd_field_t::TAG_ENUM_UNIQUE_CAMERA_MODEL, "TAG_ENUM_UNIQUE_CAMERA_MODEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_LOCALIZED_CAMERA_MODEL, "TAG_ENUM_LOCALIZED_CAMERA_MODEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_CFA_PLANE_COLOR, "TAG_ENUM_CFA_PLANE_COLOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_CFA_LAYOUT, "TAG_ENUM_CFA_LAYOUT"},
{exif_le_t::ifd_field_t::TAG_ENUM_LINEARIZATION_TABLE, "TAG_ENUM_LINEARIZATION_TABLE"},
{exif_le_t::ifd_field_t::TAG_ENUM_BLACK_LEVEL_REPEAT_DIM, "TAG_ENUM_BLACK_LEVEL_REPEAT_DIM"},
{exif_le_t::ifd_field_t::TAG_ENUM_BLACK_LEVEL, "TAG_ENUM_BLACK_LEVEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_BLACK_LEVEL_DELTA_H, "TAG_ENUM_BLACK_LEVEL_DELTA_H"},
{exif_le_t::ifd_field_t::TAG_ENUM_BLACK_LEVEL_DELTA_V, "TAG_ENUM_BLACK_LEVEL_DELTA_V"},
{exif_le_t::ifd_field_t::TAG_ENUM_WHITE_LEVEL, "TAG_ENUM_WHITE_LEVEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_DEFAULT_SCALE, "TAG_ENUM_DEFAULT_SCALE"},
{exif_le_t::ifd_field_t::TAG_ENUM_DEFAULT_CROP_ORIGIN, "TAG_ENUM_DEFAULT_CROP_ORIGIN"},
{exif_le_t::ifd_field_t::TAG_ENUM_DEFAULT_CROP_SIZE, "TAG_ENUM_DEFAULT_CROP_SIZE"},
{exif_le_t::ifd_field_t::TAG_ENUM_COLOR_MATRIX1, "TAG_ENUM_COLOR_MATRIX1"},
{exif_le_t::ifd_field_t::TAG_ENUM_COLOR_MATRIX2, "TAG_ENUM_COLOR_MATRIX2"},
{exif_le_t::ifd_field_t::TAG_ENUM_CAMERA_CALIBRATION1, "TAG_ENUM_CAMERA_CALIBRATION1"},
{exif_le_t::ifd_field_t::TAG_ENUM_CAMERA_CALIBRATION2, "TAG_ENUM_CAMERA_CALIBRATION2"},
{exif_le_t::ifd_field_t::TAG_ENUM_REDUCTION_MATRIX1, "TAG_ENUM_REDUCTION_MATRIX1"},
{exif_le_t::ifd_field_t::TAG_ENUM_REDUCTION_MATRIX2, "TAG_ENUM_REDUCTION_MATRIX2"},
{exif_le_t::ifd_field_t::TAG_ENUM_ANALOG_BALANCE, "TAG_ENUM_ANALOG_BALANCE"},
{exif_le_t::ifd_field_t::TAG_ENUM_AS_SHOT_NEUTRAL, "TAG_ENUM_AS_SHOT_NEUTRAL"},
{exif_le_t::ifd_field_t::TAG_ENUM_AS_SHOT_WHITE_XY, "TAG_ENUM_AS_SHOT_WHITE_XY"},
{exif_le_t::ifd_field_t::TAG_ENUM_BASELINE_EXPOSURE, "TAG_ENUM_BASELINE_EXPOSURE"},
{exif_le_t::ifd_field_t::TAG_ENUM_BASELINE_NOISE, "TAG_ENUM_BASELINE_NOISE"},
{exif_le_t::ifd_field_t::TAG_ENUM_BASELINE_SHARPNESS, "TAG_ENUM_BASELINE_SHARPNESS"},
{exif_le_t::ifd_field_t::TAG_ENUM_BAYER_GREEN_SPLIT, "TAG_ENUM_BAYER_GREEN_SPLIT"},
{exif_le_t::ifd_field_t::TAG_ENUM_LINEAR_RESPONSE_LIMIT, "TAG_ENUM_LINEAR_RESPONSE_LIMIT"},
{exif_le_t::ifd_field_t::TAG_ENUM_CAMERA_SERIAL_NUMBER, "TAG_ENUM_CAMERA_SERIAL_NUMBER"},
{exif_le_t::ifd_field_t::TAG_ENUM_DNG_LENS_INFO, "TAG_ENUM_DNG_LENS_INFO"},
{exif_le_t::ifd_field_t::TAG_ENUM_CHROMA_BLUR_RADIUS, "TAG_ENUM_CHROMA_BLUR_RADIUS"},
{exif_le_t::ifd_field_t::TAG_ENUM_ANTI_ALIAS_STRENGTH, "TAG_ENUM_ANTI_ALIAS_STRENGTH"},
{exif_le_t::ifd_field_t::TAG_ENUM_SHADOW_SCALE, "TAG_ENUM_SHADOW_SCALE"},
{exif_le_t::ifd_field_t::TAG_ENUM_SR2_PRIVATE, "TAG_ENUM_SR2_PRIVATE"},
{exif_le_t::ifd_field_t::TAG_ENUM_MAKER_NOTE_SAFETY, "TAG_ENUM_MAKER_NOTE_SAFETY"},
{exif_le_t::ifd_field_t::TAG_ENUM_RAW_IMAGE_SEGMENTATION, "TAG_ENUM_RAW_IMAGE_SEGMENTATION"},
{exif_le_t::ifd_field_t::TAG_ENUM_CALIBRATION_ILLUMINANT1, "TAG_ENUM_CALIBRATION_ILLUMINANT1"},
{exif_le_t::ifd_field_t::TAG_ENUM_CALIBRATION_ILLUMINANT2, "TAG_ENUM_CALIBRATION_ILLUMINANT2"},
{exif_le_t::ifd_field_t::TAG_ENUM_BEST_QUALITY_SCALE, "TAG_ENUM_BEST_QUALITY_SCALE"},
{exif_le_t::ifd_field_t::TAG_ENUM_RAW_DATA_UNIQUE_ID, "TAG_ENUM_RAW_DATA_UNIQUE_ID"},
{exif_le_t::ifd_field_t::TAG_ENUM_ALIAS_LAYER_METADATA, "TAG_ENUM_ALIAS_LAYER_METADATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_ORIGINAL_RAW_FILE_NAME, "TAG_ENUM_ORIGINAL_RAW_FILE_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_ORIGINAL_RAW_FILE_DATA, "TAG_ENUM_ORIGINAL_RAW_FILE_DATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_ACTIVE_AREA, "TAG_ENUM_ACTIVE_AREA"},
{exif_le_t::ifd_field_t::TAG_ENUM_MASKED_AREAS, "TAG_ENUM_MASKED_AREAS"},
{exif_le_t::ifd_field_t::TAG_ENUM_AS_SHOT_ICC_PROFILE, "TAG_ENUM_AS_SHOT_ICC_PROFILE"},
{exif_le_t::ifd_field_t::TAG_ENUM_AS_SHOT_PRE_PROFILE_MATRIX, "TAG_ENUM_AS_SHOT_PRE_PROFILE_MATRIX"},
{exif_le_t::ifd_field_t::TAG_ENUM_CURRENT_ICC_PROFILE, "TAG_ENUM_CURRENT_ICC_PROFILE"},
{exif_le_t::ifd_field_t::TAG_ENUM_CURRENT_PRE_PROFILE_MATRIX, "TAG_ENUM_CURRENT_PRE_PROFILE_MATRIX"},
{exif_le_t::ifd_field_t::TAG_ENUM_COLORIMETRIC_REFERENCE, "TAG_ENUM_COLORIMETRIC_REFERENCE"},
{exif_le_t::ifd_field_t::TAG_ENUM_S_RAW_TYPE, "TAG_ENUM_S_RAW_TYPE"},
{exif_le_t::ifd_field_t::TAG_ENUM_PANASONIC_TITLE, "TAG_ENUM_PANASONIC_TITLE"},
{exif_le_t::ifd_field_t::TAG_ENUM_PANASONIC_TITLE2, "TAG_ENUM_PANASONIC_TITLE2"},
{exif_le_t::ifd_field_t::TAG_ENUM_CAMERA_CALIBRATION_SIG, "TAG_ENUM_CAMERA_CALIBRATION_SIG"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_CALIBRATION_SIG, "TAG_ENUM_PROFILE_CALIBRATION_SIG"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_IFD, "TAG_ENUM_PROFILE_IFD"},
{exif_le_t::ifd_field_t::TAG_ENUM_AS_SHOT_PROFILE_NAME, "TAG_ENUM_AS_SHOT_PROFILE_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_NOISE_REDUCTION_APPLIED, "TAG_ENUM_NOISE_REDUCTION_APPLIED"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_NAME, "TAG_ENUM_PROFILE_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_HUE_SAT_MAP_DIMS, "TAG_ENUM_PROFILE_HUE_SAT_MAP_DIMS"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_HUE_SAT_MAP_DATA1, "TAG_ENUM_PROFILE_HUE_SAT_MAP_DATA1"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_HUE_SAT_MAP_DATA2, "TAG_ENUM_PROFILE_HUE_SAT_MAP_DATA2"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_TONE_CURVE, "TAG_ENUM_PROFILE_TONE_CURVE"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_EMBED_POLICY, "TAG_ENUM_PROFILE_EMBED_POLICY"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_COPYRIGHT, "TAG_ENUM_PROFILE_COPYRIGHT"},
{exif_le_t::ifd_field_t::TAG_ENUM_FORWARD_MATRIX1, "TAG_ENUM_FORWARD_MATRIX1"},
{exif_le_t::ifd_field_t::TAG_ENUM_FORWARD_MATRIX2, "TAG_ENUM_FORWARD_MATRIX2"},
{exif_le_t::ifd_field_t::TAG_ENUM_PREVIEW_APPLICATION_NAME, "TAG_ENUM_PREVIEW_APPLICATION_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_PREVIEW_APPLICATION_VERSION, "TAG_ENUM_PREVIEW_APPLICATION_VERSION"},
{exif_le_t::ifd_field_t::TAG_ENUM_PREVIEW_SETTINGS_NAME, "TAG_ENUM_PREVIEW_SETTINGS_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_PREVIEW_SETTINGS_DIGEST, "TAG_ENUM_PREVIEW_SETTINGS_DIGEST"},
{exif_le_t::ifd_field_t::TAG_ENUM_PREVIEW_COLOR_SPACE, "TAG_ENUM_PREVIEW_COLOR_SPACE"},
{exif_le_t::ifd_field_t::TAG_ENUM_PREVIEW_DATE_TIME, "TAG_ENUM_PREVIEW_DATE_TIME"},
{exif_le_t::ifd_field_t::TAG_ENUM_RAW_IMAGE_DIGEST, "TAG_ENUM_RAW_IMAGE_DIGEST"},
{exif_le_t::ifd_field_t::TAG_ENUM_ORIGINAL_RAW_FILE_DIGEST, "TAG_ENUM_ORIGINAL_RAW_FILE_DIGEST"},
{exif_le_t::ifd_field_t::TAG_ENUM_SUB_TILE_BLOCK_SIZE, "TAG_ENUM_SUB_TILE_BLOCK_SIZE"},
{exif_le_t::ifd_field_t::TAG_ENUM_ROW_INTERLEAVE_FACTOR, "TAG_ENUM_ROW_INTERLEAVE_FACTOR"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_LOOK_TABLE_DIMS, "TAG_ENUM_PROFILE_LOOK_TABLE_DIMS"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_LOOK_TABLE_DATA, "TAG_ENUM_PROFILE_LOOK_TABLE_DATA"},
{exif_le_t::ifd_field_t::TAG_ENUM_OPCODE_LIST1, "TAG_ENUM_OPCODE_LIST1"},
{exif_le_t::ifd_field_t::TAG_ENUM_OPCODE_LIST2, "TAG_ENUM_OPCODE_LIST2"},
{exif_le_t::ifd_field_t::TAG_ENUM_OPCODE_LIST3, "TAG_ENUM_OPCODE_LIST3"},
{exif_le_t::ifd_field_t::TAG_ENUM_NOISE_PROFILE, "TAG_ENUM_NOISE_PROFILE"},
{exif_le_t::ifd_field_t::TAG_ENUM_TIME_CODES, "TAG_ENUM_TIME_CODES"},
{exif_le_t::ifd_field_t::TAG_ENUM_FRAME_RATE, "TAG_ENUM_FRAME_RATE"},
{exif_le_t::ifd_field_t::TAG_ENUM_T_STOP, "TAG_ENUM_T_STOP"},
{exif_le_t::ifd_field_t::TAG_ENUM_REEL_NAME, "TAG_ENUM_REEL_NAME"},
{exif_le_t::ifd_field_t::TAG_ENUM_ORIGINAL_DEFAULT_FINAL_SIZE, "TAG_ENUM_ORIGINAL_DEFAULT_FINAL_SIZE"},
{exif_le_t::ifd_field_t::TAG_ENUM_ORIGINAL_BEST_QUALITY_SIZE, "TAG_ENUM_ORIGINAL_BEST_QUALITY_SIZE"},
{exif_le_t::ifd_field_t::TAG_ENUM_ORIGINAL_DEFAULT_CROP_SIZE, "TAG_ENUM_ORIGINAL_DEFAULT_CROP_SIZE"},
{exif_le_t::ifd_field_t::TAG_ENUM_CAMERA_LABEL, "TAG_ENUM_CAMERA_LABEL"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_HUE_SAT_MAP_ENCODING, "TAG_ENUM_PROFILE_HUE_SAT_MAP_ENCODING"},
{exif_le_t::ifd_field_t::TAG_ENUM_PROFILE_LOOK_TABLE_ENCODING, "TAG_ENUM_PROFILE_LOOK_TABLE_ENCODING"},
{exif_le_t::ifd_field_t::TAG_ENUM_BASELINE_EXPOSURE_OFFSET, "TAG_ENUM_BASELINE_EXPOSURE_OFFSET"},
{exif_le_t::ifd_field_t::TAG_ENUM_DEFAULT_BLACK_RENDER, "TAG_ENUM_DEFAULT_BLACK_RENDER"},
{exif_le_t::ifd_field_t::TAG_ENUM_NEW_RAW_IMAGE_DIGEST, "TAG_ENUM_NEW_RAW_IMAGE_DIGEST"},
{exif_le_t::ifd_field_t::TAG_ENUM_RAW_TO_PREVIEW_GAIN, "TAG_ENUM_RAW_TO_PREVIEW_GAIN"},
{exif_le_t::ifd_field_t::TAG_ENUM_DEFAULT_USER_CROP, "TAG_ENUM_DEFAULT_USER_CROP"},
{exif_le_t::ifd_field_t::TAG_ENUM_PADDING, "TAG_ENUM_PADDING"},
{exif_le_t::ifd_field_t::TAG_ENUM_OFFSET_SCHEMA, "TAG_ENUM_OFFSET_SCHEMA"},
{exif_le_t::ifd_field_t::TAG_ENUM_OWNER_NAME2, "TAG_ENUM_OWNER_NAME2"},
{exif_le_t::ifd_field_t::TAG_ENUM_SERIAL_NUMBER2, "TAG_ENUM_SERIAL_NUMBER2"},
{exif_le_t::ifd_field_t::TAG_ENUM_LENS, "TAG_ENUM_LENS"},
{exif_le_t::ifd_field_t::TAG_ENUM_KDC_IFD, "TAG_ENUM_KDC_IFD"},
{exif_le_t::ifd_field_t::TAG_ENUM_RAW_FILE, "TAG_ENUM_RAW_FILE"},
{exif_le_t::ifd_field_t::TAG_ENUM_CONVERTER, "TAG_ENUM_CONVERTER"},
{exif_le_t::ifd_field_t::TAG_ENUM_WHITE_BALANCE2, "TAG_ENUM_WHITE_BALANCE2"},
{exif_le_t::ifd_field_t::TAG_ENUM_EXPOSURE, "TAG_ENUM_EXPOSURE"},
{exif_le_t::ifd_field_t::TAG_ENUM_SHADOWS, "TAG_ENUM_SHADOWS"},
{exif_le_t::ifd_field_t::TAG_ENUM_BRIGHTNESS, "TAG_ENUM_BRIGHTNESS"},
{exif_le_t::ifd_field_t::TAG_ENUM_CONTRAST2, "TAG_ENUM_CONTRAST2"},
{exif_le_t::ifd_field_t::TAG_ENUM_SATURATION2, "TAG_ENUM_SATURATION2"},
{exif_le_t::ifd_field_t::TAG_ENUM_SHARPNESS2, "TAG_ENUM_SHARPNESS2"},
{exif_le_t::ifd_field_t::TAG_ENUM_SMOOTHNESS, "TAG_ENUM_SMOOTHNESS"},
{exif_le_t::ifd_field_t::TAG_ENUM_MOIRE_FILTER, "TAG_ENUM_MOIRE_FILTER"},
};
int main() {
std::ifstream is("./img.jpg", std::ifstream::binary);
kaitai::kstream ks(&is);
jpeg_t data(&ks);
auto& segments = *(data.segments());
for (auto* s: segments) {
auto marker = s->marker();
if (marker == jpeg_t::segment_t::marker_enum_t::MARKER_ENUM_APP1) {
auto* app1_data = dynamic_cast<jpeg_t::segment_app1_t*>(s->data());
if (app1_data->_is_null_body()) {
std::cerr << "Empty app1, skip\n";
continue;
}
auto* exif_body = app1_data->body(); // exif_in_jpeg_t
auto* exif_data = exif_body->data(); // exif_t
if (exif_data->_is_null_body()) {
std::cerr << "Empty exif, skip\n";
continue;
}
auto* exif = dynamic_cast<exif_le_t*>(exif_data->body());
std::cout << "EXIF version: " << exif->version() << '\n';
auto* ifd = exif->ifd0();
auto& fields = *(ifd->fields());
for (auto* f : fields) {
auto tag = f->tag();
auto type = f->field_type();
std::cout << tag_to_str[tag] << ": " << f->data() << " (" << type_to_str[type] << ")\n";
}
}
}
}
@dtoma
Copy link
Author

dtoma commented Dec 11, 2018

This only finds a small subset of the EXIF tags in the file. Flickr/online decoders output a lot more information. We also have 2 APP1 sections, the second one being empty (according to my code). Could be where the rest of the information is.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment