diff --git a/CMakeLists.txt b/CMakeLists.txt index 4022c749..df7b6cb5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,6 +77,7 @@ include_directories(SYSTEM duckdb-spatial/src/spatial) set(EXTENSION_SOURCES src/spatial_ref_sys_csv.inc + src/ways_csv.inc src/mobilityduck_extension.cpp src/generated/generated_temporal_udfs.cpp src/generated/generated_type_registration.cpp @@ -121,6 +122,7 @@ set(EXTENSION_SOURCES src/json/tjsonb_in_out.cpp src/h3/th3index.cpp src/cbuffer/tcbuffer.cpp + src/npoint/tnpoint.cpp src/index/rtree_module.cpp src/single_tile_getters.cpp src/index/rtree_index_create_physical.cpp diff --git a/src/generated/generated_temporal_udfs.cpp b/src/generated/generated_temporal_udfs.cpp index ffcd3d95..a4fab6ea 100644 --- a/src/generated/generated_temporal_udfs.cpp +++ b/src/generated/generated_temporal_udfs.cpp @@ -18,6 +18,7 @@ #include "json/tjsonb.hpp" #include "pointcloud/tpcpoint.hpp" #include "pointcloud/tpcpatch.hpp" +#include "npoint/tnpoint.hpp" #include "spatial/spatial_types.hpp" #include "geo_util.hpp" #include "meos_internal.h" @@ -177,6 +178,36 @@ inline Pcpatch *BlobToPcpatch(string_t blob) { memcpy(copy, blob.GetData(), sz); return reinterpret_cast(copy); } +// Self-contained blob<->Npoint/Nsegment marshalling. Npoint {rid,pos} and Nsegment +// {rid,pos1,pos2} are FIXED-size structs (palloc(sizeof)) -> sizeof out. +inline string_t NpointToBlob(Vector &result, Npoint *np) { + string_t out = StringVector::AddStringOrBlob(result, (const char *)np, sizeof(Npoint)); + free(np); + return out; +} +inline string_t NpointToBlobN(Vector &result, Npoint *np, ValidityMask &mask, idx_t idx) { + if (!np) { mask.SetInvalid(idx); return string_t(); } + return NpointToBlob(result, np); +} +inline Npoint *BlobToNpoint(string_t blob) { + Npoint *copy = (Npoint *)malloc(sizeof(Npoint)); + memcpy(copy, blob.GetData(), sizeof(Npoint)); + return copy; +} +inline string_t NsegmentToBlob(Vector &result, Nsegment *ns) { + string_t out = StringVector::AddStringOrBlob(result, (const char *)ns, sizeof(Nsegment)); + free(ns); + return out; +} +inline string_t NsegmentToBlobN(Vector &result, Nsegment *ns, ValidityMask &mask, idx_t idx) { + if (!ns) { mask.SetInvalid(idx); return string_t(); } + return NsegmentToBlob(result, ns); +} +inline Nsegment *BlobToNsegment(string_t blob) { + Nsegment *copy = (Nsegment *)malloc(sizeof(Nsegment)); + memcpy(copy, blob.GetData(), sizeof(Nsegment)); + return copy; +} // Self-contained blob<->STBox/TBox marshalling (FIXED-size structs -> sizeof). inline string_t StboxToBlob(Vector &result, STBox *b) { string_t out = StringVector::AddStringOrBlob(result, (const char *)b, sizeof(STBox)); @@ -5715,6 +5746,19 @@ static void Gen_tjsonb_minus_value(DataChunk &args, ExpressionState &, Vector &r } +// ===== @ingroup meos_npoint_conversion ===== +static void Gen_tgeompoint_to_tnpoint(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tgeompoint_to_tnpoint(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); + }); +} + + // ===== @ingroup meos_pointcloud_accessor ===== static void Gen_tpcpoint_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); @@ -15668,6 +15712,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_above_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("above", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_above_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_above_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("above", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_above_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_above_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_after_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_after_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, LogicalType::BOOLEAN, Gen_after_tspatial_tspatial)); @@ -15675,6 +15721,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("after", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_after_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_after_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_after_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("after", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_after_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("back", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_back_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_back_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("back", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_back_tspatial_tspatial)); @@ -15689,6 +15736,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_back_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("back", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_back_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_back_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("back", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_back_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_back_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_before_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_before_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, LogicalType::BOOLEAN, Gen_before_tspatial_tspatial)); @@ -15696,6 +15745,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("before", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_before_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_before_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_before_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("before", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_before_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("below", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_below_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_below_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("below", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_below_tspatial_tspatial)); @@ -15710,6 +15760,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_below_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("below", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_below_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_below_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("below", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_below_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_below_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("front", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_front_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_tspatial)); @@ -15752,6 +15808,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_tspatial)); @@ -15759,6 +15817,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overback_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("/&>", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overback_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overback_tspatial_tspatial)); @@ -15773,6 +15832,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("/&>", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overback_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overback_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("/&>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overback_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overback_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("/&>", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overback_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_tspatial)); @@ -15780,6 +15841,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_tspatial)); @@ -15794,6 +15856,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overfront", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overfront_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overright_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overright_tspatial_tspatial)); @@ -15836,6 +15904,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overright_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overright_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overright_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overright_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overright_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("right", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_right_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_right_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("right", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_right_tspatial_tspatial)); @@ -15850,6 +15920,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_right_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("right", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_right_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_right_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("right", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_right_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_right_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("above", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_above_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_above_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("above", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_above_stbox_tspatial)); @@ -15864,6 +15936,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_above_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("above", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_above_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_above_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("above", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_above_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_above_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("above", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_above_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_above_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("above", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_above_tspatial_stbox)); @@ -15878,6 +15952,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_above_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("above", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_above_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_above_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("above", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_above_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|>>", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_above_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_after_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_after_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {StboxType::stbox(), TGeometryTypes::tgeometry()}, LogicalType::BOOLEAN, Gen_after_stbox_tspatial)); @@ -15885,6 +15961,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("after", {StboxType::stbox(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_after_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_after_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_after_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("after", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_after_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_after_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_after_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {TGeometryTypes::tgeometry(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_after_tspatial_stbox)); @@ -15892,6 +15969,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("after", {CbufferTypes::tcbuffer(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_after_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_after_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_after_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("after", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_after_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("back", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_back_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_back_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("back", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_back_stbox_tspatial)); @@ -15906,6 +15984,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_back_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("back", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_back_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_back_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("back", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_back_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_back_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("back", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_back_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_back_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("back", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_back_tspatial_stbox)); @@ -15920,6 +16000,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_back_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("back", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_back_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_back_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("back", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_back_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("/>>", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_back_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_before_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_before_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {StboxType::stbox(), TGeometryTypes::tgeometry()}, LogicalType::BOOLEAN, Gen_before_stbox_tspatial)); @@ -15927,6 +16009,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("before", {StboxType::stbox(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_before_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_before_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_before_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("before", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_before_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_before_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_before_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TGeometryTypes::tgeometry(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_before_tspatial_stbox)); @@ -15934,6 +16017,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("before", {CbufferTypes::tcbuffer(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_before_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_before_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_before_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("before", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_before_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("below", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_below_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_below_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("below", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_below_stbox_tspatial)); @@ -15948,6 +16032,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_below_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("below", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_below_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_below_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("below", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_below_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_below_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("below", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_below_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_below_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("below", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_below_tspatial_stbox)); @@ -15962,6 +16048,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_below_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("below", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_below_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_below_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("below", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_below_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<<|", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_below_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("front", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_front_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overabove_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overabove_stbox_tspatial)); @@ -16032,6 +16128,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overabove_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overabove_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overabove_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overabove_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overabove_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_stbox)); @@ -16046,6 +16144,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overabove", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|&>", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overabove_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overafter_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overafter_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {StboxType::stbox(), TGeometryTypes::tgeometry()}, LogicalType::BOOLEAN, Gen_overafter_stbox_tspatial)); @@ -16053,6 +16153,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {StboxType::stbox(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_overafter_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overafter_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overafter_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overafter_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {TGeometryTypes::tgeometry(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_stbox)); @@ -16060,6 +16161,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {CbufferTypes::tcbuffer(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overafter_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overback_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("/&>", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overback_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overback_stbox_tspatial)); @@ -16074,6 +16176,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("/&>", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overback_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overback_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("/&>", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overback_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overback_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("/&>", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overback_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overback_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overback_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {TGeometryTypes::tgeometry(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overback_tspatial_stbox)); @@ -16081,6 +16185,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {CbufferTypes::tcbuffer(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overback_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overback_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overback_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overback", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overback_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overbefore_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overbefore_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {StboxType::stbox(), TGeometryTypes::tgeometry()}, LogicalType::BOOLEAN, Gen_overbefore_stbox_tspatial)); @@ -16088,6 +16193,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {StboxType::stbox(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_overbefore_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overbefore_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overbefore_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overbefore_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TGeometryTypes::tgeometry(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_stbox)); @@ -16095,6 +16201,7 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {CbufferTypes::tcbuffer(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbefore_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overbelow_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overbelow_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overbelow_stbox_tspatial)); @@ -16109,6 +16216,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overbelow_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overbelow_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overbelow_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overbelow_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overbelow_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_stbox)); @@ -16123,6 +16232,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overbelow", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&<|", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overbelow_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overfront", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overfront_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overright_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overright_stbox_tspatial)); @@ -16193,6 +16312,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overright_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overright_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overright_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overright_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overright_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overright_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overright_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overright_tspatial_stbox)); @@ -16207,6 +16328,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overright_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overright_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overright_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overright_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overright_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("right", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_right_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_right_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("right", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_right_stbox_tspatial)); @@ -16221,6 +16344,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_right_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("right", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_right_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_right_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("right", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_right_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_right_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("right", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("right", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_tspatial_stbox)); @@ -16235,6 +16360,8 @@ static void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("right", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("right", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_tspatial_stbox)); } static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { @@ -16252,6 +16379,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_contained_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_contained_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_contained_tspatial_tspatial)); @@ -16266,6 +16395,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_contained_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contained_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contained_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_contains_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_contains_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_contains_tspatial_tspatial)); @@ -16280,6 +16411,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_contains_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contains_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contains_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contains_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contains_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_tspatial)); @@ -16294,6 +16427,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_same_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_same_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_same_tspatial_tspatial)); @@ -16308,6 +16443,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {H3indexTypes::th3index(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_same_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_same_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_same_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_tspatial_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_tspatial_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_tspatial)); @@ -16322,6 +16459,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_stbox)); @@ -16336,6 +16475,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_contained_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_contained_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_contained_stbox_tspatial)); @@ -16350,6 +16491,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_contained_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contained_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contained_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_tspatial_stbox)); @@ -16364,6 +16507,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_contains_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_contains_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_contains_stbox_tspatial)); @@ -16378,6 +16523,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_contains_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contains_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contains_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contains_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contains_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_tspatial_stbox)); @@ -16392,6 +16539,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_tspatial)); @@ -16406,6 +16555,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_stbox)); @@ -16420,6 +16571,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_same_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {StboxType::stbox(), TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_same_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {StboxType::stbox(), TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_same_stbox_tspatial)); @@ -16434,6 +16587,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {StboxType::stbox(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_same_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_same_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {StboxType::stbox(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_same_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_stbox_tspatial)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {StboxType::stbox(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_stbox_tspatial)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_tspatial_stbox)); @@ -16448,6 +16603,8 @@ static void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {H3indexTypes::th3index(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_tspatial_stbox)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {QuadbinTypes::tquadbin(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_tspatial_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {NpointTypes::tnpoint(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_tspatial_stbox)); } static void RegisterGenerated_meos_geo_box_comp(ExtensionLoader &loader) { @@ -16686,6 +16843,7 @@ static void RegisterGenerated_meos_geo_inout(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {H3indexTypes::th3index(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {NpointTypes::tnpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeompointType::tgeompoint()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeogpointType::tgeogpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TGeometryTypes::tgeometry()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); @@ -16693,6 +16851,7 @@ static void RegisterGenerated_meos_geo_inout(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::tcbuffer()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {H3indexTypes::th3index()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {QuadbinTypes::tquadbin()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); @@ -16700,6 +16859,7 @@ static void RegisterGenerated_meos_geo_inout(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {H3indexTypes::th3index(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::tnpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeompointType::tgeompoint()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeogpointType::tgeogpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeometryTypes::tgeometry()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); @@ -16707,6 +16867,7 @@ static void RegisterGenerated_meos_geo_inout(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::tcbuffer()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {H3indexTypes::th3index()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {QuadbinTypes::tquadbin()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); } static void RegisterGenerated_meos_geo_rel_ever(ExtensionLoader &loader) { @@ -16902,6 +17063,7 @@ static void RegisterGenerated_meos_geo_srid(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {CbufferTypes::tcbuffer()}, LogicalType::INTEGER, Gen_tspatial_srid)); RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {H3indexTypes::th3index()}, LogicalType::INTEGER, Gen_tspatial_srid)); RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {QuadbinTypes::tquadbin()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {NpointTypes::tnpoint()}, LogicalType::INTEGER, Gen_tspatial_srid)); RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, TgeompointType::tgeompoint(), Gen_tspatial_set_srid)); RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, TgeogpointType::tgeogpoint(), Gen_tspatial_set_srid)); RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, TGeometryTypes::tgeometry(), Gen_tspatial_set_srid)); @@ -16909,6 +17071,7 @@ static void RegisterGenerated_meos_geo_srid(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, CbufferTypes::tcbuffer(), Gen_tspatial_set_srid)); RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tspatial_set_srid)); RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, QuadbinTypes::tquadbin(), Gen_tspatial_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {NpointTypes::tnpoint(), LogicalType::INTEGER}, NpointTypes::tnpoint(), Gen_tspatial_set_srid)); RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, TgeompointType::tgeompoint(), Gen_tspatial_transform)); RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, TgeogpointType::tgeogpoint(), Gen_tspatial_transform)); RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, TGeometryTypes::tgeometry(), Gen_tspatial_transform)); @@ -16916,6 +17079,7 @@ static void RegisterGenerated_meos_geo_srid(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, CbufferTypes::tcbuffer(), Gen_tspatial_transform)); RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tspatial_transform)); RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, QuadbinTypes::tquadbin(), Gen_tspatial_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {NpointTypes::tnpoint(), LogicalType::INTEGER}, NpointTypes::tnpoint(), Gen_tspatial_transform)); } static void RegisterGenerated_meos_h3_accessor(ExtensionLoader &loader) { @@ -17081,6 +17245,11 @@ static void RegisterGenerated_meos_json_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, TJsonbTypes::tjsonb(), Gen_tjsonb_minus_value)); } +static void RegisterGenerated_meos_npoint_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tnpoint", {TgeompointType::tgeompoint()}, NpointTypes::tnpoint(), Gen_tgeompoint_to_tnpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TgeompointType::tgeompoint()}, NpointTypes::tnpoint(), Gen_tgeompoint_to_tnpoint)); +} + static void RegisterGenerated_meos_pointcloud_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {TPcpointTypes::tpcpoint()}, TPcpointTypes::pcpoint(), Gen_tpcpoint_start_value)); RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {TPcpointTypes::tpcpoint()}, TPcpointTypes::pcpoint(), Gen_tpcpoint_end_value)); @@ -17882,6 +18051,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {TJsonbTypes::tjsonb(), LogicalType::BOOLEAN}, LogicalType::INTERVAL, Gen_temporal_duration)); RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {TPcpointTypes::tpcpoint(), LogicalType::BOOLEAN}, LogicalType::INTERVAL, Gen_temporal_duration)); RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {TPcpatchTypes::tpcpatch(), LogicalType::BOOLEAN}, LogicalType::INTERVAL, Gen_temporal_duration)); + RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {NpointTypes::tnpoint(), LogicalType::BOOLEAN}, LogicalType::INTERVAL, Gen_temporal_duration)); RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {TemporalTypes::tint()}, LogicalType::INTERVAL, Gen_temporal_duration_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {TemporalTypes::tbigint()}, LogicalType::INTERVAL, Gen_temporal_duration_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {TemporalTypes::tbool()}, LogicalType::INTERVAL, Gen_temporal_duration_d)); @@ -17897,6 +18067,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {TJsonbTypes::tjsonb()}, LogicalType::INTERVAL, Gen_temporal_duration_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {TPcpointTypes::tpcpoint()}, LogicalType::INTERVAL, Gen_temporal_duration_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {TPcpatchTypes::tpcpatch()}, LogicalType::INTERVAL, Gen_temporal_duration_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("duration", {NpointTypes::tnpoint()}, LogicalType::INTERVAL, Gen_temporal_duration_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("endInstant", {TemporalTypes::tint()}, TemporalTypes::tint(), Gen_temporal_end_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("endInstant", {TemporalTypes::tbigint()}, TemporalTypes::tbigint(), Gen_temporal_end_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("endInstant", {TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_temporal_end_instant)); @@ -17912,6 +18083,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("endInstant", {TJsonbTypes::tjsonb()}, TJsonbTypes::tjsonb(), Gen_temporal_end_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("endInstant", {TPcpointTypes::tpcpoint()}, TPcpointTypes::tpcpoint(), Gen_temporal_end_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("endInstant", {TPcpatchTypes::tpcpatch()}, TPcpatchTypes::tpcpatch(), Gen_temporal_end_instant)); + RegisterSerializedScalarFunction(loader, ScalarFunction("endInstant", {NpointTypes::tnpoint()}, NpointTypes::tnpoint(), Gen_temporal_end_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("endSequence", {TemporalTypes::tint()}, TemporalTypes::tint(), Gen_temporal_end_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("endSequence", {TemporalTypes::tbigint()}, TemporalTypes::tbigint(), Gen_temporal_end_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("endSequence", {TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_temporal_end_sequence)); @@ -17927,6 +18099,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("endSequence", {TJsonbTypes::tjsonb()}, TJsonbTypes::tjsonb(), Gen_temporal_end_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("endSequence", {TPcpointTypes::tpcpoint()}, TPcpointTypes::tpcpoint(), Gen_temporal_end_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("endSequence", {TPcpatchTypes::tpcpatch()}, TPcpatchTypes::tpcpatch(), Gen_temporal_end_sequence)); + RegisterSerializedScalarFunction(loader, ScalarFunction("endSequence", {NpointTypes::tnpoint()}, NpointTypes::tnpoint(), Gen_temporal_end_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("endTimestamp", {TemporalTypes::tint()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_end_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("endTimestamp", {TemporalTypes::tbigint()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_end_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("endTimestamp", {TemporalTypes::tbool()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_end_timestamptz)); @@ -17942,6 +18115,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("endTimestamp", {TJsonbTypes::tjsonb()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_end_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("endTimestamp", {TPcpointTypes::tpcpoint()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_end_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("endTimestamp", {TPcpatchTypes::tpcpatch()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_end_timestamptz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("endTimestamp", {NpointTypes::tnpoint()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_end_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash", {TemporalTypes::tint()}, LogicalType::UINTEGER, Gen_temporal_hash)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash", {TemporalTypes::tbigint()}, LogicalType::UINTEGER, Gen_temporal_hash)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash", {TemporalTypes::tbool()}, LogicalType::UINTEGER, Gen_temporal_hash)); @@ -17957,6 +18131,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash", {TJsonbTypes::tjsonb()}, LogicalType::UINTEGER, Gen_temporal_hash)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash", {TPcpointTypes::tpcpoint()}, LogicalType::UINTEGER, Gen_temporal_hash)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash", {TPcpatchTypes::tpcpatch()}, LogicalType::UINTEGER, Gen_temporal_hash)); + RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash", {NpointTypes::tnpoint()}, LogicalType::UINTEGER, Gen_temporal_hash)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash_extended", {TemporalTypes::tint(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_temporal_hash_extended)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash_extended", {TemporalTypes::tbigint(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_temporal_hash_extended)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash_extended", {TemporalTypes::tbool(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_temporal_hash_extended)); @@ -17972,6 +18147,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash_extended", {TJsonbTypes::tjsonb(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_temporal_hash_extended)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash_extended", {TPcpointTypes::tpcpoint(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_temporal_hash_extended)); RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash_extended", {TPcpatchTypes::tpcpatch(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_temporal_hash_extended)); + RegisterSerializedScalarFunction(loader, ScalarFunction("temporal_hash_extended", {NpointTypes::tnpoint(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_temporal_hash_extended)); RegisterSerializedScalarFunction(loader, ScalarFunction("instantN", {TemporalTypes::tint(), LogicalType::INTEGER}, TemporalTypes::tint(), Gen_temporal_instant_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("instantN", {TemporalTypes::tbigint(), LogicalType::INTEGER}, TemporalTypes::tbigint(), Gen_temporal_instant_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("instantN", {TemporalTypes::tbool(), LogicalType::INTEGER}, TemporalTypes::tbool(), Gen_temporal_instant_n)); @@ -17987,6 +18163,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("instantN", {TJsonbTypes::tjsonb(), LogicalType::INTEGER}, TJsonbTypes::tjsonb(), Gen_temporal_instant_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("instantN", {TPcpointTypes::tpcpoint(), LogicalType::INTEGER}, TPcpointTypes::tpcpoint(), Gen_temporal_instant_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("instantN", {TPcpatchTypes::tpcpatch(), LogicalType::INTEGER}, TPcpatchTypes::tpcpatch(), Gen_temporal_instant_n)); + RegisterSerializedScalarFunction(loader, ScalarFunction("instantN", {NpointTypes::tnpoint(), LogicalType::INTEGER}, NpointTypes::tnpoint(), Gen_temporal_instant_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("interp", {TemporalTypes::tint()}, LogicalType::VARCHAR, Gen_temporal_interp)); RegisterSerializedScalarFunction(loader, ScalarFunction("interp", {TemporalTypes::tbigint()}, LogicalType::VARCHAR, Gen_temporal_interp)); RegisterSerializedScalarFunction(loader, ScalarFunction("interp", {TemporalTypes::tbool()}, LogicalType::VARCHAR, Gen_temporal_interp)); @@ -18002,6 +18179,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("interp", {TJsonbTypes::tjsonb()}, LogicalType::VARCHAR, Gen_temporal_interp)); RegisterSerializedScalarFunction(loader, ScalarFunction("interp", {TPcpointTypes::tpcpoint()}, LogicalType::VARCHAR, Gen_temporal_interp)); RegisterSerializedScalarFunction(loader, ScalarFunction("interp", {TPcpatchTypes::tpcpatch()}, LogicalType::VARCHAR, Gen_temporal_interp)); + RegisterSerializedScalarFunction(loader, ScalarFunction("interp", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_temporal_interp)); RegisterSerializedScalarFunction(loader, ScalarFunction("lowerInc", {TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_lower_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("lowerInc", {TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_temporal_lower_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("lowerInc", {TemporalTypes::tbool()}, LogicalType::BOOLEAN, Gen_temporal_lower_inc)); @@ -18017,6 +18195,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("lowerInc", {TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_temporal_lower_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("lowerInc", {TPcpointTypes::tpcpoint()}, LogicalType::BOOLEAN, Gen_temporal_lower_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("lowerInc", {TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_lower_inc)); + RegisterSerializedScalarFunction(loader, ScalarFunction("lowerInc", {NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_lower_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("maxInstant", {TemporalTypes::tint()}, TemporalTypes::tint(), Gen_temporal_max_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("maxInstant", {TemporalTypes::tbigint()}, TemporalTypes::tbigint(), Gen_temporal_max_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("maxInstant", {TemporalTypes::tfloat()}, TemporalTypes::tfloat(), Gen_temporal_max_instant)); @@ -18040,6 +18219,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("numInstants", {TJsonbTypes::tjsonb()}, LogicalType::INTEGER, Gen_temporal_num_instants)); RegisterSerializedScalarFunction(loader, ScalarFunction("numInstants", {TPcpointTypes::tpcpoint()}, LogicalType::INTEGER, Gen_temporal_num_instants)); RegisterSerializedScalarFunction(loader, ScalarFunction("numInstants", {TPcpatchTypes::tpcpatch()}, LogicalType::INTEGER, Gen_temporal_num_instants)); + RegisterSerializedScalarFunction(loader, ScalarFunction("numInstants", {NpointTypes::tnpoint()}, LogicalType::INTEGER, Gen_temporal_num_instants)); RegisterSerializedScalarFunction(loader, ScalarFunction("numSequences", {TemporalTypes::tint()}, LogicalType::INTEGER, Gen_temporal_num_sequences)); RegisterSerializedScalarFunction(loader, ScalarFunction("numSequences", {TemporalTypes::tbigint()}, LogicalType::INTEGER, Gen_temporal_num_sequences)); RegisterSerializedScalarFunction(loader, ScalarFunction("numSequences", {TemporalTypes::tbool()}, LogicalType::INTEGER, Gen_temporal_num_sequences)); @@ -18055,6 +18235,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("numSequences", {TJsonbTypes::tjsonb()}, LogicalType::INTEGER, Gen_temporal_num_sequences)); RegisterSerializedScalarFunction(loader, ScalarFunction("numSequences", {TPcpointTypes::tpcpoint()}, LogicalType::INTEGER, Gen_temporal_num_sequences)); RegisterSerializedScalarFunction(loader, ScalarFunction("numSequences", {TPcpatchTypes::tpcpatch()}, LogicalType::INTEGER, Gen_temporal_num_sequences)); + RegisterSerializedScalarFunction(loader, ScalarFunction("numSequences", {NpointTypes::tnpoint()}, LogicalType::INTEGER, Gen_temporal_num_sequences)); RegisterSerializedScalarFunction(loader, ScalarFunction("numTimestamps", {TemporalTypes::tint()}, LogicalType::INTEGER, Gen_temporal_num_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("numTimestamps", {TemporalTypes::tbigint()}, LogicalType::INTEGER, Gen_temporal_num_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("numTimestamps", {TemporalTypes::tbool()}, LogicalType::INTEGER, Gen_temporal_num_timestamps)); @@ -18070,6 +18251,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("numTimestamps", {TJsonbTypes::tjsonb()}, LogicalType::INTEGER, Gen_temporal_num_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("numTimestamps", {TPcpointTypes::tpcpoint()}, LogicalType::INTEGER, Gen_temporal_num_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("numTimestamps", {TPcpatchTypes::tpcpatch()}, LogicalType::INTEGER, Gen_temporal_num_timestamps)); + RegisterSerializedScalarFunction(loader, ScalarFunction("numTimestamps", {NpointTypes::tnpoint()}, LogicalType::INTEGER, Gen_temporal_num_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("sequenceN", {TemporalTypes::tint(), LogicalType::INTEGER}, TemporalTypes::tint(), Gen_temporal_sequence_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("sequenceN", {TemporalTypes::tbigint(), LogicalType::INTEGER}, TemporalTypes::tbigint(), Gen_temporal_sequence_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("sequenceN", {TemporalTypes::tbool(), LogicalType::INTEGER}, TemporalTypes::tbool(), Gen_temporal_sequence_n)); @@ -18085,6 +18267,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("sequenceN", {TJsonbTypes::tjsonb(), LogicalType::INTEGER}, TJsonbTypes::tjsonb(), Gen_temporal_sequence_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("sequenceN", {TPcpointTypes::tpcpoint(), LogicalType::INTEGER}, TPcpointTypes::tpcpoint(), Gen_temporal_sequence_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("sequenceN", {TPcpatchTypes::tpcpatch(), LogicalType::INTEGER}, TPcpatchTypes::tpcpatch(), Gen_temporal_sequence_n)); + RegisterSerializedScalarFunction(loader, ScalarFunction("sequenceN", {NpointTypes::tnpoint(), LogicalType::INTEGER}, NpointTypes::tnpoint(), Gen_temporal_sequence_n)); RegisterSerializedScalarFunction(loader, ScalarFunction("startInstant", {TemporalTypes::tint()}, TemporalTypes::tint(), Gen_temporal_start_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("startInstant", {TemporalTypes::tbigint()}, TemporalTypes::tbigint(), Gen_temporal_start_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("startInstant", {TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_temporal_start_instant)); @@ -18100,6 +18283,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("startInstant", {TJsonbTypes::tjsonb()}, TJsonbTypes::tjsonb(), Gen_temporal_start_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("startInstant", {TPcpointTypes::tpcpoint()}, TPcpointTypes::tpcpoint(), Gen_temporal_start_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("startInstant", {TPcpatchTypes::tpcpatch()}, TPcpatchTypes::tpcpatch(), Gen_temporal_start_instant)); + RegisterSerializedScalarFunction(loader, ScalarFunction("startInstant", {NpointTypes::tnpoint()}, NpointTypes::tnpoint(), Gen_temporal_start_instant)); RegisterSerializedScalarFunction(loader, ScalarFunction("startSequence", {TemporalTypes::tint()}, TemporalTypes::tint(), Gen_temporal_start_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("startSequence", {TemporalTypes::tbigint()}, TemporalTypes::tbigint(), Gen_temporal_start_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("startSequence", {TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_temporal_start_sequence)); @@ -18115,6 +18299,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("startSequence", {TJsonbTypes::tjsonb()}, TJsonbTypes::tjsonb(), Gen_temporal_start_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("startSequence", {TPcpointTypes::tpcpoint()}, TPcpointTypes::tpcpoint(), Gen_temporal_start_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("startSequence", {TPcpatchTypes::tpcpatch()}, TPcpatchTypes::tpcpatch(), Gen_temporal_start_sequence)); + RegisterSerializedScalarFunction(loader, ScalarFunction("startSequence", {NpointTypes::tnpoint()}, NpointTypes::tnpoint(), Gen_temporal_start_sequence)); RegisterSerializedScalarFunction(loader, ScalarFunction("startTimestamp", {TemporalTypes::tint()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_start_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("startTimestamp", {TemporalTypes::tbigint()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_start_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("startTimestamp", {TemporalTypes::tbool()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_start_timestamptz)); @@ -18130,6 +18315,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("startTimestamp", {TJsonbTypes::tjsonb()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_start_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("startTimestamp", {TPcpointTypes::tpcpoint()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_start_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("startTimestamp", {TPcpatchTypes::tpcpatch()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_start_timestamptz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("startTimestamp", {NpointTypes::tnpoint()}, LogicalType::TIMESTAMP_TZ, Gen_temporal_start_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempSubtype", {TemporalTypes::tint()}, LogicalType::VARCHAR, Gen_temporal_subtype)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempSubtype", {TemporalTypes::tbigint()}, LogicalType::VARCHAR, Gen_temporal_subtype)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempSubtype", {TemporalTypes::tbool()}, LogicalType::VARCHAR, Gen_temporal_subtype)); @@ -18145,6 +18331,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("tempSubtype", {TJsonbTypes::tjsonb()}, LogicalType::VARCHAR, Gen_temporal_subtype)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempSubtype", {TPcpointTypes::tpcpoint()}, LogicalType::VARCHAR, Gen_temporal_subtype)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempSubtype", {TPcpatchTypes::tpcpatch()}, LogicalType::VARCHAR, Gen_temporal_subtype)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tempSubtype", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_temporal_subtype)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempBasetype", {TemporalTypes::tint()}, LogicalType::VARCHAR, Gen_temporal_basetype_name)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempBasetype", {TemporalTypes::tbigint()}, LogicalType::VARCHAR, Gen_temporal_basetype_name)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempBasetype", {TemporalTypes::tbool()}, LogicalType::VARCHAR, Gen_temporal_basetype_name)); @@ -18160,6 +18347,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("tempBasetype", {TJsonbTypes::tjsonb()}, LogicalType::VARCHAR, Gen_temporal_basetype_name)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempBasetype", {TPcpointTypes::tpcpoint()}, LogicalType::VARCHAR, Gen_temporal_basetype_name)); RegisterSerializedScalarFunction(loader, ScalarFunction("tempBasetype", {TPcpatchTypes::tpcpatch()}, LogicalType::VARCHAR, Gen_temporal_basetype_name)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tempBasetype", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_temporal_basetype_name)); RegisterSerializedScalarFunction(loader, ScalarFunction("upperInc", {TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_upper_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("upperInc", {TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_temporal_upper_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("upperInc", {TemporalTypes::tbool()}, LogicalType::BOOLEAN, Gen_temporal_upper_inc)); @@ -18175,6 +18363,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("upperInc", {TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_temporal_upper_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("upperInc", {TPcpointTypes::tpcpoint()}, LogicalType::BOOLEAN, Gen_temporal_upper_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("upperInc", {TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_upper_inc)); + RegisterSerializedScalarFunction(loader, ScalarFunction("upperInc", {NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_upper_inc)); RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {TemporalTypes::tfloat()}, LogicalType::DOUBLE, Gen_tfloat_end_value)); RegisterSerializedScalarFunction(loader, ScalarFunction("minValue", {TemporalTypes::tfloat()}, LogicalType::DOUBLE, Gen_tfloat_min_value)); RegisterSerializedScalarFunction(loader, ScalarFunction("maxValue", {TemporalTypes::tfloat()}, LogicalType::DOUBLE, Gen_tfloat_max_value)); @@ -18206,6 +18395,7 @@ static void RegisterGenerated_meos_temporal_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("timestamps", {TgeogpointType::tgeogpoint()}, LogicalType::LIST(LogicalType::TIMESTAMP_TZ), Gen_temporal_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("timestamps", {H3indexTypes::th3index()}, LogicalType::LIST(LogicalType::TIMESTAMP_TZ), Gen_temporal_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("timestamps", {TJsonbTypes::tjsonb()}, LogicalType::LIST(LogicalType::TIMESTAMP_TZ), Gen_temporal_timestamps)); + RegisterSerializedScalarFunction(loader, ScalarFunction("timestamps", {NpointTypes::tnpoint()}, LogicalType::LIST(LogicalType::TIMESTAMP_TZ), Gen_temporal_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("timestamps", {TPcpointTypes::tpcpoint()}, LogicalType::LIST(LogicalType::TIMESTAMP_TZ), Gen_temporal_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("timestamps", {TPcpatchTypes::tpcpatch()}, LogicalType::LIST(LogicalType::TIMESTAMP_TZ), Gen_temporal_timestamps)); RegisterSerializedScalarFunction(loader, ScalarFunction("timestamps", {QuadbinTypes::tquadbin()}, LogicalType::LIST(LogicalType::TIMESTAMP_TZ), Gen_temporal_timestamps)); @@ -18221,7 +18411,7 @@ static void RegisterGenerated_meos_temporal_analytics_similarity(ExtensionLoader loader.RegisterFunction(TableFunction("dynTimeWarpPath", {type, type}, PathExec_temporal_dyntimewarp_path, PathBindFn_temporal_dyntimewarp_path, PathInit_temporal_dyntimewarp_path)); loader.RegisterFunction(TableFunction("frechetDistancePath", {type, type}, PathExec_temporal_frechet_path, PathBindFn_temporal_frechet_path, PathInit_temporal_frechet_path)); } - for (auto &type : std::vector{TgeompointType::tgeompoint(), TgeogpointType::tgeogpoint(), TGeometryTypes::tgeometry(), TGeographyTypes::tgeography(), CbufferTypes::tcbuffer(), H3indexTypes::th3index(), QuadbinTypes::tquadbin()}) { + for (auto &type : std::vector{TgeompointType::tgeompoint(), TgeogpointType::tgeogpoint(), TGeometryTypes::tgeometry(), TGeographyTypes::tgeography(), CbufferTypes::tcbuffer(), H3indexTypes::th3index(), QuadbinTypes::tquadbin(), NpointTypes::tnpoint()}) { loader.RegisterFunction(TableFunction("dynTimeWarpPath", {type, type}, PathExec_temporal_dyntimewarp_path, PathBindFn_temporal_dyntimewarp_path, PathInit_temporal_dyntimewarp_path)); loader.RegisterFunction(TableFunction("frechetDistancePath", {type, type}, PathExec_temporal_frechet_path, PathBindFn_temporal_frechet_path, PathInit_temporal_frechet_path)); } @@ -18361,6 +18551,7 @@ static void RegisterGenerated_meos_temporal_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("after", {CbufferTypes::tcbuffer(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_after_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_after_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_after_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("after", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_after_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {SpanTypes::tstzspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_after_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {SpanTypes::tstzspan(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_after_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {SpanTypes::tstzspan(), TemporalTypes::tbool()}, LogicalType::BOOLEAN, Gen_after_tstzspan_temporal)); @@ -18373,6 +18564,7 @@ static void RegisterGenerated_meos_temporal_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("after", {SpanTypes::tstzspan(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_after_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {SpanTypes::tstzspan(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_after_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("after", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_after_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("after", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_after_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TemporalTypes::tint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_before_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TemporalTypes::tbigint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_before_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TemporalTypes::tbool(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_before_temporal_tstzspan)); @@ -18385,6 +18577,7 @@ static void RegisterGenerated_meos_temporal_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("before", {CbufferTypes::tcbuffer(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_before_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_before_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_before_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("before", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_before_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {SpanTypes::tstzspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_before_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {SpanTypes::tstzspan(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_before_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {SpanTypes::tstzspan(), TemporalTypes::tbool()}, LogicalType::BOOLEAN, Gen_before_tstzspan_temporal)); @@ -18397,6 +18590,7 @@ static void RegisterGenerated_meos_temporal_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("before", {SpanTypes::tstzspan(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_before_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {SpanTypes::tstzspan(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_before_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("before", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_before_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("before", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_before_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("left", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_left_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("<<", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_left_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("left", {SpanTypes::floatspan(), TemporalTypes::tfloat()}, LogicalType::BOOLEAN, Gen_left_numspan_tnumber)); @@ -18417,6 +18611,7 @@ static void RegisterGenerated_meos_temporal_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {CbufferTypes::tcbuffer(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overafter_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overafter_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overafter_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overafter_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {SpanTypes::tstzspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_overafter_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {SpanTypes::tstzspan(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_overafter_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {SpanTypes::tstzspan(), TemporalTypes::tbool()}, LogicalType::BOOLEAN, Gen_overafter_tstzspan_temporal)); @@ -18429,6 +18624,7 @@ static void RegisterGenerated_meos_temporal_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {SpanTypes::tstzspan(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_overafter_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {SpanTypes::tstzspan(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overafter_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overafter_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overafter_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TemporalTypes::tint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overbefore_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TemporalTypes::tbigint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overbefore_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TemporalTypes::tbool(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overbefore_temporal_tstzspan)); @@ -18441,6 +18637,7 @@ static void RegisterGenerated_meos_temporal_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {CbufferTypes::tcbuffer(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overbefore_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overbefore_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overbefore_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overbefore_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {SpanTypes::tstzspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_overbefore_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {SpanTypes::tstzspan(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_overbefore_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {SpanTypes::tstzspan(), TemporalTypes::tbool()}, LogicalType::BOOLEAN, Gen_overbefore_tstzspan_temporal)); @@ -18453,6 +18650,7 @@ static void RegisterGenerated_meos_temporal_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {SpanTypes::tstzspan(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_overbefore_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {SpanTypes::tstzspan(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overbefore_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overbefore_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overbefore_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overleft", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_overleft_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("&<", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_overleft_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("overleft", {SpanTypes::floatspan(), TemporalTypes::tfloat()}, LogicalType::BOOLEAN, Gen_overleft_numspan_tnumber)); @@ -18613,6 +18811,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_adjacent_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_adjacent_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_adjacent_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_adjacent_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_adjacent_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_adjacent_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_adjacent_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {TemporalTypes::tfloat(), SpanTypes::floatspan()}, LogicalType::BOOLEAN, Gen_adjacent_tnumber_numspan)); @@ -18641,6 +18841,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {SpanTypes::tstzspan(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_adjacent_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_adjacent_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_adjacent_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_adjacent_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_adjacent_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_contained_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_contained_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {SpanTypes::floatspan(), TemporalTypes::tfloat()}, LogicalType::BOOLEAN, Gen_contained_numspan_tnumber)); @@ -18669,6 +18871,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contained_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contained_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contained_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contained_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contained_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_contained_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_contained_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TemporalTypes::tfloat(), SpanTypes::floatspan()}, LogicalType::BOOLEAN, Gen_contained_tnumber_numspan)); @@ -18697,6 +18901,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {SpanTypes::tstzspan(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_contained_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contained_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contained_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_contains_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_contains_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {SpanTypes::floatspan(), TemporalTypes::tfloat()}, LogicalType::BOOLEAN, Gen_contains_numspan_tnumber)); @@ -18725,6 +18931,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contains_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contains_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contains_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contains_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_contains_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_contains_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_contains_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TemporalTypes::tfloat(), SpanTypes::floatspan()}, LogicalType::BOOLEAN, Gen_contains_tnumber_numspan)); @@ -18753,6 +18961,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {SpanTypes::tstzspan(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_contains_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contains_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_contains_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contains_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contains_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_overlaps_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_overlaps_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {SpanTypes::floatspan(), TemporalTypes::tfloat()}, LogicalType::BOOLEAN, Gen_overlaps_numspan_tnumber)); @@ -18781,6 +18991,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overlaps_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overlaps_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overlaps_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overlaps_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_overlaps_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_overlaps_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_overlaps_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TemporalTypes::tfloat(), SpanTypes::floatspan()}, LogicalType::BOOLEAN, Gen_overlaps_tnumber_numspan)); @@ -18809,6 +19021,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {SpanTypes::tstzspan(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_overlaps_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overlaps_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_overlaps_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overlaps_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_overlaps_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_same_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {SpanTypes::intspan(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_same_numspan_tnumber)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {SpanTypes::floatspan(), TemporalTypes::tfloat()}, LogicalType::BOOLEAN, Gen_same_numspan_tnumber)); @@ -18837,6 +19051,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_same_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_same_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_same_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_same_temporal_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, LogicalType::BOOLEAN, Gen_same_temporal_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_same_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {TemporalTypes::tint(), SpanTypes::intspan()}, LogicalType::BOOLEAN, Gen_same_tnumber_numspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TemporalTypes::tfloat(), SpanTypes::floatspan()}, LogicalType::BOOLEAN, Gen_same_tnumber_numspan)); @@ -18865,6 +19081,8 @@ static void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {SpanTypes::tstzspan(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_same_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("same", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_same_tstzspan_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {SpanTypes::tstzspan(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_same_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_tstzspan_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {SpanTypes::tstzspan(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_tstzspan_temporal)); } static void RegisterGenerated_meos_temporal_bool(ExtensionLoader &loader) { @@ -19217,6 +19435,7 @@ static void RegisterGenerated_meos_temporal_comp_temp(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_teq_temporal_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_teq_temporal_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, TemporalTypes::tbool(), Gen_teq_temporal_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, TemporalTypes::tbool(), Gen_teq_temporal_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {LogicalType::VARCHAR, TemporalTypes::ttext()}, TemporalTypes::tbool(), Gen_teq_text_ttext)); RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tbool(), Gen_teq_tfloat_float)); RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TemporalTypes::tint(), LogicalType::INTEGER}, TemporalTypes::tbool(), Gen_teq_tint_int)); @@ -19278,6 +19497,7 @@ static void RegisterGenerated_meos_temporal_comp_temp(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_tne_temporal_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_tne_temporal_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, TemporalTypes::tbool(), Gen_tne_temporal_temporal)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, TemporalTypes::tbool(), Gen_tne_temporal_temporal)); RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {LogicalType::VARCHAR, TemporalTypes::ttext()}, TemporalTypes::tbool(), Gen_tne_text_ttext)); RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tbool(), Gen_tne_tfloat_float)); RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TemporalTypes::tint(), LogicalType::INTEGER}, TemporalTypes::tbool(), Gen_tne_tint_int)); @@ -19300,6 +19520,7 @@ static void RegisterGenerated_meos_temporal_comp_trad(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("cmp", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::INTEGER, Gen_temporal_cmp)); RegisterSerializedScalarFunction(loader, ScalarFunction("cmp", {TPcpointTypes::tpcpoint(), TPcpointTypes::tpcpoint()}, LogicalType::INTEGER, Gen_temporal_cmp)); RegisterSerializedScalarFunction(loader, ScalarFunction("cmp", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::INTEGER, Gen_temporal_cmp)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cmp", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::INTEGER, Gen_temporal_cmp)); RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_eq)); RegisterSerializedScalarFunction(loader, ScalarFunction("=", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_eq)); RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_temporal_eq)); @@ -19330,6 +19551,8 @@ static void RegisterGenerated_meos_temporal_comp_trad(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("=", {TPcpointTypes::tpcpoint(), TPcpointTypes::tpcpoint()}, LogicalType::BOOLEAN, Gen_temporal_eq)); RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_eq)); RegisterSerializedScalarFunction(loader, ScalarFunction("=", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("=", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_eq)); RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_ge)); RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_ge)); RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_temporal_ge)); @@ -19360,6 +19583,8 @@ static void RegisterGenerated_meos_temporal_comp_trad(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {TPcpointTypes::tpcpoint(), TPcpointTypes::tpcpoint()}, LogicalType::BOOLEAN, Gen_temporal_ge)); RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_ge)); RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_ge)); RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_gt)); RegisterSerializedScalarFunction(loader, ScalarFunction(">", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_gt)); RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_temporal_gt)); @@ -19390,6 +19615,8 @@ static void RegisterGenerated_meos_temporal_comp_trad(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction(">", {TPcpointTypes::tpcpoint(), TPcpointTypes::tpcpoint()}, LogicalType::BOOLEAN, Gen_temporal_gt)); RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_gt)); RegisterSerializedScalarFunction(loader, ScalarFunction(">", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_gt)); RegisterSerializedScalarFunction(loader, ScalarFunction("le", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_le)); RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_le)); RegisterSerializedScalarFunction(loader, ScalarFunction("le", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_temporal_le)); @@ -19420,6 +19647,8 @@ static void RegisterGenerated_meos_temporal_comp_trad(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {TPcpointTypes::tpcpoint(), TPcpointTypes::tpcpoint()}, LogicalType::BOOLEAN, Gen_temporal_le)); RegisterSerializedScalarFunction(loader, ScalarFunction("le", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_le)); RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("le", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_le)); RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_lt)); RegisterSerializedScalarFunction(loader, ScalarFunction("<", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_lt)); RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_temporal_lt)); @@ -19450,6 +19679,8 @@ static void RegisterGenerated_meos_temporal_comp_trad(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<", {TPcpointTypes::tpcpoint(), TPcpointTypes::tpcpoint()}, LogicalType::BOOLEAN, Gen_temporal_lt)); RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_lt)); RegisterSerializedScalarFunction(loader, ScalarFunction("<", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_lt)); RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_ne)); RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::BOOLEAN, Gen_temporal_ne)); RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::BOOLEAN, Gen_temporal_ne)); @@ -19480,6 +19711,8 @@ static void RegisterGenerated_meos_temporal_comp_trad(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {TPcpointTypes::tpcpoint(), TPcpointTypes::tpcpoint()}, LogicalType::BOOLEAN, Gen_temporal_ne)); RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_ne)); RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::tpcpatch()}, LogicalType::BOOLEAN, Gen_temporal_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_temporal_ne)); } static void RegisterGenerated_meos_temporal_constructor(ExtensionLoader &loader) { @@ -19553,6 +19786,8 @@ static void RegisterGenerated_meos_temporal_conversion(ExtensionLoader &loader) RegisterSerializedScalarFunction(loader, ScalarFunction("::", {H3indexTypes::th3index()}, SpanTypes::tstzspan(), Gen_temporal_to_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("timeSpan", {TJsonbTypes::tjsonb()}, SpanTypes::tstzspan(), Gen_temporal_to_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TJsonbTypes::tjsonb()}, SpanTypes::tstzspan(), Gen_temporal_to_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("timeSpan", {NpointTypes::tnpoint()}, SpanTypes::tstzspan(), Gen_temporal_to_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {NpointTypes::tnpoint()}, SpanTypes::tstzspan(), Gen_temporal_to_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("timeSpan", {TPcpointTypes::tpcpoint()}, SpanTypes::tstzspan(), Gen_temporal_to_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TPcpointTypes::tpcpoint()}, SpanTypes::tstzspan(), Gen_temporal_to_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("timeSpan", {TPcpatchTypes::tpcpatch()}, SpanTypes::tstzspan(), Gen_temporal_to_tstzspan)); @@ -19611,6 +19846,8 @@ static void RegisterGenerated_meos_temporal_inout(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {H3indexTypes::th3index(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TJsonbTypes::tjsonb()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TJsonbTypes::tjsonb(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {NpointTypes::tnpoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpointTypes::tpcpoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpointTypes::tpcpoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpatchTypes::tpcpatch()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); @@ -19724,6 +19961,7 @@ static void RegisterGenerated_meos_temporal_modif(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("deleteTime", {H3indexTypes::th3index(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, H3indexTypes::th3index(), Gen_temporal_delete_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("deleteTime", {QuadbinTypes::tquadbin(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, QuadbinTypes::tquadbin(), Gen_temporal_delete_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("deleteTime", {TJsonbTypes::tjsonb(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, TJsonbTypes::tjsonb(), Gen_temporal_delete_timestamptz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("deleteTime", {NpointTypes::tnpoint(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, NpointTypes::tnpoint(), Gen_temporal_delete_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("insert", {TemporalTypes::tint(), TemporalTypes::tint(), LogicalType::BOOLEAN}, TemporalTypes::tint(), Gen_temporal_insert)); RegisterSerializedScalarFunction(loader, ScalarFunction("insert", {TemporalTypes::tbigint(), TemporalTypes::tbigint(), LogicalType::BOOLEAN}, TemporalTypes::tbigint(), Gen_temporal_insert)); RegisterSerializedScalarFunction(loader, ScalarFunction("insert", {TemporalTypes::tbool(), TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_temporal_insert)); @@ -19745,6 +19983,7 @@ static void RegisterGenerated_meos_temporal_modif(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("merge", {H3indexTypes::th3index(), H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_temporal_merge)); RegisterSerializedScalarFunction(loader, ScalarFunction("merge", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, QuadbinTypes::tquadbin(), Gen_temporal_merge)); RegisterSerializedScalarFunction(loader, ScalarFunction("merge", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, TJsonbTypes::tjsonb(), Gen_temporal_merge)); + RegisterSerializedScalarFunction(loader, ScalarFunction("merge", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, NpointTypes::tnpoint(), Gen_temporal_merge)); RegisterSerializedScalarFunction(loader, ScalarFunction("update", {TemporalTypes::tint(), TemporalTypes::tint(), LogicalType::BOOLEAN}, TemporalTypes::tint(), Gen_temporal_update)); RegisterSerializedScalarFunction(loader, ScalarFunction("update", {TemporalTypes::tbigint(), TemporalTypes::tbigint(), LogicalType::BOOLEAN}, TemporalTypes::tbigint(), Gen_temporal_update)); RegisterSerializedScalarFunction(loader, ScalarFunction("update", {TemporalTypes::tbool(), TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_temporal_update)); @@ -19758,6 +19997,7 @@ static void RegisterGenerated_meos_temporal_modif(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("update", {H3indexTypes::th3index(), H3indexTypes::th3index(), LogicalType::BOOLEAN}, H3indexTypes::th3index(), Gen_temporal_update)); RegisterSerializedScalarFunction(loader, ScalarFunction("update", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin(), LogicalType::BOOLEAN}, QuadbinTypes::tquadbin(), Gen_temporal_update)); RegisterSerializedScalarFunction(loader, ScalarFunction("update", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb(), LogicalType::BOOLEAN}, TJsonbTypes::tjsonb(), Gen_temporal_update)); + RegisterSerializedScalarFunction(loader, ScalarFunction("update", {NpointTypes::tnpoint(), NpointTypes::tnpoint(), LogicalType::BOOLEAN}, NpointTypes::tnpoint(), Gen_temporal_update)); } static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { @@ -19776,6 +20016,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("afterTimestamp", {H3indexTypes::th3index(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, H3indexTypes::th3index(), Gen_temporal_after_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("afterTimestamp", {QuadbinTypes::tquadbin(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, QuadbinTypes::tquadbin(), Gen_temporal_after_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("afterTimestamp", {TJsonbTypes::tjsonb(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, TJsonbTypes::tjsonb(), Gen_temporal_after_timestamptz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("afterTimestamp", {NpointTypes::tnpoint(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, NpointTypes::tnpoint(), Gen_temporal_after_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("atMax", {TemporalTypes::tint()}, TemporalTypes::tint(), Gen_temporal_at_max)); RegisterSerializedScalarFunction(loader, ScalarFunction("atMax", {TemporalTypes::tbigint()}, TemporalTypes::tbigint(), Gen_temporal_at_max)); RegisterSerializedScalarFunction(loader, ScalarFunction("atMax", {TemporalTypes::tfloat()}, TemporalTypes::tfloat(), Gen_temporal_at_max)); @@ -19801,6 +20042,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {TJsonbTypes::tjsonb(), LogicalType::TIMESTAMP_TZ}, TJsonbTypes::tjsonb(), Gen_temporal_at_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {TPcpointTypes::tpcpoint(), LogicalType::TIMESTAMP_TZ}, TPcpointTypes::tpcpoint(), Gen_temporal_at_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {TPcpatchTypes::tpcpatch(), LogicalType::TIMESTAMP_TZ}, TPcpatchTypes::tpcpatch(), Gen_temporal_at_timestamptz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {NpointTypes::tnpoint(), LogicalType::TIMESTAMP_TZ}, NpointTypes::tnpoint(), Gen_temporal_at_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("beforeTimestamp", {TemporalTypes::tint(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, TemporalTypes::tint(), Gen_temporal_before_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("beforeTimestamp", {TemporalTypes::tbigint(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, TemporalTypes::tbigint(), Gen_temporal_before_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("beforeTimestamp", {TemporalTypes::tbool(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_temporal_before_timestamptz)); @@ -19814,6 +20056,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("beforeTimestamp", {H3indexTypes::th3index(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, H3indexTypes::th3index(), Gen_temporal_before_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("beforeTimestamp", {QuadbinTypes::tquadbin(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, QuadbinTypes::tquadbin(), Gen_temporal_before_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("beforeTimestamp", {TJsonbTypes::tjsonb(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, TJsonbTypes::tjsonb(), Gen_temporal_before_timestamptz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("beforeTimestamp", {NpointTypes::tnpoint(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, NpointTypes::tnpoint(), Gen_temporal_before_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusMax", {TemporalTypes::tint()}, TemporalTypes::tint(), Gen_temporal_minus_max)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusMax", {TemporalTypes::tbigint()}, TemporalTypes::tbigint(), Gen_temporal_minus_max)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusMax", {TemporalTypes::tfloat()}, TemporalTypes::tfloat(), Gen_temporal_minus_max)); @@ -19839,6 +20082,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TJsonbTypes::tjsonb(), LogicalType::TIMESTAMP_TZ}, TJsonbTypes::tjsonb(), Gen_temporal_minus_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TPcpointTypes::tpcpoint(), LogicalType::TIMESTAMP_TZ}, TPcpointTypes::tpcpoint(), Gen_temporal_minus_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TPcpatchTypes::tpcpatch(), LogicalType::TIMESTAMP_TZ}, TPcpatchTypes::tpcpatch(), Gen_temporal_minus_timestamptz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {NpointTypes::tnpoint(), LogicalType::TIMESTAMP_TZ}, NpointTypes::tnpoint(), Gen_temporal_minus_timestamptz)); RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tfloat(), Gen_tfloat_at_value)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tfloat(), Gen_tfloat_minus_value)); RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {TemporalTypes::tint(), LogicalType::INTEGER}, TemporalTypes::tint(), Gen_tint_at_value)); @@ -19857,6 +20101,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {CbufferTypes::tcbuffer(), SetTypes::tstzset()}, CbufferTypes::tcbuffer(), Gen_temporal_at_tstzset)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {H3indexTypes::th3index(), SetTypes::tstzset()}, H3indexTypes::th3index(), Gen_temporal_at_tstzset)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {QuadbinTypes::tquadbin(), SetTypes::tstzset()}, QuadbinTypes::tquadbin(), Gen_temporal_at_tstzset)); + RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {NpointTypes::tnpoint(), SetTypes::tstzset()}, NpointTypes::tnpoint(), Gen_temporal_at_tstzset)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {TemporalTypes::tint(), SpanTypes::tstzspan()}, TemporalTypes::tint(), Gen_temporal_at_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {TemporalTypes::tbigint(), SpanTypes::tstzspan()}, TemporalTypes::tbigint(), Gen_temporal_at_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {TemporalTypes::tbool(), SpanTypes::tstzspan()}, TemporalTypes::tbool(), Gen_temporal_at_tstzspan)); @@ -19869,6 +20114,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {CbufferTypes::tcbuffer(), SpanTypes::tstzspan()}, CbufferTypes::tcbuffer(), Gen_temporal_at_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, H3indexTypes::th3index(), Gen_temporal_at_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, QuadbinTypes::tquadbin(), Gen_temporal_at_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, NpointTypes::tnpoint(), Gen_temporal_at_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {TemporalTypes::tint(), SpansetTypes::tstzspanset()}, TemporalTypes::tint(), Gen_temporal_at_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {TemporalTypes::tbigint(), SpansetTypes::tstzspanset()}, TemporalTypes::tbigint(), Gen_temporal_at_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {TemporalTypes::tbool(), SpansetTypes::tstzspanset()}, TemporalTypes::tbool(), Gen_temporal_at_tstzspanset)); @@ -19881,6 +20127,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {CbufferTypes::tcbuffer(), SpansetTypes::tstzspanset()}, CbufferTypes::tcbuffer(), Gen_temporal_at_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {H3indexTypes::th3index(), SpansetTypes::tstzspanset()}, H3indexTypes::th3index(), Gen_temporal_at_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {QuadbinTypes::tquadbin(), SpansetTypes::tstzspanset()}, QuadbinTypes::tquadbin(), Gen_temporal_at_tstzspanset)); + RegisterSerializedScalarFunction(loader, ScalarFunction("atTime", {NpointTypes::tnpoint(), SpansetTypes::tstzspanset()}, NpointTypes::tnpoint(), Gen_temporal_at_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TemporalTypes::tint(), SetTypes::tstzset()}, TemporalTypes::tint(), Gen_temporal_minus_tstzset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TemporalTypes::tbigint(), SetTypes::tstzset()}, TemporalTypes::tbigint(), Gen_temporal_minus_tstzset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TemporalTypes::tbool(), SetTypes::tstzset()}, TemporalTypes::tbool(), Gen_temporal_minus_tstzset)); @@ -19893,6 +20140,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {CbufferTypes::tcbuffer(), SetTypes::tstzset()}, CbufferTypes::tcbuffer(), Gen_temporal_minus_tstzset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {H3indexTypes::th3index(), SetTypes::tstzset()}, H3indexTypes::th3index(), Gen_temporal_minus_tstzset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {QuadbinTypes::tquadbin(), SetTypes::tstzset()}, QuadbinTypes::tquadbin(), Gen_temporal_minus_tstzset)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {NpointTypes::tnpoint(), SetTypes::tstzset()}, NpointTypes::tnpoint(), Gen_temporal_minus_tstzset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TemporalTypes::tint(), SpanTypes::tstzspan()}, TemporalTypes::tint(), Gen_temporal_minus_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TemporalTypes::tbigint(), SpanTypes::tstzspan()}, TemporalTypes::tbigint(), Gen_temporal_minus_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TemporalTypes::tbool(), SpanTypes::tstzspan()}, TemporalTypes::tbool(), Gen_temporal_minus_tstzspan)); @@ -19905,6 +20153,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {CbufferTypes::tcbuffer(), SpanTypes::tstzspan()}, CbufferTypes::tcbuffer(), Gen_temporal_minus_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {H3indexTypes::th3index(), SpanTypes::tstzspan()}, H3indexTypes::th3index(), Gen_temporal_minus_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {QuadbinTypes::tquadbin(), SpanTypes::tstzspan()}, QuadbinTypes::tquadbin(), Gen_temporal_minus_tstzspan)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {NpointTypes::tnpoint(), SpanTypes::tstzspan()}, NpointTypes::tnpoint(), Gen_temporal_minus_tstzspan)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TemporalTypes::tint(), SpansetTypes::tstzspanset()}, TemporalTypes::tint(), Gen_temporal_minus_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TemporalTypes::tbigint(), SpansetTypes::tstzspanset()}, TemporalTypes::tbigint(), Gen_temporal_minus_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {TemporalTypes::tbool(), SpansetTypes::tstzspanset()}, TemporalTypes::tbool(), Gen_temporal_minus_tstzspanset)); @@ -19917,6 +20166,7 @@ static void RegisterGenerated_meos_temporal_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {CbufferTypes::tcbuffer(), SpansetTypes::tstzspanset()}, CbufferTypes::tcbuffer(), Gen_temporal_minus_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {H3indexTypes::th3index(), SpansetTypes::tstzspanset()}, H3indexTypes::th3index(), Gen_temporal_minus_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {QuadbinTypes::tquadbin(), SpansetTypes::tstzspanset()}, QuadbinTypes::tquadbin(), Gen_temporal_minus_tstzspanset)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusTime", {NpointTypes::tnpoint(), SpansetTypes::tstzspanset()}, NpointTypes::tnpoint(), Gen_temporal_minus_tstzspanset)); RegisterSerializedScalarFunction(loader, ScalarFunction("atValues", {TemporalTypes::tint(), SetTypes::intset()}, TemporalTypes::tint(), Gen_temporal_at_values)); RegisterSerializedScalarFunction(loader, ScalarFunction("atValues", {TemporalTypes::tbigint(), SetTypes::bigintset()}, TemporalTypes::tbigint(), Gen_temporal_at_values)); RegisterSerializedScalarFunction(loader, ScalarFunction("atValues", {TemporalTypes::tfloat(), SetTypes::floatset()}, TemporalTypes::tfloat(), Gen_temporal_at_values)); @@ -19969,12 +20219,14 @@ static void RegisterGenerated_meos_temporal_transf(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, TGeometryTypes::tgeometry(), Gen_temporal_round)); RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, TGeographyTypes::tgeography(), Gen_temporal_round)); RegisterSerializedScalarFunction(loader, ScalarFunction("round", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, CbufferTypes::tcbuffer(), Gen_temporal_round)); + RegisterSerializedScalarFunction(loader, ScalarFunction("round", {NpointTypes::tnpoint(), LogicalType::INTEGER}, NpointTypes::tnpoint(), Gen_temporal_round)); RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TemporalTypes::tfloat()}, TemporalTypes::tfloat(), Gen_temporal_round_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TgeompointType::tgeompoint()}, TgeompointType::tgeompoint(), Gen_temporal_round_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TgeogpointType::tgeogpoint()}, TgeogpointType::tgeogpoint(), Gen_temporal_round_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TGeometryTypes::tgeometry()}, TGeometryTypes::tgeometry(), Gen_temporal_round_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TGeographyTypes::tgeography()}, TGeographyTypes::tgeography(), Gen_temporal_round_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("round", {CbufferTypes::tcbuffer()}, CbufferTypes::tcbuffer(), Gen_temporal_round_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("round", {NpointTypes::tnpoint()}, NpointTypes::tnpoint(), Gen_temporal_round_d)); RegisterSerializedScalarFunction(loader, ScalarFunction("tboolInst", {TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_temporal_as_tinstant)); RegisterSerializedScalarFunction(loader, ScalarFunction("tintInst", {TemporalTypes::tint()}, TemporalTypes::tint(), Gen_temporal_as_tinstant)); RegisterSerializedScalarFunction(loader, ScalarFunction("tbigintInst", {TemporalTypes::tbigint()}, TemporalTypes::tbigint(), Gen_temporal_as_tinstant)); @@ -20061,6 +20313,7 @@ void RegisterGeneratedTemporalUdfs(ExtensionLoader &loader) { RegisterGenerated_meos_json_conversion(loader); RegisterGenerated_meos_json_json(loader); RegisterGenerated_meos_json_restrict(loader); + RegisterGenerated_meos_npoint_conversion(loader); RegisterGenerated_meos_pointcloud_accessor(loader); RegisterGenerated_meos_pointcloud_restrict(loader); RegisterGenerated_meos_quadbin_accessor(loader); diff --git a/src/include/index/rtree_module.hpp.merged b/src/include/index/rtree_module.hpp.merged deleted file mode 100644 index 481fde92..00000000 --- a/src/include/index/rtree_module.hpp.merged +++ /dev/null @@ -1,104 +0,0 @@ -#pragma once - -#include "duckdb/execution/index/bound_index.hpp" -#include "duckdb/main/extension/extension_loader.hpp" -#include "duckdb/execution/index/index_pointer.hpp" -#include "duckdb/execution/index/fixed_size_allocator.hpp" -#include "duckdb/common/case_insensitive_map.hpp" -#include "duckdb/optimizer/matcher/expression_matcher.hpp" -#include "meos_wrapper_simple.hpp" - -extern "C" { - #include -} - -namespace duckdb { - -class TRTreeIndex : public BoundIndex { -public: - static constexpr const char *TYPE_NAME = "TRTREE"; - - TRTreeIndex(const string &name, IndexConstraintType constraint_type, - const vector &column_ids, TableIOManager &table_io_manager, - const vector> &unbound_expressions, - AttachedDatabase &db, - const case_insensitive_map_t &options, - const IndexStorageInfo &info); - - ~TRTreeIndex(); - - static unique_ptr Create(CreateIndexInput &input) { - auto res = make_uniq(input.name, input.constraint_type, input.column_ids, input.table_io_manager, - input.unbound_expressions, input.db, input.options, input.storage_info); - return std::move(res); - } - - static PhysicalOperator &CreatePlan(PlanIndexInput &input); - - ErrorData Insert(IndexLock &lock, DataChunk &data, Vector &row_ids) override; - - ErrorData BulkConstruct(STBox* boxes, const row_t* row_ids, idx_t count) ; - - void Delete(IndexLock &lock, DataChunk &entries, Vector &row_identifiers) override; - - ErrorData Append(IndexLock &lock, DataChunk &entries, Vector &row_identifiers) override; - - void Construct(DataChunk &expression_result, Vector &row_identifiers); - - //! Commit a drop operation - void CommitDrop(IndexLock &index_lock) override; - - bool MergeIndexes(IndexLock &state, BoundIndex &other_index) override; - - void Vacuum(IndexLock &lock) override; - - idx_t GetInMemorySize(IndexLock &state) override; - - string VerifyAndToString(IndexLock &state, const bool only_verify) override; - - void VerifyAllocations(IndexLock &lock) override; - - string GetConstraintViolationMessage(VerifyExistenceType verify_type, idx_t failed_index, - DataChunk &input) override; - - unique_ptr InitializeScan(const void* query_blob, size_t blob_size, const string &operation) const; - - vector Search(const void *query_box, RTreeSearchOp op) const; - - - idx_t Scan(IndexScanState &state, Vector &result) const; - - bool TryMatchDistanceFunction(const unique_ptr &expr, vector> &bindings) const; - - MeosType GetBboxType() const { return bbox_type_; } - size_t GetBboxSize() const { return bbox_size_; } - - - -private: - case_insensitive_map_t options_; - - unique_ptr function_matcher; - unique_ptr MakeFunctionMatcher() const; - - RTree *rtree_; - void *boxes; - - MeosType bbox_type_; - size_t bbox_size_; - LogicalType column_type_; - - size_t current_size_ = 0; - size_t current_capacity_ = 0; - StorageLock rwlock; - atomic index_size = {0}; - -}; - -struct TRTreeModule { - static void RegisterRTreeIndex(ExtensionLoader &loader); - static void RegisterIndexScan(ExtensionLoader &loader); - static void RegisterScanOptimizer(ExtensionLoader &loader); -}; - -} // namespace duckdb diff --git a/src/include/npoint/tnpoint.hpp b/src/include/npoint/tnpoint.hpp new file mode 100644 index 00000000..8fe3e664 --- /dev/null +++ b/src/include/npoint/tnpoint.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include "meos_wrapper_simple.hpp" +#include "duckdb/common/exception.hpp" +#include "duckdb/common/string_util.hpp" +#include "duckdb/function/scalar_function.hpp" +#include "duckdb/main/extension/extension_loader.hpp" +#include + +namespace duckdb { + +/* npoint is a network point (a route identifier + a fractional position); a + * varlena value surfaced as a BLOB. nsegment is a network segment (route + + * two positions). tnpoint is the temporal network point, stored as a + * Temporal* blob. Canonical names per meos_catalog.c ([T_NPOINT]="npoint" :138, + * [T_NSEGMENT]="nsegment" :140, [T_TNPOINT]="tnpoint" :141). npoint is the + * 2D-planar twin of cbuffer: both are Spatial base values, non-geodetic. + * npoint carries NO SRID of its own — npoint_srid() returns get_srid_ways(), so + * the `ways` network CSV must be loaded (meos_set_ways_csv) for construction and + * geometry ops to resolve. This binding registers only the type + text I/O + * boundary; the operation surface (constructors, accessors, predicates, + * distance, …) is generated from the MEOS-API catalog into src/generated/. */ +struct NpointTypes { + static LogicalType npoint(); + static LogicalType nsegment(); + static LogicalType tnpoint(); + + static void RegisterTypes(ExtensionLoader &loader); + static void RegisterCastFunctions(ExtensionLoader &loader); +}; + +struct NpointFunctions { + /* In/out — static npoint value */ + static bool Npoint_in_cast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters); + static bool Npoint_out_cast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters); + + /* In/out — static nsegment value */ + static bool Nsegment_in_cast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters); + static bool Nsegment_out_cast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters); + + /* In/out — tnpoint temporal value */ + static bool Tnpoint_in_cast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters); + static bool Tnpoint_out_cast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters); +}; + +} // namespace duckdb diff --git a/src/index/rtree_module.cpp.merged b/src/index/rtree_module.cpp.merged deleted file mode 100644 index 6984fee4..00000000 --- a/src/index/rtree_module.cpp.merged +++ /dev/null @@ -1,542 +0,0 @@ -#include "meos_wrapper_simple.hpp" -#include "duckdb/main/extension/extension_loader.hpp" - -#include "duckdb/execution/index/fixed_size_allocator.hpp" -#include "duckdb/execution/index/index_pointer.hpp" -#include "duckdb/main/extension_helper.hpp" -#include "duckdb/main/extension.hpp" -#include "duckdb/common/serializer/binary_deserializer.hpp" -#include "duckdb/common/serializer/binary_serializer.hpp" -#include "duckdb/execution/index/fixed_size_allocator.hpp" -#include "duckdb/storage/table/scan_state.hpp" -#include "duckdb/main/database.hpp" - -#include "duckdb/execution/index/bound_index.hpp" -#include "duckdb/common/exception.hpp" -#include "duckdb/catalog/catalog_entry/table_catalog_entry.hpp" -#include "duckdb/main/config.hpp" -#include "duckdb/main/client_context.hpp" -#include "duckdb/execution/operator/scan/physical_table_scan.hpp" -#include "duckdb/planner/operator/logical_create_index.hpp" -#include "duckdb/planner/expression/bound_reference_expression.hpp" -#include "duckdb/planner/expression/bound_operator_expression.hpp" -#include "duckdb/parser/parsed_data/create_index_info.hpp" -#include "duckdb/execution/operator/projection/physical_projection.hpp" -#include "duckdb/execution/operator/filter/physical_filter.hpp" -#include "duckdb/common/case_insensitive_map.hpp" -#include "duckdb/optimizer/matcher/expression_matcher.hpp" -#include "index/rtree_module.hpp" -#include "geo/stbox.hpp" -#include "geo/tgeompoint.hpp" -#include "index/rtree_index_create_physical.hpp" -#include "time_util.hpp" - - -namespace duckdb { - -//------------------------------------------------------------------------------ -// RTreeIndex Implementation with MEOS RTree Integration -//------------------------------------------------------------------------------ - -TRTreeIndex::TRTreeIndex(const string &name, IndexConstraintType constraint_type, - const vector &column_ids, TableIOManager &table_io_manager, - const vector> &unbound_expressions, - AttachedDatabase &db, - const case_insensitive_map_t &options, - const IndexStorageInfo &info) - : BoundIndex(name, TYPE_NAME, constraint_type, column_ids, table_io_manager, - unbound_expressions, db), options_(options), rtree_(nullptr) { - - - auto &type = unbound_expressions[0]->return_type; - column_type_ = type; - - // R-tree's bbox type is determined by the type of the indexed column - - if (type == StboxType::stbox()) { - bbox_type_ = T_STBOX; - bbox_size_ = sizeof(STBox); - rtree_ = rtree_create_stbox(); - } else if (type == SpanTypes::tstzspan()) { - bbox_type_ = T_TSTZSPAN; - bbox_size_ = sizeof(Span); - rtree_ = rtree_create_tstzspan(); - } else if (type == TgeompointType::TGEOMPOINT()) { - bbox_type_ = T_STBOX; - bbox_size_ = sizeof(STBox); - rtree_ = rtree_create_stbox(); - } else { -<<<<<<< /home/esteban/.claude-tmp/claude-1000/-home-esteban-src-MobilityDB/bc6fa261-2eb8-4af0-882d-39d072057050/scratchpad/rtree_module.cpp.gold - throw InternalException("RTree index only supports stbox and tstzspan types, got: " + type.ToString()); -======= - throw InternalException("RTree index only supports STBOX, TSTZSPAN, and TGEOMPOINT types, got: " + type.ToString()); ->>>>>>> /home/esteban/.claude-tmp/claude-1000/-home-esteban-src-MobilityDB/bc6fa261-2eb8-4af0-882d-39d072057050/scratchpad/rtree_module.cpp.main - } - - if (!rtree_) { - throw InternalException("Failed to create MEOS RTree"); - } - - function_matcher = MakeFunctionMatcher(); -} - -class TRTreeIndexScanState final : public IndexScanState { -public: - void* query_box = nullptr; - vector search_results; - idx_t current_position = 0; - bool initialized = false; - - ~TRTreeIndexScanState() { - if (query_box) { - free(query_box); - query_box = nullptr; - } - } -}; - -TRTreeIndex::~TRTreeIndex() { - if (rtree_) { - rtree_free(rtree_); - rtree_ = nullptr; - } - -} - -PhysicalOperator &TRTreeIndex::CreatePlan(PlanIndexInput &input) { - auto &create_index = input.op; - auto &planner = input.planner; - - vector new_column_types; - vector> select_list; - - for (auto &expression : create_index.expressions) { - new_column_types.push_back(expression->return_type); - select_list.push_back(std::move(expression)); - } - - LogicalType row_type = LogicalType::ROW_TYPE; - new_column_types.push_back(row_type); - select_list.push_back( - make_uniq(row_type, create_index.info->scan_types.size() - 1) - ); - - auto &projection = planner.Make(new_column_types, std::move(select_list), - create_index.estimated_cardinality); - projection.children.push_back(input.table_scan); - - auto &physical_create_index = planner.Make( - create_index.types, create_index.table, create_index.info->column_ids, - std::move(create_index.info), std::move(create_index.unbound_expressions), - create_index.estimated_cardinality); - - physical_create_index.children.push_back(projection); - return physical_create_index; -} - -//------------------------------------------------------------------------------ -// Core RTree Operations using MEOS -//------------------------------------------------------------------------------ -ErrorData TRTreeIndex::Insert(IndexLock &lock, DataChunk &data, Vector &row_ids) { - if (!rtree_) { - return ErrorData("RTree not initialized"); - } - - if (data.size() == 0 || data.ColumnCount() == 0) { - return ErrorData(); - } - DataChunk expression_result; - expression_result.Initialize(Allocator::DefaultAllocator(), logical_types); - - ExecuteExpressions(data, expression_result); - - auto &stbox_vector = expression_result.data[0]; - auto row_data = FlatVector::GetData(row_ids); - - if (stbox_vector.GetVectorType() != VectorType::FLAT_VECTOR) { - stbox_vector.Flatten(expression_result.size()); - } - - auto vector_type = stbox_vector.GetType(); - - boxes = (STBox*)malloc(sizeof(STBox) * expression_result.size()); - - for (idx_t i = 0; i < expression_result.size(); i++) { - if (FlatVector::IsNull(stbox_vector, i)) { - continue; - } - - STBox *box = nullptr; - - if (vector_type.id() == LogicalTypeId::BLOB ) { - auto blob_data = FlatVector::GetData(stbox_vector)[i]; - - std::string s = blob_data.GetString(); - const uint8_t *stbox_data = reinterpret_cast(blob_data.GetData()); - size_t stbox_size = blob_data.GetSize(); - - box = (STBox*)malloc(stbox_size); - - memcpy(box, stbox_data, stbox_size); - - int32_t box_srid = stbox_srid(box); - if (box_srid != 0) { - STBox *normalized_box = stbox_set_srid(box, 0); - if (normalized_box) { - free(box); - box = normalized_box; - } - } - } - else { - continue; - } - - if (box == nullptr) { - continue; - } - - void* target = (char*)boxes + (i * bbox_size_); - memcpy(target, box, bbox_size_); - - rtree_insert(rtree_, target, static_cast(row_data[i])); - - free(box); - } - - free(boxes); - - return ErrorData(); -} - -ErrorData TRTreeIndex::Append(IndexLock &lock, DataChunk &appended_data, Vector &row_identifiers) { - - DataChunk expression_result; - expression_result.Initialize(Allocator::DefaultAllocator(), logical_types); - - ExecuteExpressions(appended_data, expression_result); - - Construct(expression_result, row_identifiers); - - return ErrorData(); -} - -void TRTreeIndex::Construct(DataChunk &expression_result, Vector &row_identifiers) { - if (!rtree_) { - throw InternalException("RTree not initialized"); - } - - if (expression_result.size() == 0 || expression_result.ColumnCount() == 0) { - return; - } - - auto &vector = expression_result.data[0]; - auto row_data = FlatVector::GetData(row_identifiers); - - if (vector.GetVectorType() != VectorType::FLAT_VECTOR) { - vector.Flatten(expression_result.size()); - } - - const bool indexes_temporal = column_type_ == TgeompointType::TGEOMPOINT(); - - void *boxes = indexes_temporal ? nullptr : malloc(bbox_size_ * expression_result.size()); - - for (idx_t i = 0; i < expression_result.size(); i++) { - if (FlatVector::IsNull(vector, i)) { - continue; - } - - if (vector.GetType().id() != LogicalTypeId::BLOB) { - continue; - } - - auto blob_data = FlatVector::GetData(vector)[i]; - const uint8_t *data = reinterpret_cast(blob_data.GetData()); - size_t data_size = blob_data.GetSize(); - - if (indexes_temporal) { - const Temporal *temp = reinterpret_cast(data); - if (bbox_type_ == T_STBOX) { - STBox *box = tspatial_to_stbox(temp); - if (!box) { - continue; - } - - if (stbox_srid(box) != 0) { - STBox *normalized = stbox_set_srid(box, 0); - if (normalized) { - free(box); - box = normalized; - } - } - rtree_insert(rtree_, box, static_cast(row_data[i])); - free(box); - } else { - rtree_insert_temporal(rtree_, temp, static_cast(row_data[i])); - } - continue; - } - - if (data_size != bbox_size_) { - continue; - } - - void *box = malloc(data_size); - memcpy(box, data, data_size); - - if (bbox_type_ == T_STBOX) { - STBox *stbox = (STBox *) box; - int32_t box_srid = stbox_srid(stbox); - if (box_srid != 0) { - STBox *normalized_box = stbox_set_srid(stbox, 0); - if (normalized_box) { - free(box); - box = normalized_box; - } - } - } - - void *target = (char *) boxes + (i * bbox_size_); - memcpy(target, box, bbox_size_); - rtree_insert(rtree_, target, static_cast(row_data[i])); - free(box); - } - - if (boxes) free(boxes); -} - - -ErrorData TRTreeIndex::BulkConstruct(STBox* boxes, const row_t* row_ids, idx_t count) { - if (!rtree_) { - return ErrorData("RTree not initialized"); - } - - for (idx_t i = 0; i < count; i++) { - rtree_insert(rtree_, &boxes[i], static_cast(row_ids[i])); - } - - return ErrorData(); -} - -void TRTreeIndex::Delete(IndexLock &lock, DataChunk &entries, Vector &row_identifiers) { - - throw NotImplementedException("RTree deletion not implemented - consider rebuilding index"); -} -//------------------------------------------------------------------------------ -// RTree Search Operations -//------------------------------------------------------------------------------ -unique_ptr TRTreeIndex::InitializeScan(const void* query_blob, size_t blob_size, const string &operation) const { - const uint8_t *data = reinterpret_cast(query_blob); - - auto state = make_uniq(); - - if (operation == "@>" && bbox_type_ == T_TSTZSPAN) { - if (blob_size != sizeof(timestamp_tz_t)) { - throw InvalidInputException("Invalid query box size for @> operation. Expected " + - std::to_string(sizeof(timestamp_tz_t)) + - ", got " + std::to_string(blob_size)); - } - - timestamp_tz_t timestamp; - memcpy(×tamp, data, sizeof(timestamp_tz_t)); - TimestampTz meos_timestamp = static_cast(timestamp.value); - Datum timestamp_datum = (Datum)meos_timestamp; - - state->query_box = malloc(sizeof(Span)); - memset(state->query_box, 0, sizeof(Span)); - - Span *point_span = static_cast(state->query_box); - point_span->lower = timestamp_datum; - point_span->upper = timestamp_datum; - point_span->lower_inc = true; - point_span->upper_inc = true; - point_span->spantype = T_TSTZSPAN; - point_span->basetype = T_TIMESTAMPTZ; - - - } else if (operation == "&&") { - - state->query_box = malloc(blob_size); - memcpy(state->query_box, data, blob_size); - - if (bbox_type_ == T_STBOX) { - STBox *stbox = (STBox*)state->query_box; - int32_t query_srid = stbox_srid(stbox); - if (query_srid != 0) { - STBox *normalized_query = stbox_set_srid(stbox, 0); - if (normalized_query) { - free(state->query_box); - state->query_box = malloc(blob_size); - memcpy(state->query_box, normalized_query, blob_size); - free(normalized_query); - } - } - } - - } else { - throw InvalidInputException("Unsupported R-Tree operation: " + operation + - " for bbox_type: " + std::to_string(bbox_type_)); - } - - if (rtree_) { - /* MEOS rtree_search: @> uses containment, && uses overlap (see RTreeSearchOp in meos.h). */ - const RTreeSearchOp search_op = (operation == "@>") ? RTREE_CONTAINS : RTREE_OVERLAPS; - state->search_results = Search(state->query_box, search_op); - state->initialized = true; - } - - state->current_position = 0; - - return std::move(state); -} - -idx_t TRTreeIndex::Scan(IndexScanState &state, Vector &result) const { - auto &sstate = state.Cast(); - - if (!sstate.initialized || sstate.search_results.empty()) { - return 0; - } - - const auto row_ids = FlatVector::GetData(result); - - idx_t output_idx = 0; - const idx_t max_output = STANDARD_VECTOR_SIZE; - - while (sstate.current_position < sstate.search_results.size() && - output_idx < max_output) { - - row_ids[output_idx] = sstate.search_results[sstate.current_position]; - output_idx++; - sstate.current_position++; - } - - return output_idx; -} - -vector TRTreeIndex::Search(const void *query_box, RTreeSearchOp op) const { - vector results; - - if (!rtree_ || !query_box) { - return results; - } - - MeosArray *ids = meos_array_create(sizeof(int)); - - try { - int count = rtree_search(rtree_, op, query_box, ids); - - if (count > 0) { - results.reserve(count); - for (int i = 0; i < count; i++) { - results.push_back(static_cast(*(int *) meos_array_get(ids, i))); - } - } - } catch (...) { - fprintf(stderr, "Exception during rtree_search\n"); - } - - meos_array_destroy(ids); - - return results; -} -//------------------------------------------------------------------------------ -// Required BoundIndex Interface Methods -//------------------------------------------------------------------------------ - -void TRTreeIndex::CommitDrop(IndexLock &index_lock) { - if (rtree_) { - rtree_free(rtree_); - rtree_ = nullptr; - } -} - -bool TRTreeIndex::MergeIndexes(IndexLock &state, BoundIndex &other_index) { - return false; -} - -void TRTreeIndex::Vacuum(IndexLock &lock) { -} - -idx_t TRTreeIndex::GetInMemorySize(IndexLock &state) { - return rtree_ ? 1024 : 0; -} - -string TRTreeIndex::VerifyAndToString(IndexLock &state, const bool only_verify) { - if (!rtree_) { - return "Stbox R-tree Index (not initialized)"; - } - - return "Stbox R-tree Index (MEOS-based)"; -} - -void TRTreeIndex::VerifyAllocations(IndexLock &lock) {} - -string TRTreeIndex::GetConstraintViolationMessage(VerifyExistenceType verify_type, idx_t failed_index, - DataChunk &input) { - return "Stbox R-tree constraint violation (interval index does not support constraints)"; -} - -bool TRTreeIndex::TryMatchDistanceFunction(const unique_ptr &expr, - vector> &bindings) const { - - bool match_result = function_matcher->Match(*expr, bindings); - - return match_result; -} - -unique_ptr TRTreeIndex::MakeFunctionMatcher() const { - unordered_set supported_functions; - - if (bbox_type_ == T_STBOX) { - supported_functions = {"&&"}; - } else if (bbox_type_ == T_TSTZSPAN) { - supported_functions = {"&&", "@>"}; - } else { - supported_functions = {"&&"}; - } - - auto matcher = make_uniq(); - matcher->function = make_uniq(supported_functions); - matcher->expr_type = make_uniq(ExpressionType::BOUND_FUNCTION); - matcher->policy = SetMatcher::Policy::UNORDERED; - -<<<<<<< /home/esteban/.claude-tmp/claude-1000/-home-esteban-src-MobilityDB/bc6fa261-2eb8-4af0-882d-39d072057050/scratchpad/rtree_module.cpp.gold - LogicalType index_type; - if (bbox_type_ == T_STBOX) { - index_type = StboxType::stbox(); - } else if (bbox_type_ == T_TSTZSPAN) { - index_type = SpanTypes::tstzspan(); - } else { - index_type = LogicalType::BLOB; - } - - // Left operand -======= ->>>>>>> /home/esteban/.claude-tmp/claude-1000/-home-esteban-src-MobilityDB/bc6fa261-2eb8-4af0-882d-39d072057050/scratchpad/rtree_module.cpp.main - auto lhs_matcher = make_uniq(); - lhs_matcher->type = make_uniq(column_type_); - matcher->matchers.push_back(std::move(lhs_matcher)); - - // Right operand - auto rhs_matcher = make_uniq(); - matcher->matchers.push_back(std::move(rhs_matcher)); - - return std::move(matcher); -} - -//------------------------------------------------------------------------------ -// Module Registration -//------------------------------------------------------------------------------ - -void TRTreeModule::RegisterRTreeIndex(ExtensionLoader &loader) { - - IndexType index_type; - - index_type.name = TRTreeIndex::TYPE_NAME; - index_type.create_instance = TRTreeIndex::Create; - index_type.create_plan = TRTreeIndex::CreatePlan; - - loader.GetDatabaseInstance().config.GetIndexTypes().RegisterIndexType(index_type); -} - -} diff --git a/src/mobilityduck_extension.cpp b/src/mobilityduck_extension.cpp index 27932770..ebca43bb 100644 --- a/src/mobilityduck_extension.cpp +++ b/src/mobilityduck_extension.cpp @@ -24,6 +24,7 @@ #include "h3/th3index.hpp" #include "cbuffer/tcbuffer.hpp" #include "json/tjsonb.hpp" +#include "npoint/tnpoint.hpp" #include "temporal/span.hpp" #include "temporal/span_aggregates.hpp" #include "temporal/temporal_aggregates.hpp" @@ -69,6 +70,7 @@ extern "C" { namespace duckdb { #include "spatial_ref_sys_csv.inc" +#include "ways_csv.inc" // ===================================================================== // 2. Utility: version scalar functions @@ -136,6 +138,10 @@ inline void MobilityduckFullVersionScalarFun(DataChunk &args, ExpressionState &s #define MDUCK_SRID_ENV_NAME "SPATIAL_REF_SYS" #endif +#ifndef MDUCK_WAYS_ENV_NAME + #define MDUCK_WAYS_ENV_NAME "WAYS_CSV" +#endif + static bool file_exists(const char *p) { struct stat st {}; return p && *p && (stat(p, &st) == 0); @@ -179,16 +185,59 @@ static void ConfigureMeosSridCsvOnce() { std::call_once(once, [] { const char *env_path = std::getenv(MDUCK_SRID_ENV_NAME); const char *chosen = nullptr; - + if (env_path && *env_path && file_exists(env_path)) { chosen = env_path; - } else { + } else { static std::string embedded_path = EnsureEmbeddedSridCsvOnDisk(); chosen = embedded_path.c_str(); } if (chosen) { - meos_set_spatial_ref_sys_csv(chosen); + meos_set_spatial_ref_sys_csv(chosen); + } + }); +} + +// The network-point (npoint) family carries no SRID/geometry of its own: a route +// identifier is resolved against the `ways` network CSV (npoint_srid()=get_srid_ways(), +// route_geom() reads the CSV). Ship the canonical example `ways` network embedded and +// point MEOS at it, exactly as ConfigureMeosSridCsvOnce does for spatial_ref_sys. +static std::string EnsureEmbeddedWaysCsvOnDisk() { + std::string dir = GetTempDir(); + std::string path = dir + "/mobilityduck_ways.csv"; + + if (!file_exists(path)) { + std::ofstream out(path, std::ios::binary); + if (!out) { + throw duckdb::IOException( + "mobilityduck: cannot write embedded ways.csv to " + path + ); + } + out.write( + reinterpret_cast(ways_csv), + static_cast(ways_csv_len) + ); + out.close(); + } + return path; +} + +static void ConfigureMeosWaysCsvOnce() { + static std::once_flag once; + std::call_once(once, [] { + const char *env_path = std::getenv(MDUCK_WAYS_ENV_NAME); + const char *chosen = nullptr; + + if (env_path && *env_path && file_exists(env_path)) { + chosen = env_path; + } else { + static std::string embedded_path = EnsureEmbeddedWaysCsvOnDisk(); + chosen = embedded_path.c_str(); + } + + if (chosen) { + meos_set_ways_csv(chosen); } }); } @@ -223,6 +272,10 @@ static void LoadInternal(ExtensionLoader &loader) { // Configure MEOS SRID CSV once (env / embedded) ConfigureMeosSridCsvOnce(); + // Configure the MEOS `ways` network CSV once (env / embedded) so the npoint + // family resolves route SRID/geometry (npoint carries no SRID of its own). + ConfigureMeosWaysCsvOnce(); + // Initialize MEOS once and install our error handler so MEOS errors // become DuckDB exceptions instead of exit()ing the process. static std::once_flag meos_init_flag; @@ -384,6 +437,8 @@ static void LoadInternal(ExtensionLoader &loader) { CbufferTypes::RegisterTypes(loader); CbufferTypes::RegisterCastFunctions(loader); + NpointTypes::RegisterTypes(loader); + NpointTypes::RegisterCastFunctions(loader); SpansetTypes::RegisterTypes(loader); SpansetTypes::RegisterCastFunctions(loader); diff --git a/src/npoint/tnpoint.cpp b/src/npoint/tnpoint.cpp new file mode 100644 index 00000000..0e6a92e1 --- /dev/null +++ b/src/npoint/tnpoint.cpp @@ -0,0 +1,231 @@ +/* MobilityDuck binding for the MEOS network-point types (npoint + nsegment + tnpoint). + * + * npoint is a network point (a route identifier + a fractional position), a + * FIXED-size struct {int64 rid, double pos} surfaced as a BLOB (sizeof(Npoint)). + * nsegment is a network segment {int64 rid, double pos1, double pos2}, likewise. + * tnpoint is the temporal network point, stored as a Temporal* blob (BLOB). + * + * npoint is the 2D-planar twin of cbuffer: both are Spatial base values, + * non-geodetic. npoint carries NO SRID of its own — npoint_srid() returns + * get_srid_ways(), so the `ways` network CSV must be loaded (meos_set_ways_csv, + * done at extension init) for construction and geometry ops to resolve. + * + * Only the type registration + text I/O boundary is hand-written here; the + * operation surface is generated from the MEOS-API catalog into src/generated/. + */ + +#include "npoint/tnpoint.hpp" +#include "temporal/temporal.hpp" +#include "tydef.hpp" +#include "duckdb/common/types/data_chunk.hpp" +#include "duckdb/main/extension/extension_loader.hpp" +#include "duckdb/common/extension_type_info.hpp" +#include "duckdb/function/scalar_function.hpp" +#include "mobilityduck/meos_exec_serial.hpp" +#include "time_util.hpp" + +extern "C" { + #include + #include + #include +} + +#include +#include +#include + +namespace duckdb { + +LogicalType NpointTypes::npoint() { + auto type = LogicalType(LogicalTypeId::BLOB); + type.SetAlias("npoint"); + return type; +} + +LogicalType NpointTypes::nsegment() { + auto type = LogicalType(LogicalTypeId::BLOB); + type.SetAlias("nsegment"); + return type; +} + +LogicalType NpointTypes::tnpoint() { + auto type = LogicalType(LogicalTypeId::BLOB); + type.SetAlias("tnpoint"); + return type; +} + +void NpointTypes::RegisterTypes(ExtensionLoader &loader) { + loader.RegisterType("npoint", npoint()); + loader.RegisterType("nsegment", nsegment()); + loader.RegisterType("tnpoint", tnpoint()); +} + +namespace { + +/* Npoint / Nsegment are FIXED-size structs (palloc(sizeof(...))), so the stored + * BLOB holds exactly sizeof bytes — copy-in/out by sizeof (like Span/STBox). */ +inline Npoint *BlobToNpoint(string_t blob) { + Npoint *copy = (Npoint *) malloc(sizeof(Npoint)); + memcpy(copy, blob.GetData(), sizeof(Npoint)); + return copy; +} + +inline string_t NpointToBlob(Vector &result, Npoint *np) { + if (!np) return string_t(); + string_t out = StringVector::AddStringOrBlob( + result, string_t(reinterpret_cast(np), sizeof(Npoint))); + free(np); + return out; +} + +inline Nsegment *BlobToNsegment(string_t blob) { + Nsegment *copy = (Nsegment *) malloc(sizeof(Nsegment)); + memcpy(copy, blob.GetData(), sizeof(Nsegment)); + return copy; +} + +inline string_t NsegmentToBlob(Vector &result, Nsegment *ns) { + if (!ns) return string_t(); + string_t out = StringVector::AddStringOrBlob( + result, string_t(reinterpret_cast(ns), sizeof(Nsegment))); + free(ns); + return out; +} + +inline Temporal *BlobToTemp(string_t blob) { + size_t sz = blob.GetSize(); + uint8_t *copy = (uint8_t *) malloc(sz); + memcpy(copy, blob.GetData(), sz); + return reinterpret_cast(copy); +} + +inline string_t TempToBlob(Vector &result, Temporal *t) { + if (!t) return string_t(); + size_t sz = temporal_mem_size(t); + string_t out = StringVector::AddStringOrBlob( + result, string_t(reinterpret_cast(t), sz)); + free(t); + return out; +} + +} // namespace + +/* ===================================================================== + * In / out — static npoint value + * ===================================================================== */ + +bool NpointFunctions::Npoint_in_cast( + Vector &source, Vector &result, idx_t count, CastParameters ¶meters) +{ + UnaryExecutor::Execute( + source, result, count, + [&](string_t s) -> string_t { + std::string str(s.GetData(), s.GetSize()); + Npoint *np = npoint_in(str.c_str()); + return NpointToBlob(result, np); + }); + return true; +} + +bool NpointFunctions::Npoint_out_cast( + Vector &source, Vector &result, idx_t count, CastParameters ¶meters) +{ + UnaryExecutor::Execute( + source, result, count, + [&](string_t blob) -> string_t { + Npoint *np = BlobToNpoint(blob); + char *str = npoint_out(np, OUT_DEFAULT_DECIMAL_DIGITS); + free(np); + std::string copy(str); + free(str); + return StringVector::AddString(result, copy); + }); + return true; +} + +/* ===================================================================== + * In / out — static nsegment value + * ===================================================================== */ + +bool NpointFunctions::Nsegment_in_cast( + Vector &source, Vector &result, idx_t count, CastParameters ¶meters) +{ + UnaryExecutor::Execute( + source, result, count, + [&](string_t s) -> string_t { + std::string str(s.GetData(), s.GetSize()); + Nsegment *ns = nsegment_in(str.c_str()); + return NsegmentToBlob(result, ns); + }); + return true; +} + +bool NpointFunctions::Nsegment_out_cast( + Vector &source, Vector &result, idx_t count, CastParameters ¶meters) +{ + UnaryExecutor::Execute( + source, result, count, + [&](string_t blob) -> string_t { + Nsegment *ns = BlobToNsegment(blob); + char *str = nsegment_out(ns, OUT_DEFAULT_DECIMAL_DIGITS); + free(ns); + std::string copy(str); + free(str); + return StringVector::AddString(result, copy); + }); + return true; +} + +/* ===================================================================== + * In / out — tnpoint temporal value + * ===================================================================== */ + +bool NpointFunctions::Tnpoint_in_cast( + Vector &source, Vector &result, idx_t count, CastParameters ¶meters) +{ + UnaryExecutor::Execute( + source, result, count, + [&](string_t s) -> string_t { + std::string str(s.GetData(), s.GetSize()); + Temporal *t = tnpoint_in(str.c_str()); + return TempToBlob(result, t); + }); + return true; +} + +bool NpointFunctions::Tnpoint_out_cast( + Vector &source, Vector &result, idx_t count, CastParameters ¶meters) +{ + UnaryExecutor::Execute( + source, result, count, + [&](string_t blob) -> string_t { + Temporal *t = BlobToTemp(blob); + char *str = temporal_out(t, OUT_DEFAULT_DECIMAL_DIGITS); + free(t); + std::string copy(str); + free(str); + return StringVector::AddString(result, copy); + }); + return true; +} + +/* ===================================================================== + * Registration + * ===================================================================== */ + +void NpointTypes::RegisterCastFunctions(ExtensionLoader &loader) { + RegisterMeosCastFunction(loader, LogicalType::VARCHAR, npoint(), + NpointFunctions::Npoint_in_cast); + RegisterMeosCastFunction(loader, npoint(), LogicalType::VARCHAR, + NpointFunctions::Npoint_out_cast); + RegisterMeosCastFunction(loader, LogicalType::VARCHAR, nsegment(), + NpointFunctions::Nsegment_in_cast); + RegisterMeosCastFunction(loader, nsegment(), LogicalType::VARCHAR, + NpointFunctions::Nsegment_out_cast); + RegisterMeosCastFunction(loader, LogicalType::VARCHAR, tnpoint(), + NpointFunctions::Tnpoint_in_cast); + RegisterMeosCastFunction(loader, tnpoint(), LogicalType::VARCHAR, + NpointFunctions::Tnpoint_out_cast); +} + +} // namespace duckdb diff --git a/src/ways_csv.inc b/src/ways_csv.inc new file mode 100644 index 00000000..ee54b9ff --- /dev/null +++ b/src/ways_csv.inc @@ -0,0 +1,1045 @@ +unsigned char ways_csv[] = { + 0x30, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, + 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x30, 0x39, 0x33, + 0x36, 0x39, 0x38, 0x41, 0x34, 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x44, 0x32, 0x43, 0x30, 0x38, 0x33, 0x35, 0x35, 0x35, 0x36, 0x34, 0x30, + 0x38, 0x38, 0x38, 0x42, 0x33, 0x45, 0x41, 0x33, 0x30, 0x32, 0x41, 0x43, + 0x34, 0x44, 0x34, 0x30, 0x33, 0x46, 0x30, 0x34, 0x42, 0x45, 0x39, 0x45, + 0x31, 0x32, 0x42, 0x37, 0x35, 0x32, 0x34, 0x30, 0x0a, 0x31, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x32, 0x46, 0x36, 0x31, 0x46, 0x44, + 0x32, 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x45, 0x30, + 0x30, 0x43, 0x38, 0x38, 0x35, 0x35, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x34, 0x41, 0x37, 0x31, 0x32, 0x41, 0x34, 0x35, 0x35, 0x31, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x43, 0x35, 0x35, 0x35, 0x32, 0x34, + 0x44, 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x31, + 0x45, 0x46, 0x34, 0x31, 0x38, 0x32, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x32, 0x43, 0x43, 0x32, 0x45, 0x46, 0x34, 0x35, 0x31, 0x34, + 0x30, 0x0a, 0x32, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x30, + 0x41, 0x31, 0x35, 0x42, 0x34, 0x30, 0x32, 0x42, 0x34, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x43, 0x30, 0x45, 0x38, 0x33, 0x36, 0x36, 0x32, 0x35, 0x38, + 0x34, 0x30, 0x45, 0x38, 0x36, 0x37, 0x42, 0x36, 0x42, 0x30, 0x33, 0x41, + 0x32, 0x42, 0x34, 0x32, 0x34, 0x30, 0x35, 0x31, 0x42, 0x44, 0x46, 0x41, + 0x39, 0x46, 0x45, 0x36, 0x31, 0x39, 0x35, 0x30, 0x34, 0x30, 0x0a, 0x33, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x30, 0x37, 0x30, 0x35, + 0x44, 0x35, 0x41, 0x33, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, + 0x43, 0x32, 0x43, 0x46, 0x32, 0x33, 0x37, 0x35, 0x30, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x37, 0x38, 0x33, 0x41, 0x30, 0x36, 0x36, 0x41, 0x33, + 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x38, 0x36, 0x42, 0x41, + 0x30, 0x46, 0x35, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, + 0x34, 0x38, 0x35, 0x35, 0x30, 0x41, 0x39, 0x35, 0x35, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x41, 0x33, 0x30, 0x39, 0x34, 0x30, + 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x36, 0x36, 0x43, 0x36, + 0x38, 0x37, 0x42, 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, + 0x43, 0x45, 0x43, 0x46, 0x35, 0x44, 0x43, 0x34, 0x42, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x33, 0x43, 0x44, 0x42, 0x46, 0x33, 0x33, 0x39, 0x35, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x41, 0x46, 0x30, 0x38, + 0x36, 0x44, 0x45, 0x35, 0x37, 0x34, 0x30, 0x0a, 0x34, 0x2c, 0x30, 0x31, + 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x36, 0x39, 0x34, 0x33, 0x30, 0x46, + 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x34, + 0x39, 0x33, 0x33, 0x34, 0x32, 0x32, 0x34, 0x30, 0x38, 0x32, 0x42, 0x44, + 0x38, 0x36, 0x37, 0x34, 0x35, 0x37, 0x39, 0x44, 0x34, 0x44, 0x34, 0x30, + 0x36, 0x41, 0x44, 0x32, 0x46, 0x34, 0x34, 0x35, 0x39, 0x37, 0x38, 0x37, + 0x32, 0x46, 0x34, 0x30, 0x0a, 0x35, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x34, 0x30, 0x42, 0x36, 0x33, 0x36, 0x35, 0x31, 0x30, 0x38, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x38, 0x43, 0x42, 0x46, 0x36, 0x42, + 0x39, 0x35, 0x35, 0x34, 0x30, 0x37, 0x34, 0x39, 0x41, 0x41, 0x44, 0x42, + 0x45, 0x31, 0x35, 0x39, 0x41, 0x32, 0x46, 0x34, 0x30, 0x38, 0x33, 0x39, + 0x44, 0x37, 0x46, 0x41, 0x36, 0x43, 0x31, 0x32, 0x46, 0x33, 0x43, 0x34, + 0x30, 0x0a, 0x36, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x30, + 0x42, 0x46, 0x34, 0x38, 0x44, 0x37, 0x32, 0x45, 0x34, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x46, 0x34, 0x44, 0x30, 0x36, 0x30, 0x35, 0x36, + 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x41, 0x38, 0x42, 0x33, 0x38, + 0x42, 0x42, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x41, + 0x38, 0x31, 0x32, 0x43, 0x45, 0x41, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x38, 0x34, 0x35, 0x38, 0x36, 0x33, 0x41, 0x37, 0x35, 0x38, + 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x44, 0x45, 0x36, 0x34, + 0x30, 0x30, 0x33, 0x34, 0x34, 0x30, 0x44, 0x38, 0x33, 0x33, 0x35, 0x34, + 0x32, 0x45, 0x30, 0x46, 0x43, 0x30, 0x35, 0x37, 0x34, 0x30, 0x44, 0x31, + 0x42, 0x44, 0x39, 0x44, 0x34, 0x39, 0x45, 0x33, 0x43, 0x36, 0x33, 0x35, + 0x34, 0x30, 0x0a, 0x37, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, + 0x45, 0x39, 0x34, 0x31, 0x31, 0x39, 0x44, 0x35, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x41, 0x30, 0x34, 0x42, 0x35, 0x32, 0x33, 0x46, 0x31, + 0x45, 0x34, 0x30, 0x39, 0x45, 0x30, 0x30, 0x42, 0x33, 0x42, 0x30, 0x46, + 0x41, 0x36, 0x39, 0x34, 0x43, 0x34, 0x30, 0x36, 0x34, 0x44, 0x44, 0x31, + 0x38, 0x38, 0x41, 0x42, 0x31, 0x35, 0x36, 0x34, 0x43, 0x34, 0x30, 0x0a, + 0x38, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, + 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x41, 0x39, 0x30, + 0x46, 0x42, 0x45, 0x41, 0x35, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x41, 0x43, 0x30, 0x35, 0x30, 0x30, 0x46, 0x45, 0x34, 0x44, 0x34, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x46, 0x43, 0x33, 0x46, 0x42, 0x45, 0x35, 0x42, + 0x34, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x39, 0x34, + 0x34, 0x35, 0x36, 0x44, 0x35, 0x30, 0x34, 0x30, 0x0a, 0x39, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x43, 0x36, 0x46, 0x39, 0x30, 0x31, + 0x31, 0x34, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x30, 0x31, + 0x30, 0x32, 0x44, 0x39, 0x43, 0x34, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x45, 0x30, 0x35, 0x46, 0x31, 0x44, 0x34, 0x42, 0x33, 0x36, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x37, 0x32, 0x45, 0x39, 0x45, + 0x35, 0x34, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x38, 0x43, + 0x31, 0x46, 0x33, 0x45, 0x41, 0x34, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x38, 0x31, 0x46, 0x43, 0x31, 0x32, 0x35, 0x34, 0x35, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x36, 0x36, 0x32, 0x33, 0x34, 0x30, + 0x33, 0x35, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x30, 0x30, + 0x38, 0x33, 0x37, 0x42, 0x30, 0x32, 0x36, 0x34, 0x30, 0x0a, 0x31, 0x30, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x34, 0x41, 0x44, 0x31, + 0x32, 0x36, 0x43, 0x34, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, + 0x30, 0x34, 0x34, 0x33, 0x31, 0x41, 0x39, 0x31, 0x41, 0x34, 0x30, 0x39, + 0x44, 0x45, 0x31, 0x45, 0x37, 0x31, 0x33, 0x32, 0x45, 0x39, 0x37, 0x35, + 0x35, 0x34, 0x30, 0x31, 0x45, 0x33, 0x32, 0x42, 0x37, 0x46, 0x30, 0x41, + 0x41, 0x42, 0x41, 0x34, 0x31, 0x34, 0x30, 0x0a, 0x31, 0x31, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x38, 0x36, 0x39, 0x45, 0x36, 0x37, + 0x43, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x39, + 0x35, 0x39, 0x45, 0x38, 0x32, 0x34, 0x45, 0x34, 0x30, 0x45, 0x33, 0x41, + 0x32, 0x39, 0x41, 0x41, 0x35, 0x33, 0x39, 0x43, 0x31, 0x34, 0x46, 0x34, + 0x30, 0x34, 0x43, 0x39, 0x43, 0x38, 0x34, 0x32, 0x35, 0x37, 0x39, 0x43, + 0x42, 0x34, 0x37, 0x34, 0x30, 0x0a, 0x31, 0x32, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x46, 0x45, 0x31, 0x36, 0x39, 0x31, 0x43, 0x46, 0x35, + 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x43, 0x42, 0x39, 0x35, + 0x33, 0x39, 0x45, 0x34, 0x34, 0x34, 0x30, 0x34, 0x31, 0x45, 0x31, 0x41, + 0x45, 0x35, 0x39, 0x45, 0x38, 0x35, 0x35, 0x34, 0x30, 0x34, 0x30, 0x39, + 0x43, 0x34, 0x35, 0x33, 0x42, 0x39, 0x33, 0x35, 0x37, 0x32, 0x31, 0x32, + 0x44, 0x34, 0x30, 0x0a, 0x31, 0x33, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x38, 0x30, 0x36, 0x37, 0x42, 0x34, 0x43, 0x45, 0x46, 0x32, 0x33, + 0x46, 0x30, 0x30, 0x30, 0x30, 0x33, 0x43, 0x39, 0x37, 0x33, 0x30, 0x43, + 0x30, 0x34, 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x41, 0x30, + 0x46, 0x44, 0x45, 0x32, 0x34, 0x35, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x33, 0x30, 0x43, 0x35, 0x33, 0x41, 0x36, 0x42, 0x35, 0x34, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x38, 0x42, 0x38, 0x41, 0x39, 0x38, + 0x43, 0x34, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x34, 0x36, + 0x42, 0x43, 0x39, 0x30, 0x46, 0x35, 0x34, 0x34, 0x30, 0x0a, 0x31, 0x34, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x30, 0x46, 0x38, 0x45, + 0x33, 0x37, 0x45, 0x34, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, + 0x43, 0x35, 0x35, 0x44, 0x32, 0x46, 0x42, 0x34, 0x42, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x39, 0x43, 0x39, 0x44, 0x36, 0x41, 0x44, 0x38, 0x34, + 0x45, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x34, 0x46, 0x39, + 0x45, 0x41, 0x35, 0x34, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, + 0x32, 0x34, 0x30, 0x31, 0x32, 0x41, 0x32, 0x35, 0x35, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x37, 0x30, 0x43, 0x33, 0x34, 0x38, 0x31, 0x32, 0x32, + 0x43, 0x34, 0x30, 0x0a, 0x31, 0x35, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x41, 0x30, 0x41, 0x46, 0x34, 0x36, 0x45, 0x33, 0x34, 0x43, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x45, 0x42, 0x45, 0x35, 0x41, + 0x32, 0x34, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x34, 0x32, + 0x42, 0x39, 0x37, 0x35, 0x42, 0x34, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x39, 0x35, 0x43, 0x31, 0x33, 0x34, 0x45, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x45, 0x30, 0x41, 0x41, 0x38, 0x33, + 0x44, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x38, 0x32, + 0x30, 0x38, 0x35, 0x36, 0x36, 0x34, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x35, 0x34, 0x31, 0x30, 0x31, 0x34, 0x36, 0x42, 0x34, 0x43, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x30, 0x36, 0x41, 0x38, 0x42, 0x42, + 0x35, 0x30, 0x30, 0x34, 0x30, 0x0a, 0x31, 0x36, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x35, 0x32, 0x34, 0x35, 0x36, 0x30, 0x43, 0x39, 0x35, + 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x43, 0x31, 0x33, 0x31, + 0x36, 0x30, 0x32, 0x35, 0x30, 0x34, 0x30, 0x45, 0x41, 0x30, 0x35, 0x45, + 0x34, 0x38, 0x31, 0x37, 0x30, 0x41, 0x44, 0x35, 0x34, 0x34, 0x30, 0x42, + 0x30, 0x42, 0x37, 0x37, 0x37, 0x39, 0x43, 0x38, 0x32, 0x46, 0x32, 0x34, + 0x41, 0x34, 0x30, 0x0a, 0x31, 0x37, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x38, 0x30, 0x33, 0x36, 0x46, 0x32, 0x43, 0x39, 0x31, 0x34, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x38, 0x41, 0x36, 0x31, 0x43, 0x37, + 0x44, 0x33, 0x36, 0x34, 0x30, 0x33, 0x35, 0x31, 0x39, 0x36, 0x42, 0x41, + 0x45, 0x35, 0x32, 0x31, 0x42, 0x33, 0x30, 0x34, 0x30, 0x42, 0x35, 0x37, + 0x39, 0x45, 0x33, 0x34, 0x36, 0x33, 0x39, 0x42, 0x30, 0x34, 0x33, 0x34, + 0x30, 0x0a, 0x31, 0x38, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x43, 0x43, 0x46, 0x33, 0x34, 0x46, 0x32, 0x35, 0x34, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x41, 0x45, 0x43, 0x31, 0x42, 0x36, 0x39, 0x36, 0x35, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x30, 0x39, 0x41, 0x33, + 0x39, 0x45, 0x37, 0x33, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, + 0x30, 0x32, 0x39, 0x32, 0x41, 0x37, 0x37, 0x34, 0x42, 0x34, 0x30, 0x34, + 0x45, 0x31, 0x31, 0x36, 0x44, 0x36, 0x42, 0x38, 0x36, 0x39, 0x30, 0x33, + 0x44, 0x34, 0x30, 0x44, 0x43, 0x44, 0x42, 0x42, 0x46, 0x46, 0x46, 0x42, + 0x44, 0x36, 0x35, 0x34, 0x37, 0x34, 0x30, 0x0a, 0x31, 0x39, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x43, 0x30, 0x31, 0x43, 0x45, 0x41, + 0x44, 0x34, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x41, 0x41, + 0x31, 0x34, 0x38, 0x42, 0x33, 0x35, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x45, 0x30, 0x45, 0x33, 0x45, 0x45, 0x41, 0x30, 0x34, 0x30, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x36, 0x46, 0x46, 0x34, 0x34, 0x46, + 0x38, 0x35, 0x38, 0x34, 0x30, 0x43, 0x35, 0x43, 0x37, 0x35, 0x45, 0x30, + 0x45, 0x46, 0x45, 0x43, 0x45, 0x34, 0x32, 0x34, 0x30, 0x43, 0x33, 0x43, + 0x44, 0x30, 0x34, 0x44, 0x31, 0x42, 0x41, 0x30, 0x41, 0x34, 0x42, 0x34, + 0x30, 0x0a, 0x32, 0x30, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, + 0x38, 0x34, 0x46, 0x31, 0x46, 0x41, 0x42, 0x33, 0x46, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x41, 0x30, 0x36, 0x33, 0x30, 0x46, 0x44, 0x36, 0x32, + 0x31, 0x34, 0x30, 0x33, 0x43, 0x33, 0x35, 0x45, 0x45, 0x37, 0x34, 0x32, + 0x32, 0x44, 0x38, 0x34, 0x42, 0x34, 0x30, 0x37, 0x30, 0x38, 0x38, 0x44, + 0x31, 0x43, 0x43, 0x39, 0x39, 0x35, 0x42, 0x34, 0x39, 0x34, 0x30, 0x0a, + 0x32, 0x31, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x30, 0x30, + 0x37, 0x37, 0x33, 0x31, 0x43, 0x34, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x35, 0x38, 0x37, 0x45, 0x37, 0x39, 0x33, 0x38, 0x34, 0x38, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x38, 0x31, 0x37, 0x36, 0x38, 0x32, + 0x35, 0x33, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x32, 0x32, + 0x34, 0x46, 0x33, 0x44, 0x34, 0x35, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x38, 0x34, 0x35, 0x34, 0x35, 0x33, 0x42, 0x39, 0x35, 0x35, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x34, 0x35, 0x45, 0x43, 0x43, 0x43, + 0x31, 0x34, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x32, + 0x34, 0x41, 0x36, 0x33, 0x36, 0x34, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x36, 0x33, 0x35, 0x44, 0x38, 0x37, 0x35, 0x35, 0x32, 0x34, + 0x30, 0x0a, 0x32, 0x32, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x38, 0x43, 0x43, 0x34, 0x34, 0x43, 0x37, 0x34, 0x38, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x44, 0x34, 0x46, 0x41, 0x41, 0x41, 0x37, 0x39, 0x34, + 0x31, 0x34, 0x30, 0x46, 0x33, 0x37, 0x41, 0x43, 0x31, 0x41, 0x42, 0x34, + 0x37, 0x35, 0x43, 0x34, 0x42, 0x34, 0x30, 0x31, 0x33, 0x30, 0x46, 0x46, + 0x46, 0x36, 0x33, 0x42, 0x30, 0x42, 0x44, 0x34, 0x31, 0x34, 0x30, 0x0a, + 0x32, 0x33, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x41, 0x32, + 0x38, 0x44, 0x38, 0x35, 0x33, 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x36, 0x30, 0x33, 0x33, 0x33, 0x31, 0x45, 0x42, 0x33, 0x33, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x34, 0x36, 0x33, 0x32, 0x34, 0x41, + 0x32, 0x35, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x34, 0x37, + 0x35, 0x39, 0x44, 0x31, 0x46, 0x35, 0x38, 0x34, 0x30, 0x0a, 0x32, 0x34, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x38, 0x41, 0x30, 0x37, + 0x37, 0x43, 0x31, 0x33, 0x45, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, + 0x30, 0x36, 0x39, 0x42, 0x34, 0x37, 0x37, 0x34, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x31, 0x45, 0x35, 0x39, 0x33, 0x42, 0x39, 0x35, 0x35, + 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x33, 0x31, 0x34, + 0x34, 0x31, 0x35, 0x33, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, + 0x38, 0x32, 0x36, 0x42, 0x36, 0x44, 0x34, 0x33, 0x46, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x34, 0x30, 0x32, 0x31, 0x38, 0x36, 0x44, 0x38, 0x33, + 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x30, 0x31, 0x45, 0x41, + 0x34, 0x41, 0x30, 0x35, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, + 0x30, 0x45, 0x41, 0x35, 0x42, 0x42, 0x30, 0x31, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x38, 0x30, 0x42, 0x37, 0x44, 0x34, 0x46, 0x45, 0x31, + 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x38, 0x31, 0x33, 0x31, + 0x41, 0x31, 0x31, 0x33, 0x38, 0x34, 0x30, 0x0a, 0x32, 0x35, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x36, 0x36, 0x34, 0x39, 0x42, 0x46, + 0x35, 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x34, 0x33, + 0x35, 0x33, 0x35, 0x30, 0x37, 0x34, 0x46, 0x34, 0x30, 0x31, 0x33, 0x31, + 0x34, 0x43, 0x44, 0x35, 0x43, 0x44, 0x37, 0x35, 0x39, 0x35, 0x32, 0x34, + 0x30, 0x44, 0x41, 0x45, 0x37, 0x44, 0x44, 0x42, 0x33, 0x39, 0x39, 0x39, + 0x44, 0x35, 0x31, 0x34, 0x30, 0x0a, 0x32, 0x36, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x35, 0x30, 0x38, 0x41, 0x32, 0x38, 0x43, 0x36, 0x34, + 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x30, 0x32, 0x37, 0x31, + 0x34, 0x35, 0x45, 0x33, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, + 0x30, 0x38, 0x32, 0x31, 0x44, 0x44, 0x37, 0x34, 0x37, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x43, 0x36, 0x43, 0x36, 0x34, 0x37, 0x32, 0x41, 0x35, + 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x32, 0x41, 0x44, + 0x33, 0x42, 0x35, 0x31, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, + 0x41, 0x30, 0x45, 0x35, 0x42, 0x45, 0x36, 0x35, 0x30, 0x34, 0x30, 0x0a, + 0x32, 0x37, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, + 0x34, 0x35, 0x35, 0x35, 0x46, 0x30, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x44, 0x30, 0x30, 0x42, 0x45, 0x33, 0x39, 0x31, 0x32, 0x44, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x30, 0x31, 0x32, 0x43, 0x41, 0x37, + 0x43, 0x35, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x42, + 0x42, 0x41, 0x39, 0x30, 0x44, 0x34, 0x38, 0x34, 0x30, 0x35, 0x42, 0x41, + 0x41, 0x33, 0x36, 0x36, 0x42, 0x35, 0x39, 0x42, 0x45, 0x35, 0x32, 0x34, + 0x30, 0x42, 0x39, 0x31, 0x37, 0x34, 0x41, 0x31, 0x35, 0x46, 0x45, 0x41, + 0x42, 0x34, 0x39, 0x34, 0x30, 0x0a, 0x32, 0x38, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x42, 0x30, 0x43, 0x32, 0x30, 0x35, 0x41, 0x37, 0x35, + 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x38, 0x38, 0x38, 0x38, + 0x44, 0x33, 0x42, 0x33, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x44, 0x45, 0x37, 0x43, 0x43, 0x38, 0x46, 0x38, 0x33, 0x46, 0x30, + 0x30, 0x30, 0x30, 0x38, 0x34, 0x42, 0x41, 0x34, 0x30, 0x35, 0x35, 0x34, + 0x43, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x41, 0x36, 0x31, 0x44, + 0x35, 0x37, 0x32, 0x35, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, + 0x36, 0x38, 0x46, 0x46, 0x38, 0x36, 0x36, 0x35, 0x36, 0x34, 0x30, 0x0a, + 0x32, 0x39, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x32, 0x46, + 0x38, 0x41, 0x35, 0x46, 0x44, 0x35, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x33, 0x45, 0x34, 0x45, 0x43, 0x43, 0x42, 0x33, 0x35, 0x36, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x43, 0x45, 0x44, 0x37, 0x38, 0x46, + 0x39, 0x35, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x41, 0x36, + 0x32, 0x45, 0x42, 0x35, 0x33, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x42, 0x36, 0x33, 0x31, 0x46, 0x34, 0x33, 0x46, 0x35, 0x31, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x43, 0x36, 0x37, 0x36, 0x39, 0x36, + 0x34, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x38, 0x39, + 0x45, 0x46, 0x45, 0x44, 0x42, 0x33, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x41, 0x36, 0x33, 0x42, 0x37, 0x39, 0x39, 0x37, 0x35, 0x37, 0x34, + 0x30, 0x0a, 0x33, 0x30, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, + 0x38, 0x36, 0x45, 0x34, 0x37, 0x36, 0x31, 0x35, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x38, 0x30, 0x41, 0x30, 0x39, 0x42, 0x42, 0x35, 0x46, + 0x30, 0x33, 0x46, 0x35, 0x46, 0x43, 0x41, 0x32, 0x43, 0x44, 0x41, 0x46, + 0x36, 0x32, 0x38, 0x32, 0x32, 0x34, 0x30, 0x37, 0x34, 0x38, 0x31, 0x43, + 0x31, 0x34, 0x44, 0x43, 0x39, 0x34, 0x46, 0x34, 0x30, 0x34, 0x30, 0x0a, + 0x33, 0x31, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x35, + 0x37, 0x38, 0x32, 0x42, 0x36, 0x33, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x35, 0x36, 0x30, 0x39, 0x35, 0x38, 0x34, 0x46, 0x35, 0x32, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x38, 0x30, 0x38, 0x43, 0x32, 0x44, + 0x45, 0x33, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x38, 0x34, + 0x38, 0x34, 0x45, 0x42, 0x36, 0x34, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x36, 0x43, 0x43, 0x35, 0x44, 0x46, 0x36, 0x35, 0x30, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x30, 0x43, 0x38, 0x32, 0x37, 0x30, + 0x44, 0x34, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x38, 0x32, + 0x46, 0x39, 0x32, 0x37, 0x43, 0x34, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x41, 0x35, 0x46, 0x38, 0x38, 0x33, 0x33, 0x38, 0x34, + 0x30, 0x0a, 0x33, 0x32, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, + 0x34, 0x34, 0x45, 0x38, 0x33, 0x34, 0x41, 0x34, 0x31, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x46, 0x34, 0x39, 0x39, 0x39, 0x32, 0x46, 0x36, 0x34, + 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x36, 0x33, 0x46, 0x30, + 0x46, 0x37, 0x37, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, + 0x30, 0x44, 0x35, 0x33, 0x37, 0x36, 0x34, 0x33, 0x39, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x35, 0x38, 0x45, 0x39, 0x30, 0x38, 0x44, 0x33, 0x33, + 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x34, 0x33, 0x46, + 0x35, 0x39, 0x35, 0x34, 0x44, 0x34, 0x30, 0x0a, 0x33, 0x33, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x36, 0x41, 0x45, 0x36, + 0x34, 0x33, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x32, 0x34, + 0x39, 0x46, 0x41, 0x30, 0x31, 0x35, 0x35, 0x34, 0x30, 0x33, 0x32, 0x32, + 0x33, 0x33, 0x39, 0x30, 0x38, 0x41, 0x30, 0x34, 0x35, 0x34, 0x43, 0x34, + 0x30, 0x31, 0x37, 0x46, 0x42, 0x45, 0x42, 0x30, 0x41, 0x34, 0x41, 0x45, + 0x30, 0x35, 0x31, 0x34, 0x30, 0x0a, 0x33, 0x34, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x31, 0x38, 0x33, 0x44, 0x38, 0x33, 0x35, 0x42, 0x34, + 0x43, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x43, 0x34, 0x30, 0x36, + 0x42, 0x34, 0x39, 0x34, 0x34, 0x34, 0x30, 0x39, 0x45, 0x42, 0x35, 0x31, + 0x44, 0x37, 0x36, 0x37, 0x38, 0x37, 0x37, 0x34, 0x35, 0x34, 0x30, 0x38, + 0x41, 0x46, 0x36, 0x32, 0x42, 0x41, 0x35, 0x32, 0x30, 0x45, 0x41, 0x34, + 0x42, 0x34, 0x30, 0x0a, 0x33, 0x35, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x44, 0x38, 0x36, 0x44, 0x37, 0x42, 0x37, 0x34, 0x34, 0x41, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x30, 0x44, 0x43, 0x38, 0x44, 0x30, + 0x34, 0x32, 0x35, 0x34, 0x30, 0x46, 0x45, 0x42, 0x31, 0x44, 0x46, 0x41, + 0x36, 0x44, 0x42, 0x32, 0x45, 0x35, 0x30, 0x34, 0x30, 0x35, 0x43, 0x39, + 0x43, 0x39, 0x36, 0x35, 0x45, 0x31, 0x41, 0x43, 0x42, 0x33, 0x41, 0x34, + 0x30, 0x0a, 0x33, 0x36, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x39, 0x32, 0x39, 0x30, 0x44, 0x33, 0x32, 0x31, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x39, 0x43, 0x34, 0x45, 0x39, 0x32, 0x30, 0x43, 0x34, + 0x32, 0x34, 0x30, 0x32, 0x35, 0x36, 0x38, 0x39, 0x31, 0x35, 0x46, 0x36, + 0x30, 0x39, 0x36, 0x33, 0x43, 0x34, 0x30, 0x33, 0x34, 0x46, 0x34, 0x34, + 0x34, 0x33, 0x41, 0x38, 0x42, 0x38, 0x30, 0x34, 0x46, 0x34, 0x30, 0x0a, + 0x33, 0x37, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x30, 0x38, + 0x30, 0x41, 0x32, 0x32, 0x42, 0x32, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x33, 0x38, 0x35, 0x35, 0x34, 0x38, 0x31, 0x46, 0x34, 0x41, 0x34, + 0x30, 0x37, 0x38, 0x35, 0x45, 0x38, 0x35, 0x33, 0x42, 0x36, 0x30, 0x38, + 0x43, 0x32, 0x45, 0x34, 0x30, 0x42, 0x45, 0x43, 0x39, 0x43, 0x33, 0x44, + 0x33, 0x35, 0x36, 0x32, 0x45, 0x34, 0x45, 0x34, 0x30, 0x0a, 0x33, 0x38, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x34, 0x44, 0x35, 0x36, + 0x46, 0x44, 0x37, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, + 0x34, 0x44, 0x39, 0x44, 0x36, 0x34, 0x33, 0x35, 0x32, 0x34, 0x30, 0x45, + 0x42, 0x41, 0x37, 0x33, 0x31, 0x37, 0x39, 0x46, 0x31, 0x32, 0x36, 0x35, + 0x31, 0x34, 0x30, 0x33, 0x42, 0x31, 0x34, 0x45, 0x33, 0x33, 0x39, 0x41, + 0x42, 0x45, 0x34, 0x35, 0x33, 0x34, 0x30, 0x0a, 0x33, 0x39, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x45, 0x41, 0x46, 0x38, 0x36, 0x44, + 0x45, 0x35, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x45, 0x31, + 0x35, 0x34, 0x43, 0x31, 0x32, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x41, 0x30, 0x41, 0x38, 0x39, 0x30, 0x42, 0x30, 0x34, 0x31, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x34, 0x46, 0x46, 0x46, 0x41, 0x45, + 0x33, 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x38, 0x38, + 0x30, 0x45, 0x30, 0x34, 0x33, 0x34, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x35, 0x30, 0x32, 0x42, 0x37, 0x30, 0x39, 0x42, 0x34, 0x39, 0x34, + 0x30, 0x42, 0x45, 0x33, 0x42, 0x31, 0x32, 0x41, 0x32, 0x41, 0x45, 0x34, + 0x34, 0x34, 0x36, 0x34, 0x30, 0x43, 0x35, 0x46, 0x39, 0x46, 0x46, 0x33, + 0x31, 0x36, 0x41, 0x38, 0x34, 0x34, 0x34, 0x34, 0x30, 0x0a, 0x34, 0x30, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x32, 0x43, 0x34, 0x32, + 0x35, 0x45, 0x42, 0x35, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, + 0x41, 0x32, 0x32, 0x45, 0x30, 0x42, 0x45, 0x35, 0x30, 0x34, 0x30, 0x36, + 0x35, 0x37, 0x31, 0x44, 0x38, 0x42, 0x46, 0x41, 0x42, 0x36, 0x43, 0x35, + 0x35, 0x34, 0x30, 0x46, 0x30, 0x38, 0x30, 0x43, 0x32, 0x33, 0x35, 0x43, + 0x38, 0x44, 0x33, 0x35, 0x30, 0x34, 0x30, 0x0a, 0x34, 0x31, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x38, 0x38, 0x43, 0x32, 0x33, 0x34, + 0x42, 0x33, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x30, 0x45, + 0x31, 0x43, 0x31, 0x43, 0x42, 0x32, 0x45, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x39, 0x45, 0x45, 0x39, 0x39, 0x34, 0x33, 0x31, 0x35, 0x31, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x30, 0x44, 0x32, 0x45, 0x42, 0x36, + 0x43, 0x34, 0x46, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, + 0x43, 0x37, 0x39, 0x41, 0x45, 0x33, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x44, 0x30, 0x44, 0x39, 0x42, 0x36, 0x35, 0x38, 0x32, 0x45, 0x34, + 0x30, 0x0a, 0x34, 0x32, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x36, 0x43, 0x35, 0x39, 0x32, 0x31, 0x36, 0x35, 0x38, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x42, 0x38, 0x38, 0x32, 0x35, 0x46, 0x38, 0x34, 0x34, + 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x38, 0x36, 0x36, 0x33, + 0x31, 0x34, 0x30, 0x35, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, + 0x38, 0x34, 0x36, 0x46, 0x37, 0x46, 0x35, 0x34, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x36, 0x32, 0x37, 0x44, 0x42, 0x38, 0x39, 0x30, 0x35, + 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x36, 0x31, 0x31, 0x30, + 0x34, 0x45, 0x46, 0x35, 0x37, 0x34, 0x30, 0x0a, 0x34, 0x33, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x32, 0x43, 0x33, 0x45, 0x44, 0x45, + 0x37, 0x35, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x30, 0x30, + 0x46, 0x44, 0x34, 0x45, 0x45, 0x34, 0x46, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x36, 0x30, 0x32, 0x35, 0x39, 0x43, 0x35, 0x32, 0x32, 0x38, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x43, 0x45, 0x35, 0x43, 0x44, 0x41, + 0x36, 0x35, 0x30, 0x34, 0x30, 0x0a, 0x34, 0x34, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x38, 0x30, 0x31, 0x38, 0x42, 0x36, 0x34, 0x32, 0x35, + 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x46, 0x41, 0x42, + 0x37, 0x44, 0x38, 0x32, 0x42, 0x34, 0x30, 0x31, 0x33, 0x43, 0x36, 0x31, + 0x42, 0x34, 0x45, 0x38, 0x32, 0x33, 0x41, 0x34, 0x45, 0x34, 0x30, 0x42, + 0x39, 0x42, 0x34, 0x31, 0x45, 0x33, 0x44, 0x37, 0x30, 0x46, 0x32, 0x32, + 0x38, 0x34, 0x30, 0x0a, 0x34, 0x35, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x33, 0x34, 0x34, 0x35, 0x34, 0x42, 0x45, 0x43, 0x35, 0x37, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x38, 0x38, 0x34, 0x38, + 0x38, 0x44, 0x30, 0x33, 0x46, 0x30, 0x30, 0x30, 0x30, 0x32, 0x36, 0x38, + 0x36, 0x46, 0x44, 0x44, 0x34, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x38, 0x34, 0x30, 0x44, 0x46, 0x36, 0x35, 0x43, 0x34, 0x36, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x30, 0x45, 0x41, 0x42, 0x39, 0x35, + 0x30, 0x35, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x34, 0x35, + 0x32, 0x46, 0x32, 0x39, 0x46, 0x34, 0x34, 0x34, 0x30, 0x45, 0x36, 0x35, + 0x35, 0x45, 0x46, 0x38, 0x43, 0x32, 0x38, 0x36, 0x38, 0x34, 0x33, 0x34, + 0x30, 0x42, 0x46, 0x38, 0x39, 0x34, 0x45, 0x43, 0x43, 0x45, 0x43, 0x36, + 0x46, 0x34, 0x43, 0x34, 0x30, 0x0a, 0x34, 0x36, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x33, 0x30, 0x32, 0x46, 0x30, 0x35, 0x44, 0x30, 0x34, + 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x38, 0x33, 0x33, 0x44, + 0x37, 0x43, 0x39, 0x33, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, + 0x30, 0x32, 0x37, 0x32, 0x39, 0x37, 0x36, 0x31, 0x32, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x46, 0x43, 0x38, 0x37, 0x38, 0x41, 0x45, 0x37, 0x34, + 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x42, 0x39, 0x32, + 0x37, 0x39, 0x32, 0x33, 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, + 0x30, 0x42, 0x34, 0x42, 0x36, 0x36, 0x30, 0x35, 0x30, 0x34, 0x30, 0x0a, + 0x34, 0x37, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x45, + 0x35, 0x43, 0x44, 0x44, 0x32, 0x34, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x46, 0x43, 0x32, 0x34, 0x30, 0x36, 0x45, 0x37, 0x34, 0x34, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x38, 0x35, 0x43, 0x33, 0x32, 0x30, + 0x39, 0x34, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x43, 0x43, + 0x31, 0x37, 0x33, 0x34, 0x39, 0x34, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x33, 0x43, 0x41, 0x37, 0x44, 0x42, 0x36, 0x33, 0x34, 0x34, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x38, 0x43, 0x45, 0x39, 0x31, 0x43, + 0x33, 0x33, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x30, 0x43, + 0x41, 0x38, 0x34, 0x36, 0x41, 0x34, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x38, 0x38, 0x42, 0x33, 0x44, 0x36, 0x30, 0x44, 0x34, 0x32, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x43, 0x37, 0x41, 0x35, 0x46, 0x31, + 0x46, 0x35, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x30, 0x30, + 0x31, 0x43, 0x35, 0x35, 0x46, 0x31, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x36, 0x38, 0x33, 0x45, 0x34, 0x35, 0x36, 0x35, 0x33, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x46, 0x45, 0x39, 0x32, 0x44, + 0x45, 0x35, 0x37, 0x34, 0x30, 0x0a, 0x34, 0x38, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x38, 0x42, 0x31, 0x32, 0x44, 0x31, 0x38, 0x33, + 0x46, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x30, 0x31, 0x39, 0x44, + 0x31, 0x31, 0x36, 0x33, 0x32, 0x34, 0x30, 0x45, 0x43, 0x46, 0x45, 0x41, + 0x44, 0x36, 0x30, 0x39, 0x30, 0x37, 0x38, 0x34, 0x33, 0x34, 0x30, 0x41, + 0x36, 0x34, 0x33, 0x35, 0x46, 0x42, 0x39, 0x45, 0x31, 0x31, 0x34, 0x33, + 0x42, 0x34, 0x30, 0x0a, 0x34, 0x39, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x38, 0x35, 0x36, 0x43, 0x42, 0x30, 0x33, 0x34, 0x43, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x34, 0x35, 0x34, 0x35, 0x39, 0x43, + 0x41, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x43, 0x42, + 0x43, 0x45, 0x30, 0x36, 0x45, 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x41, 0x30, 0x45, 0x30, 0x43, 0x39, 0x42, 0x34, 0x31, 0x45, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x34, 0x43, 0x44, 0x42, 0x38, 0x37, + 0x42, 0x34, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x30, 0x35, + 0x33, 0x43, 0x46, 0x39, 0x42, 0x32, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x42, 0x30, 0x46, 0x44, 0x30, 0x43, 0x32, 0x30, 0x34, 0x36, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x32, 0x33, 0x41, 0x43, 0x41, 0x36, + 0x46, 0x35, 0x33, 0x34, 0x30, 0x0a, 0x35, 0x30, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x31, 0x30, 0x45, 0x34, 0x34, 0x38, 0x34, 0x35, 0x35, + 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x41, 0x32, 0x41, + 0x43, 0x42, 0x35, 0x32, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, + 0x30, 0x43, 0x35, 0x45, 0x45, 0x31, 0x44, 0x32, 0x43, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x35, 0x41, 0x33, 0x34, 0x34, 0x35, 0x43, 0x42, 0x35, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x45, 0x31, 0x37, 0x39, + 0x41, 0x43, 0x44, 0x35, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, + 0x30, 0x42, 0x42, 0x38, 0x36, 0x31, 0x32, 0x32, 0x33, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x33, 0x34, 0x30, 0x31, 0x46, 0x46, 0x32, 0x31, 0x34, + 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x39, + 0x36, 0x34, 0x45, 0x33, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, + 0x30, 0x37, 0x37, 0x31, 0x34, 0x41, 0x30, 0x33, 0x42, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x33, 0x30, 0x41, 0x31, 0x43, 0x33, 0x31, 0x42, 0x34, + 0x44, 0x34, 0x30, 0x0a, 0x35, 0x31, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x46, 0x34, 0x32, 0x32, 0x35, 0x31, 0x37, 0x37, 0x34, 0x31, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x41, 0x38, 0x31, 0x43, 0x31, 0x35, + 0x35, 0x35, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x30, 0x37, + 0x44, 0x43, 0x33, 0x39, 0x44, 0x34, 0x46, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x34, 0x34, 0x36, 0x34, 0x41, 0x34, 0x42, 0x30, 0x34, 0x36, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x45, 0x43, 0x41, 0x43, 0x32, + 0x42, 0x32, 0x43, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x34, 0x35, + 0x44, 0x38, 0x46, 0x46, 0x33, 0x34, 0x46, 0x34, 0x30, 0x0a, 0x35, 0x32, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x31, 0x31, 0x43, + 0x35, 0x44, 0x32, 0x31, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, + 0x43, 0x36, 0x42, 0x32, 0x33, 0x39, 0x37, 0x35, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x37, 0x42, 0x44, 0x33, 0x42, + 0x30, 0x33, 0x46, 0x30, 0x30, 0x30, 0x30, 0x41, 0x43, 0x39, 0x31, 0x35, + 0x30, 0x35, 0x31, 0x34, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, + 0x30, 0x32, 0x44, 0x31, 0x32, 0x33, 0x32, 0x34, 0x37, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x31, 0x43, 0x33, 0x33, 0x38, 0x45, 0x43, 0x45, 0x35, + 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x38, 0x31, 0x33, 0x32, + 0x34, 0x35, 0x45, 0x33, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, + 0x34, 0x36, 0x39, 0x41, 0x42, 0x30, 0x38, 0x34, 0x42, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x34, 0x44, 0x35, 0x31, 0x38, 0x34, + 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x42, 0x44, 0x30, + 0x42, 0x32, 0x43, 0x33, 0x45, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x34, 0x33, 0x34, 0x35, 0x43, 0x39, 0x34, 0x35, 0x38, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x31, 0x30, 0x41, 0x34, 0x41, 0x36, 0x45, 0x31, 0x32, + 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x45, 0x34, 0x44, 0x36, + 0x31, 0x45, 0x46, 0x35, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, + 0x34, 0x31, 0x38, 0x41, 0x35, 0x44, 0x39, 0x35, 0x33, 0x34, 0x30, 0x0a, + 0x35, 0x33, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x34, 0x32, + 0x36, 0x31, 0x46, 0x37, 0x33, 0x35, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x36, 0x45, 0x34, 0x43, 0x45, 0x41, 0x41, 0x34, 0x35, 0x30, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x32, 0x32, 0x34, 0x30, + 0x34, 0x32, 0x45, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x43, 0x46, + 0x44, 0x36, 0x46, 0x44, 0x35, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x33, 0x34, 0x41, 0x37, 0x44, 0x37, 0x33, 0x38, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x30, 0x30, 0x38, 0x35, 0x34, 0x41, + 0x38, 0x34, 0x32, 0x34, 0x30, 0x0a, 0x35, 0x34, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x44, 0x32, 0x39, 0x44, 0x43, 0x42, 0x43, 0x33, 0x35, + 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x38, 0x43, 0x34, 0x41, + 0x41, 0x34, 0x45, 0x34, 0x43, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, + 0x30, 0x35, 0x41, 0x33, 0x42, 0x46, 0x32, 0x34, 0x43, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x31, 0x38, 0x33, 0x46, 0x31, 0x41, 0x33, 0x33, 0x34, + 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x30, 0x38, 0x34, 0x44, + 0x43, 0x44, 0x38, 0x33, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, + 0x30, 0x45, 0x46, 0x46, 0x42, 0x32, 0x44, 0x30, 0x41, 0x34, 0x30, 0x0a, + 0x35, 0x35, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x44, + 0x30, 0x46, 0x45, 0x45, 0x46, 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x43, 0x30, 0x31, 0x45, 0x30, 0x32, 0x36, 0x43, 0x35, 0x32, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x34, 0x30, 0x45, 0x32, 0x46, 0x42, + 0x43, 0x35, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x41, 0x33, + 0x42, 0x32, 0x32, 0x38, 0x37, 0x35, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x41, 0x38, 0x46, 0x44, 0x33, 0x36, 0x37, 0x30, 0x35, 0x32, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x37, 0x32, 0x37, 0x35, 0x34, + 0x44, 0x31, 0x36, 0x34, 0x30, 0x42, 0x41, 0x41, 0x37, 0x38, 0x33, 0x42, + 0x37, 0x38, 0x38, 0x36, 0x36, 0x35, 0x30, 0x34, 0x30, 0x43, 0x36, 0x39, + 0x41, 0x34, 0x33, 0x39, 0x32, 0x30, 0x33, 0x39, 0x30, 0x32, 0x45, 0x34, + 0x30, 0x0a, 0x35, 0x36, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, + 0x30, 0x41, 0x38, 0x30, 0x34, 0x32, 0x35, 0x34, 0x41, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x38, 0x30, 0x31, 0x30, 0x39, 0x45, 0x37, 0x34, 0x34, + 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x30, 0x46, 0x45, 0x31, + 0x44, 0x34, 0x46, 0x32, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, + 0x38, 0x38, 0x32, 0x42, 0x32, 0x44, 0x44, 0x33, 0x32, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x37, 0x30, 0x31, 0x31, 0x41, 0x37, 0x46, 0x35, 0x34, + 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x30, 0x44, 0x41, 0x33, + 0x42, 0x46, 0x35, 0x31, 0x33, 0x34, 0x30, 0x0a, 0x35, 0x37, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x30, 0x38, 0x43, 0x46, 0x44, 0x43, + 0x45, 0x35, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x36, + 0x36, 0x32, 0x33, 0x46, 0x33, 0x33, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x38, 0x32, 0x46, 0x38, 0x38, 0x43, 0x34, 0x33, 0x41, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x44, 0x45, 0x41, 0x35, 0x45, + 0x43, 0x34, 0x35, 0x34, 0x30, 0x36, 0x33, 0x45, 0x42, 0x31, 0x45, 0x42, + 0x34, 0x43, 0x32, 0x31, 0x32, 0x34, 0x39, 0x34, 0x30, 0x36, 0x45, 0x38, + 0x36, 0x44, 0x30, 0x42, 0x41, 0x42, 0x42, 0x45, 0x39, 0x34, 0x43, 0x34, + 0x30, 0x0a, 0x35, 0x38, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x35, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, + 0x30, 0x44, 0x41, 0x38, 0x33, 0x39, 0x37, 0x33, 0x30, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x38, 0x38, 0x37, 0x32, 0x41, 0x43, 0x38, 0x45, 0x33, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x43, 0x30, 0x35, 0x31, + 0x46, 0x34, 0x37, 0x34, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, + 0x38, 0x33, 0x37, 0x45, 0x31, 0x32, 0x41, 0x33, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x35, 0x43, 0x44, 0x46, 0x41, 0x43, 0x30, 0x37, 0x34, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x30, 0x33, 0x42, 0x34, + 0x42, 0x32, 0x35, 0x31, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, + 0x43, 0x35, 0x33, 0x33, 0x31, 0x30, 0x45, 0x34, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x44, 0x30, 0x44, 0x45, 0x35, 0x44, 0x41, 0x31, 0x33, + 0x30, 0x34, 0x30, 0x45, 0x39, 0x37, 0x39, 0x31, 0x41, 0x39, 0x41, 0x36, + 0x34, 0x35, 0x32, 0x34, 0x31, 0x34, 0x30, 0x43, 0x34, 0x35, 0x36, 0x46, + 0x35, 0x34, 0x42, 0x42, 0x33, 0x36, 0x33, 0x34, 0x32, 0x34, 0x30, 0x0a, + 0x35, 0x39, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x30, 0x33, + 0x41, 0x39, 0x31, 0x42, 0x43, 0x33, 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x46, 0x43, 0x35, 0x31, 0x34, 0x37, 0x35, 0x36, 0x34, 0x45, 0x34, + 0x30, 0x42, 0x35, 0x34, 0x34, 0x46, 0x45, 0x35, 0x32, 0x41, 0x46, 0x37, + 0x44, 0x33, 0x43, 0x34, 0x30, 0x44, 0x38, 0x44, 0x37, 0x46, 0x44, 0x31, + 0x39, 0x38, 0x30, 0x42, 0x44, 0x34, 0x44, 0x34, 0x30, 0x0a, 0x36, 0x30, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x38, 0x36, 0x44, 0x46, + 0x41, 0x46, 0x42, 0x34, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x43, 0x33, 0x39, 0x44, 0x45, 0x37, 0x30, 0x34, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x35, 0x38, 0x44, 0x36, 0x44, + 0x42, 0x33, 0x46, 0x30, 0x30, 0x30, 0x30, 0x36, 0x34, 0x32, 0x44, 0x44, + 0x45, 0x32, 0x33, 0x35, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x38, 0x33, 0x39, 0x31, 0x41, 0x39, 0x43, 0x35, 0x30, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x39, 0x43, 0x42, 0x36, 0x43, 0x42, 0x37, 0x45, 0x34, + 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x38, 0x37, 0x42, 0x39, + 0x36, 0x41, 0x45, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, + 0x30, 0x34, 0x36, 0x38, 0x35, 0x46, 0x46, 0x32, 0x30, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x37, 0x38, 0x31, 0x45, 0x37, 0x35, 0x34, 0x33, 0x34, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x43, 0x34, 0x41, 0x35, + 0x45, 0x36, 0x42, 0x34, 0x33, 0x34, 0x30, 0x0a, 0x36, 0x31, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x43, 0x31, 0x42, 0x37, 0x45, 0x39, + 0x45, 0x34, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x38, 0x33, + 0x36, 0x35, 0x36, 0x38, 0x38, 0x34, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x36, 0x30, 0x41, 0x35, 0x45, 0x36, 0x34, 0x42, 0x32, 0x44, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x41, 0x32, 0x43, 0x32, 0x38, 0x43, + 0x34, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x30, 0x35, + 0x34, 0x44, 0x37, 0x39, 0x32, 0x34, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x44, 0x38, 0x42, 0x39, 0x36, 0x37, 0x33, 0x41, 0x34, 0x43, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x38, 0x34, 0x42, 0x38, 0x31, 0x43, + 0x44, 0x33, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x43, 0x46, + 0x38, 0x38, 0x46, 0x33, 0x38, 0x35, 0x35, 0x34, 0x30, 0x0a, 0x36, 0x32, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x38, 0x30, 0x38, 0x42, + 0x30, 0x37, 0x35, 0x33, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, + 0x30, 0x31, 0x36, 0x32, 0x30, 0x39, 0x43, 0x33, 0x33, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x34, 0x38, 0x37, 0x34, 0x34, 0x36, 0x38, 0x33, 0x33, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x30, 0x46, 0x33, 0x41, + 0x39, 0x42, 0x33, 0x32, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, + 0x30, 0x45, 0x42, 0x34, 0x38, 0x39, 0x32, 0x35, 0x34, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x41, 0x34, 0x37, 0x46, 0x44, 0x42, 0x35, 0x34, 0x34, + 0x41, 0x34, 0x30, 0x0a, 0x36, 0x33, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x33, 0x30, 0x36, 0x33, 0x43, 0x31, 0x43, 0x44, 0x33, 0x45, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x34, 0x31, 0x43, 0x37, 0x32, 0x37, + 0x44, 0x34, 0x46, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x34, + 0x43, 0x36, 0x46, 0x43, 0x33, 0x34, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x33, 0x36, 0x32, 0x43, 0x45, 0x45, 0x31, 0x42, 0x35, 0x31, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x38, 0x31, 0x33, 0x44, 0x39, 0x46, + 0x32, 0x33, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x43, 0x43, + 0x32, 0x32, 0x36, 0x31, 0x41, 0x35, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x42, 0x45, 0x38, 0x34, 0x43, 0x34, 0x33, 0x37, 0x35, 0x31, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x41, 0x37, 0x32, 0x39, 0x34, 0x45, + 0x30, 0x35, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x43, 0x46, + 0x37, 0x38, 0x31, 0x36, 0x43, 0x34, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x45, 0x30, 0x30, 0x33, 0x41, 0x36, 0x37, 0x32, 0x31, 0x37, 0x34, + 0x30, 0x0a, 0x36, 0x34, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, + 0x38, 0x34, 0x39, 0x36, 0x33, 0x41, 0x43, 0x34, 0x46, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x46, 0x34, 0x44, 0x45, 0x43, 0x39, 0x33, 0x31, 0x34, + 0x38, 0x34, 0x30, 0x43, 0x38, 0x32, 0x32, 0x39, 0x39, 0x39, 0x37, 0x39, + 0x43, 0x46, 0x37, 0x34, 0x38, 0x34, 0x30, 0x42, 0x30, 0x46, 0x31, 0x42, + 0x43, 0x44, 0x33, 0x30, 0x39, 0x33, 0x38, 0x34, 0x46, 0x34, 0x30, 0x0a, + 0x36, 0x35, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x30, 0x36, + 0x43, 0x33, 0x38, 0x38, 0x41, 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x42, 0x34, 0x38, 0x32, 0x37, 0x31, 0x34, 0x39, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x36, 0x32, 0x37, 0x35, 0x46, 0x35, + 0x39, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x34, 0x33, + 0x38, 0x38, 0x34, 0x36, 0x46, 0x34, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x35, 0x30, 0x34, 0x31, 0x44, 0x33, 0x42, 0x42, 0x32, 0x42, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x30, 0x36, 0x41, 0x42, 0x36, 0x44, + 0x38, 0x32, 0x31, 0x34, 0x30, 0x0a, 0x36, 0x36, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x45, 0x30, 0x35, 0x39, 0x36, 0x31, 0x36, 0x38, 0x34, + 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x41, 0x39, 0x30, 0x33, + 0x44, 0x35, 0x35, 0x35, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, + 0x38, 0x43, 0x44, 0x37, 0x34, 0x38, 0x42, 0x35, 0x31, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x33, 0x30, 0x37, 0x44, 0x31, 0x34, 0x35, 0x33, 0x33, + 0x38, 0x34, 0x30, 0x0a, 0x36, 0x37, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x39, 0x36, 0x32, 0x44, 0x39, 0x46, 0x30, 0x32, 0x35, 0x33, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x30, 0x36, 0x37, 0x38, 0x30, 0x31, + 0x46, 0x32, 0x35, 0x34, 0x30, 0x45, 0x44, 0x37, 0x30, 0x36, 0x44, 0x37, + 0x44, 0x37, 0x34, 0x39, 0x42, 0x34, 0x30, 0x34, 0x30, 0x42, 0x32, 0x46, + 0x38, 0x31, 0x37, 0x34, 0x33, 0x35, 0x33, 0x36, 0x30, 0x33, 0x34, 0x34, + 0x30, 0x0a, 0x36, 0x38, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, + 0x30, 0x43, 0x42, 0x30, 0x37, 0x37, 0x41, 0x32, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x46, 0x30, 0x30, 0x39, 0x39, 0x41, 0x42, 0x35, 0x34, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x38, 0x33, 0x46, 0x42, + 0x39, 0x38, 0x43, 0x35, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x34, 0x34, 0x32, 0x37, 0x30, 0x35, 0x33, 0x46, 0x34, 0x30, 0x36, + 0x36, 0x31, 0x44, 0x33, 0x32, 0x35, 0x38, 0x32, 0x30, 0x36, 0x30, 0x34, + 0x44, 0x34, 0x30, 0x32, 0x46, 0x35, 0x32, 0x33, 0x39, 0x31, 0x33, 0x45, + 0x46, 0x39, 0x38, 0x35, 0x30, 0x34, 0x30, 0x0a, 0x36, 0x39, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x38, 0x44, 0x30, 0x35, 0x42, + 0x39, 0x34, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x43, 0x35, + 0x42, 0x41, 0x34, 0x43, 0x34, 0x34, 0x46, 0x34, 0x30, 0x35, 0x31, 0x35, + 0x31, 0x44, 0x43, 0x45, 0x45, 0x41, 0x41, 0x44, 0x45, 0x34, 0x31, 0x34, + 0x30, 0x31, 0x46, 0x46, 0x45, 0x33, 0x37, 0x42, 0x37, 0x34, 0x34, 0x31, + 0x45, 0x34, 0x44, 0x34, 0x30, 0x0a, 0x37, 0x30, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x43, 0x37, 0x38, 0x43, 0x46, 0x37, 0x33, + 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x30, 0x32, 0x43, 0x37, + 0x33, 0x44, 0x31, 0x33, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, + 0x34, 0x41, 0x36, 0x31, 0x37, 0x30, 0x46, 0x34, 0x44, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x46, 0x32, 0x37, 0x31, 0x39, 0x43, 0x30, 0x41, 0x35, + 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x30, 0x33, 0x38, 0x34, + 0x44, 0x36, 0x42, 0x34, 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, + 0x30, 0x37, 0x32, 0x41, 0x43, 0x46, 0x30, 0x35, 0x38, 0x34, 0x30, 0x0a, + 0x37, 0x31, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x45, 0x33, + 0x30, 0x34, 0x32, 0x46, 0x42, 0x35, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x39, 0x36, 0x36, 0x42, 0x38, 0x45, 0x31, 0x32, 0x35, 0x37, 0x34, + 0x30, 0x41, 0x34, 0x45, 0x31, 0x32, 0x45, 0x31, 0x30, 0x35, 0x46, 0x44, + 0x36, 0x35, 0x33, 0x34, 0x30, 0x45, 0x43, 0x33, 0x36, 0x39, 0x37, 0x46, + 0x41, 0x34, 0x41, 0x30, 0x33, 0x35, 0x34, 0x34, 0x30, 0x0a, 0x37, 0x32, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x45, 0x34, 0x41, 0x46, + 0x34, 0x42, 0x31, 0x35, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, + 0x30, 0x41, 0x35, 0x35, 0x34, 0x34, 0x44, 0x34, 0x36, 0x34, 0x30, 0x43, + 0x43, 0x42, 0x39, 0x43, 0x44, 0x44, 0x44, 0x33, 0x31, 0x44, 0x33, 0x34, + 0x36, 0x34, 0x30, 0x42, 0x30, 0x38, 0x32, 0x35, 0x38, 0x42, 0x38, 0x30, + 0x39, 0x39, 0x46, 0x33, 0x34, 0x34, 0x30, 0x0a, 0x37, 0x33, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x43, 0x32, 0x42, 0x45, 0x42, 0x45, + 0x39, 0x34, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x30, 0x46, + 0x42, 0x44, 0x34, 0x35, 0x30, 0x32, 0x30, 0x34, 0x30, 0x34, 0x42, 0x43, + 0x34, 0x30, 0x45, 0x34, 0x42, 0x42, 0x31, 0x34, 0x31, 0x34, 0x31, 0x34, + 0x30, 0x42, 0x36, 0x32, 0x45, 0x41, 0x41, 0x36, 0x44, 0x43, 0x41, 0x44, + 0x30, 0x33, 0x41, 0x34, 0x30, 0x0a, 0x37, 0x34, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x45, 0x30, 0x32, 0x38, 0x45, 0x46, 0x44, 0x44, 0x33, + 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x38, 0x41, 0x30, 0x42, + 0x44, 0x35, 0x33, 0x33, 0x30, 0x34, 0x30, 0x32, 0x39, 0x35, 0x34, 0x41, + 0x41, 0x37, 0x32, 0x43, 0x45, 0x36, 0x44, 0x33, 0x39, 0x34, 0x30, 0x36, + 0x38, 0x37, 0x41, 0x37, 0x37, 0x37, 0x37, 0x44, 0x31, 0x33, 0x44, 0x33, + 0x35, 0x34, 0x30, 0x0a, 0x37, 0x35, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x37, 0x30, 0x45, 0x37, 0x30, 0x33, 0x44, 0x45, 0x33, 0x42, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x41, 0x30, 0x39, 0x43, 0x39, 0x37, + 0x43, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x45, + 0x32, 0x44, 0x32, 0x46, 0x32, 0x33, 0x46, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x31, 0x30, 0x31, 0x42, 0x37, 0x31, 0x45, 0x32, 0x34, 0x43, 0x34, + 0x30, 0x31, 0x30, 0x44, 0x32, 0x31, 0x46, 0x33, 0x39, 0x39, 0x32, 0x34, + 0x35, 0x34, 0x42, 0x34, 0x30, 0x33, 0x30, 0x42, 0x38, 0x38, 0x36, 0x43, + 0x36, 0x32, 0x38, 0x32, 0x30, 0x34, 0x43, 0x34, 0x30, 0x0a, 0x37, 0x36, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x30, 0x36, 0x34, 0x36, + 0x39, 0x42, 0x43, 0x32, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, + 0x43, 0x30, 0x38, 0x42, 0x46, 0x32, 0x37, 0x34, 0x35, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x37, 0x38, 0x36, 0x35, 0x34, 0x41, 0x30, 0x34, 0x34, + 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x43, 0x44, 0x31, 0x32, + 0x36, 0x46, 0x46, 0x34, 0x36, 0x34, 0x30, 0x33, 0x37, 0x36, 0x36, 0x43, + 0x35, 0x44, 0x33, 0x38, 0x33, 0x35, 0x42, 0x34, 0x43, 0x34, 0x30, 0x37, + 0x31, 0x31, 0x42, 0x42, 0x32, 0x34, 0x42, 0x30, 0x32, 0x32, 0x38, 0x34, + 0x43, 0x34, 0x30, 0x0a, 0x37, 0x37, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x37, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x41, 0x38, 0x33, 0x37, 0x38, 0x46, 0x33, 0x30, 0x33, 0x30, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x38, 0x35, 0x32, 0x30, 0x37, 0x37, + 0x35, 0x33, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x34, 0x43, + 0x32, 0x46, 0x44, 0x41, 0x33, 0x34, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x31, 0x38, 0x30, 0x44, 0x42, 0x31, 0x31, 0x31, 0x34, 0x38, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x36, 0x36, 0x32, 0x37, 0x41, 0x30, + 0x45, 0x35, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x30, 0x32, + 0x44, 0x45, 0x39, 0x38, 0x45, 0x31, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x38, 0x30, 0x33, 0x35, 0x43, 0x31, 0x44, 0x45, 0x30, 0x38, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x30, 0x36, 0x39, 0x33, 0x37, 0x41, + 0x35, 0x33, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x30, 0x38, + 0x31, 0x42, 0x32, 0x33, 0x46, 0x30, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x38, 0x41, 0x46, 0x37, 0x39, 0x34, 0x39, 0x37, 0x35, 0x30, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x30, 0x39, 0x33, 0x45, 0x35, 0x41, + 0x39, 0x34, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x42, + 0x39, 0x37, 0x32, 0x34, 0x33, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x38, 0x36, 0x39, 0x41, 0x36, 0x42, 0x32, 0x33, 0x43, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x43, 0x38, 0x33, 0x31, 0x33, 0x37, + 0x38, 0x35, 0x38, 0x34, 0x30, 0x0a, 0x37, 0x38, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x34, 0x43, 0x30, 0x45, 0x34, 0x34, 0x35, 0x44, 0x35, + 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x34, 0x35, 0x31, 0x33, + 0x32, 0x34, 0x43, 0x34, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, + 0x30, 0x36, 0x33, 0x32, 0x46, 0x33, 0x46, 0x34, 0x46, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x36, 0x30, 0x42, 0x31, 0x31, 0x33, 0x34, 0x44, 0x31, + 0x46, 0x34, 0x30, 0x0a, 0x37, 0x39, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x33, 0x45, 0x37, 0x30, 0x44, 0x32, 0x44, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x38, 0x34, 0x38, 0x43, 0x39, 0x45, + 0x38, 0x34, 0x41, 0x34, 0x30, 0x39, 0x46, 0x43, 0x35, 0x39, 0x44, 0x30, + 0x41, 0x30, 0x37, 0x38, 0x32, 0x34, 0x30, 0x34, 0x30, 0x35, 0x42, 0x39, + 0x36, 0x43, 0x44, 0x33, 0x45, 0x41, 0x39, 0x41, 0x45, 0x35, 0x32, 0x34, + 0x30, 0x0a, 0x38, 0x30, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, + 0x34, 0x41, 0x37, 0x32, 0x45, 0x33, 0x45, 0x34, 0x31, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x45, 0x34, 0x46, 0x43, 0x37, 0x36, 0x43, 0x34, 0x34, + 0x46, 0x34, 0x30, 0x34, 0x39, 0x31, 0x44, 0x31, 0x42, 0x38, 0x35, 0x46, + 0x46, 0x36, 0x33, 0x34, 0x41, 0x34, 0x30, 0x41, 0x43, 0x41, 0x41, 0x39, + 0x41, 0x44, 0x43, 0x39, 0x30, 0x41, 0x43, 0x33, 0x38, 0x34, 0x30, 0x0a, + 0x38, 0x31, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x30, 0x38, + 0x37, 0x34, 0x45, 0x33, 0x44, 0x33, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x41, 0x34, 0x41, 0x37, 0x41, 0x38, 0x32, 0x43, 0x34, 0x31, 0x34, + 0x30, 0x33, 0x38, 0x33, 0x35, 0x38, 0x38, 0x42, 0x45, 0x45, 0x30, 0x35, + 0x43, 0x35, 0x33, 0x34, 0x30, 0x36, 0x33, 0x44, 0x36, 0x30, 0x39, 0x42, + 0x44, 0x33, 0x32, 0x39, 0x38, 0x34, 0x44, 0x34, 0x30, 0x0a, 0x38, 0x32, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x32, 0x36, 0x39, 0x32, + 0x35, 0x41, 0x36, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, + 0x38, 0x32, 0x38, 0x41, 0x36, 0x30, 0x43, 0x33, 0x42, 0x34, 0x30, 0x36, + 0x30, 0x42, 0x41, 0x34, 0x31, 0x35, 0x41, 0x45, 0x44, 0x42, 0x37, 0x35, + 0x32, 0x34, 0x30, 0x34, 0x39, 0x31, 0x33, 0x36, 0x44, 0x33, 0x38, 0x30, + 0x35, 0x36, 0x30, 0x34, 0x32, 0x34, 0x30, 0x0a, 0x38, 0x33, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x38, 0x46, 0x35, 0x35, 0x31, 0x30, + 0x44, 0x34, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x38, 0x30, + 0x44, 0x44, 0x38, 0x42, 0x43, 0x33, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x45, 0x36, 0x31, 0x42, 0x45, 0x33, 0x34, 0x43, 0x35, 0x34, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x38, 0x45, 0x45, 0x34, 0x32, 0x34, + 0x37, 0x35, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, + 0x30, 0x32, 0x31, 0x38, 0x39, 0x34, 0x45, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x44, 0x35, 0x41, 0x32, 0x35, 0x45, 0x46, 0x30, 0x33, + 0x46, 0x0a, 0x38, 0x34, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, + 0x34, 0x39, 0x39, 0x45, 0x34, 0x44, 0x33, 0x35, 0x34, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x34, 0x43, 0x42, 0x45, 0x39, 0x44, 0x41, 0x46, 0x34, + 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x41, 0x46, 0x31, 0x37, + 0x44, 0x32, 0x36, 0x35, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x43, 0x36, 0x37, 0x31, 0x37, 0x43, 0x35, 0x34, 0x37, 0x34, 0x30, 0x0a, + 0x38, 0x35, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x30, 0x32, + 0x33, 0x31, 0x43, 0x38, 0x41, 0x31, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x42, 0x34, 0x34, 0x46, 0x31, 0x38, 0x38, 0x42, 0x34, 0x37, 0x34, + 0x30, 0x35, 0x35, 0x35, 0x37, 0x46, 0x41, 0x38, 0x39, 0x38, 0x43, 0x42, + 0x39, 0x33, 0x34, 0x34, 0x30, 0x35, 0x37, 0x44, 0x44, 0x31, 0x43, 0x31, + 0x38, 0x41, 0x30, 0x31, 0x32, 0x34, 0x45, 0x34, 0x30, 0x0a, 0x38, 0x36, + 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, + 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x34, 0x46, 0x46, 0x41, + 0x42, 0x33, 0x36, 0x34, 0x45, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, + 0x45, 0x33, 0x42, 0x36, 0x35, 0x42, 0x43, 0x35, 0x37, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x33, 0x45, 0x45, 0x34, 0x45, 0x41, 0x45, 0x42, 0x35, + 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x38, 0x31, 0x35, 0x41, + 0x39, 0x33, 0x45, 0x35, 0x33, 0x34, 0x30, 0x0a, 0x38, 0x37, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x45, 0x34, 0x32, 0x43, 0x45, 0x45, + 0x33, 0x35, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x38, 0x34, + 0x31, 0x34, 0x38, 0x31, 0x35, 0x33, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x31, 0x30, 0x44, 0x38, 0x33, 0x44, 0x41, 0x45, 0x33, 0x37, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x34, 0x35, 0x45, 0x42, 0x31, 0x33, + 0x30, 0x35, 0x32, 0x34, 0x30, 0x0a, 0x38, 0x38, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x34, 0x36, 0x45, 0x32, 0x30, 0x33, 0x30, 0x35, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x38, 0x45, 0x39, 0x32, + 0x42, 0x37, 0x32, 0x35, 0x32, 0x34, 0x30, 0x44, 0x36, 0x30, 0x44, 0x42, + 0x33, 0x36, 0x30, 0x31, 0x31, 0x32, 0x45, 0x34, 0x45, 0x34, 0x30, 0x30, + 0x46, 0x36, 0x42, 0x32, 0x38, 0x35, 0x45, 0x35, 0x46, 0x30, 0x33, 0x35, + 0x32, 0x34, 0x30, 0x0a, 0x38, 0x39, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x33, 0x32, 0x37, 0x45, 0x39, 0x39, 0x30, 0x35, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x43, 0x44, 0x42, 0x45, 0x42, 0x32, + 0x39, 0x34, 0x31, 0x34, 0x30, 0x37, 0x38, 0x35, 0x35, 0x44, 0x46, 0x44, + 0x33, 0x37, 0x33, 0x35, 0x31, 0x33, 0x36, 0x34, 0x30, 0x35, 0x39, 0x45, + 0x35, 0x38, 0x37, 0x35, 0x36, 0x39, 0x33, 0x44, 0x34, 0x34, 0x46, 0x34, + 0x30, 0x0a, 0x39, 0x30, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, + 0x30, 0x37, 0x31, 0x30, 0x46, 0x31, 0x39, 0x34, 0x37, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x34, 0x34, 0x34, 0x37, 0x44, 0x30, 0x45, 0x42, 0x35, + 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x46, 0x43, + 0x32, 0x30, 0x45, 0x32, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, + 0x38, 0x31, 0x33, 0x44, 0x35, 0x43, 0x39, 0x34, 0x41, 0x34, 0x30, 0x39, + 0x42, 0x37, 0x39, 0x34, 0x34, 0x30, 0x41, 0x39, 0x32, 0x30, 0x46, 0x34, + 0x30, 0x34, 0x30, 0x34, 0x38, 0x33, 0x32, 0x30, 0x35, 0x30, 0x39, 0x38, + 0x41, 0x37, 0x33, 0x34, 0x31, 0x34, 0x30, 0x0a, 0x39, 0x31, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x45, 0x37, 0x44, 0x42, 0x43, 0x42, + 0x33, 0x35, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, + 0x37, 0x36, 0x42, 0x38, 0x34, 0x45, 0x42, 0x33, 0x46, 0x39, 0x44, 0x35, + 0x30, 0x35, 0x38, 0x33, 0x31, 0x37, 0x38, 0x32, 0x32, 0x35, 0x31, 0x34, + 0x30, 0x38, 0x30, 0x33, 0x37, 0x39, 0x33, 0x42, 0x35, 0x42, 0x37, 0x43, + 0x31, 0x33, 0x46, 0x34, 0x30, 0x0a, 0x39, 0x32, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x46, 0x30, 0x35, 0x37, 0x36, 0x33, 0x30, 0x36, 0x33, + 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x46, 0x38, 0x46, + 0x36, 0x39, 0x43, 0x34, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, + 0x43, 0x43, 0x46, 0x31, 0x46, 0x31, 0x38, 0x34, 0x44, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x43, 0x32, 0x36, 0x31, 0x44, 0x38, 0x38, 0x36, 0x35, + 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x41, 0x41, 0x31, 0x30, + 0x32, 0x41, 0x30, 0x35, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, + 0x30, 0x30, 0x41, 0x37, 0x41, 0x38, 0x39, 0x31, 0x31, 0x34, 0x30, 0x0a, + 0x39, 0x33, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x41, 0x46, + 0x39, 0x44, 0x41, 0x45, 0x31, 0x35, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x46, 0x38, 0x35, 0x34, 0x30, 0x34, 0x46, 0x42, 0x34, 0x43, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x41, 0x38, 0x41, 0x37, 0x32, 0x42, 0x31, + 0x35, 0x34, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x34, + 0x45, 0x39, 0x38, 0x38, 0x32, 0x32, 0x31, 0x34, 0x30, 0x33, 0x43, 0x33, + 0x35, 0x39, 0x36, 0x45, 0x43, 0x30, 0x37, 0x30, 0x42, 0x34, 0x44, 0x34, + 0x30, 0x46, 0x43, 0x42, 0x41, 0x37, 0x41, 0x45, 0x42, 0x41, 0x32, 0x30, + 0x32, 0x33, 0x35, 0x34, 0x30, 0x0a, 0x39, 0x34, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x38, 0x38, 0x37, 0x45, 0x43, 0x35, 0x41, 0x42, 0x34, + 0x45, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x30, 0x45, 0x37, 0x36, + 0x37, 0x44, 0x43, 0x33, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, + 0x36, 0x46, 0x41, 0x38, 0x33, 0x37, 0x38, 0x35, 0x35, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x39, 0x38, 0x42, 0x44, 0x41, 0x33, 0x33, 0x39, 0x34, + 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x38, 0x36, 0x45, 0x43, + 0x36, 0x43, 0x43, 0x34, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, + 0x30, 0x31, 0x45, 0x39, 0x41, 0x34, 0x33, 0x30, 0x46, 0x34, 0x30, 0x43, + 0x45, 0x36, 0x36, 0x33, 0x32, 0x43, 0x39, 0x39, 0x46, 0x43, 0x32, 0x35, + 0x32, 0x34, 0x30, 0x33, 0x36, 0x30, 0x46, 0x42, 0x46, 0x41, 0x31, 0x33, + 0x31, 0x37, 0x35, 0x34, 0x46, 0x34, 0x30, 0x0a, 0x39, 0x35, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x34, 0x34, 0x36, 0x30, 0x41, 0x37, + 0x31, 0x34, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x30, 0x45, + 0x32, 0x36, 0x30, 0x30, 0x38, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x34, 0x30, 0x46, 0x31, 0x37, 0x37, 0x30, 0x34, 0x30, 0x42, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x36, 0x36, 0x41, 0x38, 0x30, 0x31, + 0x42, 0x35, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x42, 0x30, 0x31, + 0x41, 0x30, 0x32, 0x33, 0x38, 0x32, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x38, 0x34, 0x45, 0x41, 0x33, 0x32, 0x43, 0x37, 0x34, 0x45, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x38, 0x42, 0x34, 0x30, 0x42, 0x33, + 0x42, 0x33, 0x31, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x34, 0x32, + 0x36, 0x35, 0x30, 0x34, 0x43, 0x34, 0x33, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x33, 0x30, 0x45, 0x31, 0x31, 0x42, 0x37, 0x36, 0x34, 0x42, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x30, 0x32, 0x39, 0x38, 0x30, 0x32, + 0x41, 0x34, 0x35, 0x34, 0x30, 0x0a, 0x39, 0x36, 0x2c, 0x30, 0x31, 0x30, + 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x37, 0x36, 0x30, 0x33, 0x36, 0x32, 0x35, 0x46, 0x35, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x30, 0x35, 0x45, 0x39, + 0x34, 0x37, 0x30, 0x35, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, + 0x30, 0x39, 0x46, 0x42, 0x43, 0x39, 0x43, 0x33, 0x33, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x44, 0x38, 0x38, 0x35, 0x38, 0x39, 0x36, 0x41, 0x34, + 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x45, 0x38, 0x36, 0x33, 0x42, + 0x39, 0x39, 0x45, 0x33, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, + 0x30, 0x32, 0x45, 0x33, 0x32, 0x46, 0x42, 0x31, 0x35, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x38, 0x30, 0x31, 0x42, 0x36, 0x41, 0x32, 0x31, 0x31, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x43, 0x32, 0x30, 0x32, + 0x33, 0x31, 0x43, 0x34, 0x41, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x39, 0x46, 0x37, 0x46, 0x43, 0x45, 0x32, 0x32, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x41, 0x46, 0x45, 0x42, 0x31, 0x45, + 0x45, 0x33, 0x46, 0x0a, 0x39, 0x37, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x35, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x42, 0x30, 0x33, 0x34, 0x32, 0x39, 0x44, 0x36, 0x32, 0x36, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x43, 0x46, 0x39, 0x42, 0x33, 0x43, + 0x38, 0x35, 0x34, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x34, 0x44, + 0x46, 0x31, 0x45, 0x31, 0x37, 0x34, 0x36, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x34, 0x30, 0x32, 0x38, 0x33, 0x30, 0x45, 0x36, 0x31, 0x43, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x30, 0x45, 0x46, 0x44, 0x45, 0x33, + 0x35, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, + 0x30, 0x35, 0x41, 0x31, 0x43, 0x44, 0x34, 0x33, 0x46, 0x30, 0x30, 0x30, + 0x30, 0x38, 0x43, 0x36, 0x34, 0x32, 0x44, 0x39, 0x39, 0x34, 0x42, 0x34, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x34, 0x45, 0x30, 0x42, 0x39, 0x41, + 0x36, 0x34, 0x42, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x34, 0x37, + 0x37, 0x41, 0x36, 0x32, 0x46, 0x34, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x41, 0x30, 0x44, 0x35, 0x31, 0x42, 0x38, 0x35, 0x35, 0x36, 0x34, + 0x30, 0x0a, 0x39, 0x38, 0x2c, 0x30, 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, + 0x38, 0x46, 0x36, 0x45, 0x44, 0x44, 0x46, 0x34, 0x38, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x45, 0x36, 0x33, 0x46, 0x39, 0x43, 0x41, 0x30, 0x35, + 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x44, 0x37, + 0x43, 0x30, 0x35, 0x34, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, + 0x30, 0x38, 0x35, 0x38, 0x33, 0x39, 0x43, 0x32, 0x36, 0x34, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x43, 0x30, 0x41, 0x41, 0x45, 0x35, 0x45, 0x42, 0x30, + 0x44, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x41, 0x32, 0x39, 0x45, + 0x36, 0x41, 0x38, 0x35, 0x31, 0x34, 0x30, 0x0a, 0x39, 0x39, 0x2c, 0x30, + 0x31, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, + 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x37, 0x43, 0x38, 0x34, 0x33, 0x45, 0x30, + 0x39, 0x34, 0x37, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x43, 0x30, 0x34, + 0x38, 0x37, 0x44, 0x42, 0x46, 0x32, 0x34, 0x34, 0x30, 0x35, 0x30, 0x33, + 0x44, 0x38, 0x44, 0x36, 0x30, 0x32, 0x38, 0x32, 0x34, 0x34, 0x39, 0x34, + 0x30, 0x35, 0x36, 0x41, 0x42, 0x45, 0x43, 0x44, 0x46, 0x34, 0x45, 0x32, + 0x42, 0x34, 0x30, 0x34, 0x30, 0x0a, 0x31, 0x30, 0x30, 0x2c, 0x30, 0x31, + 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x32, 0x43, 0x31, 0x36, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x46, 0x43, 0x41, 0x39, 0x30, 0x37, 0x42, 0x37, + 0x35, 0x38, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x38, 0x32, 0x32, + 0x39, 0x34, 0x43, 0x33, 0x34, 0x46, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x45, 0x38, 0x35, 0x45, 0x41, 0x35, 0x36, 0x32, 0x34, 0x41, 0x34, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x31, 0x43, 0x30, 0x34, 0x32, 0x34, 0x43, 0x42, + 0x35, 0x38, 0x34, 0x30, 0x42, 0x38, 0x34, 0x41, 0x37, 0x33, 0x37, 0x44, + 0x36, 0x41, 0x42, 0x33, 0x34, 0x37, 0x34, 0x30, 0x45, 0x37, 0x36, 0x37, + 0x44, 0x43, 0x42, 0x42, 0x42, 0x30, 0x33, 0x33, 0x35, 0x35, 0x34, 0x30, + 0x0a +}; +unsigned int ways_csv_len = 12493; diff --git a/test/sql/tnpoint.test b/test/sql/tnpoint.test new file mode 100644 index 00000000..bd8d711c --- /dev/null +++ b/test/sql/tnpoint.test @@ -0,0 +1,85 @@ +# name: test/sql/tnpoint.test +# description: Network-point temporal type (npoint / tnpoint) — the cbuffer twin. +# npoint carries no SRID/geometry of its own: a route id is resolved +# against the embedded `ways` network (ConfigureMeosWaysCsvOnce), so +# SRID and interpolation come from the shipped network (route 1). + +require mobilityduck + +# --------------------------------------------------------------------------- +# Type + text I/O (hand-registered boundary; npoint renders as NPoint(rid,pos)). +# --------------------------------------------------------------------------- + +# Static npoint value round-trip +query I +SELECT npoint 'Npoint(1,0.5)'; +---- +NPoint(1,0.5) + +# tnpoint instant round-trip +query I +SELECT tnpoint 'Npoint(1,0.5)@2000-01-01'; +---- +NPoint(1,0.5)@2000-01-01 00:00:00+01 + +# tnpoint sequence round-trip +query I +SELECT tnpoint '{Npoint(1,0.2)@2000-01-01, Npoint(1,0.8)@2000-01-02}'; +---- +{NPoint(1,0.2)@2000-01-01 00:00:00+01, NPoint(1,0.8)@2000-01-02 00:00:00+01} + +# --------------------------------------------------------------------------- +# Catalog-generated accessor surface. +# --------------------------------------------------------------------------- + +# number of instants +query I +SELECT numInstants(tnpoint '{Npoint(1,0.2)@2000-01-01, Npoint(1,0.8)@2000-01-02}'); +---- +2 + +# start instant (returns a tnpoint) +query I +SELECT startInstant(tnpoint '{Npoint(1,0.2)@2000-01-01, Npoint(1,0.8)@2000-01-02}'); +---- +NPoint(1,0.2)@2000-01-01 00:00:00+01 + +# --------------------------------------------------------------------------- +# Inherited TSpatial + Temporal surface. +# --------------------------------------------------------------------------- + +# SRID inherited from the ways network (route 1 lives in the SRID 5676 network) +query I +SELECT SRID(tnpoint 'Npoint(1,0.5)@2000-01-01'); +---- +5676 + +# asText round-trips the network-point text form +query I +SELECT asText(tnpoint 'Npoint(1,0.5)@2000-01-01'); +---- +NPoint(1,0.5)@2000-01-01 00:00:00+01 + +# duration of a continuous sequence +query I +SELECT duration(tnpoint '[Npoint(1,0.2)@2000-01-01, Npoint(1,0.8)@2000-01-03]'); +---- +2 days + +# atTime restricts to a period, interpolating the network position at the endpoint +# (position 0.5 is the midpoint of [0.2, 0.8] at the [2000-01-01, 2000-01-02] cut) +query I +SELECT atTime(tnpoint '[Npoint(1,0.2)@2000-01-01, Npoint(1,0.8)@2000-01-03]', tstzspan '[2000-01-01,2000-01-02]'); +---- +[NPoint(1,0.2)@2000-01-01 00:00:00+01, NPoint(1,0.5)@2000-01-02 00:00:00+01] + +# inherited bbox topological operators (same, overlaps) +query I +SELECT tnpoint 'Npoint(1,0.5)@2000-01-01' ~= tnpoint 'Npoint(1,0.5)@2000-01-01'; +---- +true + +query I +SELECT tnpoint 'Npoint(1,0.5)@2000-01-01' && tnpoint 'Npoint(1,0.5)@2000-01-01'; +---- +true diff --git a/tools/codegen_duck_udfs.py b/tools/codegen_duck_udfs.py index 4d589182..5bdd77be 100644 --- a/tools/codegen_duck_udfs.py +++ b/tools/codegen_duck_udfs.py @@ -47,6 +47,8 @@ def base(canon): "Jsonb": ("TJsonbTypes::jsonb()", "BlobToJsonb(%s)"), "Pcpoint": ("TPcpointTypes::pcpoint()", "BlobToPcpoint(%s)"), "Pcpatch": ("TPcpatchTypes::pcpatch()", "BlobToPcpatch(%s)"), + "Npoint": ("NpointTypes::npoint()", "BlobToNpoint(%s)"), + "Nsegment": ("NpointTypes::nsegment()", "BlobToNsegment(%s)"), } PTR_RET = { # MEOS base type -> (DuckDB ret LogicalType, "C++ expr producing string_t from MEOS ptr `%s` in `result`") "Temporal": ("MD_TEMPORAL", "TemporalToBlob(result, %s)"), @@ -62,6 +64,8 @@ def base(canon): "Jsonb": ("TJsonbTypes::jsonb()", "JsonbToBlob(result, %s)"), "Pcpoint": ("TPcpointTypes::pcpoint()", "PcpointToBlob(result, %s)"), "Pcpatch": ("TPcpatchTypes::pcpatch()", "PcpatchToBlob(result, %s)"), + "Npoint": ("NpointTypes::npoint()", "NpointToBlob(result, %s)"), + "Nsegment": ("NpointTypes::nsegment()", "NsegmentToBlob(result, %s)"), } # The temporal-family pointer returns that marshal as one DuckDB temporal handle. A MEOS # accessor/cast can return a concrete subtype pointer (TInstant */TSequence */TSequenceSet * @@ -192,6 +196,7 @@ def ret_type(f, out_canon): "tcbuffer", "cbuffer", "th3index", "h3index", "tjsonb", "jsonb", "tpcpoint", "pcpoint", "tpcpatch", "pcpatch", + "tnpoint", "npoint", "nsegment", } # Every temporal family token the catalog function names use; those NOT in REGISTERED_FAMILIES # are the fast-follow families whose DuckDB type the binding does not register yet. @@ -386,7 +391,7 @@ def byval_ret_duck(e): # GEO_ALLTYPES, which stays geo-only for the `tgeo` supertype (geometry+geography) and the # geometry-argument spatial relationships. Add a new spatial family here to inherit the surface. SPATIAL_ALLTYPES = GEO_ALLTYPES + ["CbufferTypes::tcbuffer()", "H3indexTypes::th3index()", - "QuadbinTypes::tquadbin()"] + "QuadbinTypes::tquadbin()", "NpointTypes::tnpoint()"] def reg_scope(name): """('all', None) generic | ('types', [accessors]) specific | None = not core family. Resolves the temporal type from the MobilityDB naming convention: a PREFIX @@ -492,7 +497,8 @@ def reg_scope(name): "tgeompoint": "TgeompointType::tgeompoint()", "tgeogpoint": "TgeogpointType::tgeogpoint()", "tcbuffer": "CbufferTypes::tcbuffer()", "th3index": "H3indexTypes::th3index()", "tquadbin": "QuadbinTypes::tquadbin()", "tjsonb": "TJsonbTypes::tjsonb()", - "tpcpoint": "TPcpointTypes::tpcpoint()", "tpcpatch": "TPcpatchTypes::tpcpatch()"} + "tpcpoint": "TPcpointTypes::tpcpoint()", "tpcpatch": "TPcpatchTypes::tpcpatch()", + "tnpoint": "NpointTypes::tnpoint()"} def ret_temporal_type(name, arg_acc, group="", sql_ret=None): # A single, unambiguous SQL return subtype from the catalog names the output # temporal type directly (the catalog is the SoT). The name heuristics below are @@ -531,6 +537,7 @@ def ret_temporal_type(name, arg_acc, group="", sql_ret=None): "tcbuffer": "CbufferTypes::tcbuffer()", "th3index": "H3indexTypes::th3index()", "tquadbin": "QuadbinTypes::tquadbin()", "tjsonb": "TJsonbTypes::tjsonb()", "tpcpoint": "TPcpointTypes::tpcpoint()", "tpcpatch": "TPcpatchTypes::tpcpatch()", + "tnpoint": "NpointTypes::tnpoint()", } def sig_declared_accs(f): """The exact temporal-operand types this GENERIC (`Temporal *`) function is CREATE @@ -3086,6 +3093,7 @@ def gen_cpp(fns, out_path, declared=None, aliases=None): '#include "json/tjsonb.hpp"\n' # TJsonbTypes::jsonb()/tjsonb() '#include "pointcloud/tpcpoint.hpp"\n' # TPcpointTypes::pcpoint()/tpcpoint() '#include "pointcloud/tpcpatch.hpp"\n' # TPcpatchTypes::pcpatch()/tpcpatch() + '#include "npoint/tnpoint.hpp"\n' # NpointTypes::npoint()/nsegment()/tnpoint() '#include "spatial/spatial_types.hpp"\n' # GeoTypes::GEOMETRY() (duckdb-spatial) '#include "geo_util.hpp"\n' # GeometryToGSerialized(blob, srid) '#include "meos_internal.h"\n' @@ -3202,6 +3210,24 @@ def gen_cpp(fns, out_path, declared=None, aliases=None): " uint8_t *copy = (uint8_t *)malloc(sz);\n" " memcpy(copy, blob.GetData(), sz);\n" " return reinterpret_cast(copy);\n}\n" + "// Self-contained blob<->Npoint/Nsegment marshalling. Npoint {rid,pos} and Nsegment\n" + "// {rid,pos1,pos2} are FIXED-size structs (palloc(sizeof)) -> sizeof out.\n" + "inline string_t NpointToBlob(Vector &result, Npoint *np) {\n" + " string_t out = StringVector::AddStringOrBlob(result, (const char *)np, sizeof(Npoint));\n" + " free(np);\n return out;\n}\n" + "inline string_t NpointToBlobN(Vector &result, Npoint *np, ValidityMask &mask, idx_t idx) {\n" + " if (!np) { mask.SetInvalid(idx); return string_t(); }\n return NpointToBlob(result, np);\n}\n" + "inline Npoint *BlobToNpoint(string_t blob) {\n" + " Npoint *copy = (Npoint *)malloc(sizeof(Npoint));\n" + " memcpy(copy, blob.GetData(), sizeof(Npoint));\n return copy;\n}\n" + "inline string_t NsegmentToBlob(Vector &result, Nsegment *ns) {\n" + " string_t out = StringVector::AddStringOrBlob(result, (const char *)ns, sizeof(Nsegment));\n" + " free(ns);\n return out;\n}\n" + "inline string_t NsegmentToBlobN(Vector &result, Nsegment *ns, ValidityMask &mask, idx_t idx) {\n" + " if (!ns) { mask.SetInvalid(idx); return string_t(); }\n return NsegmentToBlob(result, ns);\n}\n" + "inline Nsegment *BlobToNsegment(string_t blob) {\n" + " Nsegment *copy = (Nsegment *)malloc(sizeof(Nsegment));\n" + " memcpy(copy, blob.GetData(), sizeof(Nsegment));\n return copy;\n}\n" "// Self-contained blob<->STBox/TBox marshalling (FIXED-size structs -> sizeof).\n" "inline string_t StboxToBlob(Vector &result, STBox *b) {\n" " string_t out = StringVector::AddStringOrBlob(result, (const char *)b, sizeof(STBox));\n"